123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /**
- * @file
- * Implement a simple, clickable dropdown menu.
- *
- * See dropdown.theme.inc for primary documentation.
- *
- * The javascript relies on four classes:
- * - The dropdown must be fully contained in a div with the class
- * ctools-dropdown. It must also contain the class ctools-dropdown-no-js
- * which will be immediately removed by the javascript; this allows for
- * graceful degradation.
- * - The trigger that opens the dropdown must be an a tag wit hthe class
- * ctools-dropdown-link. The href should just be '#' as this will never
- * be allowed to complete.
- * - The part of the dropdown that will appear when the link is clicked must
- * be a div with class ctools-dropdown-container.
- * - Finally, ctools-dropdown-hover will be placed on any link that is being
- * hovered over, so that the browser can restyle the links.
- *
- * This tool isn't meant to replace click-tips or anything, it is specifically
- * meant to work well presenting menus.
- */
- (function ($) {
- Drupal.behaviors.CToolsDropdown = {
- attach: function() {
- $('div.ctools-dropdown').once('ctools-dropdown', function() {
- var $dropdown = $(this);
- var open = false;
- var hovering = false;
- var timerID = 0;
- $dropdown.removeClass('ctools-dropdown-no-js');
- var toggle = function(close) {
- // if it's open or we're told to close it, close it.
- if (open || close) {
- // If we're just toggling it, close it immediately.
- if (!close) {
- open = false;
- $("div.ctools-dropdown-container", $dropdown).slideUp(100);
- }
- else {
- // If we were told to close it, wait half a second to make
- // sure that's what the user wanted.
- // Clear any previous timer we were using.
- if (timerID) {
- clearTimeout(timerID);
- }
- timerID = setTimeout(function() {
- if (!hovering) {
- open = false;
- $("div.ctools-dropdown-container", $dropdown).slideUp(100);
- }
- }, 500);
- }
- }
- else {
- // open it.
- open = true;
- $("div.ctools-dropdown-container", $dropdown)
- .animate({height: "show", opacity: "show"}, 100);
- }
- }
- $("a.ctools-dropdown-link", $dropdown).click(function() {
- toggle();
- return false;
- });
- $dropdown.hover(
- function() {
- hovering = true;
- }, // hover in
- function() { // hover out
- hovering = false;
- toggle(true);
- return false;
- });
- // @todo -- just use CSS for this noise.
- $("div.ctools-dropdown-container a").hover(
- function() { $(this).addClass('ctools-dropdown-hover'); },
- function() { $(this).removeClass('ctools-dropdown-hover'); }
- );
- });
- }
- }
- })(jQuery);
|