[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