iterator = $navigation->getIterator(); $this->navigation = $navigation; $this->flags = $flags; } /** * {@inheritdoc} */ public function getChildren() { return new static($this->current()->getChildren(), $this->flags & static::NAV_DISABLE); } /** * {@inheritdoc} */ public function hasChildren() { return $this->current()->hasChildren(); } /** * {@inheritdoc} * @return \Icinga\Web\Navigation\NavigationItem */ public function current() { return $this->iterator->current(); } /** * {@inheritdoc} */ public function key() { return $this->iterator->key(); } /** * {@inheritdoc} */ public function next() { $this->iterator->next(); } /** * {@inheritdoc} */ public function rewind() { $this->iterator->rewind(); if (! (bool) ($this->flags & static::NAV_DISABLE) && ! $this->inIteration) { $this->content[] = $this->beginMarkup(); $this->inIteration = true; } } /** * {@inheritdoc} */ public function valid() { $valid = $this->iterator->valid(); if (! (bool) ($this->flags & static::NAV_DISABLE) && ! $valid && $this->inIteration) { $this->content[] = $this->endMarkup(); $this->inIteration = false; } return $valid; } /** * Begin navigation markup * * @return string */ public function beginMarkup() { $content = array(); if ($this->flags & static::NAV_MAJOR) { $el = 'nav'; } else { $el = 'div'; } if (($elCssClass = $this->getCssClass()) !== null) { $elCss = ' class="' . $elCssClass . '"'; } else { $elCss = ''; } $content[] = sprintf( '<%s%s role="navigation">', $el, $elCss ); $content[] = sprintf( '%2$s', static::HEADING_RANK, $this->getView()->escape($this->getHeading()) ); $content[] = $this->beginChildrenMarkup(); return implode("\n", $content); } /** * End navigation markup * * @return string */ public function endMarkup() { $content = array(); $content[] = $this->endChildrenMarkup(); if ($this->flags & static::NAV_MAJOR) { $content[] = ''; } else { $content[] = ''; } return implode("\n", $content); } /** * Begin children markup * * @return string */ public function beginChildrenMarkup() { $ulCssClass = static::CSS_CLASS_NAV; if ($this->navigation->getLayout() & Navigation::LAYOUT_TABS) { $ulCssClass .= ' ' . static::CSS_CLASS_NAV_TABS; } if ($this->navigation->getLayout() & Navigation::LAYOUT_DROPDOWN) { $ulCssClass .= ' ' . static::CSS_CLASS_NAV_DROPDOWN; } return ''; } /** * Begin item markup * * @param NavigationItem $item * * @return string */ public function beginItemMarkup(NavigationItem $item) { $cssClass = array(); if ($item->getActive()) { $cssClass[] = static::CSS_CLASS_ACTIVE; } if ($item->hasChildren() && $item->getChildren()->getLayout() === Navigation::LAYOUT_DROPDOWN ) { $cssClass[] = static::CSS_CLASS_DROPDOWN; $item ->setAttribute('class', static::CSS_CLASS_DROPDOWN_TOGGLE) ->setIcon(static::DROPDOWN_TOGGLE_ICON) ->setUrl('#'); } if (! empty($cssClass)) { $content = sprintf('
  • ', implode(' ', $cssClass)); } else { $content = '
  • '; } return $content; } /** * End item markup * * @return string */ public function endItemMarkup() { return '
  • '; } /** * {@inheritdoc} */ public function getCssClass() { return $this->cssClass; } /** * {@inheritdoc} */ public function setCssClass($class) { $this->cssClass = trim((string) $class); return $this; } /** * {@inheritdoc} */ public function getHeading() { return $this->heading; } /** * {@inheritdoc} */ public function setHeading($heading) { $this->heading = (string) $heading; return $this; } /** * Get the view * * @return View */ public function getView() { if ($this->view === null) { $this->view = Icinga::app()->getViewRenderer()->view; } return $this->view; } /** * Set the view * * @param View $view * * @return $this */ public function setView(View $view) { $this->view = $view; return $this; } /** * {@inheritdoc} */ public function render() { foreach ($this as $navigationItem) { /** @var \Icinga\Web\Navigation\NavigationItem $navigationItem */ $this->content[] = $this->beginItemMarkup($navigationItem); $this->content[] = $navigationItem->render(); $this->content[] = $this->endItemMarkup(); } return implode("\n", $this->content); } }