[Jifty-commit] r916 - in jifty/branches/jifty-jsan: lib/Jifty/Web/Form share/web/static/js share/web/templates/_elements

jifty-commit at lists.jifty.org jifty-commit at lists.jifty.org
Mon Apr 24 15:36:39 EDT 2006


Author: trs
Date: Mon Apr 24 15:36:37 2006
New Revision: 916

Modified:
   jifty/branches/jifty-jsan/   (props changed)
   jifty/branches/jifty-jsan/lib/Jifty/Web/Form/Element.pm
   jifty/branches/jifty-jsan/share/web/static/js/key_bindings.js
   jifty/branches/jifty-jsan/share/web/templates/_elements/wrapper

Log:
 r9981 at zot:  tom | 2006-04-24 12:06:29 -0400
 Turn the key bindings into a Jifty library and fix propagation problems in Firefox


Modified: jifty/branches/jifty-jsan/lib/Jifty/Web/Form/Element.pm
==============================================================================
--- jifty/branches/jifty-jsan/lib/Jifty/Web/Form/Element.pm	(original)
+++ jifty/branches/jifty-jsan/lib/Jifty/Web/Form/Element.pm	Mon Apr 24 15:36:37 2006
@@ -240,7 +240,7 @@
     my $self = shift;
     my $key  = $self->key_binding;
     if ($key) {
-        Jifty->web->out( "<script><!--\naddKeyBinding(" . "'"
+        Jifty->web->out( "<script><!--\nJifty.KeyBindings.add(" . "'"
                 . uc($key) . "', "
                 . "'click', " . "'"
                 . $self->id . "'," . "'"

Modified: jifty/branches/jifty-jsan/share/web/static/js/key_bindings.js
==============================================================================
--- jifty/branches/jifty-jsan/share/web/static/js/key_bindings.js	(original)
+++ jifty/branches/jifty-jsan/share/web/static/js/key_bindings.js	Mon Apr 24 15:36:37 2006
@@ -1,69 +1,85 @@
-// Copyright 2004-2005, Best Practical Solutions, LLC
+// Copyright 2004-2006, Best Practical Solutions, LLC
 // This Library is licensed to you under the same terms as Perl 5.x
 
-var bindings = Array;
-
-document.onkeydown = doClick;
-function doClick(e) {
-    var targ;
-        if (!e) var e = window.event;
-            if (e.target) targ = e.target;
-            else if (e.srcElement) targ = e.srcElement;
-        if (targ.nodeType == 3) // defeat Safari bug
-                targ = targ.parentNode;
-   
-   // safari or mozilla
-   if ( ( ! e.metaKey && ! e.altKey &&  ! e.ctrlKey )
-        && (
-        (targ == document.body) || 
-       (targ ==  document.getElementsByTagName('html')[0])  
-        ) ){
-	var code = String.fromCharCode(e.keyCode);
-    var binding = getKeyBinding(code);
-   if (binding) {
-   if (binding["action"] == "goto") {
-        document.location = (binding["data"]);
-    } 
-   else if (binding["action"] == "focus") {
-      var elements = document.getElementsByName(binding["data"]);
-       elements[0].focus();
-    }
-   else if (binding["action"] == "click") {
-      var elements = document.getElementsByName(binding["data"]);
-       elements[0].click();
-    }
-
- }     
-
-}
-}
-
-function addKeyBinding(key, action, data, label) {
-    var binding = new Array;
-    binding["action"] = action;
-    binding["data"] = data;
-    binding["label"] = label;
-    bindings[key] = binding;
-}
+JSAN.use("DOM.Events");
 
+if ( typeof Jifty == "undefined" ) Jifty = {};
 
-function getKeyBinding(key) {
-    return(bindings[key]);
+Jifty.KeyBindings = {
+    bindings: new Array(),
+    listener: null,
+
+    activate: function() {
+        Jifty.KeyBindings.listener = DOM.Events.addListener(
+                                        window,
+                                        "keydown",
+                                        Jifty.KeyBindings.doClick
+                                     );
+    },
+
+    deactivate: function() {
+        DOM.Events.removeListener(Jifty.KeyBindings.listener);
+    },
+
+    doClick: function(e) {
+        if (e.target.nodeType == 3) // defeat Safari bug
+            e.target = e.target.parentNode;
+       
+        // Safari or Mozilla
+        if (    ( !e.metaKey && !e.altKey && !e.ctrlKey )
+             && (    (e.target == document.body)
+                  || (e.target == document.getElementsByTagName("html")[0]) ))
+        {
+            var code    = String.fromCharCode(e.keyCode);
+            var binding = Jifty.KeyBindings.get(code);
+            
+            if (binding) {
+                e.preventDefault();
+                
+                if (binding["action"] == "goto") {
+                    document.location = (binding["data"]);
+                }
+                else if (binding["action"] == "focus") {
+                    var elements = document.getElementsByName(binding["data"]);
+                    elements[0].focus();
+                }
+                else if (binding["action"] == "click") {
+                    var elements = document.getElementsByName(binding["data"]);
+                    elements[0].click();
+                }
+            }
+        }
+    },
+
+    add: function(key, action, data, label) {
+        var binding = new Array();
+        binding["action"]  = action;
+        binding["data"]    = data;
+        binding["label"]   = label;
+        Jifty.KeyBindings.bindings[key] = binding;
+    },
+
+    get: function(key) {
+        return Jifty.KeyBindings.bindings[key];
+    },
+
+    writeLegend: function() {
+        var content = "";
+        
+        for (var key in Jifty.KeyBindings.bindings) {
+            if ( Jifty.KeyBindings.bindings[key]["label"] ) {
+                content = content + '<div class="keybinding"><dt>'+key + '</dt>' +'<dd>'+Jifty.KeyBindings.bindings[key]['label'] +'</dd></div>'; 
+            }
+        }
+        
+        if (content) {
+            document.write('<div class="keybindings">');
+            document.write('<dl class="keybindings">');
+            document.write(content);
+            document.write('</dl>');
+            document.write('</div>');
+        }
+    }
 }
 
 
-function writeKeyBindingLegend() {
-    var content = '';
-    for  (var key in bindings) {
-    if ( bindings[key]['label']) {
-    content = content + '<div class="keybinding"><dt>'+key + '</dt>' +'<dd>'+bindings[key]['label'] +'</dd></div>'; 
-    }
-    }
-    if (content) {
-    document.write('<div class="keybindings">');
-    document.write('<dl class="keybindings">');
-    document.write(content);
-    document.write('</dl>');
-    document.write('</div>');
-    }
-}

Modified: jifty/branches/jifty-jsan/share/web/templates/_elements/wrapper
==============================================================================
--- jifty/branches/jifty-jsan/share/web/templates/_elements/wrapper	(original)
+++ jifty/branches/jifty-jsan/share/web/templates/_elements/wrapper	Mon Apr 24 15:36:37 2006
@@ -14,8 +14,9 @@
   <% Jifty->web->render_messages %>
   <% $m->content |n%>
   <script type="text/javascript"><!--
+  Jifty.KeyBindings.activate();
   document.write('<div id="keybindings">');
-  writeKeyBindingLegend();
+  Jifty.KeyBindings.writeLegend();
   document.write('<\/div>');
   document.write('<div id="jifty-wait-message" style="display: none"><%_('Loading...')%><\/div>');
   --></script>


More information about the Jifty-commit mailing list