1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- 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;
- }
- });
|