/** * @test */ public function it_returns_a_list_of_sub_menus() { $menu = new MenuItem('menu', 'url'); $sub_menu1 = new MenuItem('menu1', 'url'); $sub_menu2 = new MenuItem('menu2', 'url'); $this->assertEmpty($menu->getElements()); $menu->add($sub_menu1); $menu->add($sub_menu2); $this->assertEquals(array($sub_menu1, $sub_menu2), $menu->getElements()); }
public function isLinked(MenuItem $menu) { $selected = false; foreach ($this->linked_routes as $route => $menu_url) { if ($this->current_route == $route && $menu_url === $menu->getUrl()) { $selected = true; break; } } return $selected; }
/** * @test */ public function it_render_a_menu_with_html_unordered_list() { //Prepare the menu. $menu = new MenuItem('Menu 1', '/url1'); $sub_menu = new MenuItem('Menu 2', '/url2'); $menu->add($sub_menu); $selector = new SimpleUrlSelector('http://test.com/url2'); //Render the menu $renderer = new HtmlListRenderer($selector); $output = $renderer->render($menu); $crawler = new Crawler($output); $this->assertEquals(1, $crawler->filter('.kebir-menu.level-1.has-sub-menu')->count()); $this->assertEquals(1, $crawler->filter('.kebir-menu.level-1.selected.has-sub-menu')->count()); $this->assertEquals(1, $crawler->filter('.kebir-menu.level-2.selected')->count()); $this->assertEquals(1, $crawler->filter('.kebir-menu > a[href="/url1"]')->count()); $this->assertEquals(1, $crawler->filter('.kebir-menu .kebir-menu.level-2 > a[href="/url2"]')->count()); }
/** * @test */ public function it_builds_a_list_of_menu() { $menus = array(array("id" => 1, "name" => "Menu 1", "url" => "url1", "parent_id" => 3), array("id" => 2, "name" => "Menu 2", "url" => "url2", "parent_id" => 0), array("id" => 3, "name" => "Menu 3", "url" => "url3", "parent_id" => 0), array("id" => 4, "name" => "Menu 4", "url" => "url4", "parent_id" => 2), array("id" => 5, "name" => "Menu 5", "url" => "url5", "parent_id" => 3), array("id" => 6, "name" => "Menu 6", "url" => "url6", "parent_id" => 1)); $builder = new Builder(); $menu_built = $builder->build($menus); //Expected menus. $menu1 = new MenuItem('Menu 1', 'url1'); $menu2 = new MenuItem('Menu 2', 'url2'); $menu3 = new MenuItem('Menu 3', 'url3'); $menu4 = new MenuItem('Menu 4', 'url4'); $menu5 = new MenuItem('Menu 5', 'url5'); $menu6 = new MenuItem('Menu 6', 'url6'); $menu2->add($menu4); $menu1->add($menu6); $menu3->add($menu1); $menu3->add($menu5); $this->assertEquals(array($menu2, $menu3), $menu_built); }
/** * Render a menu for a specific level. * * @param MenuItem $menu * @param integer $level * * @return string */ protected function renderMenu(MenuItem $menu, $level = 1) { //Render the submenus first. $children = ''; if ($menu->getElements()) { $children .= '<ul class="kebir-sub-menu">'; foreach ($menu->getElements() as $sub_menu) { $children .= $this->renderMenu($sub_menu, $level + 1); } $children .= "</ul>"; } //Prepare the html classes to add to the menu. $selected = $this->isSelectedMenu($menu, $children) ? ' selected' : ''; $has_children = $children ? ' has-sub-menu' : ''; //Get the final output. $output = '<li class="kebir-menu level-' . $level . $selected . $has_children . '">'; $output .= "<a href=" . $menu->getUrl() . ' class="kebir-menu-label">' . $menu->getName() . "</a>"; $output .= $children; $output .= "</li>"; return $output; }
/** * Checks if a menu is selected. * * @param MenuItem $menu The menu item. * * @return boolean */ public function isSelected(MenuItem $menu) { $selected = $this->current_path === $menu->getUrl(); return $selected; }