Mercurial > hg > rr-repo
comparison sites/all/modules/ctools/js/dropdown.js @ 0:ff03f76ab3fe
initial version
author | danieleb <danielebarchiesi@me.com> |
---|---|
date | Wed, 21 Aug 2013 18:51:11 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:ff03f76ab3fe |
---|---|
1 /** | |
2 * @file | |
3 * Implement a simple, clickable dropdown menu. | |
4 * | |
5 * See dropdown.theme.inc for primary documentation. | |
6 * | |
7 * The javascript relies on four classes: | |
8 * - The dropdown must be fully contained in a div with the class | |
9 * ctools-dropdown. It must also contain the class ctools-dropdown-no-js | |
10 * which will be immediately removed by the javascript; this allows for | |
11 * graceful degradation. | |
12 * - The trigger that opens the dropdown must be an a tag wit hthe class | |
13 * ctools-dropdown-link. The href should just be '#' as this will never | |
14 * be allowed to complete. | |
15 * - The part of the dropdown that will appear when the link is clicked must | |
16 * be a div with class ctools-dropdown-container. | |
17 * - Finally, ctools-dropdown-hover will be placed on any link that is being | |
18 * hovered over, so that the browser can restyle the links. | |
19 * | |
20 * This tool isn't meant to replace click-tips or anything, it is specifically | |
21 * meant to work well presenting menus. | |
22 */ | |
23 | |
24 (function ($) { | |
25 Drupal.behaviors.CToolsDropdown = { | |
26 attach: function() { | |
27 $('div.ctools-dropdown').once('ctools-dropdown', function() { | |
28 var $dropdown = $(this); | |
29 var open = false; | |
30 var hovering = false; | |
31 var timerID = 0; | |
32 | |
33 $dropdown.removeClass('ctools-dropdown-no-js'); | |
34 | |
35 var toggle = function(close) { | |
36 // if it's open or we're told to close it, close it. | |
37 if (open || close) { | |
38 // If we're just toggling it, close it immediately. | |
39 if (!close) { | |
40 open = false; | |
41 $("div.ctools-dropdown-container", $dropdown).slideUp(100); | |
42 } | |
43 else { | |
44 // If we were told to close it, wait half a second to make | |
45 // sure that's what the user wanted. | |
46 // Clear any previous timer we were using. | |
47 if (timerID) { | |
48 clearTimeout(timerID); | |
49 } | |
50 timerID = setTimeout(function() { | |
51 if (!hovering) { | |
52 open = false; | |
53 $("div.ctools-dropdown-container", $dropdown).slideUp(100); | |
54 } | |
55 }, 500); | |
56 } | |
57 } | |
58 else { | |
59 // open it. | |
60 open = true; | |
61 $("div.ctools-dropdown-container", $dropdown) | |
62 .animate({height: "show", opacity: "show"}, 100); | |
63 } | |
64 } | |
65 $("a.ctools-dropdown-link", $dropdown).click(function() { | |
66 toggle(); | |
67 return false; | |
68 }); | |
69 | |
70 $dropdown.hover( | |
71 function() { | |
72 hovering = true; | |
73 }, // hover in | |
74 function() { // hover out | |
75 hovering = false; | |
76 toggle(true); | |
77 return false; | |
78 }); | |
79 // @todo -- just use CSS for this noise. | |
80 $("div.ctools-dropdown-container a").hover( | |
81 function() { $(this).addClass('ctools-dropdown-hover'); }, | |
82 function() { $(this).removeClass('ctools-dropdown-hover'); } | |
83 ); | |
84 }); | |
85 } | |
86 } | |
87 })(jQuery); |