From 4062d3d5c0c566751a1f098495e9aa836e8db9de Mon Sep 17 00:00:00 2001 From: Marek Sacha Date: Fri, 30 Apr 2010 17:18:40 +0200 Subject: Reimplementation of Accesskeys in javascript (FS#1809), toolbar accesskyes fix. --- lib/scripts/hotkeys.js | 58 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 16 deletions(-) (limited to 'lib/scripts/hotkeys.js') diff --git a/lib/scripts/hotkeys.js b/lib/scripts/hotkeys.js index d062118fb..9e2b9cb83 100644 --- a/lib/scripts/hotkeys.js +++ b/lib/scripts/hotkeys.js @@ -27,6 +27,9 @@ function Hotkeys() { * (at anchor elements and input elements [type="submit"]) and registers * appropriate shortcuts. * + * Secondly, initialization registers listeners on document to catch all + * keyboard events. + * * @author Marek Sacha */ this.initialize = function() { @@ -39,7 +42,7 @@ function Hotkeys() { t.each(anchors, function(a) { if (a.accessKey != "") { t.addShortcut(t.modifier + '+' + a.accessKey, function() { - window.location.href = a.href; + a.click(); }); } }); @@ -50,12 +53,41 @@ function Hotkeys() { */ var inputs = document.getElementsByTagName("input"); t.each(inputs, function(i) { - if (i.type == "submit") { + if (i.type == "submit" && i.accessKey != "") { t.addShortcut(t.modifier + '+' + i.accessKey, function() { i.click(); }); } }); + + /** + * Lookup all buttons with accesskey and register event - + * perform "click" on a button. + */ + var buttons = document.getElementsByTagName("button"); + t.each(buttons, function(b) { + if (b.accessKey != "") { + t.addShortcut(t.modifier + '+' + b.accessKey, function() { + b.click(); + }); + } + }); + + /** + * Register listeners on document to catch keyboard events. + */ + + addEvent(document,'keyup',function (e) { + return t.onkeyup.call(t,e); + }); + + addEvent(document,'keypress',function (e) { + return t.onkeypress.call(t,e); + }); + + addEvent(document,'keydown',function (e) { + return t.onkeydown.call(t,e); + }); }; /** @@ -247,19 +279,13 @@ function Hotkeys() { }; } -addInitEvent(function(){ +/** + * Init function for hotkeys. Called from js.php, to ensure hotkyes are initialized after toolbar. + * Call of addInitEvent(initializeHotkeys) is unnecessary now. + * + * @author Marek Sacha + */ +function initializeHotkeys() { var hotkeys = new Hotkeys(); hotkeys.initialize(); - - addEvent(document,'keyup',function (e) { - return hotkeys.onkeyup.call(hotkeys,e); - }); - - addEvent(document,'keypress',function (e) { - return hotkeys.onkeypress.call(hotkeys,e); - }); - - addEvent(document,'keydown',function (e) { - return hotkeys.onkeydown.call(hotkeys,e); - }); -}); \ No newline at end of file +} \ No newline at end of file -- cgit v1.2.3