1let REGEXP={name:/^[a-zA-Z\-\s]+$/,nameWithSpecialChars:/^[a-zA-Z\u00C0-\u024F\u1E00-\u1EFF\-'\s]+$/,companyName:/^[a-zA-Z0-9\-\s]+$/,email:/^((([a-z]|\d|[\+\-_]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[\+\-_]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i,phone:/^(\(?\+?[0-9]*\)?)?[0-9_\- \(\)]*$/,phoneAe:/^(\(?\+?[0-9]*\)?)?[0-9\- \(\)]*$/,specialChars:/[&<>/%*^\|@#]/,specialCharsForCompanyName:/[<>/%*^\|@#]/,specialCharsForDescription:/[<>*^\|@#]/,specialCharsForAddress:/[&<>%*^\|@#]/,specialCharsLink:/[<>^\|]/,url:/(^https?:\/\/)?[a-z0-9]+\.[a-z]{2,}$/i,companyNameDemoPaid:/^[a-zA-Z0-9\-\s\"]+$/,messageDemoPaid:/[&<>/%*^\|@#~`]/,numbers:/^\d+$/},createConfig=e=>({validClass:"valid_field",errorClass:"error_field",errorPlacement:null,highlight:null,unhighlight:null,submitHandler:null,invalidHandler:null,...e});class FormValidation{showErrors(e){e&&this._resetErrors(e);let t=Object.keys(this._errorFields);if(t.forEach(e=>{let t=this._formFields[e];t&&(this._resetErrorPlacement(e),this._hightlight(t))}),t.length){let e=this._formFields[t[0]];e&&e.focus()}}_createObject(e){return Object.entries(e).reduce((e,t)=>{let[i,s]=t;return this._formFields[i]&&(e[i]=s),e},{})}_initEventHandlers(){this._form.addEventListener("input",e=>this._onFormInput(e)),this._form.addEventListener("change",e=>this._onFormChange(e)),this._form.addEventListener("submit",e=>this._onFormSubmit(e))}_validate(){return Object.keys(this._formFields).forEach(e=>{this._validateField(e)}),!Object.keys(this._errorFields).length}_validateField(e){this._errorFields[e]&&delete this._errorFields[e];let t=[],i=this._validationRules[e];return i&&i.forEach(i=>{if(!this._validateFieldRule(e,i)){let s={type:i.type},a=this._errorMessages[e];a&&a[i.type]&&(s.message=a[i.type]),t.push(s)}}),t.length&&(this._errorFields[e]=t),this._resetErrorPlacement(e),!t.length}_validateFieldRule(e,t){let i=this._formFields[e],s=this._getElementValue(i),a=!0;switch(t.type){case"required":a=this._validateRequired(s,t.value);break;case"email":a=REGEXP.email.test(s);break;case"phone":a=REGEXP.phone.test(s);break;case"phoneAe":a=REGEXP.phoneAe.test(s);break;case"name":a=REGEXP.name.test(s);break;case"nameWithSpecialChars":a=REGEXP.nameWithSpecialChars.test(s);break;case"companyName":a=REGEXP.companyName.test(s);break;case"companyNameDemoPaid":a=REGEXP.companyNameDemoPaid.test(s);break;case"messageDemoPaid":a=!REGEXP.messageDemoPaid.test(s);break;case"specialChars":a=!REGEXP.specialChars.test(s);break;case"specialCharsForCompanyName":a=!REGEXP.specialCharsForCompanyName.test(s);break;case"specialCharsForDescription":a=!REGEXP.specialCharsForDescription.test(s);break;case"specialCharsForAddress":a=!REGEXP.specialCharsForAddress.test(s);break;case"specialCharsLink":a=!REGEXP.specialCharsLink.test(s);break;case"url":a=REGEXP.url.test(s);break;case"customRegexp":a=this._validateCustomRegexp(s,t.value);break;case"minlength":a=this._validateValueLength(s,t.value,(e,t)=>e>=t);break;case"maxlength":a=this._validateValueLength(s,t.value,(e,t)=>e<=t);break;case"customFunction":a=this._validateCustomFunction(i,t.value);break;case"number":a=REGEXP.numbers.test(s);break;case"":a=!0;break;default:throw Error(`Unexpected type of validation rule: ${t.type}`)}return this._isOptional(e)&&!s||a}_validateRequired(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1];return"string"!=typeof e?(console.warn("Element value is not a string"),!1):"boolean"==typeof t?!t||!!e.trim().length:"function"==typeof t?this._val
1idateRequired(e,t()):(console.warn("Invalid value of validation rule: required"),!1)}_validateCustomRegexp(e,t){return t instanceof RegExp?t.test(e):"function"==typeof t?this._validateCustomRegexp(e,t()):(console.warn("Invalid value of validation rule: customRegexp"),!1)}_validateValueLength(e,t,i){return"string"!=typeof e?(console.warn("Element value is not a string"),!1):"number"==typeof t?i(e.length,t):"function"==typeof t?this._validateValueLength(e,t(),i):(console.warn("Invalid value of validation rule: minlength or maxlength"),!1)}_validateCustomFunction(e,t){return"function"==typeof t?t(e):(console.warn("Invalid value of validation rule: customFunction"),!1)}_isOptional(e){let t=this._validationRules[e];if(!t||!t.length)return!0;let i=t.find(e=>"required"===e.type);return!i||("boolean"==typeof i.value?!i.value:"function"==typeof i.value&&!i.value())}_getElementValue(e){return"checkbox"===e.type?e.checked?"1":"":e.value}_resetErrors(e){this._errorFields={},Object.entries(e).forEach(e=>{let[t,i]=e;this._form.querySelector(`[name='${t}']`)&&(this._errorFields[t]=i)})}_resetErrorPlacement(e){if(this._config.errorPlacement){let t=this._config.errorPlacement(this._formFields[e]);if(t){let i=this._errorFields[e];t.innerHTML=i&&i.length&&i[0].message?i[0].message:""}}}_hightlight(e){this._config.highlight?this._config.highlight(e,this._config.errorClass,this._config.validClass):(e.classList.remove(this._config.validClass),e.classList.add(this._config.errorClass),this._config.errorPlacement&&(this._config.errorPlacement(e).style.display="block"))}_unhightlight(e){this._config.unhighlight?this._config.unhighlight(e,this._config.errorClass,this._config.validClass):(e.classList.remove(this._config.errorClass),e.classList.add(this._config.validClass),this._config.errorPlacement&&(this._config.errorPlacement(e).style.display="none"))}_onFormSubmit(e){e.preventDefault(),this._validate()?(this._config.submitHandler&&this._config.submitHandler(),this._form.removeEventListener("input",e=>this._onFormInput(e)),this._form.removeEventListener("change",e=>this._onFormChange(e)),this._form.removeEventListener("submit",e=>this._onFormSubmit(e)),this._inputs.forEach(e=>{e.disabled=!0})):(this._config.invalidHandler&&this._config.invalidHandler(this._errorFields,this._formFields),this.showErrors(),this._inputs.forEach(e=>{e.disabled=!1}))}_onFormInput(e){this._unhightlight(e.target)}_onFormChange(e){let t=e.target;this._validateField(t.name)?this._unhightlight(t):this._hightlight(t)}constructor({form:e,config:t={},rules:i={},messages:s={}}){this._form=e,this._formFields=[...this._form.querySelectorAll("[name]:not([type=hidden]):not([type=submit])")].reduce((e,t)=>({...e,[t.getAttribute("name")]:t}),{}),this._config=createConfig(t),this._validationRules=this._createObject(i),this._errorMessages=this._createObject(s),this._errorFields={},this._inputs=this._form.querySelectorAll("input, textarea, select"),this._form.setAttribute("novalidate","novalidate"),this._initEventHandlers()}}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.