-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathjquery.keycombinator.min.js
3 lines (3 loc) · 4.49 KB
/
jquery.keycombinator.min.js
1
2
3
// The plugin logic hasn't been nested in a jQuery plugin. Instead, we just use
// jQuery for its instantiation.
(function(a,b,c,d){function i(a){if(key=f[a])return key.all!=d?key.all:key[p]}function t(b){return a.inArray(b,s)>=0}function u(a){a!==d&&(this.keyCode=a,this.keyChar=i(a))}function v(){this.comboParts=[],this.ctrlKey=!1,this.altKey=!1,this.metaKey=!1,this.shiftKey=!1,this.comboString=""}function w(b,c,e){var f=!1;e===d?a.inArray(c,b)>=0&&(f=!0):a.grep(b,function(a){return a[e]==c[e]}).length&&(f=!0),f||b.push(c)}var e=function(b,c){this.elem=b,this.$elem=a(b),this.options=c,this.metadata=this.$elem.data("plugin-options");var d=this.$elem.data("keycombinator-config");this.config=a.extend({},this.defaults,d,this.options,this.metadata),this.defaultCombo=this.config.defaultCombos,this.onComplete=this.config.onComplete,this.comboData=new v,this.completed=!1,this.keydowns=0,this.keyups=0},f={16:{mac:"⇧",win:"Shift",unix:"Shift"},17:{mac:"⌃",win:"Ctrl",unix:"Ctrl"},18:{mac:"⌥",win:"Alt",unix:"Alt"},91:{mac:"⌘",win:"Win",unix:"Super"},224:{mac:"⌘",win:"Win",unix:"Super"},8:{mac:"⌫",win:"Backspace",unix:"Backspace"},9:{mac:"⇥",win:"Tab",unix:"Tab"},13:{mac:"↩",win:"Enter",unix:"Enter"},19:{all:"Pause"},20:{mac:"⇪",win:"Caps Lock",unix:"Caps Lock"},27:{mac:"⎋",win:"Esc",unix:"Esc"},32:{all:"Space"},33:{mac:"↖",win:"Page Up",unix:"Page Up"},34:{mac:"↘",win:"Page Down",unix:"Page Down"},35:{mac:"⇟",win:"End",unix:"End"},36:{mac:"⇞",win:"Home",unix:"Home"},45:{all:"Ins"},46:{mac:"⌫ ",win:"Del",unix:"Del"},37:{mac:"←",win:"Left Arrow",unix:"Left Arrow"},38:{mac:"↑",win:"Up Arrow",unix:"Up Arrow"},39:{mac:"→",win:"Right Arrow",unix:"Right Arrow"},40:{mac:"↓",win:"Down Arrow",unix:"Down Arrow"},106:{all:"*"},107:{all:"+"},109:{all:"-"},59:{all:";"},186:{all:";"},61:{all:"="},187:{all:"="},188:{all:","},109:{all:"-"},189:{all:"-"},190:{all:"."},191:{all:"/"},192:{all:"`"},219:{all:"["},220:{all:"\\"},221:{all:"]"},222:{all:"'"}};g=95,n=0;while(++g<106)f[g]={all:"Num-"+n},++n;g=47,n=0;while(++g<58)f[g]={all:n},++n;g=111,n=1;while(++g<136)f[g]={all:"F"+n},++n;var g=64;while(++g<91)f[g]={all:String.fromCharCode(g).toUpperCase()};var h={"¨":85,"´":69,"`":192,"ˆ":73,"˜":78},j="+",k="shift",l="super",m="ctrl",o="alt",p,q=navigator.platform.toLowerCase();q.indexOf("mac")>=0?(p="mac",j=""):q.indexOf("win")>=0?p="win":p="unix";var r=["ctrlKey","altKey","shiftKey","metaKey"],s=[17,18,16,91,224],x={run:function(a,b,c){x.startTime?(new Date).getTime()-x.startTime<c?a():x.stop():(x.startTime=(new Date).getTime(),x.running=setInterval(function(){x.run(a,b,c)},b))},running:null,stop:function(){clearInterval(x.running),x.startTime=null},startTime:null};e.prototype={defaults:{},eval_key_event:function(b,c,e){var f=this.comboData;x.stop();var g=f.comboString.length;i(b.keyCode)!=d&&w(f.comboParts,new u(b.keyCode),"keyCode"),b.metaKey&&(f.metaKey=!0),b.ctrlKey&&(f.ctrlKey=!0),b.altKey&&(f.altKey=!0),b.shiftKey&&(f.shiftKey=!0),f.comboString=a.map(f.comboParts,function(a,b){return a.keyChar}).join(j),f.comboString.length>g?(c.blur(),c.val(f.comboString),c.focus(),t(b.keyCode)||(c.select(),this.completed=!0,this.keyups=0,this.keydowns=0,x.stop(),e&&e(f),this.comboData=new v)):this.keyups==this.keydowns&&this.reset(c)},reset:function(a){a.val(""),this.completed=!1,this.comboData=new v,x.stop(),this.keydowns=0,this.keyups=0},revertToDefault:function(){var a=this.defaultCombo;this.reset(this.$elem);for(var b=0;b<a[p].length;b++){var c=new u;c.keyChar=a[p][b],w(this.comboData.comboParts,c,"keyChar")}this.comboData.comboString=a[p].join(j),this.$elem.val(a[p].join(j)),this.onComplete&&this.onComplete(this.comboData),this.comboData=new v},init:function(){this.$elem.data("keycombinator-config",this.config);var b=this.onComplete,c=this.$elem,d=this;c.keydown(function(e){d.completed=!1,d.keydowns+=1;var f=c;d.eval_key_event(e,f,b);if(e.keyCode==18&&d.comboData.comboString==i(18)){var f=c;x.run(function(){var c=f.val();if(undetected_key=h[c[c.length-1]])x.stop(),d.eval_key_event(new a.Event("keydown",{keyCode:undetected_key}),f,b)},10,1e4)}return!1}),c.keyup(function(a){return d.completed||(d.keyups+=1,d.eval_key_event(a,c,b)),!1}),c.click(function(a){c.select()})}},e.defaults=e.prototype.defaults,a.fn.makeKeyCombinator=function(a){return this.each(function(){(new e(this,a)).init()})},a.fn.clearKeyCombinator=function(){return this.each(function(){(new e(this)).reset(a(this))})},a.fn.defaultKeyCombinator=function(){return this.each(function(){(new e(this)).revertToDefault()})}})(jQuery,window,document);