123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- (function (root, factory) {
- if (typeof define === 'function' && define.amd) {
- // AMD. Register as an anonymous module unless amdModuleId is set
- define('simple-hotkeys', ["jquery","simple-module"], function ($, SimpleModule) {
- return (root['hotkeys'] = factory($, SimpleModule));
- });
- } else if (typeof exports === 'object') {
- // Node. Does not work with strict CommonJS, but
- // only CommonJS-like environments that support module.exports,
- // like Node.
- module.exports = factory(require("jquery"),require("simple-module"));
- } else {
- root.simple = root.simple || {};
- root.simple['hotkeys'] = factory(jQuery,SimpleModule);
- }
- }(this, function ($, SimpleModule) {
- var Hotkeys, hotkeys,
- extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
- hasProp = {}.hasOwnProperty;
- Hotkeys = (function(superClass) {
- extend(Hotkeys, superClass);
- function Hotkeys() {
- return Hotkeys.__super__.constructor.apply(this, arguments);
- }
- Hotkeys.count = 0;
- Hotkeys.keyNameMap = {
- 8: "Backspace",
- 9: "Tab",
- 13: "Enter",
- 16: "Shift",
- 17: "Control",
- 18: "Alt",
- 19: "Pause",
- 20: "CapsLock",
- 27: "Esc",
- 32: "Spacebar",
- 33: "PageUp",
- 34: "PageDown",
- 35: "End",
- 36: "Home",
- 37: "Left",
- 38: "Up",
- 39: "Right",
- 40: "Down",
- 45: "Insert",
- 46: "Del",
- 91: "Meta",
- 93: "Meta",
- 48: "0",
- 49: "1",
- 50: "2",
- 51: "3",
- 52: "4",
- 53: "5",
- 54: "6",
- 55: "7",
- 56: "8",
- 57: "9",
- 65: "A",
- 66: "B",
- 67: "C",
- 68: "D",
- 69: "E",
- 70: "F",
- 71: "G",
- 72: "H",
- 73: "I",
- 74: "J",
- 75: "K",
- 76: "L",
- 77: "M",
- 78: "N",
- 79: "O",
- 80: "P",
- 81: "Q",
- 82: "R",
- 83: "S",
- 84: "T",
- 85: "U",
- 86: "V",
- 87: "W",
- 88: "X",
- 89: "Y",
- 90: "Z",
- 96: "0",
- 97: "1",
- 98: "2",
- 99: "3",
- 100: "4",
- 101: "5",
- 102: "6",
- 103: "7",
- 104: "8",
- 105: "9",
- 106: "Multiply",
- 107: "Add",
- 109: "Subtract",
- 110: "Decimal",
- 111: "Divide",
- 112: "F1",
- 113: "F2",
- 114: "F3",
- 115: "F4",
- 116: "F5",
- 117: "F6",
- 118: "F7",
- 119: "F8",
- 120: "F9",
- 121: "F10",
- 122: "F11",
- 123: "F12",
- 124: "F13",
- 125: "F14",
- 126: "F15",
- 127: "F16",
- 128: "F17",
- 129: "F18",
- 130: "F19",
- 131: "F20",
- 132: "F21",
- 133: "F22",
- 134: "F23",
- 135: "F24",
- 59: ";",
- 61: "=",
- 186: ";",
- 187: "=",
- 188: ",",
- 190: ".",
- 191: "/",
- 192: "`",
- 219: "[",
- 220: "\\",
- 221: "]",
- 222: "'"
- };
- Hotkeys.aliases = {
- "escape": "esc",
- "delete": "del",
- "return": "enter",
- "ctrl": "control",
- "space": "spacebar",
- "ins": "insert",
- "cmd": "meta",
- "command": "meta",
- "wins": "meta",
- "windows": "meta"
- };
- Hotkeys.normalize = function(shortcut) {
- var i, j, key, keyname, keys, len;
- keys = shortcut.toLowerCase().replace(/\s+/gi, "").split("+");
- for (i = j = 0, len = keys.length; j < len; i = ++j) {
- key = keys[i];
- keys[i] = this.aliases[key] || key;
- }
- keyname = keys.pop();
- keys.sort().push(keyname);
- return keys.join("_");
- };
- Hotkeys.prototype.opts = {
- el: document
- };
- Hotkeys.prototype._init = function() {
- this.id = ++this.constructor.count;
- this._map = {};
- this._delegate = typeof this.opts.el === "string" ? document : this.opts.el;
- return $(this._delegate).on("keydown.simple-hotkeys-" + this.id, this.opts.el, (function(_this) {
- return function(e) {
- var ref;
- return (ref = _this._getHander(e)) != null ? ref.call(_this, e) : void 0;
- };
- })(this));
- };
- Hotkeys.prototype._getHander = function(e) {
- var keyname, shortcut;
- if (!(keyname = this.constructor.keyNameMap[e.which])) {
- return;
- }
- shortcut = "";
- if (e.altKey) {
- shortcut += "alt_";
- }
- if (e.ctrlKey) {
- shortcut += "control_";
- }
- if (e.metaKey) {
- shortcut += "meta_";
- }
- if (e.shiftKey) {
- shortcut += "shift_";
- }
- shortcut += keyname.toLowerCase();
- return this._map[shortcut];
- };
- Hotkeys.prototype.respondTo = function(subject) {
- if (typeof subject === 'string') {
- return this._map[this.constructor.normalize(subject)] != null;
- } else {
- return this._getHander(subject) != null;
- }
- };
- Hotkeys.prototype.add = function(shortcut, handler) {
- this._map[this.constructor.normalize(shortcut)] = handler;
- return this;
- };
- Hotkeys.prototype.remove = function(shortcut) {
- delete this._map[this.constructor.normalize(shortcut)];
- return this;
- };
- Hotkeys.prototype.destroy = function() {
- $(this._delegate).off(".simple-hotkeys-" + this.id);
- this._map = {};
- return this;
- };
- return Hotkeys;
- })(SimpleModule);
- hotkeys = function(opts) {
- return new Hotkeys(opts);
- };
- return hotkeys;
- }));
|