]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/menu.js
Fix some issues with the new edit menu code
[rails.git] / app / assets / javascripts / menu.js
index e829f2aa6664fda4f6f4ce636612c373a7c94784..595b153986f3e102424bccec97db812eb7bde3a3 100644 (file)
@@ -20,64 +20,28 @@ function openMenu(anchor, menu, align) {
 }
 
 /*
- * Close a menu.
- */
-function closeMenu(menu) {
-  clearTimeout(menu.timer);
-  menu.hide();
-}
-
-/*
- * Callback called when the mouse enters a menu anchor.
+ * Setup a menu, triggered by hovering over an anchor for a given time.
  */
-function enterMenuAnchor(event, anchor, menu, delay, align) {
-  if (!anchor.hasClass("disabled")) {
-    clearTimeout(menu.timer);
+function createMenu(anchorid, menuid, align) {
+  var $anchor = $("#" + anchorid);
+  var $arrow = $("#" + anchorid + " .menuicon");
+  var $menu = $("#" + menuid);
+  var $page = $(":not(#" + menuid + ", #" + anchorid + ")");
+
+  function hide() {
+    $menu.hide();
+    $page.off("click", hide);
+  }
 
-    if (delay > 0) {
-      menu.timer = setTimeout(function () { openMenu(anchor, menu, align); }, delay);
+  $arrow.click(function(e) {
+    e.stopPropagation();
+    e.preventDefault();
+    if ($menu.is(":visible")) {
+      $menu.hide();
+      $page.off("click", hide);
     } else {
-      openMenu(event, menu, align);
+      openMenu($anchor, $menu.show(), align);
+      $page.on("click", hide);
     }
-  }
-}
-
-/*
- * Callback called when the mouse leaves a menu anchor.
- */
-function leaveMenuAnchor(event, anchor, menu) {
-  var to = event.relatedTarget;
-
-  if (!menu.is(to) && menu.has(to).length === 0) {
-    menu.hide();
-  }
-
-  clearTimeout(menu.timer);
-}
-
-/*
- * Callback called when the mouse leaves a menu.
- */
-function leaveMenu(event, anchor, menu) {
-  var to = event.relatedTarget;
-
-  if (!anchor.is(to) && menu.has(to).length === 0) {
-    menu.hide();
-  }
-
-  clearTimeout(menu.timer);
-}
-
-/*
- * Setup a menu, triggered by hovering over an anchor for a given time.
- */
-function createMenu(anchorid, menuid, delay, align) {
-  var anchor = $("#" + anchorid);
-  var menu = $("#" + menuid);
-
-  anchor.mouseup(function (event) { closeMenu(menu); });
-  anchor.mouseover(function (event) { enterMenuAnchor(anchor, anchor, menu, delay, align); });
-  anchor.mouseout(function (event) { leaveMenuAnchor(event, anchor, menu); });
-  menu.mouseup(function (event) { closeMenu(menu); });
-  menu.mouseout(function (event) { leaveMenu(event, anchor, menu); });
+  });
 }