Skip to content

Commit

Permalink
Added Navigation class.
Browse files Browse the repository at this point in the history
Removed composer package kodicms/laravel-navigation

Example

AdminSection::addMenuPage(\App\Model\News::class)->setItems(function() {

    AdminSection::addMenuPage()->setTitle('test')->setUrl('user/profile');

});
  • Loading branch information
butschster committed Feb 26, 2016
1 parent 78e56c6 commit 3b7f298
Show file tree
Hide file tree
Showing 10 changed files with 385 additions and 122 deletions.
3 changes: 1 addition & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@
"illuminate/support": "5.*",
"doctrine/dbal": "~2.3",
"laravelcollective/html": "5.*",
"kodicms/laravel-assets": "0.*",
"kodicms/laravel-navigation": "2.*"
"kodicms/laravel-assets": "0.*"
},
"require-dev": {
"phpunit/phpunit": "4.*"
Expand Down
16 changes: 1 addition & 15 deletions resources/views/default/_partials/navigation.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,12 @@
@yield('sidebar.top')

<ul class="sidebar-menu">

@yield('sidebar.ul.top')

@foreach(AdminNavigation::getRootSection()->getPages() as $item)
<li @if($item->isActive())class="active"@endif>
<a href="{{ $item->getUrl() }}">
{!! $item->getIcon() !!}
<span class="mm-text">{!! $item->getName() !!}</span>
</a>
</li>
@endforeach

@foreach(AdminNavigation::getRootSection()->getSections() as $section)
@include(AdminTemplate::getViewPath('_partials.navigation.sections'), ['section' => $section])
@endforeach
{!! AdminNavigation::render() !!}

@yield('sidebar.ul.bottom')

</ul>

@yield('sidebar.bottom')

</section>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@foreach($pages as $page)
{!! $page->render() !!}
@endforeach
22 changes: 22 additions & 0 deletions resources/views/default/_partials/navigation/page.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
@if($hasChild)
<li class="treeview @if($isActive) active @endif">
<a href="#">
{!! $icon !!}
<span>{!! $title !!}</span>
<i class="fa fa-angle-left pull-right"></i>
</a>

<ul class="treeview-menu">
@foreach($pages as $page)
{!! $page->render() !!}
@endforeach
</ul>
</li>
@else
<li @if($isActive) class="active" @endif>
<a href="{{ $url }}">
{!! $icon !!}
<span>{!! $title !!}</span>
</a>
</li>
@endif
24 changes: 0 additions & 24 deletions resources/views/default/_partials/navigation/sections.blade.php

This file was deleted.

34 changes: 14 additions & 20 deletions src/Admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@

use Closure;
use Illuminate\Contracts\Support\Renderable;
use SleepingOwl\Admin\Facades\AdminNavigation;
use SleepingOwl\Admin\Model\ModelConfiguration;
use SleepingOwl\Admin\Contracts\TemplateInterface;
use SleepingOwl\Admin\Http\Controllers\AdminController;
use SleepingOwl\Admin\Model\ModelConfiguration;
use SleepingOwl\Admin\Navigation\Page;

class Admin
{
Expand Down Expand Up @@ -111,28 +111,22 @@ public function template()
}

/**
* @param string $class
* @param string|null $section
* @param int $priority
* @param string $class
* @param int $priority
*
* @return NavigationPage
* @return Page
*/
public function addMenuLink($class, $section = null, $priority = 100)
public function addMenuPage($class = null, $priority = 100)
{
$model = $this->getModel($class);
$page = new NavigationPage($model);

$page->priority = $priority;

if (is_null($section)) {
$section = AdminNavigation::getRootSection();
} else {
$section = AdminNavigation::findSectionOrCreate($section);
}

$section->addPage($page);
return app('sleeping_owl.navigation')->addPage($class)->setPriority($priority);
}

return $page;
/**
* @return Navigation
*/
public function getNavigation()
{
return app('sleeping_owl.navigation');
}

/**
Expand Down
109 changes: 109 additions & 0 deletions src/Navigation.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
<?php

namespace SleepingOwl\Admin;

use Illuminate\Contracts\Support\Arrayable;
use Illuminate\Contracts\Support\Renderable;
use Illuminate\Support\Collection;
use SleepingOwl\Admin\Navigation\Page;

class Navigation implements Renderable, Arrayable
{
/**
* @var Page
*/
protected static $currentPage;

/**
* @var Collection
*/
protected $items;

public function __construct()
{
$this->items = new Collection();
}

/**
* @param string|null $class
*
* @return Page
*/
public function addPage($class = null)
{
$page = new Page($class);

if (is_null(static::$currentPage)) {
static::$currentPage = $this;
}

static::$currentPage->getItems()->push($page);

return $page;
}

/**
* @return Collection
*/
public function getItems()
{
return $this->items;
}

/**
* @param \Closure $callback
*
* @return $this
*/
public function setItems(\Closure $callback)
{
$oldPage = static::$currentPage;
static::$currentPage = $this;
call_user_func($callback);
static::$currentPage = $oldPage;

return $this;
}

/**
* @return bool
*/
public function hasChild()
{
return $this->getItems()->count() > 0;
}

/**
* @return array
*/
public function toArray()
{
return $this->getItems();
}

protected function findActive()
{
$this->getItems()->each(function(Page $page) {
if ($page->getUrl() == url()->current()) {
$page->setActive();
}
$page->findActive();
});
}

/**
* @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory
*/
public function render()
{
$this->items = $this->getItems()->sortBy(function ($page, $key) {
return $page->getPriority();
});

$this->findActive();

return app('sleeping_owl.template')->view('_partials.navigation.navigation', [
'pages' => $this->toArray()
])->render();
}
}
Loading

0 comments on commit 3b7f298

Please sign in to comment.