New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@pluginjs/keyboard

Package Overview
Dependencies
Maintainers
2
Versions
54
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@pluginjs/keyboard - npm Package Compare versions

Comparing version 0.2.11 to 0.2.13

122

dist/keyboard.esm.js

@@ -155,115 +155,2 @@ let Emitter = class Emitter {

var asyncGenerator = function () {
function AwaitValue(value) {
this.value = value;
}
function AsyncGenerator(gen) {
var front, back;
function send(key, arg) {
return new Promise(function (resolve, reject) {
var request = {
key: key,
arg: arg,
resolve: resolve,
reject: reject,
next: null
};
if (back) {
back = back.next = request;
} else {
front = back = request;
resume(key, arg);
}
});
}
function resume(key, arg) {
try {
var result = gen[key](arg);
var value = result.value;
if (value instanceof AwaitValue) {
Promise.resolve(value.value).then(function (arg) {
resume("next", arg);
}, function (arg) {
resume("throw", arg);
});
} else {
settle(result.done ? "return" : "normal", result.value);
}
} catch (err) {
settle("throw", err);
}
}
function settle(type, value) {
switch (type) {
case "return":
front.resolve({
value: value,
done: true
});
break;
case "throw":
front.reject(value);
break;
default:
front.resolve({
value: value,
done: false
});
break;
}
front = front.next;
if (front) {
resume(front.key, front.arg);
} else {
back = null;
}
}
this._invoke = send;
if (typeof gen.return !== "function") {
this.return = undefined;
}
}
if (typeof Symbol === "function" && Symbol.asyncIterator) {
AsyncGenerator.prototype[Symbol.asyncIterator] = function () {
return this;
};
}
AsyncGenerator.prototype.next = function (arg) {
return this._invoke("next", arg);
};
AsyncGenerator.prototype.throw = function (arg) {
return this._invoke("throw", arg);
};
AsyncGenerator.prototype.return = function (arg) {
return this._invoke("return", arg);
};
return {
wrap: function (fn) {
return function () {
return new AsyncGenerator(fn.apply(this, arguments));
};
},
await: function (value) {
return new AwaitValue(value);
}
};
}();
/*eslint-disable */

@@ -412,4 +299,4 @@ /* Credit to http://is.js.org MIT */

const Each = (obj, callback) => {
let length,
i = 0;
let i = 0,
length;

@@ -428,7 +315,2 @@ if (is.array(obj)) {

// 解析 HTML/SVG/XML 字符串
/* eslint object-property-newline: 'off' */

@@ -435,0 +317,0 @@ const MAP_BY_CODE = {

1421

dist/keyboard.js
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global['@pluginjs/keyboard'] = {})));
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global['@pluginjs/keyboard'] = {})));
}(this, (function (exports) { 'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
var classCallCheck = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
};
var createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
var slicedToArray = function () {
function sliceIterator(arr, i) {
var _arr = [];
var _n = true;
var _d = false;
var _e = undefined;
var asyncGenerator = function () {
function AwaitValue(value) {
this.value = value;
}
function AsyncGenerator(gen) {
var front, back;
function send(key, arg) {
return new Promise(function (resolve, reject) {
var request = {
key: key,
arg: arg,
resolve: resolve,
reject: reject,
next: null
};
if (back) {
back = back.next = request;
} else {
front = back = request;
resume(key, arg);
}
});
}
function resume(key, arg) {
try {
var result = gen[key](arg);
var value = result.value;
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
_arr.push(_s.value);
if (value instanceof AwaitValue) {
Promise.resolve(value.value).then(function (arg) {
resume("next", arg);
}, function (arg) {
resume("throw", arg);
});
} else {
settle(result.done ? "return" : "normal", result.value);
if (i && _arr.length === i) break;
}
} catch (err) {
settle("throw", err);
_d = true;
_e = err;
} finally {
try {
if (!_n && _i["return"]) _i["return"]();
} finally {
if (_d) throw _e;
}
}
return _arr;
}
function settle(type, value) {
switch (type) {
case "return":
front.resolve({
value: value,
done: true
});
break;
case "throw":
front.reject(value);
break;
default:
front.resolve({
value: value,
done: false
});
break;
}
front = front.next;
if (front) {
resume(front.key, front.arg);
return function (arr, i) {
if (Array.isArray(arr)) {
return arr;
} else if (Symbol.iterator in Object(arr)) {
return sliceIterator(arr, i);
} else {
back = null;
throw new TypeError("Invalid attempt to destructure non-iterable instance");
}
}
this._invoke = send;
if (typeof gen.return !== "function") {
this.return = undefined;
}
}
if (typeof Symbol === "function" && Symbol.asyncIterator) {
AsyncGenerator.prototype[Symbol.asyncIterator] = function () {
return this;
};
}
}();
AsyncGenerator.prototype.next = function (arg) {
return this._invoke("next", arg);
};
var Emitter = function () {
function Emitter() {
classCallCheck(this, Emitter);
AsyncGenerator.prototype.throw = function (arg) {
return this._invoke("throw", arg);
};
AsyncGenerator.prototype.return = function (arg) {
return this._invoke("return", arg);
};
return {
wrap: function (fn) {
return function () {
return new AsyncGenerator(fn.apply(this, arguments));
};
},
await: function (value) {
return new AwaitValue(value);
this.listeners = {};
this.sortedListeners = {};
}
};
}();
createClass(Emitter, [{
key: 'emit',
value: function emit(event) {
var listeners = this.getListeners(event);
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
for (var i = 0; i < listeners.length; i++) {
var context = null;
if (listeners[i].context !== null) {
context = listeners[i].context;
} else {
context = { type: event };
}
var classCallCheck = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
};
var result = listeners[i].listener.apply(context, args);
var createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
if (result === false) {
return false;
}
}
return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
var slicedToArray = function () {
function sliceIterator(arr, i) {
var _arr = [];
var _n = true;
var _d = false;
var _e = undefined;
try {
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
_arr.push(_s.value);
if (i && _arr.length === i) break;
return true;
}
} catch (err) {
_d = true;
_e = err;
} finally {
try {
if (!_n && _i["return"]) _i["return"]();
} finally {
if (_d) throw _e;
}, {
key: 'on',
value: function on(event, listener, context, priority) {
return this.addListener(event, listener, context, priority);
}
}
return _arr;
}
return function (arr, i) {
if (Array.isArray(arr)) {
return arr;
} else if (Symbol.iterator in Object(arr)) {
return sliceIterator(arr, i);
} else {
throw new TypeError("Invalid attempt to destructure non-iterable instance");
}
};
}();
var Emitter = function () {
function Emitter() {
classCallCheck(this, Emitter);
this.listeners = {};
this.sortedListeners = {};
}
createClass(Emitter, [{
key: 'emit',
value: function emit(event) {
var listeners = this.getListeners(event);
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}, {
key: 'once',
value: function once(event, listener, context, priority) {
return this.addOneTimeListener(event, listener, context, priority);
}
for (var i = 0; i < listeners.length; i++) {
var context = null;
if (listeners[i].context !== null) {
context = listeners[i].context;
} else {
context = { type: event };
}, {
key: 'off',
value: function off(event, listener) {
if (typeof listener === 'undefined') {
return this.removeAllListeners(event);
}
var result = listeners[i].listener.apply(context, args);
if (result === false) {
return false;
}
return this.removeListener(event, listener);
}
return true;
}
}, {
key: 'on',
value: function on(event, listener, context, priority) {
return this.addListener(event, listener, context, priority);
}
}, {
key: 'once',
value: function once(event, listener, context, priority) {
return this.addOneTimeListener(event, listener, context, priority);
}
}, {
key: 'off',
value: function off(event, listener) {
if (typeof listener === 'undefined') {
return this.removeAllListeners(event);
}
/* Lower numbers correspond with earlier execution,
/* and functions with the same priority are executed
/* in the order in which they were added to the action. */
return this.removeListener(event, listener);
}
}, {
key: 'addListener',
value: function addListener(event, listener) {
var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var priority = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;
/* Lower numbers correspond with earlier execution,
/* and functions with the same priority are executed
/* in the order in which they were added to the action. */
this.ensureListener(listener);
}, {
key: 'addListener',
value: function addListener(event, listener) {
var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var priority = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;
if (!this.listeners[event]) {
this.listeners[event] = {};
}
if (!this.listeners[event][priority]) {
this.listeners[event][priority] = [];
}
this.ensureListener(listener);
this.listeners[event][priority].push({
context: context,
listener: listener
});
this.clearSortedListeners(event);
if (!this.listeners[event]) {
this.listeners[event] = {};
return this;
}
if (!this.listeners[event][priority]) {
this.listeners[event][priority] = [];
}
}, {
key: 'addOneTimeListener',
value: function addOneTimeListener(event, listener, context) {
var priority = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;
this.listeners[event][priority].push({
context: context,
listener: listener
});
this.clearSortedListeners(event);
var that = this;
function wrapper() {
that.removeListener(event, wrapper);
return this;
}
}, {
key: 'addOneTimeListener',
value: function addOneTimeListener(event, listener, context) {
var priority = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;
return listener.apply(undefined, arguments);
}
var that = this;
function wrapper() {
that.removeListener(event, wrapper);
this.addListener(event, wrapper, context, priority);
return listener.apply(undefined, arguments);
return this;
}
}, {
key: 'removeListener',
value: function removeListener(event, listener) {
this.clearSortedListeners(event);
var listeners = this.hasListeners(event) ? this.listeners[event] : [];
this.addListener(event, wrapper, context, priority);
for (var priority in listeners) {
if (Object.prototype.hasOwnProperty.call(listeners, priority)) {
listeners[priority] = listeners[priority].filter(function (value) {
return value.listener !== listener;
});
return this;
}
}, {
key: 'removeListener',
value: function removeListener(event, listener) {
this.clearSortedListeners(event);
var listeners = this.hasListeners(event) ? this.listeners[event] : [];
for (var priority in listeners) {
if (Object.prototype.hasOwnProperty.call(listeners, priority)) {
listeners[priority] = listeners[priority].filter(function (value) {
return value.listener !== listener;
});
if (listeners[priority].length === 0) {
delete listeners[priority];
if (listeners[priority].length === 0) {
delete listeners[priority];
}
}
}
}
this.listeners[event] = listeners;
this.listeners[event] = listeners;
return this;
}
}, {
key: 'removeAllListeners',
value: function removeAllListeners(event) {
this.clearSortedListeners(event);
if (this.hasListeners(event)) {
delete this.listeners[event];
return this;
}
}, {
key: 'removeAllListeners',
value: function removeAllListeners(event) {
this.clearSortedListeners(event);
return this;
}
}, {
key: 'ensureListener',
value: function ensureListener(listener) {
var type = typeof listener === 'undefined' ? 'undefined' : _typeof(listener);
if (type === 'function') {
return listener;
if (this.hasListeners(event)) {
delete this.listeners[event];
}
return this;
}
throw new TypeError('Listeners should be function or closure. Received type: ' + type);
}
}, {
key: 'hasListeners',
value: function hasListeners(event) {
if (!this.listeners[event] || Object.keys(this.listeners[event]).length === 0) {
return false;
}, {
key: 'ensureListener',
value: function ensureListener(listener) {
var type = typeof listener === 'undefined' ? 'undefined' : _typeof(listener);
if (type === 'function') {
return listener;
}
throw new TypeError('Listeners should be function or closure. Received type: ' + type);
}
}, {
key: 'hasListeners',
value: function hasListeners(event) {
if (!this.listeners[event] || Object.keys(this.listeners[event]).length === 0) {
return false;
}
return true;
}
}, {
key: 'getListeners',
value: function getListeners(event) {
if (!this.sortedListeners.hasOwnProperty(event)) {
this.sortedListeners[event] = this.getSortedListeners(event);
return true;
}
}, {
key: 'getListeners',
value: function getListeners(event) {
if (!this.sortedListeners.hasOwnProperty(event)) {
this.sortedListeners[event] = this.getSortedListeners(event);
}
return this.sortedListeners[event];
}
}, {
key: 'getSortedListeners',
value: function getSortedListeners(event) {
if (!this.hasListeners(event)) {
return [];
return this.sortedListeners[event];
}
}, {
key: 'getSortedListeners',
value: function getSortedListeners(event) {
if (!this.hasListeners(event)) {
return [];
}
var listeners = this.listeners[event];
var listeners = this.listeners[event];
var priorities = Object.keys(listeners);
priorities.sort(function (a, b) {
return a - b;
});
var priorities = Object.keys(listeners);
priorities.sort(function (a, b) {
return a - b;
});
var sortedlisteners = [];
for (var i = 0; i < priorities.length; i++) {
sortedlisteners = sortedlisteners.concat(listeners[priorities[i]]);
}
return sortedlisteners;
}
}, {
key: 'clearSortedListeners',
value: function clearSortedListeners(event) {
delete this.sortedListeners[event];
}
}]);
return Emitter;
}();
var asyncGenerator$1 = function () {
function AwaitValue(value) {
this.value = value;
}
function AsyncGenerator(gen) {
var front, back;
function send(key, arg) {
return new Promise(function (resolve, reject) {
var request = {
key: key,
arg: arg,
resolve: resolve,
reject: reject,
next: null
};
if (back) {
back = back.next = request;
} else {
front = back = request;
resume(key, arg);
var sortedlisteners = [];
for (var i = 0; i < priorities.length; i++) {
sortedlisteners = sortedlisteners.concat(listeners[priorities[i]]);
}
});
}
function resume(key, arg) {
try {
var result = gen[key](arg);
var value = result.value;
if (value instanceof AwaitValue) {
Promise.resolve(value.value).then(function (arg) {
resume("next", arg);
}, function (arg) {
resume("throw", arg);
});
} else {
settle(result.done ? "return" : "normal", result.value);
}
} catch (err) {
settle("throw", err);
return sortedlisteners;
}
}
function settle(type, value) {
switch (type) {
case "return":
front.resolve({
value: value,
done: true
});
break;
case "throw":
front.reject(value);
break;
default:
front.resolve({
value: value,
done: false
});
break;
}, {
key: 'clearSortedListeners',
value: function clearSortedListeners(event) {
delete this.sortedListeners[event];
}
}]);
return Emitter;
}();
front = front.next;
/*eslint-disable */
/* Credit to http://is.js.org MIT */
var toString = Object.prototype.toString;
var is = {
// Type checks
/* -------------------------------------------------------------------------- */
// is a given value Arguments?
arguments: function _arguments(value) {
// fallback check is for IE
return toString.call(value) === '[object Arguments]' || value != null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && 'callee' in value;
},
if (front) {
resume(front.key, front.arg);
} else {
back = null;
// is a given value Array?
array: function array(val) {
if (Array.isArray) {
return Array.isArray(val);
}
}
return toString.call(val) === '[object Array]';
},
this._invoke = send;
// is a given value Boolean?
boolean: function boolean(val) {
return val === true || val === false || toString.call(val) === '[object Boolean]';
},
if (typeof gen.return !== "function") {
this.return = undefined;
}
}
// is a given value Char?
char: function char(val) {
return this.string(val) && val.length === 1;
},
if (typeof Symbol === "function" && Symbol.asyncIterator) {
AsyncGenerator.prototype[Symbol.asyncIterator] = function () {
return this;
};
}
// is a given value Date Object?
date: function date(value) {
return toString.call(value) === '[object Date]';
},
AsyncGenerator.prototype.next = function (arg) {
return this._invoke("next", arg);
};
// is a given object a DOM node?
domNode: function domNode(object) {
return this.object(object) && object.nodeType > 0;
},
AsyncGenerator.prototype.throw = function (arg) {
return this._invoke("throw", arg);
};
// is a given value Error object?
error: function error(val) {
return toString.call(val) === '[object Error]';
},
AsyncGenerator.prototype.return = function (arg) {
return this._invoke("return", arg);
};
// is a given value function?
function: function _function(val) {
// fallback check is for IE
return toString.call(val) === '[object Function]' || typeof val === 'function';
},
return {
wrap: function wrap(fn) {
return function () {
return new AsyncGenerator(fn.apply(this, arguments));
};
// is given value a pure JSON object?
json: function json(value) {
return toString.call(value) === '[object Object]';
},
await: function _await(value) {
return new AwaitValue(value);
}
};
}();
/*eslint-disable */
/* Credit to http://is.js.org MIT */
var toString = Object.prototype.toString;
var is = {
// Type checks
/* -------------------------------------------------------------------------- */
// is a given value Arguments?
arguments: function _arguments(value) {
// fallback check is for IE
return toString.call(value) === '[object Arguments]' || value != null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && 'callee' in value;
},
// is a given value NaN?
nan: function nan(val) {
// NaN is number :) Also it is the only value which does not equal itself
return val !== val;
},
// is a given value Array?
array: function array(val) {
if (Array.isArray) {
return Array.isArray(val);
}
return toString.call(val) === '[object Array]';
},
// is a given value null?
null: function _null(val) {
return val === null;
},
// is a given value Boolean?
boolean: function boolean(val) {
return val === true || val === false || toString.call(val) === '[object Boolean]';
},
// is a given value number?
number: function number(val) {
return !this.nan(val) && toString.call(val) === '[object Number]';
},
// is a given value Char?
char: function char(val) {
return this.string(val) && val.length === 1;
},
// is a given value object?
object: function object(val) {
return Object(val) === val;
},
// is a given value Date Object?
date: function date(value) {
return toString.call(value) === '[object Date]';
},
// is a given value empty object?
emptyObject: function emptyObject(val) {
return this.object(val) && Object.getOwnPropertyNames(val).length == 0;
},
// is a given object a DOM node?
domNode: function domNode(object) {
return this.object(object) && object.nodeType > 0;
},
// is a given value RegExp?
regexp: function regexp(val) {
return toString.call(val) === '[object RegExp]';
},
// is a given value Error object?
error: function error(val) {
return toString.call(val) === '[object Error]';
},
// is a given value String?
string: function string(val) {
return typeof val === 'string' || toString.call(val) === '[object String]';
},
// is a given value function?
function: function _function(val) {
// fallback check is for IE
return toString.call(val) === '[object Function]' || typeof val === 'function';
},
// is a given value undefined?
undefined: function undefined(val) {
return val === void 0;
},
// is given value a pure JSON object?
json: function json(value) {
return toString.call(value) === '[object Object]';
},
// Arithmetic checks
/* -------------------------------------------------------------------------- */
// is a given value numeric?
numeric: function numeric(n) {
return (this.number(n) || this.string(n)) && !this.nan(n - parseFloat(n));
},
// is a given value NaN?
nan: function nan(val) {
// NaN is number :) Also it is the only value which does not equal itself
return val !== val;
},
// is a given number percentage?
percentage: function percentage(n) {
return typeof n === 'string' && n.indexOf('%') !== -1;
},
// is a given value null?
null: function _null(val) {
return val === null;
},
// is a given number decimal?
decimal: function decimal(n) {
return this.number(n) && n % 1 !== 0;
},
// is a given value number?
number: function number(val) {
return !this.nan(val) && toString.call(val) === '[object Number]';
},
// is a given number finite?
finite: function finite(n) {
if (isFinite) {
return isFinite(n);
}
return !this.infinite(n) && !this.nan(n);
},
// is a given value object?
object: function object(val) {
return Object(val) === val;
},
// is a given number infinite?
infinite: function infinite(n) {
return n === Infinity || n === -Infinity;
},
// is a given value empty object?
emptyObject: function emptyObject(val) {
return this.object(val) && Object.getOwnPropertyNames(val).length == 0;
},
integer: function integer(n) {
return this.number(n) && n % 1 === 0;
},
// is a given value RegExp?
regexp: function regexp(val) {
return toString.call(val) === '[object RegExp]';
},
// is a given number negative?
negative: function negative(n) {
return this.number(n) && n < 0;
},
// is a given value String?
string: function string(val) {
return typeof val === 'string' || toString.call(val) === '[object String]';
},
// is a given number positive?
positive: function positive(n) {
return this.number(n) && n > 0;
}
};
// is a given value undefined?
undefined: function undefined(val) {
return val === void 0;
},
var Each = function Each(obj, callback) {
var i = 0,
length = void 0;
// Arithmetic checks
/* -------------------------------------------------------------------------- */
// is a given value numeric?
numeric: function numeric(n) {
return (this.number(n) || this.string(n)) && !this.nan(n - parseFloat(n));
},
if (is.array(obj)) {
length = obj.length;
for (; i < length; i++) {
callback(obj[i], i);
}
} else {
Object.entries(obj).map(function (_ref2) {
var _ref3 = slicedToArray(_ref2, 2),
k = _ref3[0],
v = _ref3[1];
// is a given number percentage?
percentage: function percentage(n) {
return typeof n === 'string' && n.indexOf('%') !== -1;
},
// is a given number decimal?
decimal: function decimal(n) {
return this.number(n) && n % 1 !== 0;
},
// is a given number finite?
finite: function finite(n) {
if (isFinite) {
return isFinite(n);
return callback(k, v);
});
}
return !this.infinite(n) && !this.nan(n);
},
// is a given number infinite?
infinite: function infinite(n) {
return n === Infinity || n === -Infinity;
},
return obj;
};
integer: function integer(n) {
return this.number(n) && n % 1 === 0;
},
/* eslint object-property-newline: 'off' */
var MAP_BY_CODE = {
8: 'backspace',
9: 'tab',
13: 'enter',
16: 'shift',
17: 'ctrl',
18: 'alt',
20: 'caps_lock',
27: 'esc',
32: 'space',
33: 'page_up',
34: 'page_down',
35: 'end',
36: 'home',
37: 'left',
38: 'up',
39: 'right',
40: 'down',
45: 'insert',
46: 'delete',
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',
91: 'command',
112: 'f1',
113: 'f2',
114: 'f3',
115: 'f4',
116: 'f5',
117: 'f6',
118: 'f7',
119: 'f8',
120: 'f9',
121: 'f10',
122: 'f11',
123: 'f12',
144: 'num_lock'
};
// is a given number negative?
negative: function negative(n) {
return this.number(n) && n < 0;
},
var MAP_BY_NAME = {};
// is a given number positive?
positive: function positive(n) {
return this.number(n) && n > 0;
}
};
var Each = function Each(obj, callback) {
var length = void 0,
i = 0;
if (is.array(obj)) {
length = obj.length;
for (; i < length; i++) {
callback(obj[i], i);
for (var key in MAP_BY_CODE) {
if (Object.prototype.hasOwnProperty.call(MAP_BY_CODE, key)) {
MAP_BY_NAME[MAP_BY_CODE[key]] = Number(key);
}
} else {
Object.entries(obj).map(function (_ref2) {
var _ref3 = slicedToArray(_ref2, 2),
k = _ref3[0],
v = _ref3[1];
return callback(k, v);
});
}
return obj;
};
var MODIFIERS = {
16: 'shift',
17: 'ctrl',
18: 'alt',
91: 'command'
};
var Keyboard = function () {
function Keyboard(element) {
classCallCheck(this, Keyboard);
this.element = element || window.document;
this.emitter = new Emitter();
this.initialize();
this.registerEvent();
}
// 解析 HTML/SVG/XML 字符串
createClass(Keyboard, [{
key: 'initialize',
value: function initialize() {
var _this = this;
/* eslint object-property-newline: 'off' */
var MAP_BY_CODE = {
8: 'backspace',
9: 'tab',
13: 'enter',
16: 'shift',
17: 'ctrl',
18: 'alt',
20: 'caps_lock',
27: 'esc',
32: 'space',
33: 'page_up',
34: 'page_down',
35: 'end',
36: 'home',
37: 'left',
38: 'up',
39: 'right',
40: 'down',
45: 'insert',
46: 'delete',
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',
91: 'command',
112: 'f1',
113: 'f2',
114: 'f3',
115: 'f4',
116: 'f5',
117: 'f6',
118: 'f7',
119: 'f8',
120: 'f9',
121: 'f10',
122: 'f11',
123: 'f12',
144: 'num_lock'
};
this.status = {};
Each(MODIFIERS, function (keyCode, keyName) {
_this.status[keyName] = false;
var MAP_BY_NAME = {};
_this.emitter.on(keyCode + 'down', function () {
if (_this.status[keyName]) {
return;
}
_this.status[keyName] = true;
});
_this.emitter.on(keyCode + 'up', function () {
if (!_this.status[keyName]) {
return;
}
_this.status[keyName] = false;
});
});
}
}, {
key: 'registerEvent',
value: function registerEvent() {
var _this2 = this;
for (var key in MAP_BY_CODE) {
if (Object.prototype.hasOwnProperty.call(MAP_BY_CODE, key)) {
MAP_BY_NAME[MAP_BY_CODE[key]] = Number(key);
}
}
var handler = function handler(e) {
return _this2.handler(e);
};
this.element.addEventListener('keydown', handler);
this.element.addEventListener('keyup', handler);
// bindEvent({ type: 'keyup', handler }, this.element)
// bindEvent({ type: 'keydown', handler }, this.element)
}
}, {
key: 'handler',
value: function handler(e) {
/* eslint consistent-return: "off" */
var keyCode = e.keyCode;
var action = e.type === 'keydown' ? 'down' : 'up';
var prefix = '';
var MODIFIERS = {
16: 'shift',
17: 'ctrl',
18: 'alt',
91: 'command'
};
if (keyCode === 93 || keyCode === 224) {
keyCode = 91;
}
var Keyboard = function () {
function Keyboard(element) {
classCallCheck(this, Keyboard);
// if (!this.filter(e)) return;
this.element = element || window.document;
this.emitter = new Emitter();
if (keyCode in MODIFIERS) {
var result = this.emitter.emit(keyCode + action);
if (result === false) {
return false;
}
}
this.initialize();
this.registerEvent();
}
createClass(Keyboard, [{
key: 'initialize',
value: function initialize() {
var _this = this;
this.status = {};
Each(MODIFIERS, function (keyCode, keyName) {
_this.status[keyName] = false;
_this.emitter.on(keyCode + 'down', function () {
if (_this.status[keyName]) {
return;
Each(this.status, function (keyName, status) {
if (status) {
prefix += keyName;
}
_this.status[keyName] = true;
});
_this.emitter.on(keyCode + 'up', function () {
if (!_this.status[keyName]) {
return;
}
_this.status[keyName] = false;
});
});
}
}, {
key: 'registerEvent',
value: function registerEvent() {
var _this2 = this;
var handler = function handler(e) {
return _this2.handler(e);
};
this.element.addEventListener('keydown', handler);
this.element.addEventListener('keyup', handler);
// bindEvent({ type: 'keyup', handler }, this.element)
// bindEvent({ type: 'keydown', handler }, this.element)
}
}, {
key: 'handler',
value: function handler(e) {
/* eslint consistent-return: "off" */
var keyCode = e.keyCode;
var action = e.type === 'keydown' ? 'down' : 'up';
var prefix = '';
var eventName = prefix + keyCode + action;
if (keyCode === 93 || keyCode === 224) {
keyCode = 91;
if (!(eventName in this.emitter.listeners)) {
return;
}
return this.emitter.emit(eventName);
}
}, {
key: 'on',
value: function on(action, key, func) {
return this.dispatch(true, action, key, func);
}
}, {
key: 'off',
value: function off(action, key, func) {
return this.dispatch(false, action, key, func);
}
}, {
key: 'dispatch',
value: function dispatch(toggle, action, key, func) {
var _this3 = this;
// if (!this.filter(e)) return;
var keys = this.parseKeys(this.processKey(key));
keys.forEach(function (key) {
var modifiers = key.modifiers;
var keyCode = key.keyCode;
var prefix = '';
if (keyCode in MODIFIERS) {
var result = this.emitter.emit(keyCode + action);
if (result === false) {
return false;
}
}
if (modifiers !== null) {
for (var i = 0; i < modifiers.length; i++) {
prefix += MODIFIERS[modifiers[i]];
}
}
Each(this.status, function (keyName, status) {
if (status) {
prefix += keyName;
}
});
if (toggle) {
_this3.emitter.on(prefix + keyCode + action, func);
} else {
_this3.emitter.off(prefix + keyCode + action, func);
}
});
var eventName = prefix + keyCode + action;
if (!(eventName in this.emitter.listeners)) {
return;
return this;
}
}, {
key: 'parseKeys',
value: function parseKeys(keys) {
var _this4 = this;
return this.emitter.emit(eventName);
}
}, {
key: 'on',
value: function on(action, key, func) {
return this.dispatch(true, action, key, func);
}
}, {
key: 'off',
value: function off(action, key, func) {
return this.dispatch(false, action, key, func);
}
}, {
key: 'dispatch',
value: function dispatch(toggle, action, key, func) {
var _this3 = this;
var newKeys = [];
keys.map(function (key) {
var newKey = {};
var modifiers = null;
var keys = this.parseKeys(this.processKey(key));
keys.forEach(function (key) {
var modifiers = key.modifiers;
var keyCode = key.keyCode;
var prefix = '';
key = key.split('+');
var length = key.length;
if (modifiers !== null) {
for (var i = 0; i < modifiers.length; i++) {
prefix += MODIFIERS[modifiers[i]];
if (length > 1) {
modifiers = _this4.processModifiers(key);
key = [key[length - 1]];
}
}
if (toggle) {
_this3.emitter.on(prefix + keyCode + action, func);
} else {
_this3.emitter.off(prefix + keyCode + action, func);
}
});
key = _this4.getKeyCode(key[0]);
return this;
}
}, {
key: 'parseKeys',
value: function parseKeys(keys) {
var _this4 = this;
newKey.modifiers = modifiers;
newKey.keyCode = key;
newKeys.push(newKey);
return key;
});
var newKeys = [];
keys.map(function (key) {
var newKey = {};
var modifiers = null;
return newKeys;
}
}, {
key: 'processKey',
value: function processKey(key) {
key = key.toLowerCase().replace(/\s/g, '');
var keys = key.split(',');
if (keys[keys.length - 1] === '') {
keys[keys.length - 2] += ',';
}
return keys;
}
}, {
key: 'processModifiers',
value: function processModifiers(key) {
var modifiers = key.slice(0, key.length - 1);
key = key.split('+');
var length = key.length;
if (length > 1) {
modifiers = _this4.processModifiers(key);
key = [key[length - 1]];
for (var i = 0; i < modifiers.length; i++) {
modifiers[i] = MAP_BY_NAME[modifiers[i]];
}
key = _this4.getKeyCode(key[0]);
modifiers.sort();
newKey.modifiers = modifiers;
newKey.keyCode = key;
newKeys.push(newKey);
return key;
});
return newKeys;
}
}, {
key: 'processKey',
value: function processKey(key) {
key = key.toLowerCase().replace(/\s/g, '');
var keys = key.split(',');
if (keys[keys.length - 1] === '') {
keys[keys.length - 2] += ',';
return modifiers;
}
return keys;
}
}, {
key: 'processModifiers',
value: function processModifiers(key) {
var modifiers = key.slice(0, key.length - 1);
for (var i = 0; i < modifiers.length; i++) {
modifiers[i] = MAP_BY_NAME[modifiers[i]];
}, {
key: 'distribute',
value: function distribute(action, key, func) {
return func === null || func === undefined ? this.off(action, key, func) : this.on(action, key, func);
}
}, {
key: 'getKeyName',
value: function getKeyName(keyCode) {
return MAP_BY_CODE[keyCode];
}
}, {
key: 'getKeyCode',
value: function getKeyCode(keyName) {
return MAP_BY_NAME[keyName];
}
}, {
key: 'up',
value: function up(key, func) {
return this.distribute('up', key, func);
}
}, {
key: 'down',
value: function down(key, func) {
return this.distribute('down', key, func);
}
}]);
return Keyboard;
}();
modifiers.sort();
return modifiers;
var keyboard = {
init: function init(element) {
return new Keyboard(element);
}
}, {
key: 'distribute',
value: function distribute(action, key, func) {
return func === null || func === undefined ? this.off(action, key, func) : this.on(action, key, func);
}
}, {
key: 'getKeyName',
value: function getKeyName(keyCode) {
return MAP_BY_CODE[keyCode];
}
}, {
key: 'getKeyCode',
value: function getKeyCode(keyName) {
return MAP_BY_NAME[keyName];
}
}, {
key: 'up',
value: function up(key, func) {
return this.distribute('up', key, func);
}
}, {
key: 'down',
value: function down(key, func) {
return this.distribute('down', key, func);
}
}]);
return Keyboard;
}();
};
var keyboard = {
init: function init(element) {
return new Keyboard(element);
}
};
exports.default = keyboard;
exports['default'] = keyboard;
Object.defineProperty(exports, '__esModule', { value: true });
Object.defineProperty(exports, '__esModule', { value: true });
})));

@@ -1,1 +0,1 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e["@pluginjs/keyboard"]={})}(this,function(e){"use strict";var t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=(function(){function e(e){this.value=e}function t(t){function n(i,o){try{var s=t[i](o),u=s.value;u instanceof e?Promise.resolve(u.value).then(function(e){n("next",e)},function(e){n("throw",e)}):r(s.done?"return":"normal",s.value)}catch(e){r("throw",e)}}function r(e,t){switch(e){case"return":i.resolve({value:t,done:!0});break;case"throw":i.reject(t);break;default:i.resolve({value:t,done:!1})}(i=i.next)?n(i.key,i.arg):o=null}var i,o;this._invoke=function(e,t){return new Promise(function(r,s){var u={key:e,arg:t,resolve:r,reject:s,next:null};o?o=o.next=u:(i=o=u,n(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var s,u=e[Symbol.iterator]();!(r=(s=u.next()).done)&&(n.push(s.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),o=function(){function e(){n(this,e),this.listeners={},this.sortedListeners={}}return r(e,[{key:"emit",value:function(e){for(var t=this.getListeners(e),n=arguments.length,r=Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];for(var o=0;o<t.length;o++){var s=null;s=null!==t[o].context?t[o].context:{type:e};if(!1===t[o].listener.apply(s,r))return!1}return!0}},{key:"on",value:function(e,t,n,r){return this.addListener(e,t,n,r)}},{key:"once",value:function(e,t,n,r){return this.addOneTimeListener(e,t,n,r)}},{key:"off",value:function(e,t){return void 0===t?this.removeAllListeners(e):this.removeListener(e,t)}},{key:"addListener",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10;return this.ensureListener(t),this.listeners[e]||(this.listeners[e]={}),this.listeners[e][r]||(this.listeners[e][r]=[]),this.listeners[e][r].push({context:n,listener:t}),this.clearSortedListeners(e),this}},{key:"addOneTimeListener",value:function(e,t,n){function r(){return o.removeListener(e,r),t.apply(void 0,arguments)}var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10,o=this;return this.addListener(e,r,n,i),this}},{key:"removeListener",value:function(e,t){this.clearSortedListeners(e);var n=this.hasListeners(e)?this.listeners[e]:[];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(n[r]=n[r].filter(function(e){return e.listener!==t}),0===n[r].length&&delete n[r]);return this.listeners[e]=n,this}},{key:"removeAllListeners",value:function(e){return this.clearSortedListeners(e),this.hasListeners(e)&&delete this.listeners[e],this}},{key:"ensureListener",value:function(e){var n=void 0===e?"undefined":t(e);if("function"===n)return e;throw new TypeError("Listeners should be function or closure. Received type: "+n)}},{key:"hasListeners",value:function(e){return!(!this.listeners[e]||0===Object.keys(this.listeners[e]).length)}},{key:"getListeners",value:function(e){return this.sortedListeners.hasOwnProperty(e)||(this.sortedListeners[e]=this.getSortedListeners(e)),this.sortedListeners[e]}},{key:"getSortedListeners",value:function(e){if(!this.hasListeners(e))return[];var t=this.listeners[e],n=Object.keys(t);n.sort(function(e,t){return e-t});for(var r=[],i=0;i<n.length;i++)r=r.concat(t[n[i]]);return r}},{key:"clearSortedListeners",value:function(e){delete this.sortedListeners[e]}}]),e}(),s=(function(){function e(e){this.value=e}function t(t){function n(i,o){try{var s=t[i](o),u=s.value;u instanceof e?Promise.resolve(u.value).then(function(e){n("next",e)},function(e){n("throw",e)}):r(s.done?"return":"normal",s.value)}catch(e){r("throw",e)}}function r(e,t){switch(e){case"return":i.resolve({value:t,done:!0});break;case"throw":i.reject(t);break;default:i.resolve({value:t,done:!1})}(i=i.next)?n(i.key,i.arg):o=null}var i,o;this._invoke=function(e,t){return new Promise(function(r,s){var u={key:e,arg:t,resolve:r,reject:s,next:null};o?o=o.next=u:(i=o=u,n(e,t))})},"function"!=typeof t.return&&(this.return=void 0)}"function"==typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),Object.prototype.toString),u=function(e){return Array.isArray?Array.isArray(e):"[object Array]"===s.call(e)},a=function(e,t){var n=void 0,r=0;if(u(e))for(n=e.length;r<n;r++)t(e[r],r);else Object.entries(e).map(function(e){var n=i(e,2),r=n[0],o=n[1];return t(r,o)});return e},l={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"caps_lock",27:"esc",32:"space",33:"page_up",34:"page_down",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"delete",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",91:"command",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"num_lock"},c={};for(var f in l)Object.prototype.hasOwnProperty.call(l,f)&&(c[l[f]]=Number(f));var h={16:"shift",17:"ctrl",18:"alt",91:"command"},y=function(){function e(t){n(this,e),this.element=t||window.document,this.emitter=new o,this.initialize(),this.registerEvent()}return r(e,[{key:"initialize",value:function(){var e=this;this.status={},a(h,function(t,n){e.status[n]=!1,e.emitter.on(t+"down",function(){e.status[n]||(e.status[n]=!0)}),e.emitter.on(t+"up",function(){e.status[n]&&(e.status[n]=!1)})})}},{key:"registerEvent",value:function(){var e=this,t=function(t){return e.handler(t)};this.element.addEventListener("keydown",t),this.element.addEventListener("keyup",t)}},{key:"handler",value:function(e){var t=e.keyCode,n="keydown"===e.type?"down":"up",r="";if(93!==t&&224!==t||(t=91),t in h){if(!1===this.emitter.emit(t+n))return!1}a(this.status,function(e,t){t&&(r+=e)});var i=r+t+n;if(i in this.emitter.listeners)return this.emitter.emit(i)}},{key:"on",value:function(e,t,n){return this.dispatch(!0,e,t,n)}},{key:"off",value:function(e,t,n){return this.dispatch(!1,e,t,n)}},{key:"dispatch",value:function(e,t,n,r){var i=this;return this.parseKeys(this.processKey(n)).forEach(function(n){var o=n.modifiers,s=n.keyCode,u="";if(null!==o)for(var a=0;a<o.length;a++)u+=h[o[a]];e?i.emitter.on(u+s+t,r):i.emitter.off(u+s+t,r)}),this}},{key:"parseKeys",value:function(e){var t=this,n=[];return e.map(function(e){var r={},i=null,o=(e=e.split("+")).length;return o>1&&(i=t.processModifiers(e),e=[e[o-1]]),e=t.getKeyCode(e[0]),r.modifiers=i,r.keyCode=e,n.push(r),e}),n}},{key:"processKey",value:function(e){var t=(e=e.toLowerCase().replace(/\s/g,"")).split(",");return""===t[t.length-1]&&(t[t.length-2]+=","),t}},{key:"processModifiers",value:function(e){for(var t=e.slice(0,e.length-1),n=0;n<t.length;n++)t[n]=c[t[n]];return t.sort(),t}},{key:"distribute",value:function(e,t,n){return null===n||void 0===n?this.off(e,t,n):this.on(e,t,n)}},{key:"getKeyName",value:function(e){return l[e]}},{key:"getKeyCode",value:function(e){return c[e]}},{key:"up",value:function(e,t){return this.distribute("up",e,t)}},{key:"down",value:function(e,t){return this.distribute("down",e,t)}}]),e}(),v={init:function(e){return new y(e)}};e.default=v,Object.defineProperty(e,"__esModule",{value:!0})});
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t(e["@pluginjs/keyboard"]={})}(this,function(e){"use strict";var t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(){return function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,s=void 0;try{for(var o,u=e[Symbol.iterator]();!(r=(o=u.next()).done)&&(n.push(o.value),!t||n.length!==t);r=!0);}catch(e){i=!0,s=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw s}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function(){function e(){n(this,e),this.listeners={},this.sortedListeners={}}return r(e,[{key:"emit",value:function(e){for(var t=this.getListeners(e),n=arguments.length,r=Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];for(var s=0;s<t.length;s++){var o=null;if(o=null!==t[s].context?t[s].context:{type:e},!1===t[s].listener.apply(o,r))return!1}return!0}},{key:"on",value:function(e,t,n,r){return this.addListener(e,t,n,r)}},{key:"once",value:function(e,t,n,r){return this.addOneTimeListener(e,t,n,r)}},{key:"off",value:function(e,t){return void 0===t?this.removeAllListeners(e):this.removeListener(e,t)}},{key:"addListener",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10;return this.ensureListener(t),this.listeners[e]||(this.listeners[e]={}),this.listeners[e][r]||(this.listeners[e][r]=[]),this.listeners[e][r].push({context:n,listener:t}),this.clearSortedListeners(e),this}},{key:"addOneTimeListener",value:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10,i=this;return this.addListener(e,function n(){return i.removeListener(e,n),t.apply(void 0,arguments)},n,r),this}},{key:"removeListener",value:function(e,t){this.clearSortedListeners(e);var n=this.hasListeners(e)?this.listeners[e]:[];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(n[r]=n[r].filter(function(e){return e.listener!==t}),0===n[r].length&&delete n[r]);return this.listeners[e]=n,this}},{key:"removeAllListeners",value:function(e){return this.clearSortedListeners(e),this.hasListeners(e)&&delete this.listeners[e],this}},{key:"ensureListener",value:function(e){var n=void 0===e?"undefined":t(e);if("function"===n)return e;throw new TypeError("Listeners should be function or closure. Received type: "+n)}},{key:"hasListeners",value:function(e){return!(!this.listeners[e]||0===Object.keys(this.listeners[e]).length)}},{key:"getListeners",value:function(e){return this.sortedListeners.hasOwnProperty(e)||(this.sortedListeners[e]=this.getSortedListeners(e)),this.sortedListeners[e]}},{key:"getSortedListeners",value:function(e){if(!this.hasListeners(e))return[];var t=this.listeners[e],n=Object.keys(t);n.sort(function(e,t){return e-t});for(var r=[],i=0;i<n.length;i++)r=r.concat(t[n[i]]);return r}},{key:"clearSortedListeners",value:function(e){delete this.sortedListeners[e]}}]),e}(),o=Object.prototype.toString,u=function(e){return Array.isArray?Array.isArray(e):"[object Array]"===o.call(e)},a=function(e,t){var n=0,r=void 0;if(u(e))for(r=e.length;n<r;n++)t(e[n],n);else Object.entries(e).map(function(e){var n=i(e,2),r=n[0],s=n[1];return t(r,s)});return e},l={8:"backspace",9:"tab",13:"enter",16:"shift",17:"ctrl",18:"alt",20:"caps_lock",27:"esc",32:"space",33:"page_up",34:"page_down",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"delete",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",91:"command",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"num_lock"},f={};for(var c in l)Object.prototype.hasOwnProperty.call(l,c)&&(f[l[c]]=Number(c));var h={16:"shift",17:"ctrl",18:"alt",91:"command"},y=function(){function e(t){n(this,e),this.element=t||window.document,this.emitter=new s,this.initialize(),this.registerEvent()}return r(e,[{key:"initialize",value:function(){var e=this;this.status={},a(h,function(t,n){e.status[n]=!1,e.emitter.on(t+"down",function(){e.status[n]||(e.status[n]=!0)}),e.emitter.on(t+"up",function(){e.status[n]&&(e.status[n]=!1)})})}},{key:"registerEvent",value:function(){var e=this,t=function(t){return e.handler(t)};this.element.addEventListener("keydown",t),this.element.addEventListener("keyup",t)}},{key:"handler",value:function(e){var t=e.keyCode,n="keydown"===e.type?"down":"up",r="";if((93!==t&&224!==t||(t=91),t in h)&&!1===this.emitter.emit(t+n))return!1;a(this.status,function(e,t){t&&(r+=e)});var i=r+t+n;if(i in this.emitter.listeners)return this.emitter.emit(i)}},{key:"on",value:function(e,t,n){return this.dispatch(!0,e,t,n)}},{key:"off",value:function(e,t,n){return this.dispatch(!1,e,t,n)}},{key:"dispatch",value:function(e,t,n,r){var i=this;return this.parseKeys(this.processKey(n)).forEach(function(n){var s=n.modifiers,o=n.keyCode,u="";if(null!==s)for(var a=0;a<s.length;a++)u+=h[s[a]];e?i.emitter.on(u+o+t,r):i.emitter.off(u+o+t,r)}),this}},{key:"parseKeys",value:function(e){var t=this,n=[];return e.map(function(e){var r={},i=null,s=(e=e.split("+")).length;return s>1&&(i=t.processModifiers(e),e=[e[s-1]]),e=t.getKeyCode(e[0]),r.modifiers=i,r.keyCode=e,n.push(r),e}),n}},{key:"processKey",value:function(e){var t=(e=e.toLowerCase().replace(/\s/g,"")).split(",");return""===t[t.length-1]&&(t[t.length-2]+=","),t}},{key:"processModifiers",value:function(e){for(var t=e.slice(0,e.length-1),n=0;n<t.length;n++)t[n]=f[t[n]];return t.sort(),t}},{key:"distribute",value:function(e,t,n){return null===n||void 0===n?this.off(e,t,n):this.on(e,t,n)}},{key:"getKeyName",value:function(e){return l[e]}},{key:"getKeyCode",value:function(e){return f[e]}},{key:"up",value:function(e,t){return this.distribute("up",e,t)}},{key:"down",value:function(e,t){return this.distribute("down",e,t)}}]),e}(),d={init:function(e){return new y(e)}};e.default=d,Object.defineProperty(e,"__esModule",{value:!0})});
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global['@pluginjs/keyboard'] = {})));
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global['@pluginjs/keyboard'] = {})));
}(this, (function (exports) { 'use strict';
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
var classCallCheck = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
};
var createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
var slicedToArray = function () {
function sliceIterator(arr, i) {
var _arr = [];
var _n = true;
var _d = false;
var _e = undefined;
var asyncGenerator = function () {
function AwaitValue(value) {
this.value = value;
}
function AsyncGenerator(gen) {
var front, back;
function send(key, arg) {
return new Promise(function (resolve, reject) {
var request = {
key: key,
arg: arg,
resolve: resolve,
reject: reject,
next: null
};
if (back) {
back = back.next = request;
} else {
front = back = request;
resume(key, arg);
}
});
}
function resume(key, arg) {
try {
var result = gen[key](arg);
var value = result.value;
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
_arr.push(_s.value);
if (value instanceof AwaitValue) {
Promise.resolve(value.value).then(function (arg) {
resume("next", arg);
}, function (arg) {
resume("throw", arg);
});
} else {
settle(result.done ? "return" : "normal", result.value);
if (i && _arr.length === i) break;
}
} catch (err) {
settle("throw", err);
_d = true;
_e = err;
} finally {
try {
if (!_n && _i["return"]) _i["return"]();
} finally {
if (_d) throw _e;
}
}
return _arr;
}
function settle(type, value) {
switch (type) {
case "return":
front.resolve({
value: value,
done: true
});
break;
case "throw":
front.reject(value);
break;
default:
front.resolve({
value: value,
done: false
});
break;
}
front = front.next;
if (front) {
resume(front.key, front.arg);
return function (arr, i) {
if (Array.isArray(arr)) {
return arr;
} else if (Symbol.iterator in Object(arr)) {
return sliceIterator(arr, i);
} else {
back = null;
throw new TypeError("Invalid attempt to destructure non-iterable instance");
}
}
this._invoke = send;
if (typeof gen.return !== "function") {
this.return = undefined;
}
}
if (typeof Symbol === "function" && Symbol.asyncIterator) {
AsyncGenerator.prototype[Symbol.asyncIterator] = function () {
return this;
};
}
}();
AsyncGenerator.prototype.next = function (arg) {
return this._invoke("next", arg);
};
var Emitter = function () {
function Emitter() {
classCallCheck(this, Emitter);
AsyncGenerator.prototype.throw = function (arg) {
return this._invoke("throw", arg);
};
AsyncGenerator.prototype.return = function (arg) {
return this._invoke("return", arg);
};
return {
wrap: function (fn) {
return function () {
return new AsyncGenerator(fn.apply(this, arguments));
};
},
await: function (value) {
return new AwaitValue(value);
this.listeners = {};
this.sortedListeners = {};
}
};
}();
createClass(Emitter, [{
key: 'emit',
value: function emit(event) {
var listeners = this.getListeners(event);
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
for (var i = 0; i < listeners.length; i++) {
var context = null;
if (listeners[i].context !== null) {
context = listeners[i].context;
} else {
context = { type: event };
}
var classCallCheck = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
};
var result = listeners[i].listener.apply(context, args);
var createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor) descriptor.writable = true;
Object.defineProperty(target, descriptor.key, descriptor);
}
}
if (result === false) {
return false;
}
}
return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);
if (staticProps) defineProperties(Constructor, staticProps);
return Constructor;
};
}();
var slicedToArray = function () {
function sliceIterator(arr, i) {
var _arr = [];
var _n = true;
var _d = false;
var _e = undefined;
try {
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
_arr.push(_s.value);
if (i && _arr.length === i) break;
return true;
}
} catch (err) {
_d = true;
_e = err;
} finally {
try {
if (!_n && _i["return"]) _i["return"]();
} finally {
if (_d) throw _e;
}, {
key: 'on',
value: function on(event, listener, context, priority) {
return this.addListener(event, listener, context, priority);
}
}
return _arr;
}
return function (arr, i) {
if (Array.isArray(arr)) {
return arr;
} else if (Symbol.iterator in Object(arr)) {
return sliceIterator(arr, i);
} else {
throw new TypeError("Invalid attempt to destructure non-iterable instance");
}
};
}();
var Emitter = function () {
function Emitter() {
classCallCheck(this, Emitter);
this.listeners = {};
this.sortedListeners = {};
}
createClass(Emitter, [{
key: 'emit',
value: function emit(event) {
var listeners = this.getListeners(event);
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}, {
key: 'once',
value: function once(event, listener, context, priority) {
return this.addOneTimeListener(event, listener, context, priority);
}
for (var i = 0; i < listeners.length; i++) {
var context = null;
if (listeners[i].context !== null) {
context = listeners[i].context;
} else {
context = { type: event };
}, {
key: 'off',
value: function off(event, listener) {
if (typeof listener === 'undefined') {
return this.removeAllListeners(event);
}
var result = listeners[i].listener.apply(context, args);
if (result === false) {
return false;
}
return this.removeListener(event, listener);
}
return true;
}
}, {
key: 'on',
value: function on(event, listener, context, priority) {
return this.addListener(event, listener, context, priority);
}
}, {
key: 'once',
value: function once(event, listener, context, priority) {
return this.addOneTimeListener(event, listener, context, priority);
}
}, {
key: 'off',
value: function off(event, listener) {
if (typeof listener === 'undefined') {
return this.removeAllListeners(event);
}
/* Lower numbers correspond with earlier execution,
/* and functions with the same priority are executed
/* in the order in which they were added to the action. */
return this.removeListener(event, listener);
}
}, {
key: 'addListener',
value: function addListener(event, listener) {
var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var priority = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;
/* Lower numbers correspond with earlier execution,
/* and functions with the same priority are executed
/* in the order in which they were added to the action. */
this.ensureListener(listener);
}, {
key: 'addListener',
value: function addListener(event, listener) {
var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
var priority = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;
if (!this.listeners[event]) {
this.listeners[event] = {};
}
if (!this.listeners[event][priority]) {
this.listeners[event][priority] = [];
}
this.ensureListener(listener);
this.listeners[event][priority].push({
context: context,
listener: listener
});
this.clearSortedListeners(event);
if (!this.listeners[event]) {
this.listeners[event] = {};
return this;
}
if (!this.listeners[event][priority]) {
this.listeners[event][priority] = [];
}
}, {
key: 'addOneTimeListener',
value: function addOneTimeListener(event, listener, context) {
var priority = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;
this.listeners[event][priority].push({
context: context,
listener: listener
});
this.clearSortedListeners(event);
var that = this;
function wrapper() {
that.removeListener(event, wrapper);
return this;
}
}, {
key: 'addOneTimeListener',
value: function addOneTimeListener(event, listener, context) {
var priority = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;
return listener.apply(undefined, arguments);
}
var that = this;
function wrapper() {
that.removeListener(event, wrapper);
this.addListener(event, wrapper, context, priority);
return listener.apply(undefined, arguments);
return this;
}
}, {
key: 'removeListener',
value: function removeListener(event, listener) {
this.clearSortedListeners(event);
var listeners = this.hasListeners(event) ? this.listeners[event] : [];
this.addListener(event, wrapper, context, priority);
for (var priority in listeners) {
if (Object.prototype.hasOwnProperty.call(listeners, priority)) {
listeners[priority] = listeners[priority].filter(function (value) {
return value.listener !== listener;
});
return this;
}
}, {
key: 'removeListener',
value: function removeListener(event, listener) {
this.clearSortedListeners(event);
var listeners = this.hasListeners(event) ? this.listeners[event] : [];
for (var priority in listeners) {
if (Object.prototype.hasOwnProperty.call(listeners, priority)) {
listeners[priority] = listeners[priority].filter(function (value) {
return value.listener !== listener;
});
if (listeners[priority].length === 0) {
delete listeners[priority];
if (listeners[priority].length === 0) {
delete listeners[priority];
}
}
}
}
this.listeners[event] = listeners;
this.listeners[event] = listeners;
return this;
}
}, {
key: 'removeAllListeners',
value: function removeAllListeners(event) {
this.clearSortedListeners(event);
if (this.hasListeners(event)) {
delete this.listeners[event];
return this;
}
}, {
key: 'removeAllListeners',
value: function removeAllListeners(event) {
this.clearSortedListeners(event);
return this;
}
}, {
key: 'ensureListener',
value: function ensureListener(listener) {
var type = typeof listener === 'undefined' ? 'undefined' : _typeof(listener);
if (type === 'function') {
return listener;
if (this.hasListeners(event)) {
delete this.listeners[event];
}
return this;
}
throw new TypeError('Listeners should be function or closure. Received type: ' + type);
}
}, {
key: 'hasListeners',
value: function hasListeners(event) {
if (!this.listeners[event] || Object.keys(this.listeners[event]).length === 0) {
return false;
}, {
key: 'ensureListener',
value: function ensureListener(listener) {
var type = typeof listener === 'undefined' ? 'undefined' : _typeof(listener);
if (type === 'function') {
return listener;
}
throw new TypeError('Listeners should be function or closure. Received type: ' + type);
}
}, {
key: 'hasListeners',
value: function hasListeners(event) {
if (!this.listeners[event] || Object.keys(this.listeners[event]).length === 0) {
return false;
}
return true;
}
}, {
key: 'getListeners',
value: function getListeners(event) {
if (!this.sortedListeners.hasOwnProperty(event)) {
this.sortedListeners[event] = this.getSortedListeners(event);
return true;
}
}, {
key: 'getListeners',
value: function getListeners(event) {
if (!this.sortedListeners.hasOwnProperty(event)) {
this.sortedListeners[event] = this.getSortedListeners(event);
}
return this.sortedListeners[event];
}
}, {
key: 'getSortedListeners',
value: function getSortedListeners(event) {
if (!this.hasListeners(event)) {
return [];
return this.sortedListeners[event];
}
}, {
key: 'getSortedListeners',
value: function getSortedListeners(event) {
if (!this.hasListeners(event)) {
return [];
}
var listeners = this.listeners[event];
var listeners = this.listeners[event];
var priorities = Object.keys(listeners);
priorities.sort(function (a, b) {
return a - b;
});
var priorities = Object.keys(listeners);
priorities.sort(function (a, b) {
return a - b;
});
var sortedlisteners = [];
for (var i = 0; i < priorities.length; i++) {
sortedlisteners = sortedlisteners.concat(listeners[priorities[i]]);
}
return sortedlisteners;
}
}, {
key: 'clearSortedListeners',
value: function clearSortedListeners(event) {
delete this.sortedListeners[event];
}
}]);
return Emitter;
}();
var asyncGenerator$1 = function () {
function AwaitValue(value) {
this.value = value;
}
function AsyncGenerator(gen) {
var front, back;
function send(key, arg) {
return new Promise(function (resolve, reject) {
var request = {
key: key,
arg: arg,
resolve: resolve,
reject: reject,
next: null
};
if (back) {
back = back.next = request;
} else {
front = back = request;
resume(key, arg);
var sortedlisteners = [];
for (var i = 0; i < priorities.length; i++) {
sortedlisteners = sortedlisteners.concat(listeners[priorities[i]]);
}
});
}
function resume(key, arg) {
try {
var result = gen[key](arg);
var value = result.value;
if (value instanceof AwaitValue) {
Promise.resolve(value.value).then(function (arg) {
resume("next", arg);
}, function (arg) {
resume("throw", arg);
});
} else {
settle(result.done ? "return" : "normal", result.value);
}
} catch (err) {
settle("throw", err);
return sortedlisteners;
}
}
function settle(type, value) {
switch (type) {
case "return":
front.resolve({
value: value,
done: true
});
break;
case "throw":
front.reject(value);
break;
default:
front.resolve({
value: value,
done: false
});
break;
}, {
key: 'clearSortedListeners',
value: function clearSortedListeners(event) {
delete this.sortedListeners[event];
}
}]);
return Emitter;
}();
front = front.next;
/*eslint-disable */
/* Credit to http://is.js.org MIT */
var toString = Object.prototype.toString;
var is = {
// Type checks
/* -------------------------------------------------------------------------- */
// is a given value Arguments?
arguments: function _arguments(value) {
// fallback check is for IE
return toString.call(value) === '[object Arguments]' || value != null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && 'callee' in value;
},
if (front) {
resume(front.key, front.arg);
} else {
back = null;
// is a given value Array?
array: function array(val) {
if (Array.isArray) {
return Array.isArray(val);
}
}
return toString.call(val) === '[object Array]';
},
this._invoke = send;
// is a given value Boolean?
boolean: function boolean(val) {
return val === true || val === false || toString.call(val) === '[object Boolean]';
},
if (typeof gen.return !== "function") {
this.return = undefined;
}
}
// is a given value Char?
char: function char(val) {
return this.string(val) && val.length === 1;
},
if (typeof Symbol === "function" && Symbol.asyncIterator) {
AsyncGenerator.prototype[Symbol.asyncIterator] = function () {
return this;
};
}
// is a given value Date Object?
date: function date(value) {
return toString.call(value) === '[object Date]';
},
AsyncGenerator.prototype.next = function (arg) {
return this._invoke("next", arg);
};
// is a given object a DOM node?
domNode: function domNode(object) {
return this.object(object) && object.nodeType > 0;
},
AsyncGenerator.prototype.throw = function (arg) {
return this._invoke("throw", arg);
};
// is a given value Error object?
error: function error(val) {
return toString.call(val) === '[object Error]';
},
AsyncGenerator.prototype.return = function (arg) {
return this._invoke("return", arg);
};
// is a given value function?
function: function _function(val) {
// fallback check is for IE
return toString.call(val) === '[object Function]' || typeof val === 'function';
},
return {
wrap: function wrap(fn) {
return function () {
return new AsyncGenerator(fn.apply(this, arguments));
};
// is given value a pure JSON object?
json: function json(value) {
return toString.call(value) === '[object Object]';
},
await: function _await(value) {
return new AwaitValue(value);
}
};
}();
/*eslint-disable */
/* Credit to http://is.js.org MIT */
var toString = Object.prototype.toString;
var is = {
// Type checks
/* -------------------------------------------------------------------------- */
// is a given value Arguments?
arguments: function _arguments(value) {
// fallback check is for IE
return toString.call(value) === '[object Arguments]' || value != null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && 'callee' in value;
},
// is a given value NaN?
nan: function nan(val) {
// NaN is number :) Also it is the only value which does not equal itself
return val !== val;
},
// is a given value Array?
array: function array(val) {
if (Array.isArray) {
return Array.isArray(val);
}
return toString.call(val) === '[object Array]';
},
// is a given value null?
null: function _null(val) {
return val === null;
},
// is a given value Boolean?
boolean: function boolean(val) {
return val === true || val === false || toString.call(val) === '[object Boolean]';
},
// is a given value number?
number: function number(val) {
return !this.nan(val) && toString.call(val) === '[object Number]';
},
// is a given value Char?
char: function char(val) {
return this.string(val) && val.length === 1;
},
// is a given value object?
object: function object(val) {
return Object(val) === val;
},
// is a given value Date Object?
date: function date(value) {
return toString.call(value) === '[object Date]';
},
// is a given value empty object?
emptyObject: function emptyObject(val) {
return this.object(val) && Object.getOwnPropertyNames(val).length == 0;
},
// is a given object a DOM node?
domNode: function domNode(object) {
return this.object(object) && object.nodeType > 0;
},
// is a given value RegExp?
regexp: function regexp(val) {
return toString.call(val) === '[object RegExp]';
},
// is a given value Error object?
error: function error(val) {
return toString.call(val) === '[object Error]';
},
// is a given value String?
string: function string(val) {
return typeof val === 'string' || toString.call(val) === '[object String]';
},
// is a given value function?
function: function _function(val) {
// fallback check is for IE
return toString.call(val) === '[object Function]' || typeof val === 'function';
},
// is a given value undefined?
undefined: function undefined(val) {
return val === void 0;
},
// is given value a pure JSON object?
json: function json(value) {
return toString.call(value) === '[object Object]';
},
// Arithmetic checks
/* -------------------------------------------------------------------------- */
// is a given value numeric?
numeric: function numeric(n) {
return (this.number(n) || this.string(n)) && !this.nan(n - parseFloat(n));
},
// is a given value NaN?
nan: function nan(val) {
// NaN is number :) Also it is the only value which does not equal itself
return val !== val;
},
// is a given number percentage?
percentage: function percentage(n) {
return typeof n === 'string' && n.indexOf('%') !== -1;
},
// is a given value null?
null: function _null(val) {
return val === null;
},
// is a given number decimal?
decimal: function decimal(n) {
return this.number(n) && n % 1 !== 0;
},
// is a given value number?
number: function number(val) {
return !this.nan(val) && toString.call(val) === '[object Number]';
},
// is a given number finite?
finite: function finite(n) {
if (isFinite) {
return isFinite(n);
}
return !this.infinite(n) && !this.nan(n);
},
// is a given value object?
object: function object(val) {
return Object(val) === val;
},
// is a given number infinite?
infinite: function infinite(n) {
return n === Infinity || n === -Infinity;
},
// is a given value empty object?
emptyObject: function emptyObject(val) {
return this.object(val) && Object.getOwnPropertyNames(val).length == 0;
},
integer: function integer(n) {
return this.number(n) && n % 1 === 0;
},
// is a given value RegExp?
regexp: function regexp(val) {
return toString.call(val) === '[object RegExp]';
},
// is a given number negative?
negative: function negative(n) {
return this.number(n) && n < 0;
},
// is a given value String?
string: function string(val) {
return typeof val === 'string' || toString.call(val) === '[object String]';
},
// is a given number positive?
positive: function positive(n) {
return this.number(n) && n > 0;
}
};
// is a given value undefined?
undefined: function undefined(val) {
return val === void 0;
},
var Each = function Each(obj, callback) {
var i = 0,
length = void 0;
// Arithmetic checks
/* -------------------------------------------------------------------------- */
// is a given value numeric?
numeric: function numeric(n) {
return (this.number(n) || this.string(n)) && !this.nan(n - parseFloat(n));
},
if (is.array(obj)) {
length = obj.length;
for (; i < length; i++) {
callback(obj[i], i);
}
} else {
Object.entries(obj).map(function (_ref2) {
var _ref3 = slicedToArray(_ref2, 2),
k = _ref3[0],
v = _ref3[1];
// is a given number percentage?
percentage: function percentage(n) {
return typeof n === 'string' && n.indexOf('%') !== -1;
},
// is a given number decimal?
decimal: function decimal(n) {
return this.number(n) && n % 1 !== 0;
},
// is a given number finite?
finite: function finite(n) {
if (isFinite) {
return isFinite(n);
return callback(k, v);
});
}
return !this.infinite(n) && !this.nan(n);
},
// is a given number infinite?
infinite: function infinite(n) {
return n === Infinity || n === -Infinity;
},
return obj;
};
integer: function integer(n) {
return this.number(n) && n % 1 === 0;
},
/* eslint object-property-newline: 'off' */
var MAP_BY_CODE = {
8: 'backspace',
9: 'tab',
13: 'enter',
16: 'shift',
17: 'ctrl',
18: 'alt',
20: 'caps_lock',
27: 'esc',
32: 'space',
33: 'page_up',
34: 'page_down',
35: 'end',
36: 'home',
37: 'left',
38: 'up',
39: 'right',
40: 'down',
45: 'insert',
46: 'delete',
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',
91: 'command',
112: 'f1',
113: 'f2',
114: 'f3',
115: 'f4',
116: 'f5',
117: 'f6',
118: 'f7',
119: 'f8',
120: 'f9',
121: 'f10',
122: 'f11',
123: 'f12',
144: 'num_lock'
};
// is a given number negative?
negative: function negative(n) {
return this.number(n) && n < 0;
},
var MAP_BY_NAME = {};
// is a given number positive?
positive: function positive(n) {
return this.number(n) && n > 0;
}
};
var Each = function Each(obj, callback) {
var length = void 0,
i = 0;
if (is.array(obj)) {
length = obj.length;
for (; i < length; i++) {
callback(obj[i], i);
for (var key in MAP_BY_CODE) {
if (Object.prototype.hasOwnProperty.call(MAP_BY_CODE, key)) {
MAP_BY_NAME[MAP_BY_CODE[key]] = Number(key);
}
} else {
Object.entries(obj).map(function (_ref2) {
var _ref3 = slicedToArray(_ref2, 2),
k = _ref3[0],
v = _ref3[1];
return callback(k, v);
});
}
return obj;
};
var MODIFIERS = {
16: 'shift',
17: 'ctrl',
18: 'alt',
91: 'command'
};
var Keyboard = function () {
function Keyboard(element) {
classCallCheck(this, Keyboard);
this.element = element || window.document;
this.emitter = new Emitter();
this.initialize();
this.registerEvent();
}
// 解析 HTML/SVG/XML 字符串
createClass(Keyboard, [{
key: 'initialize',
value: function initialize() {
var _this = this;
/* eslint object-property-newline: 'off' */
var MAP_BY_CODE = {
8: 'backspace',
9: 'tab',
13: 'enter',
16: 'shift',
17: 'ctrl',
18: 'alt',
20: 'caps_lock',
27: 'esc',
32: 'space',
33: 'page_up',
34: 'page_down',
35: 'end',
36: 'home',
37: 'left',
38: 'up',
39: 'right',
40: 'down',
45: 'insert',
46: 'delete',
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',
91: 'command',
112: 'f1',
113: 'f2',
114: 'f3',
115: 'f4',
116: 'f5',
117: 'f6',
118: 'f7',
119: 'f8',
120: 'f9',
121: 'f10',
122: 'f11',
123: 'f12',
144: 'num_lock'
};
this.status = {};
Each(MODIFIERS, function (keyCode, keyName) {
_this.status[keyName] = false;
var MAP_BY_NAME = {};
_this.emitter.on(keyCode + 'down', function () {
if (_this.status[keyName]) {
return;
}
_this.status[keyName] = true;
});
_this.emitter.on(keyCode + 'up', function () {
if (!_this.status[keyName]) {
return;
}
_this.status[keyName] = false;
});
});
}
}, {
key: 'registerEvent',
value: function registerEvent() {
var _this2 = this;
for (var key in MAP_BY_CODE) {
if (Object.prototype.hasOwnProperty.call(MAP_BY_CODE, key)) {
MAP_BY_NAME[MAP_BY_CODE[key]] = Number(key);
}
}
var handler = function handler(e) {
return _this2.handler(e);
};
this.element.addEventListener('keydown', handler);
this.element.addEventListener('keyup', handler);
// bindEvent({ type: 'keyup', handler }, this.element)
// bindEvent({ type: 'keydown', handler }, this.element)
}
}, {
key: 'handler',
value: function handler(e) {
/* eslint consistent-return: "off" */
var keyCode = e.keyCode;
var action = e.type === 'keydown' ? 'down' : 'up';
var prefix = '';
var MODIFIERS = {
16: 'shift',
17: 'ctrl',
18: 'alt',
91: 'command'
};
if (keyCode === 93 || keyCode === 224) {
keyCode = 91;
}
var Keyboard = function () {
function Keyboard(element) {
classCallCheck(this, Keyboard);
// if (!this.filter(e)) return;
this.element = element || window.document;
this.emitter = new Emitter();
if (keyCode in MODIFIERS) {
var result = this.emitter.emit(keyCode + action);
if (result === false) {
return false;
}
}
this.initialize();
this.registerEvent();
}
createClass(Keyboard, [{
key: 'initialize',
value: function initialize() {
var _this = this;
this.status = {};
Each(MODIFIERS, function (keyCode, keyName) {
_this.status[keyName] = false;
_this.emitter.on(keyCode + 'down', function () {
if (_this.status[keyName]) {
return;
Each(this.status, function (keyName, status) {
if (status) {
prefix += keyName;
}
_this.status[keyName] = true;
});
_this.emitter.on(keyCode + 'up', function () {
if (!_this.status[keyName]) {
return;
}
_this.status[keyName] = false;
});
});
}
}, {
key: 'registerEvent',
value: function registerEvent() {
var _this2 = this;
var handler = function handler(e) {
return _this2.handler(e);
};
this.element.addEventListener('keydown', handler);
this.element.addEventListener('keyup', handler);
// bindEvent({ type: 'keyup', handler }, this.element)
// bindEvent({ type: 'keydown', handler }, this.element)
}
}, {
key: 'handler',
value: function handler(e) {
/* eslint consistent-return: "off" */
var keyCode = e.keyCode;
var action = e.type === 'keydown' ? 'down' : 'up';
var prefix = '';
var eventName = prefix + keyCode + action;
if (keyCode === 93 || keyCode === 224) {
keyCode = 91;
if (!(eventName in this.emitter.listeners)) {
return;
}
return this.emitter.emit(eventName);
}
}, {
key: 'on',
value: function on(action, key, func) {
return this.dispatch(true, action, key, func);
}
}, {
key: 'off',
value: function off(action, key, func) {
return this.dispatch(false, action, key, func);
}
}, {
key: 'dispatch',
value: function dispatch(toggle, action, key, func) {
var _this3 = this;
// if (!this.filter(e)) return;
var keys = this.parseKeys(this.processKey(key));
keys.forEach(function (key) {
var modifiers = key.modifiers;
var keyCode = key.keyCode;
var prefix = '';
if (keyCode in MODIFIERS) {
var result = this.emitter.emit(keyCode + action);
if (result === false) {
return false;
}
}
if (modifiers !== null) {
for (var i = 0; i < modifiers.length; i++) {
prefix += MODIFIERS[modifiers[i]];
}
}
Each(this.status, function (keyName, status) {
if (status) {
prefix += keyName;
}
});
if (toggle) {
_this3.emitter.on(prefix + keyCode + action, func);
} else {
_this3.emitter.off(prefix + keyCode + action, func);
}
});
var eventName = prefix + keyCode + action;
if (!(eventName in this.emitter.listeners)) {
return;
return this;
}
}, {
key: 'parseKeys',
value: function parseKeys(keys) {
var _this4 = this;
return this.emitter.emit(eventName);
}
}, {
key: 'on',
value: function on(action, key, func) {
return this.dispatch(true, action, key, func);
}
}, {
key: 'off',
value: function off(action, key, func) {
return this.dispatch(false, action, key, func);
}
}, {
key: 'dispatch',
value: function dispatch(toggle, action, key, func) {
var _this3 = this;
var newKeys = [];
keys.map(function (key) {
var newKey = {};
var modifiers = null;
var keys = this.parseKeys(this.processKey(key));
keys.forEach(function (key) {
var modifiers = key.modifiers;
var keyCode = key.keyCode;
var prefix = '';
key = key.split('+');
var length = key.length;
if (modifiers !== null) {
for (var i = 0; i < modifiers.length; i++) {
prefix += MODIFIERS[modifiers[i]];
if (length > 1) {
modifiers = _this4.processModifiers(key);
key = [key[length - 1]];
}
}
if (toggle) {
_this3.emitter.on(prefix + keyCode + action, func);
} else {
_this3.emitter.off(prefix + keyCode + action, func);
}
});
key = _this4.getKeyCode(key[0]);
return this;
}
}, {
key: 'parseKeys',
value: function parseKeys(keys) {
var _this4 = this;
newKey.modifiers = modifiers;
newKey.keyCode = key;
newKeys.push(newKey);
return key;
});
var newKeys = [];
keys.map(function (key) {
var newKey = {};
var modifiers = null;
return newKeys;
}
}, {
key: 'processKey',
value: function processKey(key) {
key = key.toLowerCase().replace(/\s/g, '');
var keys = key.split(',');
if (keys[keys.length - 1] === '') {
keys[keys.length - 2] += ',';
}
return keys;
}
}, {
key: 'processModifiers',
value: function processModifiers(key) {
var modifiers = key.slice(0, key.length - 1);
key = key.split('+');
var length = key.length;
if (length > 1) {
modifiers = _this4.processModifiers(key);
key = [key[length - 1]];
for (var i = 0; i < modifiers.length; i++) {
modifiers[i] = MAP_BY_NAME[modifiers[i]];
}
key = _this4.getKeyCode(key[0]);
modifiers.sort();
newKey.modifiers = modifiers;
newKey.keyCode = key;
newKeys.push(newKey);
return key;
});
return newKeys;
}
}, {
key: 'processKey',
value: function processKey(key) {
key = key.toLowerCase().replace(/\s/g, '');
var keys = key.split(',');
if (keys[keys.length - 1] === '') {
keys[keys.length - 2] += ',';
return modifiers;
}
return keys;
}
}, {
key: 'processModifiers',
value: function processModifiers(key) {
var modifiers = key.slice(0, key.length - 1);
for (var i = 0; i < modifiers.length; i++) {
modifiers[i] = MAP_BY_NAME[modifiers[i]];
}, {
key: 'distribute',
value: function distribute(action, key, func) {
return func === null || func === undefined ? this.off(action, key, func) : this.on(action, key, func);
}
}, {
key: 'getKeyName',
value: function getKeyName(keyCode) {
return MAP_BY_CODE[keyCode];
}
}, {
key: 'getKeyCode',
value: function getKeyCode(keyName) {
return MAP_BY_NAME[keyName];
}
}, {
key: 'up',
value: function up(key, func) {
return this.distribute('up', key, func);
}
}, {
key: 'down',
value: function down(key, func) {
return this.distribute('down', key, func);
}
}]);
return Keyboard;
}();
modifiers.sort();
return modifiers;
var keyboard = {
init: function init(element) {
return new Keyboard(element);
}
}, {
key: 'distribute',
value: function distribute(action, key, func) {
return func === null || func === undefined ? this.off(action, key, func) : this.on(action, key, func);
}
}, {
key: 'getKeyName',
value: function getKeyName(keyCode) {
return MAP_BY_CODE[keyCode];
}
}, {
key: 'getKeyCode',
value: function getKeyCode(keyName) {
return MAP_BY_NAME[keyName];
}
}, {
key: 'up',
value: function up(key, func) {
return this.distribute('up', key, func);
}
}, {
key: 'down',
value: function down(key, func) {
return this.distribute('down', key, func);
}
}]);
return Keyboard;
}();
};
var keyboard = {
init: function init(element) {
return new Keyboard(element);
}
};
exports.default = keyboard;
exports['default'] = keyboard;
Object.defineProperty(exports, '__esModule', { value: true });
Object.defineProperty(exports, '__esModule', { value: true });
})));
{
"name": "@pluginjs/keyboard",
"title": "Plugin",
"version": "0.2.11",
"version": "0.2.13",
"description": "A workflow for modern frontend development.",

@@ -6,0 +6,0 @@ "author": "Creation Studio Limited",

@@ -93,3 +93,3 @@ import Emitter from '@pluginjs/emitter'

class Keyboard {
constructor (element) {
constructor(element) {
this.element = element || window.document

@@ -102,3 +102,3 @@ this.emitter = new Emitter()

initialize () {
initialize() {
this.status = {}

@@ -123,3 +123,3 @@ Each(MODIFIERS, (keyCode, keyName) => {

registerEvent () {
registerEvent() {
const handler = e => this.handler(e)

@@ -132,3 +132,3 @@ this.element.addEventListener('keydown', handler)

handler (e) {
handler(e) {
/* eslint consistent-return: "off" */

@@ -167,11 +167,11 @@ let keyCode = e.keyCode

on (action, key, func) {
on(action, key, func) {
return this.dispatch(true, action, key, func)
}
off (action, key, func) {
off(action, key, func) {
return this.dispatch(false, action, key, func)
}
dispatch (toggle, action, key, func) {
dispatch(toggle, action, key, func) {
const keys = this.parseKeys(this.processKey(key))

@@ -199,3 +199,3 @@ keys.forEach(key => {

parseKeys (keys) {
parseKeys(keys) {
const newKeys = []

@@ -225,3 +225,3 @@ keys.map(key => {

processKey (key) {
processKey(key) {
key = key.toLowerCase().replace(/\s/g, '')

@@ -235,3 +235,3 @@ const keys = key.split(',')

processModifiers (key) {
processModifiers(key) {
const modifiers = key.slice(0, key.length - 1)

@@ -248,3 +248,3 @@

distribute (action, key, func) {
distribute(action, key, func) {
return func === null || func === undefined

@@ -255,15 +255,15 @@ ? this.off(action, key, func)

getKeyName (keyCode) {
getKeyName(keyCode) {
return MAP_BY_CODE[keyCode]
}
getKeyCode (keyName) {
getKeyCode(keyName) {
return MAP_BY_NAME[keyName]
}
up (key, func) {
up(key, func) {
return this.distribute('up', key, func)
}
down (key, func) {
down(key, func) {
return this.distribute('down', key, func)

@@ -274,3 +274,3 @@ }

const keyboard = {
init (element) {
init(element) {
return new Keyboard(element)

@@ -277,0 +277,0 @@ }

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc