| 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);
 |