2
0
mirror of https://github.com/ACSPRI/queXS synced 2024-04-02 12:12:16 +00:00
Files
CATI_Tool/include/limesurvey/scripts/jquery/jquery.keypad.min.js

8 lines
16 KiB
JavaScript

/* http://keith-wood.name/keypad.html
Keypad field entry extension for jQuery v1.3.0.
Written by Keith Wood (kbwood{at}iinet.com.au) August 2008.
Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and
MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses.
Please attribute the author if you use it. */
(function($){var t='keypad';function Keypad(){this.BS='\x08';this.DEL='\x7F';this.EN='\x0D';this._curInst=null;this._disabledFields=[];this._keypadShowing=false;this.regional=[];this.regional['']={buttonText:'...',buttonStatus:'Open the keypad',closeText:'Close',closeStatus:'Close the keypad',clearText:'Clear',clearStatus:'Erase all the text',backText:'Back',backStatus:'Erase the previous character',enterText:'Enter',enterStatus:'Carriage return',shiftText:'Shift',shiftStatus:'Toggle upper/lower case characters',alphabeticLayout:this.qwertyAlphabetic,fullLayout:this.qwertyLayout,isAlphabetic:this.isAlphabetic,isNumeric:this.isNumeric,isRTL:false};this._defaults={showOn:'focus',buttonImage:'',buttonImageOnly:false,showAnim:'show',showOptions:{},duration:'normal',appendText:'',useThemeRoller:false,keypadClass:'',prompt:'',layout:['123'+this.CLOSE,'456'+this.CLEAR,'789'+this.BACK,this.SPACE+'0'],separator:'',target:null,keypadOnly:true,randomiseAlphabetic:false,randomiseNumeric:false,randomiseOther:false,randomiseAll:false,beforeShow:null,onKeypress:null,onClose:null};$.extend(this._defaults,this.regional['']);this.mainDiv=$('<div class="'+this._mainDivClass+'" style="display: none;"></div>')}var u='\x00';var v='\x01';var w='\x02';var x='\x03';var y='\x04';var z='\x05';var A='\x06';var B='\x07';$.extend(Keypad.prototype,{CLOSE:u,CLEAR:v,BACK:w,SHIFT:x,SPACE_BAR:y,SPACE:z,HALF_SPACE:A,ENTER:B,qwertyAlphabetic:['qwertyuiop','asdfghjkl','zxcvbnm'],qwertyLayout:['!@#$%^&*()_='+A+z+u,A+'`~[]{}<>\\|/'+z+'789','qwertyuiop\'"'+A+'456',A+'asdfghjkl;:'+z+'123',z+'zxcvbnm,.?'+z+A+'-0+',z+x+y+B+A+w+v],markerClassName:'hasKeypad',_mainDivClass:'keypad-popup',_inlineClass:'keypad-inline',_appendClass:'keypad-append',_triggerClass:'keypad-trigger',_disableClass:'keypad-disabled',_inlineEntryClass:'keypad-keyentry',_coverClass:'keypad-cover',setDefaults:function(a){extendRemove(this._defaults,a||{});return this},_attachKeypad:function(a,b){var c=(a.nodeName.toLowerCase()!='input'&&a.nodeName.toLowerCase()!='textarea');var d={_inline:c,_mainDiv:(c?$('<div class="'+this._inlineClass+'"></div>'):$.keypad.mainDiv),ucase:false};d.settings=$.extend({},b||{});this._setInput(a,d);this._connectKeypad(a,d);if(c){$(a).append(d._mainDiv).bind('click.keypad',function(){d._input.focus()});this._updateKeypad(d)}else if($(a).is(':disabled')){this._disableKeypad(a)}},_setInput:function(a,b){b._input=$(!b._inline?a:this._get(b,'target')||'<input type="text" class="'+this._inlineEntryClass+'" disabled="disabled"/>');if(b._inline){a=$(a);a.find('input').remove();if(!this._get(b,'target')){a.append(b._input)}}},_connectKeypad:function(d,e){var f=$(d);if(f.hasClass(this.markerClassName)){return}var g=this._get(e,'appendText');var h=this._get(e,'isRTL');if(g){f[h?'before':'after']('<span class="'+this._appendClass+'">'+g+'</span>')}if(!e._inline){var i=this._get(e,'showOn');if(i=='focus'||i=='both'){f.focus(this._showKeypad).keydown(this._doKeyDown)}if(i=='button'||i=='both'){var j=this._get(e,'buttonText');var k=this._get(e,'buttonStatus');var l=this._get(e,'buttonImage');var m=$(this._get(e,'buttonImageOnly')?$('<img src="'+l+'" alt="'+k+'" title="'+k+'"/>'):$('<button type="button" title="'+k+'"></button>').html(l==''?j:$('<img src="'+l+'" alt="'+k+'" title="'+k+'"/>')));f[h?'before':'after'](m);m.addClass(this._triggerClass).click(function(){if($.keypad._keypadShowing&&$.keypad._lastField==d){$.keypad._hideKeypad()}else{$.keypad._showKeypad(d)}return false})}}e.saveReadonly=f.attr('readonly');f.addClass(this.markerClassName).attr('readonly',(this._get(e,'keypadOnly')?'readonly':'')).bind('setData.keypad',function(a,b,c){e.settings[b]=c}).bind('getData.keypad',function(a,b){return this._get(e,b)});$.data(d,t,e)},_destroyKeypad:function(a){var b=$(a);if(!b.hasClass(this.markerClassName)){return}var c=$.data(a,t);if(this._curInst==c){this._hideKeypad()}b.siblings('.'+this._appendClass).remove().end().siblings('.'+this._triggerClass).remove().end().prev('.'+this._inlineEntryClass).remove();b.empty().unbind('focus',this._showKeypad).removeClass(this.markerClassName).attr('readonly',c.saveReadonly);$.removeData(c._input[0],t);$.removeData(a,t)},_enableKeypad:function(b){var c=$(b);if(!c.hasClass(this.markerClassName)){return}var d=b.nodeName.toLowerCase();if(d=='input'||d=='textarea'){b.disabled=false;c.siblings('button.'+this._triggerClass).each(function(){this.disabled=false}).end().siblings('img.'+this._triggerClass).css({opacity:'1.0',cursor:''})}else if(d=='div'||d=='span'){c.children('.'+this._disableClass).remove();var e=$.data(b,t);e._mainDiv.find('button').attr('disabled','')}this._disabledFields=$.map(this._disabledFields,function(a){return(a==b?null:a)})},_disableKeypad:function(b){var c=$(b);if(!c.hasClass(this.markerClassName)){return}var d=b.nodeName.toLowerCase();if(d=='input'||d=='textarea'){b.disabled=true;c.siblings('button.'+this._triggerClass).each(function(){this.disabled=true}).end().siblings('img.'+this._triggerClass).css({opacity:'0.5',cursor:'default'})}else if(d=='div'||d=='span'){var e=c.children('.'+this._inlineClass);var f=e.offset();var g={left:0,top:0};e.parents().each(function(){if($(this).css('position')=='relative'){g=$(this).offset();return false}});c.prepend('<div class="'+this._disableClass+'" style="width: '+e.outerWidth()+'px; height: '+e.outerHeight()+'px; left: '+(f.left-g.left)+'px; top: '+(f.top-g.top)+'px;"></div>');var h=$.data(b,t);h._mainDiv.find('button').attr('disabled','disabled')}this._disabledFields=$.map(this._disabledFields,function(a){return(a==b?null:a)});this._disabledFields[this._disabledFields.length]=b},_isDisabledKeypad:function(a){return(a&&$.inArray(a,this._disabledFields)>-1)},_changeKeypad:function(a,b,c){var d=b||{};if(typeof b=='string'){d={};d[b]=c}var e=$.data(a,t);if(e){if(this._curInst==e){this._hideKeypad()}extendRemove(e.settings,d);this._setInput($(a),e);this._updateKeypad(e)}},_showKeypad:function(b){b=b.target||b;if($.keypad._isDisabledKeypad(b)||$.keypad._lastField==b){return}var c=$.data(b,t);$.keypad._hideKeypad(null,'');$.keypad._lastField=b;$.keypad._pos=$.keypad._findPos(b);$.keypad._pos[1]+=b.offsetHeight;var d=false;$(b).parents().each(function(){d|=$(this).css('position')=='fixed';return!d});if(d&&$.browser.opera){$.keypad._pos[0]-=document.documentElement.scrollLeft;$.keypad._pos[1]-=document.documentElement.scrollTop}var e={left:$.keypad._pos[0],top:$.keypad._pos[1]};$.keypad._pos=null;c._mainDiv.css({position:'absolute',display:'block',top:'-1000px',width:($.browser.opera?'1000px':'auto')});$.keypad._updateKeypad(c);e=$.keypad._checkOffset(c,e,d);c._mainDiv.css({position:(d?'fixed':'absolute'),display:'none',left:e.left+'px',top:e.top+'px'});var f=$.keypad._get(c,'showAnim');var g=$.keypad._get(c,'duration');g=(g=='normal'&&$.ui&&$.ui.version>='1.8'?'_default':g);var h=function(){$.keypad._keypadShowing=true;var a=$.keypad._getBorders(c._mainDiv);c._mainDiv.find('iframe.'+$.keypad._coverClass).css({left:-a[0],top:-a[1],width:c._mainDiv.outerWidth(),height:c._mainDiv.outerHeight()})};if($.effects&&$.effects[f]){c._mainDiv.show(f,$.keypad._get(c,'showOptions'),g,h)}else{c._mainDiv[f||'show']((f?g:''),h)}if(!f){h()}if(c._input[0].type!='hidden'){c._input[0].focus()}$.keypad._curInst=c},_updateKeypad:function(a){var b=this._getBorders(a._mainDiv);a._mainDiv.empty().append(this._generateHTML(a)).find('iframe.'+this._coverClass).css({left:-b[0],top:-b[1],width:a._mainDiv.outerWidth(),height:a._mainDiv.outerHeight()});a._mainDiv.removeClass().addClass(this._get(a,'keypadClass')+(this._get(a,'useThemeRoller')?' ui-widget ui-widget-content':'')+(this._get(a,'isRTL')?' keypad-rtl':'')+' '+(a._inline?this._inlineClass:this._mainDivClass));var c=this._get(a,'beforeShow');if(c){c.apply((a._input?a._input[0]:null),[a._mainDiv,a])}},_getBorders:function(c){var d=function(a){var b=($.browser.msie?1:0);return{thin:1+b,medium:3+b,thick:5+b}[a]||a};return[parseFloat(d(c.css('border-left-width'))),parseFloat(d(c.css('border-top-width')))]},_checkOffset:function(a,b,c){var d=a._input?this._findPos(a._input[0]):null;var e=window.innerWidth||document.documentElement.clientWidth;var f=window.innerHeight||document.documentElement.clientHeight;var g=document.documentElement.scrollLeft||document.body.scrollLeft;var h=document.documentElement.scrollTop||document.body.scrollTop;if(($.browser.msie&&parseInt($.browser.version,10)<7)||$.browser.opera){var i=0;a._mainDiv.find(':not(div,iframe)').each(function(){i=Math.max(i,this.offsetLeft+$(this).outerWidth()+parseInt($(this).css('margin-right'),10))});a._mainDiv.css('width',i)}if(this._get(a,'isRTL')||(b.left+a._mainDiv.outerWidth()-g)>e){b.left=Math.max((c?0:g),d[0]+(a._input?a._input.outerWidth():0)-(c?g:0)-a._mainDiv.outerWidth()-(c&&$.browser.opera?document.documentElement.scrollLeft:0))}else{b.left-=(c?g:0)}if((b.top+a._mainDiv.outerHeight()-h)>f){b.top=Math.max((c?0:h),d[1]-(c?h:0)-a._mainDiv.outerHeight()-(c&&$.browser.opera?document.documentElement.scrollTop:0))}else{b.top-=(c?h:0)}return b},_findPos:function(a){while(a&&(a.type=='hidden'||a.nodeType!=1)){a=a.nextSibling}var b=$(a).offset();return[b.left,b.top]},_hideKeypad:function(a,b){var c=this._curInst;if(!c||(a&&c!=$.data(a,t))){return}if(this._keypadShowing){b=(b!=null?b:this._get(c,'duration'));b=(b=='normal'&&$.ui&&$.ui.version>='1.8'?'_default':b);var d=this._get(c,'showAnim');if($.effects&&$.effects[d]){c._mainDiv.hide(d,this._get(c,'showOptions'),b)}else{c._mainDiv[(d=='slideDown'?'slideUp':(d=='fadeIn'?'fadeOut':'hide'))](d?b:'')}}var e=this._get(c,'onClose');if(e){e.apply((c._input?c._input[0]:null),[c._input.val(),c])}if(this._keypadShowing){this._keypadShowing=false;this._lastField=null}if(c._inline){c._input.val('')}this._curInst=null},_doKeyDown:function(e){if(e.keyCode==9){$.keypad.mainDiv.stop(true,true);$.keypad._hideKeypad()}},_checkExternalClick:function(a){if(!$.keypad._curInst){return}var b=$(a.target);if(!b.parents().andSelf().is('.'+$.keypad._mainDivClass)&&!b.hasClass($.keypad.markerClassName)&&!b.parents().andSelf().hasClass($.keypad._triggerClass)&&$.keypad._keypadShowing){$.keypad._hideKeypad()}},_shiftKeypad:function(a){a.ucase=!a.ucase;this._updateKeypad(a);a._input.focus()},_clearValue:function(a){this._setValue(a,'',0);this._notifyKeypress(a,$.keypad.DEL)},_backValue:function(a){var b=a._input[0];var c=a._input.val();var d=[c.length,c.length];if(b.setSelectionRange){d=(a._input.attr('readonly')||a._input.attr('disabled')?d:[b.selectionStart,b.selectionEnd])}else if(b.createTextRange){d=(a._input.attr('readonly')||a._input.attr('disabled')?d:this._getIERange(b))}this._setValue(a,(c.length==0?'':c.substr(0,d[0]-1)+c.substr(d[1])),d[0]-1);this._notifyKeypress(a,$.keypad.BS)},_selectValue:function(a,b){this.insertValue(a._input[0],b);this._setValue(a,a._input.val());this._notifyKeypress(a,b)},insertValue:function(a,b){a=(a.jquery?a:$(a));var c=a[0];var d=a.val();var e=[d.length,d.length];if(c.setSelectionRange){e=(a.attr('readonly')||a.attr('disabled')?e:[c.selectionStart,c.selectionEnd])}else if(c.createTextRange){e=(a.attr('readonly')||a.attr('disabled')?e:this._getIERange(c))}a.val(d.substr(0,e[0])+b+d.substr(e[1]));pos=e[0]+b.length;if(a.css('display')!='none'){a.focus()}if(c.setSelectionRange){if(a.css('display')!='none'){c.setSelectionRange(pos,pos)}}else if(c.createTextRange){var e=c.createTextRange();e.move('character',pos);e.select()}},_getIERange:function(e){e.focus();var f=document.selection.createRange().duplicate();var g=this._getIETextRange(e);g.setEndPoint('EndToStart',f);var h=function(a){var b=a.text;var c=b;var d=false;while(true){if(a.compareEndPoints('StartToEnd',a)==0){break}else{a.moveEnd('character',-1);if(a.text==b){c+='\r\n'}else{break}}}return c};var i=h(g);var j=h(f);return[i.length,i.length+j.length]},_getIETextRange:function(a){var b=(a.nodeName.toLowerCase()=='input');var c=(b?a.createTextRange():document.body.createTextRange());if(!b){c.moveToElementText(a)}return c},_setValue:function(a,b){var c=a._input.attr('maxlength');if(c>-1){b=b.substr(0,c)}a._input.val(b);if(!this._get(a,'onKeypress')){a._input.trigger('change')}},_notifyKeypress:function(a,b){var c=this._get(a,'onKeypress');if(c){c.apply((a._input?a._input[0]:null),[b,a._input.val(),a])}},_get:function(a,b){return a.settings[b]!==undefined?a.settings[b]:this._defaults[b]},_generateHTML:function(a){var b=this._get(a,'useThemeRoller');var c=this._get(a,'isRTL');var d=this._get(a,'prompt');var e=this._get(a,'separator');var f=(!d?'':'<div class="keypad-prompt'+(b?' ui-widget-header ui-corner-all':'')+'">'+d+'</div>');var g=this._randomiseLayout(a);for(var i=0;i<g.length;i++){f+='<div class="keypad-row">';var h=g[i].split(e);for(var j=0;j<h.length;j++){if(a.ucase){h[j]=h[j].toUpperCase()}f+=(h[j]==this.SPACE?'<div class="keypad-space"></div>':(h[j]==this.HALF_SPACE?'<div class="keypad-half-space"></div>':'<button type="button" class="keypad-key'+(b?' ui-state-default':'')+(h[j]==this.CLEAR?' keypad-clear'+(b?' ui-state-highlight':''):(h[j]==this.BACK?' keypad-back'+(b?' ui-state-highlight':''):(h[j]==this.CLOSE?' keypad-close'+(b?' ui-state-highlight':''):(h[j]==this.SHIFT?' keypad-shift'+(b?' ui-state-highlight':''):(h[j]==this.ENTER?' keypad-enter'+(b?' ui-state-highlight':''):(h[j]==this.SPACE_BAR?' keypad-spacebar':''))))))+'" '+'title="'+(h[j]==this.CLEAR?this._get(a,'clearStatus'):(h[j]==this.BACK?this._get(a,'backStatus'):(h[j]==this.ENTER?this._get(a,'enterStatus'):(h[j]==this.CLOSE?this._get(a,'closeStatus'):(h[j]==this.SHIFT?this._get(a,'shiftStatus'):'')))))+'">'+(h[j]==this.CLEAR?this._get(a,'clearText'):(h[j]==this.BACK?this._get(a,'backText'):(h[j]==this.CLOSE?this._get(a,'closeText'):(h[j]==this.SHIFT?this._get(a,'shiftText'):(h[j]==this.ENTER?this._get(a,'enterText'):(h[j]==this.SPACE_BAR?'&nbsp;':(h[j]==' '?'&nbsp;':h[j])))))))+'</button>'))}f+='</div>'}f+='<div style="clear: both;"></div>'+(!a._inline&&$.browser.msie&&parseInt($.browser.version,10)<7?'<iframe src="javascript:false;" class="'+$.keypad._coverClass+'"></iframe>':'');f=$(f);var k=a;var l='keypad-key-down'+(b?' ui-state-active':'');f.find('button').mousedown(function(){$(this).addClass(l)}).mouseup(function(){$(this).removeClass(l)}).mouseout(function(){$(this).removeClass(l)}).filter('.keypad-clear').click(function(){$.keypad._clearValue(k)}).end().filter('.keypad-back').click(function(){$.keypad._backValue(k)}).end().filter('.keypad-close').click(function(){$.keypad._curInst=(k._inline?k:$.keypad._curInst);$.keypad._hideKeypad()}).end().filter('.keypad-shift').click(function(){$.keypad._shiftKeypad(k)}).end().filter('.keypad-enter').click(function(){$.keypad._selectValue(k,$.keypad.EN)}).end().not('.keypad-clear').not('.keypad-back').not('.keypad-close').not('.keypad-shift').not('.keypad-enter').click(function(){$.keypad._selectValue(k,$(this).text())});return f},_randomiseLayout:function(b){var c=this._get(b,'randomiseNumeric');var d=this._get(b,'randomiseAlphabetic');var e=this._get(b,'randomiseOther');var f=this._get(b,'randomiseAll');var g=this._get(b,'layout');if(!c&&!d&&!e&&!f){return g}var h=this._get(b,'isNumeric');var k=this._get(b,'isAlphabetic');var l=this._get(b,'separator');var m=[];var p=[];var q=[];var r=[];for(var i=0;i<g.length;i++){r[i]='';var s=g[i].split(l);for(var j=0;j<s.length;j++){if(this._isControl(s[j])){continue}if(f){q.push(s[j])}else if(h(s[j])){m.push(s[j])}else if(k(s[j])){p.push(s[j])}else{q.push(s[j])}}}if(c){this._shuffle(m)}if(d){this._shuffle(p)}if(e||f){this._shuffle(q)}var n=0;var a=0;var o=0;for(var i=0;i<g.length;i++){var s=g[i].split(l);for(var j=0;j<s.length;j++){r[i]+=(this._isControl(s[j])?s[j]:(f?q[o++]:(h(s[j])?m[n++]:(k(s[j])?p[a++]:q[o++]))))+l}}return r},_isControl:function(a){return a<' '},isAlphabetic:function(a){return(a>='A'&&a<='Z')||(a>='a'&&a<='z')},isNumeric:function(a){return(a>='0'&&a<='9')},_shuffle:function(a){for(var i=a.length-1;i>0;i--){var j=Math.floor(Math.random()*a.length);var b=a[i];a[i]=a[j];a[j]=b}}});function extendRemove(a,b){$.extend(a,b);for(var c in b){if(b[c]==null||b[c]==undefined){a[c]=b[c]}}return a};$.fn.keypad=function(a){var b=Array.prototype.slice.call(arguments,1);if(a=='isDisabled'){return $.keypad['_'+a+'Keypad'].apply($.keypad,[this[0]].concat(b))}return this.each(function(){typeof a=='string'?$.keypad['_'+a+'Keypad'].apply($.keypad,[this].concat(b)):$.keypad._attachKeypad(this,a)})};$.keypad=new Keypad();$(function(){$(document.body).append($.keypad.mainDiv).mousedown($.keypad._checkExternalClick)})})(jQuery);