| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385 | 
							- (function($) {
 
- Drupal.admin = Drupal.admin || {};
 
- Drupal.admin.behaviors = Drupal.admin.behaviors || {};
 
- Drupal.admin.hashes = Drupal.admin.hashes || {};
 
- /**
 
-  * Core behavior for Administration menu.
 
-  *
 
-  * Test whether there is an administration menu is in the output and execute all
 
-  * registered behaviors.
 
-  */
 
- Drupal.behaviors.adminMenu = {
 
-   attach: function (context, settings) {
 
-     // Initialize settings.
 
-     settings.admin_menu = $.extend({
 
-       suppress: false,
 
-       margin_top: false,
 
-       position_fixed: false,
 
-       tweak_modules: false,
 
-       tweak_permissions: false,
 
-       tweak_tabs: false,
 
-       destination: '',
 
-       basePath: settings.basePath,
 
-       hash: 0,
 
-       replacements: {}
 
-     }, settings.admin_menu || {});
 
-     // Check whether administration menu should be suppressed.
 
-     if (settings.admin_menu.suppress) {
 
-       return;
 
-     }
 
-     var $adminMenu = $('#admin-menu:not(.admin-menu-processed)', context);
 
-     // Client-side caching; if administration menu is not in the output, it is
 
-     // fetched from the server and cached in the browser.
 
-     if (!$adminMenu.length && settings.admin_menu.hash) {
 
-       Drupal.admin.getCache(settings.admin_menu.hash, function (response) {
 
-           if (typeof response == 'string' && response.length > 0) {
 
-             $('body', context).append(response);
 
-           }
 
-           var $adminMenu = $('#admin-menu:not(.admin-menu-processed)', context);
 
-           // Apply our behaviors.
 
-           Drupal.admin.attachBehaviors(context, settings, $adminMenu);
 
-           // Allow resize event handlers to recalculate sizes/positions.
 
-           $(window).triggerHandler('resize');
 
-       });
 
-     }
 
-     // If the menu is in the output already, this means there is a new version.
 
-     else {
 
-       // Apply our behaviors.
 
-       Drupal.admin.attachBehaviors(context, settings, $adminMenu);
 
-     }
 
-   }
 
- };
 
- /**
 
-  * Collapse fieldsets on Modules page.
 
-  */
 
- Drupal.behaviors.adminMenuCollapseModules = {
 
-   attach: function (context, settings) {
 
-     if (settings.admin_menu.tweak_modules) {
 
-       $('#system-modules fieldset:not(.collapsed)', context).addClass('collapsed');
 
-     }
 
-   }
 
- };
 
- /**
 
-  * Collapse modules on Permissions page.
 
-  */
 
- Drupal.behaviors.adminMenuCollapsePermissions = {
 
-   attach: function (context, settings) {
 
-     if (settings.admin_menu.tweak_permissions) {
 
-       // Freeze width of first column to prevent jumping.
 
-       $('#permissions th:first', context).css({ width: $('#permissions th:first', context).width() });
 
-       // Attach click handler.
 
-       $modules = $('#permissions tr:has(td.module)', context).once('admin-menu-tweak-permissions', function () {
 
-         var $module = $(this);
 
-         $module.bind('click.admin-menu', function () {
 
-           // @todo Replace with .nextUntil() in jQuery 1.4.
 
-           $module.nextAll().each(function () {
 
-             var $row = $(this);
 
-             if ($row.is(':has(td.module)')) {
 
-               return false;
 
-             }
 
-             $row.toggleClass('element-hidden');
 
-           });
 
-         });
 
-       });
 
-       // Collapse all but the targeted permission rows set.
 
-       if (window.location.hash.length) {
 
-         $modules = $modules.not(':has(' + window.location.hash + ')');
 
-       }
 
-       $modules.trigger('click.admin-menu');
 
-     }
 
-   }
 
- };
 
- /**
 
-  * Apply margin to page.
 
-  *
 
-  * Note that directly applying marginTop does not work in IE. To prevent
 
-  * flickering/jumping page content with client-side caching, this is a regular
 
-  * Drupal behavior.
 
-  */
 
- Drupal.behaviors.adminMenuMarginTop = {
 
-   attach: function (context, settings) {
 
-     if (!settings.admin_menu.suppress && settings.admin_menu.margin_top) {
 
-       $('body:not(.admin-menu)', context).addClass('admin-menu');
 
-     }
 
-   }
 
- };
 
- /**
 
-  * Retrieve content from client-side cache.
 
-  *
 
-  * @param hash
 
-  *   The md5 hash of the content to retrieve.
 
-  * @param onSuccess
 
-  *   A callback function invoked when the cache request was successful.
 
-  */
 
- Drupal.admin.getCache = function (hash, onSuccess) {
 
-   if (Drupal.admin.hashes.hash !== undefined) {
 
-     return Drupal.admin.hashes.hash;
 
-   }
 
-   $.ajax({
 
-     cache: true,
 
-     type: 'GET',
 
-     dataType: 'text', // Prevent auto-evaluation of response.
 
-     global: false, // Do not trigger global AJAX events.
 
-     url: Drupal.settings.admin_menu.basePath.replace(/admin_menu/, 'js/admin_menu/cache/' + hash),
 
-     success: onSuccess,
 
-     complete: function (XMLHttpRequest, status) {
 
-       Drupal.admin.hashes.hash = status;
 
-     }
 
-   });
 
- };
 
- /**
 
-  * TableHeader callback to determine top viewport offset.
 
-  *
 
-  * @see toolbar.js
 
-  */
 
- Drupal.admin.height = function() {
 
-   var $adminMenu = $('#admin-menu');
 
-   var height = $adminMenu.outerHeight();
 
-   // In IE, Shadow filter adds some extra height, so we need to remove it from
 
-   // the returned height.
 
-   if ($adminMenu.css('filter') && $adminMenu.css('filter').match(/DXImageTransform\.Microsoft\.Shadow/)) {
 
-     height -= $adminMenu.get(0).filters.item("DXImageTransform.Microsoft.Shadow").strength;
 
-   }
 
-   return height;
 
- };
 
- /**
 
-  * @defgroup admin_behaviors Administration behaviors.
 
-  * @{
 
-  */
 
- /**
 
-  * Attach administrative behaviors.
 
-  */
 
- Drupal.admin.attachBehaviors = function (context, settings, $adminMenu) {
 
-   if ($adminMenu.length) {
 
-     $adminMenu.addClass('admin-menu-processed');
 
-     $.each(Drupal.admin.behaviors, function() {
 
-       this(context, settings, $adminMenu);
 
-     });
 
-   }
 
- };
 
- /**
 
-  * Apply 'position: fixed'.
 
-  */
 
- Drupal.admin.behaviors.positionFixed = function (context, settings, $adminMenu) {
 
-   if (settings.admin_menu.position_fixed) {
 
-     $adminMenu.addClass('admin-menu-position-fixed');
 
-     $adminMenu.css('position', 'fixed');
 
-   }
 
- };
 
- /**
 
-  * Move page tabs into administration menu.
 
-  */
 
- Drupal.admin.behaviors.pageTabs = function (context, settings, $adminMenu) {
 
-   if (settings.admin_menu.tweak_tabs) {
 
-     var $tabs = $(context).find('ul.tabs.primary');
 
-     $adminMenu.find('#admin-menu-wrapper > ul').eq(1)
 
-       .append($tabs.find('li').addClass('admin-menu-tab'));
 
-     $(context).find('ul.tabs.secondary')
 
-       .appendTo('#admin-menu-wrapper > ul > li.admin-menu-tab.active')
 
-       .removeClass('secondary');
 
-     $tabs.remove();
 
-   }
 
- };
 
- /**
 
-  * Perform dynamic replacements in cached menu.
 
-  */
 
- Drupal.admin.behaviors.replacements = function (context, settings, $adminMenu) {
 
-   for (var item in settings.admin_menu.replacements) {
 
-     $(item, $adminMenu).html(settings.admin_menu.replacements[item]);
 
-   }
 
- };
 
- /**
 
-  * Inject destination query strings for current page.
 
-  */
 
- Drupal.admin.behaviors.destination = function (context, settings, $adminMenu) {
 
-   if (settings.admin_menu.destination) {
 
-     $('a.admin-menu-destination', $adminMenu).each(function() {
 
-       this.search += (!this.search.length ? '?' : '&') + Drupal.settings.admin_menu.destination;
 
-     });
 
-   }
 
- };
 
- /**
 
-  * Apply JavaScript-based hovering behaviors.
 
-  *
 
-  * @todo This has to run last.  If another script registers additional behaviors
 
-  *   it will not run last.
 
-  */
 
- Drupal.admin.behaviors.hover = function (context, settings, $adminMenu) {
 
-   // Delayed mouseout.
 
-   $('li.expandable', $adminMenu).hover(
 
-     function () {
 
-       // Stop the timer.
 
-       clearTimeout(this.sfTimer);
 
-       // Display child lists.
 
-       $('> ul', this)
 
-         .css({left: 'auto', display: 'block'})
 
-         // Immediately hide nephew lists.
 
-         .parent().siblings('li').children('ul').css({left: '-999em', display: 'none'});
 
-     },
 
-     function () {
 
-       // Start the timer.
 
-       var uls = $('> ul', this);
 
-       this.sfTimer = setTimeout(function () {
 
-         uls.css({left: '-999em', display: 'none'});
 
-       }, 400);
 
-     }
 
-   );
 
- };
 
- /**
 
-  * Apply the search bar functionality.
 
-  */
 
- Drupal.admin.behaviors.search = function (context, settings, $adminMenu) {
 
-   // @todo Add a HTML ID.
 
-   var $input = $('input.admin-menu-search', $adminMenu);
 
-   // Initialize the current search needle.
 
-   var needle = $input.val();
 
-   // Cache of all links that can be matched in the menu.
 
-   var links;
 
-   // Minimum search needle length.
 
-   var needleMinLength = 2;
 
-   // Append the results container.
 
-   var $results = $('<div />').insertAfter($input);
 
-   /**
 
-    * Executes the search upon user input.
 
-    */
 
-   function keyupHandler() {
 
-     var matches, $html, value = $(this).val();
 
-     // Only proceed if the search needle has changed.
 
-     if (value !== needle) {
 
-       needle = value;
 
-       // Initialize the cache of menu links upon first search.
 
-       if (!links && needle.length >= needleMinLength) {
 
-         // @todo Limit to links in dropdown menus; i.e., skip menu additions.
 
-         links = buildSearchIndex($adminMenu.find('li:not(.admin-menu-action, .admin-menu-action li) > a'));
 
-       }
 
-       // Empty results container when deleting search text.
 
-       if (needle.length < needleMinLength) {
 
-         $results.empty();
 
-       }
 
-       // Only search if the needle is long enough.
 
-       if (needle.length >= needleMinLength && links) {
 
-         matches = findMatches(needle, links);
 
-         // Build the list in a detached DOM node.
 
-         $html = buildResultsList(matches);
 
-         // Display results.
 
-         $results.empty().append($html);
 
-       }
 
-     }
 
-   }
 
-   /**
 
-    * Builds the search index.
 
-    */
 
-   function buildSearchIndex($links) {
 
-     return $links
 
-       .map(function () {
 
-         var text = (this.textContent || this.innerText);
 
-         // Skip menu entries that do not contain any text (e.g., the icon).
 
-         if (typeof text === 'undefined') {
 
-           return;
 
-         }
 
-         return {
 
-           text: text,
 
-           textMatch: text.toLowerCase(),
 
-           element: this
 
-         };
 
-       });
 
-   }
 
-   /**
 
-    * Searches the index for a given needle and returns matching entries.
 
-    */
 
-   function findMatches(needle, links) {
 
-     var needleMatch = needle.toLowerCase();
 
-     // Select matching links from the cache.
 
-     return $.grep(links, function (link) {
 
-       return link.textMatch.indexOf(needleMatch) !== -1;
 
-     });
 
-   }
 
-   /**
 
-    * Builds the search result list in a detached DOM node.
 
-    */
 
-   function buildResultsList(matches) {
 
-     var $html = $('<ul class="dropdown admin-menu-search-results" />');
 
-     $.each(matches, function () {
 
-       var result = this.text;
 
-       var $element = $(this.element);
 
-       // Check whether there is a top-level category that can be prepended.
 
-       var $category = $element.closest('#admin-menu-wrapper > ul > li');
 
-       var categoryText = $category.find('> a').text()
 
-       if ($category.length && categoryText) {
 
-         result = categoryText + ': ' + result;
 
-       }
 
-       var $result = $('<li><a href="' + $element.attr('href') + '">' + result + '</a></li>');
 
-       $result.data('original-link', $(this.element).parent());
 
-       $html.append($result);
 
-     });
 
-     return $html;
 
-   }
 
-   /**
 
-    * Highlights selected result.
 
-    */
 
-   function resultsHandler(e) {
 
-     var $this = $(this);
 
-     var show = e.type === 'mouseenter' || e.type === 'focusin';
 
-     $this.trigger(show ? 'showPath' : 'hidePath', [this]);
 
-   }
 
-   /**
 
-    * Closes the search results and clears the search input.
 
-    */
 
-   function resultsClickHandler(e, link) {
 
-     var $original = $(this).data('original-link');
 
-     $original.trigger('mouseleave');
 
-     $input.val('').trigger('keyup');
 
-   }
 
-   /**
 
-    * Shows the link in the menu that corresponds to a search result.
 
-    */
 
-   function highlightPathHandler(e, link) {
 
-     if (link) {
 
-       var $original = $(link).data('original-link');
 
-       var show = e.type === 'showPath';
 
-       // Toggle an additional CSS class to visually highlight the matching link.
 
-       // @todo Consider using same visual appearance as regular hover.
 
-       $original.toggleClass('highlight', show);
 
-       $original.trigger(show ? 'mouseenter' : 'mouseleave');
 
-     }
 
-   }
 
-   // Attach showPath/hidePath handler to search result entries.
 
-   $results.delegate('li', 'mouseenter mouseleave focus blur', resultsHandler);
 
-   // Hide the result list after a link has been clicked, useful for overlay.
 
-   $results.delegate('li', 'click', resultsClickHandler);
 
-   // Attach hover/active highlight behavior to search result entries.
 
-   $adminMenu.delegate('.admin-menu-search-results li', 'showPath hidePath', highlightPathHandler);
 
-   // Attach the search input event handler.
 
-   $input.bind('keyup search', keyupHandler);
 
- };
 
- /**
 
-  * @} End of "defgroup admin_behaviors".
 
-  */
 
- })(jQuery);
 
 
  |