@gomarky/window-shortcut
Version:
Register shortcuts
1 lines • 2.46 kB
JavaScript
var t={d:(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e)},e={};t.d(e,{Z:()=>n});const r=/Mobi/i.test(window.navigator.userAgent),o="undefined"!=typeof window;function s(t){return t?t.toLowerCase():""}var l;!function(t){t.Shift="Shift",t.Alt="Alt",t.Ctrl="Ctrl",t.ControlLeft="ControlLeft",t.ControlRight="ControlRight",t.AltLeft="AltLeft",t.AltRight="AltRight",t.Meta="Meta"}(l||(l={}));const a=Object.values(l).map((t=>s(t))),i=["Ctrl+D","Meta+D","Ctrl+O","Meta+O","Ctrl+P","Meta+P","Ctrl+X","Meta+X","Ctrl+Y","Meta+Y","Ctrl+J","Meta+J","Ctrl+U","Meta+U","Ctrl+I","Meta+I","Meta+Q","Ctrl+Q","Meta+E","Ctrl+E","Ctrl+B","Meta+B","Ctrl+P","Meta+P","Ctrl+N","Meta+N","Ctrl+T","Meta+T","Ctrl+F","Meta+F","Meta+A","Ctrl+A","Meta+C","Ctrl+C","Meta+V","Ctrl+V","Meta+Z","Ctrl+Z","Ctrl+W","Meta+W","Meta+S","Ctrl+S","Ctrl+Shift+A","Meta+Shift+A","Ctrl+Shift+D","Meta+Shift+D","Ctrl+Shift+Z","Meta+Shift+Z","Shift+Tab","Tab"];class n{shortcuts=new Map;constructor(){o&&!r&&this.init()}logShortcut(t){const e=document.querySelector(".app__log-section"),r=document.createElement("div");r.textContent=`Shortcut ${t} was pressed...`,e?.appendChild(r),window.setTimeout((()=>r.remove()),1e4)}static isValidShortcut(t){return i.includes(t)}static eventToAccelerator(t){const{shiftKey:e,altKey:r,ctrlKey:o,metaKey:i,key:n}=t;if(a.includes(s(n)))return;const c=[];e&&c.push(l.Shift),r&&c.push(l.Alt),o&&c.push(l.Ctrl),i&&c.push(l.Meta),c.sort(((t,e)=>t<e?-1:t>e?1:0)),c.push(n);const h=s(c.join("+"));return h.includes("+"),h}onKeydown(t){const e=n.eventToAccelerator(t);e&&this.callByAccelerator(e,t)}init(){window.addEventListener("keydown",this.onKeydown.bind(this))}callByAccelerator(t,e){const r=this.shortcuts.get(t);r?.size&&r.forEach((t=>t.call(void 0,e)))}registerShortcut(t,e){if(!n.isValidShortcut(t))throw new TypeError(`\n You must use only valid shortcuts - ${t}. \n See https://github.com/GoMarky/window-shortcut/blob/master/README.md\n `);let r;const o=s(t);return this.shortcuts.has(o)?(r=this.shortcuts.get(o),r.add(e)):(r=new Set,r.add(e),this.shortcuts.set(o,r)),l=()=>r.delete(e),{dispose:()=>{Reflect.apply(l,void 0,[])}};var l}clearAllShortcuts(){this.shortcuts.forEach((t=>t.clear())),this.shortcuts.clear()}dispose(){this.clearAllShortcuts(),window.removeEventListener("keydown",this.onKeydown.bind(this))}}var c=e.Z;export{c as default};