initial commit
This commit is contained in:
193
node_modules/keycharm/keycharm.js
generated
vendored
Normal file
193
node_modules/keycharm/keycharm.js
generated
vendored
Normal file
@@ -0,0 +1,193 @@
|
||||
"use strict";
|
||||
/**
|
||||
* Created by Alex on 11/6/2014.
|
||||
*/
|
||||
|
||||
// https://github.com/umdjs/umd/blob/master/returnExports.js#L40-L60
|
||||
// if the module has no dependencies, the above pattern can be simplified to
|
||||
(function (root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define([], factory);
|
||||
} 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();
|
||||
} else {
|
||||
// Browser globals (root is window)
|
||||
root.keycharm = factory();
|
||||
}
|
||||
}(this, function () {
|
||||
|
||||
function keycharm(options) {
|
||||
var preventDefault = options && options.preventDefault || false;
|
||||
|
||||
var container = options && options.container || window;
|
||||
|
||||
var _exportFunctions = {};
|
||||
var _bound = {keydown:{}, keyup:{}};
|
||||
var _keys = {};
|
||||
var i;
|
||||
|
||||
// a - z
|
||||
for (i = 97; i <= 122; i++) {_keys[String.fromCharCode(i)] = {code:65 + (i - 97), shift: false};}
|
||||
// A - Z
|
||||
for (i = 65; i <= 90; i++) {_keys[String.fromCharCode(i)] = {code:i, shift: true};}
|
||||
// 0 - 9
|
||||
for (i = 0; i <= 9; i++) {_keys['' + i] = {code:48 + i, shift: false};}
|
||||
// F1 - F12
|
||||
for (i = 1; i <= 12; i++) {_keys['F' + i] = {code:111 + i, shift: false};}
|
||||
// num0 - num9
|
||||
for (i = 0; i <= 9; i++) {_keys['num' + i] = {code:96 + i, shift: false};}
|
||||
|
||||
// numpad misc
|
||||
_keys['num*'] = {code:106, shift: false};
|
||||
_keys['num+'] = {code:107, shift: false};
|
||||
_keys['num-'] = {code:109, shift: false};
|
||||
_keys['num/'] = {code:111, shift: false};
|
||||
_keys['num.'] = {code:110, shift: false};
|
||||
// arrows
|
||||
_keys['left'] = {code:37, shift: false};
|
||||
_keys['up'] = {code:38, shift: false};
|
||||
_keys['right'] = {code:39, shift: false};
|
||||
_keys['down'] = {code:40, shift: false};
|
||||
// extra keys
|
||||
_keys['space'] = {code:32, shift: false};
|
||||
_keys['enter'] = {code:13, shift: false};
|
||||
_keys['shift'] = {code:16, shift: undefined};
|
||||
_keys['esc'] = {code:27, shift: false};
|
||||
_keys['backspace'] = {code:8, shift: false};
|
||||
_keys['tab'] = {code:9, shift: false};
|
||||
_keys['ctrl'] = {code:17, shift: false};
|
||||
_keys['alt'] = {code:18, shift: false};
|
||||
_keys['delete'] = {code:46, shift: false};
|
||||
_keys['pageup'] = {code:33, shift: false};
|
||||
_keys['pagedown'] = {code:34, shift: false};
|
||||
// symbols
|
||||
_keys['='] = {code:187, shift: false};
|
||||
_keys['-'] = {code:189, shift: false};
|
||||
_keys[']'] = {code:221, shift: false};
|
||||
_keys['['] = {code:219, shift: false};
|
||||
|
||||
|
||||
|
||||
var down = function(event) {handleEvent(event,'keydown');};
|
||||
var up = function(event) {handleEvent(event,'keyup');};
|
||||
|
||||
// handle the actualy bound key with the event
|
||||
var handleEvent = function(event,type) {
|
||||
if (_bound[type][event.keyCode] !== undefined) {
|
||||
var bound = _bound[type][event.keyCode];
|
||||
for (var i = 0; i < bound.length; i++) {
|
||||
if (bound[i].shift === undefined) {
|
||||
bound[i].fn(event);
|
||||
}
|
||||
else if (bound[i].shift == true && event.shiftKey == true) {
|
||||
bound[i].fn(event);
|
||||
}
|
||||
else if (bound[i].shift == false && event.shiftKey == false) {
|
||||
bound[i].fn(event);
|
||||
}
|
||||
}
|
||||
|
||||
if (preventDefault == true) {
|
||||
event.preventDefault();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// bind a key to a callback
|
||||
_exportFunctions.bind = function(key, callback, type) {
|
||||
if (type === undefined) {
|
||||
type = 'keydown';
|
||||
}
|
||||
if (_keys[key] === undefined) {
|
||||
throw new Error("unsupported key: " + key);
|
||||
}
|
||||
if (_bound[type][_keys[key].code] === undefined) {
|
||||
_bound[type][_keys[key].code] = [];
|
||||
}
|
||||
_bound[type][_keys[key].code].push({fn:callback, shift:_keys[key].shift});
|
||||
};
|
||||
|
||||
|
||||
// bind all keys to a call back (demo purposes)
|
||||
_exportFunctions.bindAll = function(callback, type) {
|
||||
if (type === undefined) {
|
||||
type = 'keydown';
|
||||
}
|
||||
for (var key in _keys) {
|
||||
if (_keys.hasOwnProperty(key)) {
|
||||
_exportFunctions.bind(key,callback,type);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// get the key label from an event
|
||||
_exportFunctions.getKey = function(event) {
|
||||
for (var key in _keys) {
|
||||
if (_keys.hasOwnProperty(key)) {
|
||||
if (event.shiftKey == true && _keys[key].shift == true && event.keyCode == _keys[key].code) {
|
||||
return key;
|
||||
}
|
||||
else if (event.shiftKey == false && _keys[key].shift == false && event.keyCode == _keys[key].code) {
|
||||
return key;
|
||||
}
|
||||
else if (event.keyCode == _keys[key].code && key == 'shift') {
|
||||
return key;
|
||||
}
|
||||
}
|
||||
}
|
||||
return "unknown key, currently not supported";
|
||||
};
|
||||
|
||||
// unbind either a specific callback from a key or all of them (by leaving callback undefined)
|
||||
_exportFunctions.unbind = function(key, callback, type) {
|
||||
if (type === undefined) {
|
||||
type = 'keydown';
|
||||
}
|
||||
if (_keys[key] === undefined) {
|
||||
throw new Error("unsupported key: " + key);
|
||||
}
|
||||
if (callback !== undefined) {
|
||||
var newBindings = [];
|
||||
var bound = _bound[type][_keys[key].code];
|
||||
if (bound !== undefined) {
|
||||
for (var i = 0; i < bound.length; i++) {
|
||||
if (!(bound[i].fn == callback && bound[i].shift == _keys[key].shift)) {
|
||||
newBindings.push(_bound[type][_keys[key].code][i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
_bound[type][_keys[key].code] = newBindings;
|
||||
}
|
||||
else {
|
||||
_bound[type][_keys[key].code] = [];
|
||||
}
|
||||
};
|
||||
|
||||
// reset all bound variables.
|
||||
_exportFunctions.reset = function() {
|
||||
_bound = {keydown:{}, keyup:{}};
|
||||
};
|
||||
|
||||
// unbind all listeners and reset all variables.
|
||||
_exportFunctions.destroy = function() {
|
||||
_bound = {keydown:{}, keyup:{}};
|
||||
container.removeEventListener('keydown', down, true);
|
||||
container.removeEventListener('keyup', up, true);
|
||||
};
|
||||
|
||||
// create listeners.
|
||||
container.addEventListener('keydown',down,true);
|
||||
container.addEventListener('keyup',up,true);
|
||||
|
||||
// return the public functions.
|
||||
return _exportFunctions;
|
||||
}
|
||||
|
||||
return keycharm;
|
||||
}));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user