forked from madrobby/keymaster
/
keymaster.min.js
4 lines (4 loc) · 1.72 KB
/
keymaster.min.js
1
2
3
4
// keymaster.js
// (c) 2011 Thomas Fuchs
// keymaster.js may be freely distributed under the MIT license.
(function(a){function l(a,b,c){a.addEventListener?a.addEventListener(b,c,!1):a.attachEvent&&a.attachEvent("on"+b,function(){c(window.event)})}function k(a){e=a||"all"}function j(a,b,d){var e,h,i,j;d===undefined&&(d=b,b="all"),a=a.replace(/\s/g,""),e=a.split(",");for(i=0;i<e.length;i++){h=[],a=e[i].split("+");if(a.length>1){h=a.slice(0,a.length-1);for(j=0;j<h.length;j++)h[j]=f[h[j]];a=[a[a.length-1]]}a=a[0],a=a.length>1?g[a]:a.toUpperCase().charCodeAt(0),a in c||(c[a]=[]),c[a].push({scope:b,method:d,key:e[i],mods:h})}}function i(a){var b=a.keyCode,c;if(b in d){d[b]=!1;for(c in f)f[c]==b&&(j[c]=!1)}}function h(a){var b,g,h,i,k,l;g=(a.target||a.srcElement).tagName,b=a.keyCode;if(b==93||b==224)b=91;if(b in d){d[b]=!0;for(i in f)f[i]==b&&(j[i]=!0)}else{if(g=="INPUT"||g=="SELECT"||g=="TEXTAREA")return;if(!(b in c))return;for(k=0;k<c[b].length;k++){h=c[b][k];if(h.scope==e||h.scope=="all"){l=h.mods.length>0;for(i in d)if(!d[i]&&h.mods.indexOf(+i)>-1||d[i]&&h.mods.indexOf(+i)==-1)l=!1;(h.mods.length==0&&!d[16]&&!d[18]&&!d[17]&&!d[91]||l)&&h.method(a,h.key,h.scope)===!1&&(a.preventDefault?a.preventDefault():a.returnValue=!1,a.stopPropagation&&a.stopPropagation(),a.cancelBubble&&(a.cancelBubble=!0))}}}}var b,c={},d={16:!1,18:!1,17:!1,91:!1},e="all",f={"⇧":16,shift:16,option:18,"⌥":18,alt:18,ctrl:17,control:17,command:91,"⌘":91},g={backspace:8,tab:9,clear:12,enter:13,"return":13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,"delete":46,home:36,end:35,pageup:33,pagedown:34};for(b=1;b<20;b++)f["f"+b]=111+b;for(b in f)j[b]=!1;l(document,"keydown",h),l(document,"keyup",i),a.key=j,a.key.setScope=k})(this)