(function($) { Drupal.behaviors.adminToolbarMenu = {}; Drupal.behaviors.adminToolbarMenu.attach = function(context) { if (jQuery().drilldown) { $('#admin-toolbar div.admin-block:has(ul.menu):not(.admin-toolbar-menu)') .addClass('admin-toolbar-menu') .each(function() { var menu = $(this); var trail = '#admin-toolbar div.admin-tab.' + $(this).attr('id').split('block-')[1] + ' span'; var rootTitle = $(trail).text(); if ($('a:has(span.menu-description)', menu).size() > 0) { menu.addClass('admin-toolbar-menu-hover'); $('a:has(span.menu-description)', menu).hover( function() { $('') .attr('class', $(this).attr('class')) .addClass('menu-hover') .addClass('overlay-exclude') .append($('span.menu-description', this).clone()) .appendTo(menu) .show(); }, function() { $(menu) .children('a.menu-hover') .remove(); } ); } // Replace the standard trail click handler with one that only // adjusts menu if the admin tab is active. Otherwise, switch // to that admin tab. menu.bind('refresh.drilldown', function() { $(trail + ' a').unbind('click').click(function() { if ($(this).parents('div.admin-tab').is('.admin-tab-active')) { var settings = {'activeLink': $(this).data('original'), 'trail': trail}; // If the clicked link does not reference the current // active menu, set it to be active. if (settings.activeLink.siblings('ul.drilldown-active-menu').size() === 0) { menu.drilldown('setActive', settings); return false; } // Otherwise, pass-through and allow the link to be clicked. return menu.drilldown('goTo', settings); } $(this).parents('div.admin-tab').click(); return false; }); }); // Init drilldown plugin. menu.drilldown('init', { activePath: Drupal.settings.activePath, trail: trail, rootTitle: rootTitle }); }); } }; })(jQuery);