diff --git a/application/forms/Navigation/NavigationItemForm.php b/application/forms/Navigation/NavigationItemForm.php index ff2429d2b..c7cb43422 100644 --- a/application/forms/Navigation/NavigationItemForm.php +++ b/application/forms/Navigation/NavigationItemForm.php @@ -29,6 +29,22 @@ class NavigationItemForm extends Form */ public function createElements(array $formData) { + $this->addElement( + 'select', + 'target', + array( + 'allowEmpty' => true, + 'label' => $this->translate('Target'), + 'description' => $this->translate('The target where to open this navigation item\'s url'), + 'multiOptions' => array( + '_blank' => $this->translate('New Window'), + '_next' => $this->translate('New Column'), + '_main' => $this->translate('Single Column'), + '_self' => $this->translate('Current Column') + ) + ) + ); + $this->addElement( 'text', 'url', @@ -36,7 +52,7 @@ class NavigationItemForm extends Form 'allowEmpty' => true, 'label' => $this->translate('Url'), 'description' => $this->translate( - 'The url of this navigation item. Leave blank if you only want the name being displayed.' + 'The url of this navigation item. Leave blank if you only want the name being displayed' ) ) ); @@ -48,7 +64,7 @@ class NavigationItemForm extends Form 'allowEmpty' => true, 'label' => $this->translate('Icon'), 'description' => $this->translate( - 'The icon of this navigation item. Leave blank if you do not want a icon being displayed.' + 'The icon of this navigation item. Leave blank if you do not want a icon being displayed' ) ) ); diff --git a/library/Icinga/Web/Navigation/NavigationItem.php b/library/Icinga/Web/Navigation/NavigationItem.php index c1e8b46b0..ba6197ce4 100644 --- a/library/Icinga/Web/Navigation/NavigationItem.php +++ b/library/Icinga/Web/Navigation/NavigationItem.php @@ -94,6 +94,13 @@ class NavigationItem implements IteratorAggregate */ protected $url; + /** + * This item's url target + * + * @var string + */ + protected $target; + /** * Additional parameters for this item's url * @@ -445,6 +452,29 @@ class NavigationItem implements IteratorAggregate return $this; } + /** + * Set this item's url target + * + * @param string $target + * + * @return $this + */ + public function setTarget($target) + { + $this->target = $target; + return $this; + } + + /** + * Return this item's url target + * + * @return string + */ + public function getTarget() + { + return $this->target; + } + /** * Return this item's url * diff --git a/library/Icinga/Web/Navigation/Renderer/NavigationItemRenderer.php b/library/Icinga/Web/Navigation/Renderer/NavigationItemRenderer.php index 70c89c5b7..2de90dae0 100644 --- a/library/Icinga/Web/Navigation/Renderer/NavigationItemRenderer.php +++ b/library/Icinga/Web/Navigation/Renderer/NavigationItemRenderer.php @@ -28,13 +28,6 @@ class NavigationItemRenderer */ protected $item; - /** - * The link target - * - * @var string - */ - protected $target; - /** * Create a new NavigationItemRenderer * @@ -124,29 +117,6 @@ class NavigationItemRenderer return $this->item; } - /** - * Set the link target - * - * @param string $target - * - * @return $this - */ - public function setTarget($target) - { - $this->target = $target; - return $this; - } - - /** - * Return the link target - * - * @return string - */ - public function getTarget() - { - return $this->target; - } - /** * Render the given navigation item as HTML anchor * @@ -175,7 +145,7 @@ class NavigationItemRenderer '%s', $this->view()->propertiesToString($item->getAttributes()), $this->view()->url($url, $item->getUrlParameters()), - $this->target ? ' target="' . $this->view()->escape($this->target) . '"' : '', + $this->renderTargetAttribute(), $label ); } else { @@ -189,4 +159,23 @@ class NavigationItemRenderer return $content; } + + /** + * Render and return the attribute to provide a non-default target for the url + * + * @return string + */ + protected function renderTargetAttribute() + { + $target = $this->getItem()->getTarget(); + if ($target === null) { + return ''; + } + + if (! in_array($target, array('_main', '_self', '_next'))) { + return ' target="' . $this->view()->escape($target) . '"'; + } + + return ' data-base-target="' . $target . '"'; + } }