vicowa-web-components
Version:
2 lines • 2.85 kB
JavaScript
import{WebComponentBaseClass as t}from"/third_party/web-component-base-class/dist/web-component-base-class.js";import e from"../utilities/translate.js";import a from"../utilities/validators.js";export function validate(t,e,i){const l=(a[t.validatorName]||t.validator||(()=>({valid:!0})))(e);return t.$.error.string=!l.valid&&i?l.error||"something is wrong":"",t.classList.toggle("invalid",!l.valid&&i),l}export class VicowaInputBaseClass extends t{constructor(){super(),this.validator=null,this._activeTranslator=null}static get properties(){return{validatorName:{type:String,value:""},type:{type:String,value:"text",reflectToAttribute:!0,observer:t=>t.#t()},value:{type:String,value:"",reflectToAttribute:!0,observer:(t,e,a)=>t.#e(e,a)},label:{type:String,value:"",reflectToAttribute:!0,observer:t=>t.#a()},topLabel:{type:Boolean,value:!1,reflectToAttribute:!0},hideLabel:{type:Boolean,value:!1,reflectToAttribute:!0},static:{type:Boolean,value:!1,reflectToAttribute:!0,observer:t=>t.#i()},tooltip:{type:String,value:"",reflectToAttribute:!0,observer:t=>t.#l()},disabled:{type:Boolean,value:!1,reflectToAttribute:!0},readonly:{type:Boolean,value:!1,reflectToAttribute:!0,observer:t=>t.#s()},ariaLabel:{type:String,value:"",observer:t=>t.#r()},autocomplete:{type:String,value:void 0,observer:t=>t.#n()}}}updateTranslation(){this.$.input.title=this._activeTranslator&&this.tooltip?this._activeTranslator.translate(this.tooltip).fetch():this.tooltip}attached(){this.$.label.onTranslationUpdated=t=>{this.ariaLabel||this.$.input.setAttribute("aria-label",t)},this.$.input.setAttribute("aria-label",this.$.label.displayString);const t=()=>{this.value=this.$.input.value,validate(this,this.value,!1)};this.addAutoEventListener(this.$.input,"blur",(()=>{validate(this,this.value,!0),this.value=this.$.input.value})),this.addAutoEventListener(this.$.input,"change",t),this.addAutoEventListener(this.$.input,"input",t),this.$.input.placeholder=this.placeholder,e.addTranslationUpdatedObserver((t=>{this._activeTranslator=t,this.updateTranslation()}),this)}updateValidFeedback(){validate(this,this.value,!0)}get valid(){return validate(this,this.value,!1).valid}#r(){this.$.input.setAttribute("aria-label",this.ariaLabel)}#n(){this.$.input.setAttribute("autocomplete",this.autocomplete)}#i(){this.$.input.readOnly=this.static||this.readonly,this.$.input.tabIndex=this.static?-1:0}#s(){this.$.input.readOnly=this.readonly||this.static}#t(){-1===["text","password","email","number","search","url"].indexOf(this.type)&&(this.type="text"),this.$.input.type=this.type}#e(t,e){this.$.input.value=t,this.onChange&&this.onChange(this.value,e),validate(this,this.value,!1),this._handleValueChange&&this._handleValueChange()}#a(){this.$.label.string=this.label}#l(){this.$.input.title=this.tooltip,this.updateTranslation()}}
//# sourceMappingURL=vicowa-input-base.js.map