visualsearch.0.4.0.docs.hotkeys.html Maven / Gradle / Ivy
hotkeys.js Jump To … hotkeys.js
(function() {
var $ = jQuery; // Handle namespaced jQuery
DocumentCloud workspace hotkeys. To tell if a key is currently being pressed,
just ask VS.app.hotkeys.[key]
on keypress
, or ask VS.app.hotkeys.key(e)
on keydown
.
For the most headache-free way to use this utility, check modifier keys,
like shift and command, with VS.app.hotkeys.shift
, and check every other
key with VS.app.hotkeys.key(e) == 'key_name'
.
VS.app.hotkeys = {
Keys that will be mapped to the hotkeys
namespace.
KEYS: {
'16': 'shift',
'17': 'command',
'91': 'command',
'93': 'command',
'224': 'command',
'13': 'enter',
'37': 'left',
'38': 'upArrow',
'39': 'right',
'40': 'downArrow',
'46': 'delete',
'8': 'backspace',
'35': 'end',
'36': 'home',
'9': 'tab',
'188': 'comma'
},
Binds global keydown and keyup events to listen for keys that match this.KEYS
.
initialize : function() {
_.bindAll(this, 'down', 'up', 'blur');
$(document).bind('keydown', this.down);
$(document).bind('keyup', this.up);
$(window).bind('blur', this.blur);
},
On keydown
, turn on all keys that match.
down : function(e) {
var key = this.KEYS[e.which];
if (key) this[key] = true;
},
On keyup
, turn off all keys that match.
up : function(e) {
var key = this.KEYS[e.which];
if (key) this[key] = false;
},
If an input is blurred, all keys need to be turned off, since they are no longer
able to modify the document.
blur : function(e) {
for (var key in this.KEYS) this[this.KEYS[key]] = false;
},
Check a key from an event and return the common english name.
key : function(e) {
return this.KEYS[e.which];
},
Colon is special, since the value is different between browsers.
colon : function(e) {
var charCode = e.which;
return charCode && String.fromCharCode(charCode) == ":";
},
Check a key from an event and match it against any known characters.
The keyCode
is different depending on the event type: keydown
vs. keypress
.
These were determined by looping through every keyCode
and charCode
that
resulted from keydown
and keypress
events and counting what was printable.
printable : function(e) {
var code = e.which;
if (e.type == 'keydown') {
if (code == 32 || // space
(code >= 48 && code <= 90) || // 0-1a-z
(code >= 96 && code <= 111) || // 0-9+-/*.
(code >= 186 && code <= 192) || // ;=,-./^
(code >= 219 && code <= 222)) { // (\)'
return true;
}
} else {
[space]!"#$%&'()*+,-.0-9:;<=>?@A-Z[]^_`a-z{|} and unicode characters
if ((code >= 32 && code <= 126) ||
(code >= 160 && code <= 500) ||
(String.fromCharCode(code) == ":")) {
return true;
}
}
return false;
}
};
})();