define(function () {
|
|
|
|
'use strict';
|
|
|
|
var shortcut = {};
|
|
|
|
shortcut._allShortcuts = [];
|
|
|
|
shortcut.add = function (modifiersString, key, callback) {
|
|
// Parse the modifiers. For example "Ctrl+Alt" will become
|
|
// {'ctrlKey': true, 'altKey': true, 'shiftKey': false}
|
|
var modifiersList = modifiersString.toLowerCase().split("+");
|
|
var modifiers = {
|
|
'ctrlKey': modifiersList.indexOf('ctrl') >= 0,
|
|
'altKey': modifiersList.indexOf('alt') >= 0,
|
|
'shiftKey': modifiersList.indexOf('shift') >= 0
|
|
};
|
|
|
|
this._allShortcuts.push({
|
|
'modifiers': modifiers,
|
|
'key': key.toLowerCase(),
|
|
'callback': callback
|
|
});
|
|
};
|
|
|
|
document.onkeypress = function (e) {
|
|
e = e || window.event;
|
|
|
|
var modifiers = {
|
|
'ctrlKey': e.ctrlKey,
|
|
'altKey': e.altKey,
|
|
'shiftKey': e.shiftKey
|
|
};
|
|
|
|
// Obtain the key
|
|
var charCode;
|
|
if (typeof e.which == "number") {
|
|
charCode = e.which;
|
|
} else {
|
|
charCode = e.keyCode;
|
|
}
|
|
var key = String.fromCharCode(charCode).toLowerCase();
|
|
|
|
// Search for a matching shortcut
|
|
for (var i = 0; i < shortcut._allShortcuts.length; i += 1) {
|
|
var currentShortcut = shortcut._allShortcuts[i];
|
|
|
|
var match = currentShortcut.key == key &&
|
|
currentShortcut.modifiers.ctrlKey == modifiers.ctrlKey &&
|
|
currentShortcut.modifiers.altKey == modifiers.altKey &&
|
|
currentShortcut.modifiers.shiftKey == modifiers.shiftKey;
|
|
if (match) {
|
|
currentShortcut.callback();
|
|
return;
|
|
}
|
|
}
|
|
};
|
|
|
|
return shortcut;
|
|
});
|