- !(function (moduleName, definition) {
- // Whether to expose Keyvent as an AMD module or to the global object.
- if (typeof define === 'function' && typeof define.amd === 'object') define(definition);
- else this[moduleName] = definition();
-
- })('keyvent', function definition () {
-
- function contextOn (element) {
- var exports = {};
- exports.on = contextOn;
-
- exports.down = function (keys) {
- dispatch(element, 'keydown', keys);
- };
-
- exports.up = function (keys) {
- dispatch(element, 'keyup', keys);
- };
-
- return exports;
- }
-
- function dispatch (element, type, keys) {
- var event = document.createEvent('HTMLEvents');
- event.initEvent(type, true, true);
- keys = normalizeKeys(keys);
- for (var i = 0; i < keys.length; i++) {
- var keyCode = toKeyCode(keys[i]);
- event.which = event.keyCode = keyCode;
- if (MODIFIERS[keyCode]) event[MODIFIERS[keyCode] + 'Key'] = true;
- element.dispatchEvent(event);
- }
- }
-
- function normalizeKeys (keys) {
- if (!keys) return [0];
- if (isString(keys)) return keys.split(' ');
- return [keys];
- }
-
- function isString (object) { return typeof object === 'string'; }
-
- // Borrowed from https://github.com/madrobby/keymaster
- var ALIASES = {
- '⇧': 16, 'shift': 16,
- '⌃': 17, 'ctrl': 17, 'control': 17,
- '⌥': 18, 'alt': 18, 'option': 18,
- '⌘': 91, 'command': 91,
- 'backspace': 8, 'tab': 9,
- 'clear': 12, 'enter': 13,
- 'return': 13, 'esc': 27,
- 'escape': 27, 'space': 32,
- 'left': 37, 'up': 38,
- 'right': 39, 'down': 40,
- 'del': 46, 'delete': 46,
- 'home': 36, 'end': 35,
- 'pageup': 33, 'pagedown': 34,
- ',': 188, '.': 190,
- '/': 191, '`': 192,
- '-': 189, '=': 187,
- ';': 186, '\'': 222,
- '[': 219, ']': 221,
- '\\': 220
- };
- for (key = 1; key < 20; key++) ALIASES['f' + key] = ALIASES['F' + key] = 111 + key;
-
- var MODIFIERS = {
- '16': 'shift',
- '17': 'ctrl',
- '18': 'alt',
- '91': 'meta'
- };
-
- function toKeyCode(key) {
- if (isString(key)) return ALIASES[key] || key.toUpperCase().charCodeAt(0);
- return key;
- }
-
- return contextOn(document);
- });