]> git.openstreetmap.org Git - rails.git/blobdiff - public/javascripts/menu.js
Tidy up some insanity in the creating of new notes
[rails.git] / public / javascripts / menu.js
index 9f88f0e0cbea4ba8096e74a53533af3d6f0e3763..26151775687fc22f22ff5eb6b0e315c00aff2bf9 100644 (file)
@@ -1,26 +1,42 @@
 /*
  * Open a menu.
  */
 /*
  * Open a menu.
  */
-function openMenu(anchor, menu) {
-  menu.style.display = "block";
+function openMenu(anchor, menu, align) {
+  var offset;
+
+  if (align == "left") {
+    offset = 0;
+  } else if (align == "right") {
+    offset = anchor.getWidth() - menu.getWidth();
+  }
 
   menu.clonePosition(anchor, {
     setLeft: true, setTop: true, setWidth: false, setHeight: false,
 
   menu.clonePosition(anchor, {
     setLeft: true, setTop: true, setWidth: false, setHeight: false,
-    offsetLeft: 0, offsetTop: anchor.getHeight()
+    offsetLeft: offset, offsetTop: anchor.getHeight()
   });
   });
+
+  menu.style.display = "block";
+}
+
+/*
+ * Close a menu.
+ */
+function closeMenu(menu) {
+  clearTimeout(menu.timer);
+  menu.style.display = "none";
 }
 
 /*
  * Callback called when the mouse enters a menu anchor.
  */
 }
 
 /*
  * Callback called when the mouse enters a menu anchor.
  */
-function enterMenuAnchor(event, anchor, menu, delay) {
+function enterMenuAnchor(event, anchor, menu, delay, align) {
   if (!anchor.hasClassName("disabled")) {
     clearTimeout(menu.timer);
 
     if (delay > 0) {
   if (!anchor.hasClassName("disabled")) {
     clearTimeout(menu.timer);
 
     if (delay > 0) {
-      menu.timer = setTimeout(function () { openMenu(anchor, menu) }, delay);
+      menu.timer = setTimeout(function () { openMenu(anchor, menu, align) }, delay);
     } else {
     } else {
-      openMenu(event, menu);
+      openMenu(event, menu, align);
     }
   }
 }
     }
   }
 }
@@ -54,11 +70,13 @@ function leaveMenu(event, anchor, menu) {
 /*
  * Setup a menu, triggered by hovering over an anchor for a given time.
  */
 /*
  * Setup a menu, triggered by hovering over an anchor for a given time.
  */
-function createMenu(anchorid, menuid, delay) {
+function createMenu(anchorid, menuid, delay, align) {
   var anchor = $(anchorid);
   var menu = $(menuid);
 
   var anchor = $(anchorid);
   var menu = $(menuid);
 
-  anchor.observe("mouseover", function (event) { enterMenuAnchor(anchor, anchor, menu, delay) });
+  anchor.observe("mouseup", function (event) { closeMenu(menu) });
+  anchor.observe("mouseover", function (event) { enterMenuAnchor(anchor, anchor, menu, delay, align) });
   anchor.observe("mouseout", function (event) { leaveMenuAnchor(event, anchor, menu) });
   anchor.observe("mouseout", function (event) { leaveMenuAnchor(event, anchor, menu) });
+  menu.observe("mouseup", function (event) { closeMenu(menu) });
   menu.observe("mouseout", function (event) { leaveMenu(event, anchor, menu) });
 }
   menu.observe("mouseout", function (event) { leaveMenu(event, anchor, menu) });
 }