require 'linger' over menublock openers before triggering.
authorgfawcett <gfawcett@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Thu, 26 Mar 2009 15:58:26 +0000 (15:58 +0000)
committergfawcett <gfawcett@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Thu, 26 Mar 2009 15:58:26 +0000 (15:58 +0000)
These are the little gray arrows beside the item-names that trigger
the 'about/edit' menus to pop up. Previously, if you sailed your mouse
over one of them while moving across the screen, they would pop
open. Aggravating. Now a moment of linger-time (currently 200ms) over
the arrows is needed to trigger the menu. Much nicer.

git-svn-id: svn://svn.open-ils.org/ILS-Contrib/servres/trunk@230 6d9bc8c9-1ec2-4278-b937-99fde70a366f

conifer/static/menublocks.js

index 0d62111..7d4de56 100644 (file)
@@ -3,12 +3,13 @@ function init_blocks() {
     $('div').click(hideblocks);
 }
 
+var LINGER = 200; // # milliseconds linger-time required to trigger menu
 var blocknum = 0;
 function make_opener() {
     var menublock = $(this);
     var blockid = 'menublock' + (blocknum++);
     menublock.attr('id', blockid);
-    var opener = '<a class="menublockopener" onmouseover="openblock(\'' + blockid + '\');" href="javascript:openblock(\'' + blockid + '\');">&raquo;</a>';
+    var opener = '<a class="menublockopener" onmouseout="maybe_cancelblock(\'' + blockid + '\');" onmouseover="maybe_openblock(\'' + blockid + '\');" href="javascript:openblock(\'' + blockid + '\');">&raquo;</a>';
     menublock.before(opener);
     menublock.hide();
 }
@@ -17,10 +18,30 @@ function hideblocks() {
     $('span.menublock').hide();
 }
 
+// the block we are scheduling to open (due to a mouseover).
+var block_to_open = null;
+
+function maybe_cancelblock(bid) {
+    // if it is not open yet, this will stop it from opening.
+    block_to_open = null;
+}
+
+function maybe_openblock(bid) {
+    // it's 'maybe' because it's cancellable. You have to linger for
+    // LINGER milliseconds for the open to happen; otherwise
+    // maybe_cancelblock() will prevent it.
+    block_to_open = bid;
+    var cmd = 'openblock("' + bid + '")';
+    setTimeout(cmd, LINGER);
+}
+
 function openblock(bid) {
-    if (!resequencing) {
-       hideblocks();
-       $('#' + bid).fadeIn('fast');
+    if (!resequencing) {       // it's annoying during reseq.
+       if (block_to_open == bid) {
+           hideblocks();
+           $('#' + bid).fadeIn('fast');
+           block_to_open = null;
+       }
     }
 }