accessibleprimevue
Version:
Note: This is the forked version of the Primefaces/PrimeVue repository. Since V3 has reached its EOL this is use to fix identified accessibility bugs in the v3 version of primevue. PrimeVue is an open source UI library for Vue featuring a rich set of 80+
2 lines (1 loc) • 8.38 kB
JavaScript
import{DomHandler as e}from"primevue/utils";import t from"primevue/basecomponent";import i from"primevue/inputmask/style";import{openBlock as s,createElementBlock as n,mergeProps as a}from"vue";var h={name:"InputMask",extends:{name:"BaseInputMask",extends:t,props:{modelValue:null,slotChar:{type:String,default:"_"},mask:{type:String,default:null},autoClear:{type:Boolean,default:!0},unmask:{type:Boolean,default:!1},readonly:{type:Boolean,default:!1},invalid:{type:Boolean,default:!1},variant:{type:String,default:null}},style:i},inheritAttrs:!1,emits:["update:modelValue","focus","blur","keydown","complete","keypress","paste"],watch:{mask:function(e,t){t!==e&&this.initMask()}},mounted:function(){this.initMask()},updated:function(){this.isValueUpdated()&&this.updateValue()},methods:{onInput:function(e){this.androidChrome?this.handleAndroidInput(e):this.handleInputChange(e),this.$emit("update:modelValue",e.target.value)},onFocus:function(e){var t,i=this;this.readonly||(this.focus=!0,clearTimeout(this.caretTimeoutId),this.focusText=this.$el.value,t=this.checkVal(),this.caretTimeoutId=setTimeout((function(){i.$el===document.activeElement&&(i.writeBuffer(),t===i.mask.replace("?","").length?i.caret(0,t):i.caret(t))}),10),this.$emit("focus",e))},onBlur:function(e){if(this.focus=!1,this.checkVal(),this.updateModel(e),this.$el.value!==this.focusText){var t=document.createEvent("HTMLEvents");t.initEvent("change",!0,!1),this.$el.dispatchEvent(t)}this.$emit("blur",e)},onKeyDown:function(t){if(!this.readonly){var i,s,n,a=t.code,h=/iphone/i.test(e.getUserAgent());this.oldVal=this.$el.value,"Backspace"===a||"Delete"===a||h&&"Escape"===a?((n=(i=this.caret()).end)-(s=i.begin)==0&&(s="Delete"!==a?this.seekPrev(s):n=this.seekNext(s-1),n="Delete"===a?this.seekNext(n):n),this.clearBuffer(s,n),this.shiftL(s,n-1),this.updateModel(t),t.preventDefault()):"Enter"===a?(this.$el.blur(),this.updateModel(t)):"Escape"===a&&(this.$el.value=this.focusText,this.caret(0,this.checkVal()),this.updateModel(t),t.preventDefault()),this.$emit("keydown",t)}},onKeyPress:function(t){var i=this;if(!this.readonly){var s,n,a,h,l=t.code,r=this.caret();if(!(t.ctrlKey||t.altKey||t.metaKey||t.shiftKey||"CapsLock"===t.key||"Escape"===t.key||"Tab"===t.key)){if(l&&"Enter"!==l){if(r.end-r.begin!=0&&(this.clearBuffer(r.begin,r.end),this.shiftL(r.begin,r.end-1)),(s=this.seekNext(r.begin-1))<this.len&&this.tests[s].test(n=t.key)){if(this.shiftR(s),this.buffer[s]=n,this.writeBuffer(),a=this.seekNext(s),/android/i.test(e.getUserAgent())){setTimeout((function(){i.caret(a)}),0)}else this.caret(a);r.begin<=this.lastRequiredNonMaskPos&&(h=this.isCompleted())}t.preventDefault()}this.updateModel(t),h&&this.$emit("complete",t),this.$emit("keypress",t)}}},onPaste:function(e){this.handleInputChange(e),this.$emit("paste",e)},caret:function(e,t){var i,s,n;if(this.$el.offsetParent&&this.$el===document.activeElement)return"number"!=typeof e?(this.$el.setSelectionRange?(s=this.$el.selectionStart,n=this.$el.selectionEnd):document.selection&&document.selection.createRange&&(n=(s=0-(i=document.selection.createRange()).duplicate().moveStart("character",-1e5))+i.text.length),{begin:s,end:n}):(s=e,n="number"==typeof t?t:s,void(this.$el.setSelectionRange?this.$el.setSelectionRange(s,n):this.$el.createTextRange&&((i=this.$el.createTextRange()).collapse(!0),i.moveEnd("character",n),i.moveStart("character",s),i.select())))},isCompleted:function(){for(var e=this.firstNonMaskPos;e<=this.lastRequiredNonMaskPos;e++)if(this.tests[e]&&this.buffer[e]===this.getPlaceholder(e))return!1;return!0},getPlaceholder:function(e){return this.slotChar.charAt(e<this.slotChar.length?e:0)},seekNext:function(e){for(;++e<this.len&&!this.tests[e];);return e},seekPrev:function(e){for(;--e>=0&&!this.tests[e];);return e},shiftL:function(e,t){var i,s;if(!(e<0)){for(i=e,s=this.seekNext(t);i<this.len;i++)if(this.tests[i]){if(!(s<this.len&&this.tests[i].test(this.buffer[s])))break;this.buffer[i]=this.buffer[s],this.buffer[s]=this.getPlaceholder(s),s=this.seekNext(s)}this.writeBuffer(),this.caret(Math.max(this.firstNonMaskPos,e))}},shiftR:function(e){var t,i,s,n;for(t=e,i=this.getPlaceholder(e);t<this.len;t++)if(this.tests[t]){if(s=this.seekNext(t),n=this.buffer[t],this.buffer[t]=i,!(s<this.len&&this.tests[s].test(n)))break;i=n}},handleAndroidInput:function(e){var t=this.$el.value,i=this.caret();if(this.oldVal&&this.oldVal.length&&this.oldVal.length>t.length){for(this.checkVal(!0);i.begin>0&&!this.tests[i.begin-1];)i.begin--;if(0===i.begin)for(;i.begin<this.firstNonMaskPos&&!this.tests[i.begin];)i.begin++;this.caret(i.begin,i.begin)}else{for(this.checkVal(!0);i.begin<this.len&&!this.tests[i.begin];)i.begin++;this.caret(i.begin,i.begin)}this.isCompleted()&&this.$emit("complete",e)},clearBuffer:function(e,t){var i;for(i=e;i<t&&i<this.len;i++)this.tests[i]&&(this.buffer[i]=this.getPlaceholder(i))},writeBuffer:function(){this.$el.value=this.buffer.join("")},checkVal:function(e){this.isValueChecked=!0;var t,i,s,n=this.$el.value,a=-1;for(t=0,s=0;t<this.len;t++)if(this.tests[t]){for(this.buffer[t]=this.getPlaceholder(t);s++<n.length;)if(i=n.charAt(s-1),this.tests[t].test(i)){this.buffer[t]=i,a=t;break}if(s>n.length){this.clearBuffer(t+1,this.len);break}}else this.buffer[t]===n.charAt(s)&&s++,t<this.partialPosition&&(a=t);return e?this.writeBuffer():a+1<this.partialPosition?this.autoClear||this.buffer.join("")===this.defaultBuffer?(this.$el.value&&(this.$el.value=""),this.clearBuffer(0,this.len)):this.writeBuffer():(this.writeBuffer(),this.$el.value=this.$el.value.substring(0,a+1)),this.partialPosition?t:this.firstNonMaskPos},handleInputChange:function(e){if(!this.readonly&&!("paste"===e.type)){var t=this.checkVal(!0);this.caret(t),this.updateModel(e),this.isCompleted()&&this.$emit("complete",e)}},getUnmaskedValue:function(){for(var e=[],t=0;t<this.buffer.length;t++){var i=this.buffer[t];this.tests[t]&&i!==this.getPlaceholder(t)&&e.push(i)}return e.join("")},updateModel:function(e){var t=this.unmask?this.getUnmaskedValue():e.target.value;this.$emit("update:modelValue",this.defaultBuffer!==t?t:"")},updateValue:function(){var e=this,t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.$el&&(null==this.modelValue?(this.$el.value="",t&&this.$emit("update:modelValue","")):(this.$el.value=this.modelValue,this.checkVal(),setTimeout((function(){if(e.$el&&(e.writeBuffer(),e.checkVal(),t)){var i=e.unmask?e.getUnmaskedValue():e.$el.value;e.$emit("update:modelValue",e.defaultBuffer!==i?i:"")}}),10)),this.focusText=this.$el.value)},initMask:function(){this.tests=[],this.partialPosition=this.mask.length,this.len=this.mask.length,this.firstNonMaskPos=null,this.defs={9:"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"};var t=e.getUserAgent();this.androidChrome=/chrome/i.test(t)&&/android/i.test(t);for(var i=this.mask.split(""),s=0;s<i.length;s++){var n=i[s];"?"===n?(this.len--,this.partialPosition=s):this.defs[n]?(this.tests.push(new RegExp(this.defs[n])),null===this.firstNonMaskPos&&(this.firstNonMaskPos=this.tests.length-1),s<this.partialPosition&&(this.lastRequiredNonMaskPos=this.tests.length-1)):this.tests.push(null)}this.buffer=[];for(var a=0;a<i.length;a++){var h=i[a];"?"!==h&&this.buffer.push(this.defs[h]?this.getPlaceholder(a):h)}this.defaultBuffer=this.buffer.join(""),this.updateValue(!1)},isValueUpdated:function(){return this.unmask?this.modelValue!=this.getUnmaskedValue():this.defaultBuffer!==this.$el.value&&this.$el.value!==this.modelValue}},computed:{filled:function(){return null!=this.modelValue&&this.modelValue.toString().length>0},ptmParams:function(){return{context:{filled:this.filled,disabled:this.$attrs.disabled||""===this.$attrs.disabled}}}}},l=["readonly","aria-invalid"];h.render=function(e,t,i,h,r,o){return s(),n("input",a({class:e.cx("root"),readonly:e.readonly,"aria-invalid":e.invalid||void 0,onInput:t[0]||(t[0]=function(){return o.onInput&&o.onInput.apply(o,arguments)}),onFocus:t[1]||(t[1]=function(){return o.onFocus&&o.onFocus.apply(o,arguments)}),onBlur:t[2]||(t[2]=function(){return o.onBlur&&o.onBlur.apply(o,arguments)}),onKeydown:t[3]||(t[3]=function(){return o.onKeyDown&&o.onKeyDown.apply(o,arguments)}),onKeypress:t[4]||(t[4]=function(){return o.onKeyPress&&o.onKeyPress.apply(o,arguments)}),onPaste:t[5]||(t[5]=function(){return o.onPaste&&o.onPaste.apply(o,arguments)})},e.ptmi("root",o.ptmParams)),null,16,l)};export{h as default};