define(function(require, exports, module) {
|
|
var keymap = require('./keymap');
|
|
|
|
var CTRL_MASK = 0x1000;
|
|
var ALT_MASK = 0x2000;
|
|
var SHIFT_MASK = 0x4000;
|
|
|
|
function hash(unknown) {
|
|
if (typeof(unknown) == 'string') {
|
|
return hashKeyExpression(unknown);
|
|
}
|
|
return hashKeyEvent(unknown);
|
|
}
|
|
function is(a, b) {
|
|
return a && b && hash(a) == hash(b);
|
|
}
|
|
exports.hash = hash;
|
|
exports.is = is;
|
|
|
|
|
|
function hashKeyEvent(keyEvent) {
|
|
var hashCode = 0;
|
|
if (keyEvent.ctrlKey || keyEvent.metaKey) {
|
|
hashCode |= CTRL_MASK;
|
|
}
|
|
if (keyEvent.altKey) {
|
|
hashCode |= ALT_MASK;
|
|
}
|
|
if (keyEvent.shiftKey) {
|
|
hashCode |= SHIFT_MASK;
|
|
}
|
|
// Shift, Control, Alt KeyCode ignored.
|
|
if ([16, 17, 18, 91].indexOf(keyEvent.keyCode) == -1) {
|
|
hashCode |= keyEvent.keyCode;
|
|
}
|
|
return hashCode;
|
|
}
|
|
|
|
function hashKeyExpression(keyExpression) {
|
|
var hashCode = 0;
|
|
keyExpression.toLowerCase().split(/\s*\+\s*/).forEach(function(name) {
|
|
switch(name) {
|
|
case 'ctrl':
|
|
case 'cmd':
|
|
hashCode |= CTRL_MASK;
|
|
break;
|
|
case 'alt':
|
|
hashCode |= ALT_MASK;
|
|
break;
|
|
case 'shift':
|
|
hashCode |= SHIFT_MASK;
|
|
break;
|
|
default:
|
|
hashCode |= keymap[name];
|
|
}
|
|
});
|
|
return hashCode;
|
|
}
|
|
});
|