Skip to content

Commit

Permalink
Reimplementation of Accesskeys in javascript (FS#1809), toolbar acces…
Browse files Browse the repository at this point in the history
…skyes fix.
  • Loading branch information
Marek Sacha authored and splitbrain committed May 8, 2010
1 parent 7ea8e59 commit 4062d3d
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 16 deletions.
2 changes: 2 additions & 0 deletions lib/exe/js.php
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ function js_out(){
}
js_runonstart('scrollToMarker()');
js_runonstart('focusMarker()');
// init hotkeys - must have been done after init of toolbar
js_runonstart('initializeHotkeys()');

// end output buffering and get contents
$js = ob_get_contents();
Expand Down
58 changes: 42 additions & 16 deletions lib/scripts/hotkeys.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 <sachamar@fel.cvut.cz>
*/
this.initialize = function() {
Expand All @@ -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();
});
}
});
Expand All @@ -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);
});
};

/**
Expand Down Expand Up @@ -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 <sachamar@fel.cvut.cz>
*/
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);
});
});
}

0 comments on commit 4062d3d

Please sign in to comment.