diff --git a/library/Icinga/Web/Widget/Tabs.php b/library/Icinga/Web/Widget/Tabs.php index 69a8fd396..2bc296939 100644 --- a/library/Icinga/Web/Widget/Tabs.php +++ b/library/Icinga/Web/Widget/Tabs.php @@ -49,7 +49,7 @@ EOT; * @var string */ private $closeTpl = <<< 'EOT' -
  • diff --git a/public/js/icinga/behavior/navigation.js b/public/js/icinga/behavior/navigation.js index 2da6bc87d..63f1b6e40 100644 --- a/public/js/icinga/behavior/navigation.js +++ b/public/js/icinga/behavior/navigation.js @@ -10,11 +10,9 @@ Icinga.EventListener.call(this, icinga); this.on('click', '#menu a', this.linkClicked, this); this.on('click', '#menu tr[href]', this.linkClicked, this); - this.on('mouseenter', 'li.dropdown', this.dropdownHover, this); - this.on('mouseleave', 'li.dropdown', this.dropdownLeave, this); this.on('mouseenter', '#menu > nav > ul > li', this.menuTitleHovered, this); this.on('mouseleave', '#sidebar', this.leaveSidebar, this); - this.on('rendered', this.onRendered, this); + this.on('rendered', '#menu', this.onRendered, this); /** * The DOM-Path of the active item @@ -35,9 +33,11 @@ this.hovered = null; /** - * @type {HTMLElement} + * The menu + * + * @type {jQuery} */ - this.element = null; + this.$menu = null; }; Navigation.prototype = new Icinga.EventListener(); @@ -49,16 +49,18 @@ Navigation.prototype.onRendered = function(e) { var _this = e.data.self; - this.element = e.target; + if (! _this.$menu) { + _this.$menu = $(e.target); + } if (! _this.active) { // There is no stored menu item, therefore it is assumed that this is the first rendering // of the navigation after the page has been opened. // initialise the menu selected by the backend as active. - var $menus = $('#menu li.active', e.target); - if ($menus.length) { - $menus.each(function() { + var $active = _this.$menu.find('li.active'); + if ($active.length) { + $active.each(function() { _this.setActive($(this)); }); } else { @@ -147,17 +149,17 @@ Navigation.prototype.setActiveByUrl = function(url) { // try to active the first item that has an exact URL match - this.setActive($('#menu [href="' + url + '"]')); + this.setActive(this.$menu.find('[href="' + url + '"]')); // the url may point to the search field, which must be activated too if (! this.active) { - this.setActive($('#menu form[action="' + this.icinga.utils.parseUrl(url).path + '"]')); + this.setActive(this.$menu.find('form[action="' + this.icinga.utils.parseUrl(url).path + '"]')); } // some urls may have custom filters which won't match any menu item, in that case search // for a menu item that points to the base action without any filters if (! this.active) { - this.setActive($('#menu [href="' + this.icinga.utils.parseUrl(url).path + '"]').first()); + this.setActive(this.$menu.find('[href="' + this.icinga.utils.parseUrl(url).path + '"]').first()); } }; @@ -179,10 +181,10 @@ */ Navigation.prototype.clear = function() { // menu items - $('#menu li.active', this.element).removeClass('active'); + this.$menu.find('li.active').removeClass('active'); // search fields - $('#menu input.active', this.element).removeClass('active'); + this.$menu.find('input.active').removeClass('active'); }; /** @@ -350,23 +352,6 @@ } }; - Navigation.prototype.dropdownHover = function () { - $(this).addClass('hover'); - }; - - Navigation.prototype.dropdownLeave = function (event) { - var $li = $(this), - _this = event.data.self; - setTimeout(function () { - // TODO: make this behave well together with keyboard navigation - try { - if (!$li.is('li:hover') /*&& ! $li.find('a:focus')*/) { - $li.removeClass('hover'); - } - } catch(e) { /* Bypass because if IE8 */ } - }, 300); - _this.hovered = null; - }; Icinga.Behaviors.Navigation = Navigation; }) (Icinga, jQuery);