2016-10-03 07:29:33 -08:00
|
|
|
|
/**
|
|
|
|
|
|
* Keyboard event keyCodes have proven to be really unreliable.
|
|
|
|
|
|
* This util function will cover most of the edge cases where
|
2016-10-10 02:26:47 -08:00
|
|
|
|
* String.fromCharCode() doesn't work.
|
2016-10-03 07:29:33 -08:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
const _toAscii = {
|
2016-10-12 17:35:44 -08:00
|
|
|
|
188: '44',
|
|
|
|
|
|
109: '45',
|
|
|
|
|
|
190: '46',
|
|
|
|
|
|
191: '47',
|
|
|
|
|
|
192: '96',
|
|
|
|
|
|
220: '92',
|
|
|
|
|
|
222: '39',
|
|
|
|
|
|
221: '93',
|
|
|
|
|
|
219: '91',
|
|
|
|
|
|
173: '45',
|
|
|
|
|
|
187: '61', // IE Key codes
|
|
|
|
|
|
186: '59', // IE Key codes
|
2017-09-10 05:35:10 -08:00
|
|
|
|
189: '45' // IE Key codes
|
2016-10-03 07:29:33 -08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const _shiftUps = {
|
2016-10-12 17:35:44 -08:00
|
|
|
|
96: '~',
|
|
|
|
|
|
49: '!',
|
|
|
|
|
|
50: '@',
|
|
|
|
|
|
51: '#',
|
|
|
|
|
|
52: '$',
|
|
|
|
|
|
53: '%',
|
|
|
|
|
|
54: '^',
|
|
|
|
|
|
55: '&',
|
|
|
|
|
|
56: '*',
|
|
|
|
|
|
57: '(',
|
|
|
|
|
|
48: ')',
|
|
|
|
|
|
45: '_',
|
|
|
|
|
|
61: '+',
|
|
|
|
|
|
91: '{',
|
|
|
|
|
|
93: '}',
|
|
|
|
|
|
92: '|',
|
|
|
|
|
|
59: ':',
|
2017-09-10 05:35:10 -08:00
|
|
|
|
39: "'",
|
2016-10-12 17:35:44 -08:00
|
|
|
|
44: '<',
|
|
|
|
|
|
46: '>',
|
|
|
|
|
|
47: '?'
|
2016-10-03 07:29:33 -08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const _arrowKeys = {
|
2016-10-12 17:35:44 -08:00
|
|
|
|
38: '[A',
|
|
|
|
|
|
40: '[B',
|
|
|
|
|
|
39: '[C',
|
|
|
|
|
|
37: '[D'
|
2016-10-03 07:29:33 -08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* This fn takes a keyboard event and returns
|
|
|
|
|
|
* the character that was pressed. This fn
|
2016-10-10 02:26:47 -08:00
|
|
|
|
* purposely doesn't take into account if the alt/meta
|
2016-10-03 07:29:33 -08:00
|
|
|
|
* key was pressed.
|
|
|
|
|
|
*/
|
|
|
|
|
|
export default function fromCharCode(e) {
|
|
|
|
|
|
let code = String(e.which);
|
|
|
|
|
|
|
|
|
|
|
|
if ({}.hasOwnProperty.call(_arrowKeys, code)) {
|
|
|
|
|
|
return _arrowKeys[code];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if ({}.hasOwnProperty.call(_toAscii, code)) {
|
|
|
|
|
|
code = _toAscii[code];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const char = String.fromCharCode(code);
|
|
|
|
|
|
if (e.shiftKey) {
|
|
|
|
|
|
if ({}.hasOwnProperty.call(_shiftUps, code)) {
|
|
|
|
|
|
return _shiftUps[code];
|
|
|
|
|
|
}
|
|
|
|
|
|
return char.toUpperCase();
|
|
|
|
|
|
}
|
|
|
|
|
|
return char.toLowerCase();
|
|
|
|
|
|
}
|