]> git.openstreetmap.org Git - rails.git/blob - public/javascripts/menu.js
Don't require a second click to create an OpenStreetBug
[rails.git] / public / javascripts / menu.js
1 /*
2  * Open a menu.
3  */
4 function openMenu(anchor, menu) {
5   menu.style.display = "block";
6
7   menu.clonePosition(anchor, {
8     setLeft: true, setTop: true, setWidth: false, setHeight: false,
9     offsetLeft: 0, offsetTop: anchor.getHeight()
10   });
11 }
12
13 /*
14  * Close a menu.
15  */
16 function closeMenu(menu) {
17   clearTimeout(menu.timer);
18   menu.style.display = "none";
19 }
20
21 /*
22  * Callback called when the mouse enters a menu anchor.
23  */
24 function enterMenuAnchor(event, anchor, menu, delay) {
25   if (!anchor.hasClassName("disabled")) {
26     clearTimeout(menu.timer);
27
28     if (delay > 0) {
29       menu.timer = setTimeout(function () { openMenu(anchor, menu) }, delay);
30     } else {
31       openMenu(event, menu);
32     }
33   }
34 }
35
36 /*
37  * Callback called when the mouse leaves a menu anchor.
38  */
39 function leaveMenuAnchor(event, anchor, menu) {
40   var to = event.relatedTarget;
41
42   if (to != menu && !to.descendantOf(menu)) {
43     menu.style.display = "none";
44   }
45
46   clearTimeout(menu.timer);
47 }
48
49 /*
50  * Callback called when the mouse leaves a menu.
51  */
52 function leaveMenu(event, anchor, menu) {
53   var to = event.relatedTarget;
54
55   if (to != anchor && !to.descendantOf(menu)) {
56     menu.style.display = "none";
57   }
58
59   clearTimeout(menu.timer);
60 }
61
62 /*
63  * Setup a menu, triggered by hovering over an anchor for a given time.
64  */
65 function createMenu(anchorid, menuid, delay) {
66   var anchor = $(anchorid);
67   var menu = $(menuid);
68
69   anchor.observe("mouseup", function (event) { closeMenu(menu) });
70   anchor.observe("mouseover", function (event) { enterMenuAnchor(anchor, anchor, menu, delay) });
71   anchor.observe("mouseout", function (event) { leaveMenuAnchor(event, anchor, menu) });
72   menu.observe("mouseup", function (event) { closeMenu(menu) });
73   menu.observe("mouseout", function (event) { leaveMenu(event, anchor, menu) });
74 }