forked from piranha/keymage
-
Notifications
You must be signed in to change notification settings - Fork 0
/
keymage.min.js
6 lines (6 loc) · 2.87 KB
/
keymage.min.js
1
2
3
4
5
6
// keymage.js - Javascript keyboard event handling
// http://github.com/piranha/keymage
//
// (c) 2012 Alexander Solovyov
// under terms of ISC License
(function(a,b,c){function o(a){var b=a.split("-"),c=b[b.length-1],d={code:h[c]};if(!d.code)throw'Unknown key "'+c+'" in keystring "'+a+'"';var f;for(var g=0;g<b.length-1;g++){c=b[g],f=e[c];if(!f)throw'Unknown modifier "'+c+'" in keystring "'+a+'"';d[f]=!0}return d}function p(a){var b="";for(var c=0;c<f.length;c++)a[f[c]]&&(b+=f[c]+"-");return b+=j[a.code],b}function q(a){var b=[],c=a.split(" ");for(var d=0;d<c.length;d++){var e=o(c[d]);e=p(e),b.push(e)}return b.original=a,b}function r(a){var b={code:a.keyCode};for(var c=0;c<d.length;c++){var e=d[c];a[e]&&(b[e.slice(0,e.length-3)]=!0)}return p(b)}function s(a,b){for(var c=0;c<b.length;c++){var d=b[c];d&&(a=a[d]);if(!a)break}return a}function u(a){if(~g.indexOf(a.keyCode))return;var b=t.slice();b.push(r(a));var c=m.split("."),d,e,f;for(var h=c.length;h>=0;h--){e=s(n,c.slice(0,h));if(!e)continue;d=!0;for(var i=0;i<b.length;i++){f=b[i];if(!e[f]){d=!1;break}e=e[f]}if(d)break}var j=c.slice(0,h).join(".");if(d&&!e.handlers){t=b;return}if(d)for(h=0;h<e.handlers.length;h++){var k=e.handlers[h],l=k(a,{shortcut:k._original,scope:m,definitionScope:j});l===!1&&a.preventDefault()}t=[]}function v(a,b,c){var d=a.split("."),e=n;d=d.concat(b);for(var f=0,g=d.length;f<g;f++){var h=d[f];if(!h)continue;e=e[h]||(e[h]={});if(f===g-1){var i=e.handlers||(e.handlers=[]);i.push(c)}}}var d=["shiftKey","ctrlKey","altKey","metaKey"],e={shift:"shift",ctrl:"ctrl",control:"ctrl",alt:"alt",option:"alt",win:"meta",cmd:"meta","super":"meta",meta:"meta",defmod:~navigator.userAgent.indexOf("Mac OS X")?"meta":"ctrl"},f=["shift","ctrl","alt","meta"],g=[16,17,18,91],h={backspace:8,tab:9,enter:13,"return":13,pause:19,caps:20,capslock:20,escape:27,esc:27,space:32,pgup:33,pageup:33,pgdown:34,pagedown:34,end:35,home:36,ins:45,insert:45,del:46,"delete":46,left:37,up:38,right:39,down:40,"*":106,"+":107,plus:107,"-":109,minus:109,";":186,"=":187,",":188,".":190,"/":191,"`":192,"[":219,"\\":220,"]":221,"'":222},i;for(i=0;i<10;i++)h["num-"+i]=i+95;for(i=0;i<10;i++)h[i.toString()]=i+48;for(i=1;i<25;i++)h["f"+i]=i+111;for(i=65;i<91;i++)h[String.fromCharCode(i).toLowerCase()]=i;var j={};for(var k in h){var l=h[k];if(!j[l]||j[l].length<k.length)j[l]=k}var m="",n={},t=[],w=b.keymage=function(a,b,d){if(b===c&&d===c)return function(b,c){return w(a,b,c)};d===c&&typeof b=="function"&&(d=b,b=a,a="");var e=q(b);d._original=b,v(a,e,d)};return w.parse=o,w.stringify=p,w.bindings=n,w.setScope=function(a){m=a?a:""},w.getScope=function(){return m},w.pushScope=function(a){return m=(m?m+".":"")+a,m},w.popScope=function(a){var b;return a?(m=m.replace(new RegExp("(^|\\.)"+a+"(\\.|$).*"),""),a):(b=m.lastIndexOf("."),a=m.slice(b+1),m=m.slice(0,b),a)},window.addEventListener("keydown",u,!1),w})(this,typeof module!="undefined"&&module.exports?module.exports:this);