]> git.openstreetmap.org Git - rails.git/blobdiff - app/assets/javascripts/menu.js
Add clearer close action, refactor base layer code
[rails.git] / app / assets / javascripts / menu.js
index e829f2aa6664fda4f6f4ce636612c373a7c94784..a01fc39cc68bbfe86f85f79a0e786a4c8f77481c 100644 (file)
@@ -19,65 +19,31 @@ 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.
- */
-function enterMenuAnchor(event, anchor, menu, delay, align) {
-  if (!anchor.hasClass("disabled")) {
-    clearTimeout(menu.timer);
-
-    if (delay > 0) {
-      menu.timer = setTimeout(function () { openMenu(anchor, menu, align); }, delay);
-    } else {
-      openMenu(event, menu, align);
-    }
-  }
-}
-
-/*
- * 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);
+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);
+  }
 
-  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); });
+  $arrow.click(function(e) {
+    if ($anchor.is(":not(.disabled)")) {
+      e.stopPropagation();
+      e.preventDefault();
+      if ($menu.is(":visible")) {
+        $menu.hide();
+        $page.off("click", hide);
+      } else {
+        openMenu($anchor, $menu.show(), align);
+        $page.on("click", hide);
+      }
+    }
+  });
 }