/** * @param ItemInterface $rootItem * * @return ItemInterface|null */ private function findFirstLevelActive(ItemInterface $rootItem) { foreach ($rootItem as $firstLevelItem) { if ($this->matcher->isCurrent($firstLevelItem) || $this->matcher->isAncestor($firstLevelItem)) { return $firstLevelItem; } } return; }
/** * @param ItemInterface $item * * @return ItemInterface|null */ private function retrieveCurrentItem(ItemInterface $item) { $currentItem = null; if ($this->matcher->isCurrent($item)) { return $item; } if ($this->matcher->isAncestor($item)) { foreach ($item->getChildren() as $child) { $currentItem = $this->retrieveCurrentItem($child); if (null !== $currentItem) { break; } } } return $currentItem; }
/** * Concats the appropriate classes for menu links. * * @param ItemInterface $item * @param MatcherInterface $matcher * @param array $options */ public function buildClasses(ItemInterface &$item, MatcherInterface &$matcher, $options) { $isAncestor = $matcher->isAncestor($item, $options['matchingDepth']); $isCurrent = $matcher->isCurrent($item); $class = $item->getAttribute('class'); $classes = $class ? " {$class}" : ''; $classes .= $isCurrent ? " {$options['currentClass']}" : ''; $classes .= $isAncestor ? " {$options['ancestorClass']}" : ''; $classes .= $isAncestor && $this->invisibleChildSelected($item, $matcher) ? " {$options['currentClass']}" : ''; $classes .= $item->actsLikeFirst() ? " {$options['firstClass']}" : ''; $classes .= $item->actsLikeLast() ? " {$options['lastClass']}" : ''; $item->setAttribute('class', trim($classes)); }
/** * Concats the appropriate classes for menu links * * @param ItemInterface $item * @param MatcherInterface $matcher * @param array $options */ public function buildClasses(ItemInterface &$item, MatcherInterface &$matcher, $options) { $showChildren = $item->hasChildren() && $item->getDisplayChildren(); $isAncestor = $matcher->isAncestor($item, $options["matchingDepth"]); $isCurrent = $matcher->isCurrent($item); $class = $item->getAttribute("class"); $classes = $class ? " {$class}" : ""; $classes .= $isCurrent ? " {$options["currentClass"]}" : ""; $classes .= $isAncestor ? " {$options["ancestorClass"]}" : ""; $classes .= $isAncestor && $this->invisibleChildSelected($item, $matcher) ? " {$options["currentClass"]}" : ""; $classes .= $item->actsLikeFirst() ? " {$options["firstClass"]}" : ""; $classes .= $item->actsLikeLast() ? " {$options["lastClass"]}" : ""; $item->setAttribute("class", trim($classes)); }