@pluginjs/keyboard
Advanced tools
Comparing version 0.2.11 to 0.2.13
@@ -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 @@ } |
62796
1961