UNPKG

tinykeys

Version:

A tiny (~650 B) & modern library for keybindings.

3 lines (2 loc) 1.48 kB
var e=["Shift","Meta","Alt","Control"],t="object"==typeof navigator?navigator.platform:"",n=/Mac|iPod|iPhone|iPad/.test(t),r=n?"Meta":"Control",i="Win32"===t?["Control","Alt"]:n?["Alt"]:[];function o(e,t){return"function"==typeof e.getModifierState&&(e.getModifierState(t)||i.includes(t)&&e.getModifierState("AltGraph"))}function a(e){return e.trim().split(" ").map(function(e){var t=e.split(/\b\+/),n=t.pop(),i=n.match(/^\((.+)\)$/);return i&&(n=new RegExp("^"+i[1]+"$")),[t=t.map(function(e){return"$mod"===e?r:e}),n]})}function u(t,n){var r=n[0],i=n[1];return!((i instanceof RegExp?!i.test(t.key)&&!i.test(t.code):i.toUpperCase()!==t.key.toUpperCase()&&i!==t.code)||r.find(function(e){return!o(t,e)})||e.find(function(e){return!r.includes(e)&&i!==e&&o(t,e)}))}function c(e,t){var n;void 0===t&&(t={});var r=null!=(n=t.timeout)?n:1e3,i=Object.keys(e).map(function(t){return[a(t),e[t]]}),c=new Map,d=null;return function(e){e instanceof KeyboardEvent&&(i.forEach(function(t){var n=t[0],r=t[1],i=c.get(n)||n;u(e,i[0])?i.length>1?c.set(n,i.slice(1)):(c.delete(n),r(e)):o(e,e.key)||c.delete(n)}),d&&clearTimeout(d),d=setTimeout(c.clear.bind(c),r))}}exports.createKeybindingsHandler=c,exports.matchKeyBindingPress=u,exports.parseKeybinding=a,exports.tinykeys=function(e,t,n){var r=void 0===n?{}:n,i=r.event,o=void 0===i?"keydown":i,a=r.capture,u=c(t,{timeout:r.timeout});return e.addEventListener(o,u,a),function(){e.removeEventListener(o,u,a)}}; //# sourceMappingURL=tinykeys.js.map