12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- /**
- * @file
- * Implement a simple, clickable dropbutton menu.
- *
- * See dropbutton.theme.inc for primary documentation.
- *
- * The javascript relies on four classes:
- * - The dropbutton must be fully contained in a div with the class
- * ctools-dropbutton. It must also contain the class ctools-no-js
- * which will be immediately removed by the javascript; this allows for
- * graceful degradation.
- * - The trigger that opens the dropbutton must be an a tag wit hthe class
- * ctools-dropbutton-link. The href should just be '#' as this will never
- * be allowed to complete.
- * - The part of the dropbutton that will appear when the link is clicked must
- * be a div with class ctools-dropbutton-container.
- * - Finally, ctools-dropbutton-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.CToolsDropbutton = {
- attach: function() {
- // Process buttons. All dropbuttons are buttons.
- $('.ctools-button')
- .once('ctools-button')
- .removeClass('ctools-no-js');
- // Process dropbuttons. Not all buttons are dropbuttons.
- $('.ctools-dropbutton').once('ctools-dropbutton', function() {
- var $dropbutton = $(this);
- var $button = $('.ctools-content', $dropbutton);
- var $secondaryActions = $('li', $button).not(':first');
- var $twisty = $(".ctools-link", $dropbutton);
- var open = false;
- var hovering = false;
- var timerID = 0;
- 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;
- $secondaryActions.slideUp(100);
- $dropbutton.removeClass('open');
- }
- 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;
- $secondaryActions.slideUp(100);
- $dropbutton.removeClass('open');
- }}, 500);
- }
- }
- else {
- // open it.
- open = true;
- $secondaryActions.animate({height: "show", opacity: "show"}, 100);
- $dropbutton.addClass('open');
- }
- }
- // Hide the secondary actions initially.
- $secondaryActions.hide();
- $twisty.click(function() {
- toggle();
- return false;
- });
- $dropbutton.hover(
- function() {
- hovering = true;
- }, // hover in
- function() { // hover out
- hovering = false;
- toggle(true);
- return false;
- }
- );
- });
- }
- }
- })(jQuery);
|