/
jquery.keyboard.min.js
19 lines (15 loc) · 16.6 KB
/
jquery.keyboard.min.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/*
jQuery UI Virtual Keyboard
Version 1.7.7 minified
Author: Jeremy Satterfield
Modified: Rob Garrison (Mottie on github)
-----------------------------------------
Creative Commons Attribution-Share Alike 3.0 Unported License
http://creativecommons.org/licenses/by-sa/3.0/
Caret code from jquery.caret.1.02.js
Licensed under the MIT License:
http://www.opensource.org/licenses/mit-license.php
-----------------------------------------
*/
(function(e){e.keyboard=function(b,l){var a=this;a.$el=e(b);a.el=b;a.$el.data("keyboard",a);a.init=function(){a.options=e.extend(!0,{},e.keyboard.defaultOptions,l);a.shiftActive=!1;a.altActive=!1;a.metaActive=!1;a.sets=!1;a.rows=["ui-keyboard-keyset-default","ui-keyboard-keyset-shift","ui-keyboard-keyset-alt","ui-keyboard-keyset-alt-shift"];a.acceptedKeys=[];a.mappedKeys={};a.msie=e.browser.msie;a.inPlaceholder=a.$el.attr("placeholder")||"";a.watermark=typeof document.createElement("input").placeholder!== "undefined"&&a.inPlaceholder!=="";e.each("visible change hidden canceled accepted".split(" "),function(c,j){e.isFunction(a.options[j])&&a.$el.bind(j,a.options[j])});e(document).bind("mousedown keyup",function(c){a.isVisible&&(c.type==="mousedown"||c.type==="keyup"&&c.which===27)&&a.escClose(c)});a.$el.addClass("ui-keyboard-input ui-widget-content ui-corner-all").attr({"aria-haspopup":"true",role:"textbox"}).bind("focus.keyboard",function(){a.focusOn()});!a.watermark&&a.$el.val()===""&&a.$el.attr("placeholder")!== ""&&a.$el.addClass("placeholder").val(a.inPlaceholder)};a.reveal=function(){e(".ui-keyboard").hide();a.options.usePreview||a.$el.unbind("focus.keyboard");typeof a.$keyboard==="undefined"&&a.startup();!a.watermark&&a.el.value===a.inPlaceholder&&a.$el.removeClass("placeholder").val("");a.originalContent=a.$el.val();a.$preview.val(a.originalContent);a.$keyboard.css({position:"absolute",left:0,top:0}).show().position({of:a.options.position.of||a.$el.data("keyboardPosition")||a.$el,my:a.options.position.my, at:a.options.position.at,collision:a.options.usePreview?"fit":"flip"});if(typeof a.width==="undefined")a.width=a.options.usePreview?a.$keyboard.width():a.$el.width();a.$preview.css("width",a.width).focus();a.isVisible=!0;a.checkDecimal();if(a.msie){var c=a.$preview.val().length;a.$preview.caret(c,c);e('<div class="ui-keyboard-overlay"></div>').click(function(){e(this).remove();a.close()}).appendTo("body");a.options.usePreview||a.$el.addClass("ui-keyboard-overlay-input")}a.$el.trigger("visible",a.$el); return a};a.startup=function(){a.$keyboard=a.buildKeyboard();a.$allKeys=a.$keyboard.find(".ui-keyboard-button");a.$preview=a.options.usePreview?a.$keyboard.find(".ui-keyboard-preview"):a.$el;a.preview=a.$preview[0];a.$decBtn=a.$keyboard.find(".ui-keyboard-dec");a.wheel=e.isFunction(e.fn.mousewheel);a.$preview.keypress(function(c){if(a.options.restrictInput){var j=!c.charCode?String.fromCharCode(c.which):String.fromCharCode(c.charCode);a.acceptedKeysStr.indexOf(j)===-1&&c.preventDefault()}}).bind("keyup", function(c){switch(c.which){case 9:if(a.tab)e.keyboard.keyaction.tab(a),a.tab=!1;break;case 27:a.close()}a.$el.trigger("change",[a.$el,c])}).bind("keydown",function(c){switch(c.which){case 9:a.tab=!0;c.preventDefault();break;case 13:c.shiftKey&&(a.close(!0),c.preventDefault());break;case 86:if(c.ctrlKey){if(a.options.preventPaste){c.preventDefault();return}a.$preview.val(a.checkCombos(a.$preview.val())[0])}}!c.shiftKey&&a.mappedKeys.hasOwnProperty(c.which)&&(a.insertText(a.mappedKeys[c.which]),c.preventDefault()); c.shiftKey&&a.mappedKeys.hasOwnProperty(c.which+"s")&&(a.insertText(a.mappedKeys[c.which+"s"]),c.preventDefault())});a.options.preventPaste&&(a.$preview.bind("contextmenu",function(a){a.preventDefault()}),a.$el.bind("contextmenu",function(a){a.preventDefault()}));a.$keyboard.appendTo("body");a.$allKeys.bind(a.options.keyBinding,function(c){var j,d=e.data(this,"key"),f=d.action.split(":")[0];f.match("meta")&&(f="meta");if(e.keyboard.keyaction.hasOwnProperty(f))e.keyboard.keyaction[f](a,this);else typeof d.action!== "undefined"&&(j=a.wheel&&!e(this).is(".ui-keyboard-actionkey")?d.curTxt:d.action,a.insertText(j));c.text=j;a.$el.trigger("change",[a.$el,c]);a.options.usePreview&&a.$preview.focus();c.preventDefault()}).bind("mouseenter mouseleave",function(c){var j=e(this),d=e.data(this,"key");c.type==="mouseenter"&&a.el.type!=="password"&&j.addClass("ui-state-hover").attr("title",function(c,d){return a.wheel&&d===""&&a.sets?a.options.wheelMessage:d});if(c.type==="mouseleave")d.curTxt=d.original,d.curNum=0,e.data(this, "key",d),j.removeClass(a.el.type==="password"?"":"ui-state-hover").attr("title",function(c,d){return d===a.options.wheelMessage?"":d}).val(d.original)}).bind("mousewheel",function(c,j){if(a.wheel){var d,f=e(this),b=e.data(this,"key");d=b.layers||a.getLayers(f);b.curNum+=j>0?-1:1;if(b.curNum>d.length-1)b.curNum=0;if(b.curNum<0)b.curNum=d.length-1;b.layers=d;b.curTxt=d[b.curNum];e.data(this,"key",b);f.val(d[b.curNum]);return!1}}).bind("mouseup",function(){a.$preview.focus()});a.$decBtn.length&&a.$allKeys.click(function(){a.checkDecimal()})}; a.insertText=function(c){var b,d,f=a.$preview.caret().start,e=a.$preview.val(),g=e.length;if(a.msie&&f>0){d=f;b=d-1;if(f<g)for(;b--;)e.substring(b-1,b)==="\n"&&(f-=1);e.slice(-1)==="\n"&&d===g-1&&(f+=1)}c==="bksp"?(d=[e.substring(0,f-1)+e.substring(f,g)],f-=1):(e=e.substring(0,f)+c+e.substring(f,g),d=a.checkCombos(e),f+=d[1]+c.length);a.$preview.val(d[0]).caret(f,f);a.preview.scrollTop=f>g/2?a.preview.scrollHeight:0;return a};a.showKeySet=function(c){a.$keyboard.find(".ui-keyboard-actionkey[name*=key_meta]").removeClass("ui-state-active"); a.metaActive?(c=c.name.split("_")[1],a.$keyboard.find(".ui-keyboard-alt, .ui-keyboard-shift, .ui-keyboard-actionkey[class*=meta]").removeClass("ui-state-active").end().find(".ui-keyboard-actionkey.ui-keyboard-"+c).addClass("ui-state-active").end().find(".ui-keyboard-keyset").hide().end().find(".ui-keyboard-keyset-"+c).show()):(c=a.shiftActive?1:0,c+=a.altActive?2:0,a.$keyboard.find(".ui-keyboard-alt")[a.altActive?"addClass":"removeClass"]("ui-state-active").end().find(".ui-keyboard-shift")[a.shiftActive? "addClass":"removeClass"]("ui-state-active").end().find(".ui-keyboard-keyset").hide().end().find("."+a.rows[c]).show())};a.checkCombos=function(c){var b,d=c.length,f;a.options.useCombos&&(c=c.replace(/([`\'~\^\"ao])([a-z])/ig,function(c,b,d){return a.options.combos.hasOwnProperty(b)?a.options.combos[b][d]||c:c}));if(a.options.restrictInput){f=c.split("");for(b=0;b<d;b++)e.inArray(f[b],a.acceptedKeys)<0&&(c=c.replace(f[b],""))}a.options.maxLength!==!1&&c.length>a.options.maxLength&&(c=c.substring(0, a.options.maxLength));return[c,c.length-d]};a.checkDecimal=function(){/\./.test(a.$decBtn.closest(".ui-keyboard").find(".ui-keyboard-preview").val())?a.$decBtn.attr({disabled:"disabled","aria-disabled":"true"}).removeClass("ui-state-default ui-state-hover").addClass("ui-state-disabled"):a.$decBtn.removeAttr("disabled").attr({"aria-disabled":"false"}).addClass("ui-state-default").removeClass("ui-state-disabled")};a.getLayers=function(a){var b;b=a.attr("name");return a.closest(".ui-keyboard").find("input[name="+ b+"]").map(function(){return this.value}).get()};a.focusOn=function(){a.isVisible||(a.reveal(),a.options.usePreview||setTimeout(function(){a.preview.focus()},100))};a.close=function(c){if(a.$keyboard.is(":visible"))a.el.value=c?a.checkCombos(a.preview.value)[0]:a.originalContent,a.$el.scrollTop(a.el.scrollHeight).trigger(c?"accepted":"canceled",a.$el).trigger("hidden",a.$el).removeClass("ui-keyboard-overlay-input").blur(),a.options.usePreview||a.$el.blur().bind("focus.keyboard",function(){a.focusOn()}), a.$keyboard.hide(),a.isVisible=!1,!a.watermark&&a.el.value===""&&a.$el.addClass("placeholder").val(a.inPlaceholder)};a.accept=function(){a.close(!0)};a.escClose=function(c){c.target!==a.el&&(e(c.target).closest(".ui-keyboard").length||a.close(a.options.autoAccept?!0:!1))};a.keyBtn=e("<input />").attr({type:"button",role:"button","aria-disabled":"false"}).addClass("ui-keyboard-button ui-state-default ui-corner-all");a.addKey=function(c,b,d){var f,k;b=d===!0?c:a.options.display[b]||c;f=b.split(":"); b=f[0]!==""&&f.length>1?e.trim(f[0]):b;f=f.length>1?e.trim(f[1]).replace(/_/g," ")||"":"";/\((.+?)\)/.test(b)&&(k=b.replace(/\((.+?)\)/g,""),b=a.mappedKeys[b.match(/\((.+?)\)/)[1]]=k);k=b.length>1?" ui-keyboard-widekey":"";k+=d!==!0?" ui-keyboard-actionkey":"";return a.keyBtn.clone().attr({name:"key_"+c,title:f}).data("key",{action:c,original:b,curTxt:b,curNum:0}).val(b).addClass("ui-keyboard-"+(d===!0?c.charCodeAt(0):c)+k)};a.buildKeyboard=function(){var c,b,d,f,k,g,h,i,l=0,m=e("<div />").addClass("ui-keyboard ui-widget-content ui-widget ui-corner-all ui-helper-clearfix").attr({role:"textbox"}).hide(); a.options.usePreview?a.$preview=a.$el.clone(!1).removeAttr("id").removeAttr("placeholder").removeClass("placeholder").addClass("ui-widget-content ui-keyboard-preview ui-corner-all").show():(a.$preview=a.$el,a.options.position.at=a.options.position.at2);a.$preview.attr(a.options.lockInput?{readonly:"readonly"}:{}).bind("keyup",function(){var b=a.$preview.caret().start,c=a.checkCombos(a.$preview.val());c[1]!==0&&(b+=c[1],a.$preview.val(c[0]).caret(b,b))});a.options.usePreview&&e("<div />").append(a.$preview).appendTo(m); if(a.options.layout==="custom")e.keyboard.layouts.custom=a.options.customLayout||{"default":["{cancel}"]};e.each(e.keyboard.layouts[a.options.layout],function(n,o){if(n!==""){l++;f=e("<div />").attr("name",n).addClass("ui-keyboard-keyset ui-keyboard-keyset-"+n).appendTo(m)[n==="default"?"show":"hide"]();for(b=0;b<o.length;b++){d=e("<div />").addClass("ui-keyboard-row ui-keyboard-row"+b).appendTo(f);k=e.trim(o[b]).replace(/\{(\.?)[\s+]?:[\s+]?(\.?)\}/g,"{$1:$2}");h=k.split(/\s+/);for(g=0;g<h.length;g++)if(h[g].length!== 0)if(/^\{\S+\}$/.test(h[g]))if(c=h[g].match(/^\{(\S+)\}$/)[1].toLowerCase(),/^sp:(\.?\d+)$/.test(c)&&(i=c.match(/^sp:(\.?\d+)$/)[1]||0,e("<span> </span>").css("margin","0 "+i+"em").appendTo(d)),/^meta\d+\:?(\w+)?/.test(c))a.addKey(c,c).appendTo(d);else switch(c){case "a":case "accept":a.addKey("accept",c).addClass(a.options.actionClass).appendTo(d);break;case "alt":case "altgr":a.addKey("alt","alt").appendTo(d);break;case "b":case "bksp":a.addKey("bksp",c).appendTo(d);break;case "c":case "cancel":a.addKey("cancel", c).addClass(a.options.actionClass).appendTo(d);break;case "clear":a.addKey("clear","clear").appendTo(d);break;case "dec":a.acceptedKeys.push(".");a.addKey("dec","dec").appendTo(d);break;case "e":case "enter":a.addKey("enter",c).appendTo(d);break;case "s":case "shift":a.addKey("shift",c).appendTo(d);break;case "sign":a.acceptedKeys.push("-");a.addKey("sign","sign").appendTo(d);break;case "space":a.acceptedKeys.push(" ");a.addKey("space","space").appendTo(d);break;case "t":case "tab":a.addKey("tab", c).appendTo(d)}else a.acceptedKeys.push(h[g].split(":")[0]),a.addKey(h[g],h[g],!0).attr("name","key_"+b+"_"+g).appendTo(d)}}});if(l>1)a.sets=!0;a.acceptedKeysStr=a.acceptedKeys.join("");return m};a.destroy=function(){e(document).unbind("mousedown keyup",a.escClose);a.$keyboard.remove();a.$el.removeClass("ui-keyboard-input ui-widget-content ui-corner-all").removeAttr("aria-haspopup").removeAttr("role").unbind("focus accepted canceled hidden visible").removeData("keyboard")};a.init()};e.keyboard.keyaction= {accept:function(b){b.close(!0)},alt:function(b,e){b.altActive=!b.altActive;b.metaActive=!1;b.showKeySet(e)},bksp:function(b){b.insertText("bksp")},cancel:function(b){b.close()},clear:function(b){b.$preview.val("")},dec:function(b){b.insertText(".")},enter:function(b){b.el.tagName!=="INPUT"&&b.insertText("\r\n")},meta:function(b,l){b.metaActive=e(l).is(".ui-state-active")?!1:!0;b.showKeySet(l)},shift:function(b,e){b.shiftActive=!b.shiftActive;b.metaActive=!1;b.showKeySet(e)},sign:function(b){/^\-?\d*\.?\d*$/.test(b.$preview.val())&& b.$preview.val(b.$preview.val()*-1)},space:function(b){b.insertText(" ")},tab:function(b){b.el.tagName!=="INPUT"&&b.insertText("\t")}};e.keyboard.layouts={alpha:{"default":["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} a b c d e f g h i j [ ] \\","k l m n o p q r s ; ' {enter}","{shift} t u v w x y z , . / {shift}","{accept} {space} {cancel}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} A B C D E F G H I J { } |",'K L M N O P Q R S : " {enter}',"{shift} T U V W X Y Z < > ? {shift}","{accept} {space} {cancel}"]}, qwerty:{"default":["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} q w e r t y u i o p [ ] \\","a s d f g h j k l ; ' {enter}","{shift} z x c v b n m , . / {shift}","{accept} {space} {cancel}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} Q W E R T Y U I O P { } |",'A S D F G H J K L : " {enter}',"{shift} Z X C V B N M < > ? {shift}","{accept} {space} {cancel}"]},international:{"default":["` 1 2 3 4 5 6 7 8 9 0 - = {bksp}","{tab} q w e r t y u i o p [ ] \\","a s d f g h j k l ; ' {enter}","{shift} z x c v b n m , . / {shift}", "{accept} {space} {alt} {cancel}"],shift:["~ ! @ # $ % ^ & * ( ) _ + {bksp}","{tab} Q W E R T Y U I O P { } |",'A S D F G H J K L : " {enter}',"{shift} Z X C V B N M < > ? {shift}","{accept} {space} {alt} {cancel}"],alt:["~ \u00a1 \u00b2 \u00b3 \u00a4 \u20ac \u00bc \u00bd \u00be \u2018 \u2019 \u00a5 \u00d7 {bksp}","{tab} \u00e4 \u00e5 \u00e9 \u00ae \u00fe \u00fc \u00fa \u00ed \u00f3 \u00f6 \u00ab \u00bb \u00ac","\u00e1 \u00df \u00f0 f g h j k \u00f8 \u00b6 \u00b4 {enter}","{shift} \u00e6 x \u00a9 v b \u00f1 \u00b5 \u00e7 > \u00bf {shift}", "{accept} {space} {alt} {cancel}"],"alt-shift":["~ \u00b9 \u00b2 \u00b3 \u00a3 \u20ac \u00bc \u00bd \u00be \u2018 \u2019 \u00a5 \u00f7 {bksp}","{tab} \u00c4 \u00c5 \u00c9 \u00ae \u00de \u00dc \u00da \u00cd \u00d3 \u00d6 \u00ab \u00bb \u00a6","\u00c4 \u00a7 \u00d0 F G H J K \u00d8 \u00b0 \u00a8 {enter}","{shift} \u00c6 X \u00a2 V B \u00d1 \u00b5 \u00c7 . \u00bf {shift}","{accept} {space} {alt} {cancel}"]},dvorak:{"default":["` 1 2 3 4 5 6 7 8 9 0 [ ] {bksp}","{tab} ' , . p y f g c r l / = \\","a o e u i d h t n s - {enter}", "{shift} ; q j k x b m w v z {shift}","{accept} {space} {cancel}"],shift:["~ ! @ # $ % ^ & * ( ) { } {bksp}",'{tab} " < > P Y F G C R L ? + |',"A O E U I D H T N S _ {enter}","{shift} : Q J K X B M W V Z {shift}","{accept} {space} {cancel}"]},num:{"default":["= ( ) {b}","{clear} / * -","7 8 9 +","4 5 6 {sign}","1 2 3 %","0 . {a} {c}"]}};e.keyboard.defaultOptions={layout:"qwerty",customLayout:null,position:{of:null,my:"center top",at:"center top",at2:"center bottom"},usePreview:!0,display:{a:"\u2714:Accept (Shift-Enter)", accept:"Accept:Accept (Shift-Enter)",alt:"AltGr:Alternate Graphemes",b:"\u2190:Backspace",bksp:"Bksp:Backspace",c:"\u2716:Cancel (Esc)",cancel:"Cancel:Cancel (Esc)",clear:"C:Clear",dec:".:Decimal",e:"\u21b5:Enter",enter:"Enter:Enter",s:"\u21e7:Shift",shift:"Shift:Shift",sign:"\u00b1:Change Sign",space:"Space:Space",t:"\u21e5:Tab",tab:"\u21e5 Tab:Tab"},wheelMessage:"Use mousewheel to see other keys",actionClass:"ui-state-active",autoAccept:!1,lockInput:!1,restrictInput:!1,preventPaste:!1,maxLength:!1, keyBinding:"mousedown",useCombos:!0,combos:{"`":{a:"\u00e0",A:"\u00c0",e:"\u00e8",E:"\u00c8",i:"\u00ec",I:"\u00cc",o:"\u00f2",O:"\u00d2",u:"\u00f9",U:"\u00d9"},"'":{a:"\u00e1",A:"\u00c1",e:"\u00e9",E:"\u00c9",i:"\u00ed",I:"\u00cd",o:"\u00f3",O:"\u00d3",u:"\u00fa",U:"\u00da",y:"\u00fd",Y:"\u00dd",c:"\u00e7",C:"\u00c7"},'"':{a:"\u00e4",A:"\u00c4",e:"\u00eb",E:"\u00cb",i:"\u00ef",I:"\u00cf",o:"\u00f6",O:"\u00d6",u:"\u00fc",U:"\u00dc"},"^":{a:"\u00e2",A:"\u00c2",e:"\u00ea",E:"\u00ca",i:"\u00ee",I:"\u00ce", o:"\u00f4",O:"\u00d4",u:"\u00fb",U:"\u00db"},"~":{a:"\u00e3",A:"\u00c3",e:"\u1ebd",E:"\u1ebc",i:"\u0129",I:"\u0128",o:"\u00f5",O:"\u00d5",u:"\u0169",U:"\u0168",n:"\u00f1",N:"\u00d1"},a:{e:"\u00e6"},A:{E:"\u00c6"},o:{e:"\u0153"},O:{E:"\u0152"}},accepted:null,canceled:null,hidden:null,visible:null};e.fn.keyboard=function(b){return this.each(function(){new e.keyboard(this,b)})};e.fn.getkeyboard=function(){return this.data("keyboard")}})(jQuery);
(function(e,b,l,a){e.fn.caret=function(c,j){var d,f,k,g,h;h=document.selection;var i=this[0],p=i.scrollTop,m=e.browser.msie;if(typeof i!=="undefined")return typeof c==="number"&&typeof j==="number"&&(f=c,g=j),typeof f!=="undefined"?(m?(h=i.createTextRange(),h.collapse(!0),h.moveStart("character",f),h.moveEnd("character",g-f),h.select()):(i.selectionStart=f,i.selectionEnd=g),i.focus(),i.scrollTop=p,this):(m?i.tagName.toLowerCase()!=="textarea"?(g=this.val(),f=h[l]()[a](),f.moveEnd("character",g[b]), d=f.text===""?g[b]:g.lastIndexOf(f.text),f=h[l]()[a](),f.moveStart("character",-g[b]),k=f.text[b]):(f=h[l](),h=f[a](),h.moveToElementText(i),h.setEndPoint("EndToEnd",f),d=h.text[b]-f.text[b],k=d+f.text[b]):(d=i.selectionStart,k=i.selectionEnd),h=i.value.substring(d,k),{start:d,end:k,text:h,replace:function(a){return i.value.substring(0,d)+a+i.value.substring(k,i.value[b])}})}})(jQuery,"length","createRange","duplicate");