shortcutter
Version:
Tiny, dependency-free library to manage keyboard shortcuts in your application.
1 lines • 5.55 kB
JavaScript
var Shortcutter;(()=>{"use strict";var e,t={d:(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},r={};function n(e){return e.toLowerCase().replace(/key/,"")}function o(e){return e.sort().join("+").toLowerCase()}function a(e,t,r){e.split("|").forEach((function(e){r("".concat(t,"_").concat(e),e)}))}t.r(r),t.d(r,{PHASES:()=>e,useShortcutter:()=>d}),function(e){e.DOWN="down",e.PRESS="press",e.UP="up",e.DOWN_PRESS="down|press",e.DOWN_UP="down|up",e.PRESS_UP="press|up",e.DOWN_PRESS_UP="down|press|up"}(e||(e={}));var i=function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,a=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)i.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(o)throw o.error}}return i},c=function(e,t,r){if(r||2===arguments.length)for(var n,o=0,a=t.length;o<a;o++)!n&&o in t||(n||(n=Array.prototype.slice.call(t,0,o)),n[o]=t[o]);return e.concat(n||Array.prototype.slice.call(t))},u=function(e){return"Context '".concat(e,"' is not added.")};function l(){var e=new Set,t=new Map;return{add:function(e){if(t.has(e))throw new Error(function(e){return"Context '".concat(e,"' is already added.")}(e));var r=function(e){if("string"!=typeof e||e.length<1)throw new Error("Context has to has a name.");var t=new Map;return{add:function(e,r,n){void 0===n&&(n="down|press");var i=o(e);a(n,i,(function(e,n){if(t.has(e))throw new Error('Shortcut "'.concat(i,'" is already added to "').concat(n,'" phase.'));t.set(e,r)}))},get:function(r,n){var a=o(r),i="".concat(a,"_").concat(n);if(!t.has(i))throw new Error('Shortcut "'.concat(a,'" does not exist in "').concat(e,'" context.'));return t.get(i)},has:function(e,r){var n=o(e),a="".concat(n,"_").concat(r);return t.has(a)},remove:function(r,n){void 0===n&&(n="down|press");var i=o(r);a(n,i,(function(r){if(!t.has(r))throw new Error('Shortcut "'.concat(i,'" does not exist in "').concat(e,'" context.'));t.delete(r)}))},getAll:function(){return function(e,t,r){if(r||2===arguments.length)for(var n,o=0,a=t.length;o<a;o++)!n&&o in t||(n||(n=Array.prototype.slice.call(t,0,o)),n[o]=t[o]);return e.concat(n||Array.prototype.slice.call(t))}([],function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,a=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)i.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(o)throw o.error}}return i}(t.keys()),!1)},clear:function(){t.clear()}}}(e);return t.set(e,r),r},clear:function(){t.clear()},getActive:function(){return c([],i(e.values()),!1)},get:function(e){if(!t.has(e))throw new Error(u(e));return t.get(e)},getAll:function(){return c([],i(t.keys()),!1)},has:function(e){return t.has(e)},isActive:function(t){return e.has(t)},remove:function(e){if(!t.has(e))throw new Error(u(e));t.delete(e)},setActive:function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];e.clear(),r.forEach((function(r){if(!t.has(r))throw new Error(u(r));e.add(r)}))}}}var s=function(){return s=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},s.apply(this,arguments)},f={eventTarget:window,defaultContext:"default"};function d(e){void 0===e&&(e={});var t,r=s(s({},f),e),o=r.eventTarget,a=r.defaultContext,i=l(),c=(t=new Set,{press:function(e){t.add(e)},release:function(e){t.delete(e)},releaseAll:function(){t.clear()},getPressed:function(){return function(e,t,r){if(r||2===arguments.length)for(var n,o=0,a=t.length;o<a;o++)!n&&o in t||(n||(n=Array.prototype.slice.call(t,0,o)),n[o]=t[o]);return e.concat(n||Array.prototype.slice.call(t))}([],function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,a=r.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)i.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(o)throw o.error}}return i}(t.values()),!1).sort()},isPressed:function(e){return t.has(e)}});i.add(a),i.setActive(a),o.addEventListener("keydown",d),o.addEventListener("keyup",v),o.addEventListener("blur",h),o.addEventListener("unload",(function e(){o.removeEventListener("keydown",d),o.removeEventListener("keyup",v),o.removeEventListener("blur",h),o.removeEventListener("unload",e)}));var u=function(e,t,r){i.getActive().forEach((function(n){var o=i.get(n);(null==o?void 0:o.has(e,r))&&o.get(e,r)(t,r)}))};function d(e){var t=c.getPressed().join("+");c.press(n(e.code));var r=c.getPressed().join("+");t!==r?(t.length&&u(t.split("+"),e,"up"),u(r.split("+"),e,"down")):u(t.split("+"),e,"press")}function v(e){var t=c.getPressed().join("+");c.release(n(e.code));var r=c.getPressed().join("+");t.length&&u(t.split("+"),e,"up"),r.length&&u(r.split("+"),e,"down")}function h(e){var t=c.getPressed().join("+");t.length&&u(t.split("+"),e,"up"),c.releaseAll()}return{listen:function(e,t,r,n){var o=i.has(e)?i.get(e):i.add(e);return null==o||o.add(t,r,n),function(){return null==o?void 0:o.remove(t,n)}},unlisten:function(e,t,r){var n=i.get(e);null==n||n.remove(t,r)},hasContext:function(e){return i.has(e)},getActiveContext:function(){return i.getActive()},setActiveContext:function(e){return i.setActive(e)}}}Shortcutter=r})();