1"use strict";(self.webpackChunk_mvps_genesis_quickstart_theme=self.webpackChunk_mvps_genesis_quickstart_theme||[]).push([[919],{919:(e,t,s)=>{s.d(t,{HTMLFormValidator:()=>m});var i=s(1559),r=s(9875),o=s(3761),n=s.n(o);class a{#e;#t;element;constructor(){this.#e=new i.A(this),this.#t=new(n()),this.element=this.#e.isElement("element",this.createToggleElement()),this.passwordVisibleIcon="u-icon-eye-open",this.passwordNotVisibleIcon="u-icon-eye-closed"}createToggleElement(){const e=document.createElement("button");return e.setAttribute("type","button"),e.setAttribute("title","Show Password"),e.setAttribute("aria-label","Show Password"),e.classList.add("g-form-input-password__icon"),e.classList.add("u-icon-eye-closed"),e}isAllowed(){return!["ie","edge"].includes(this.#t.getBrowser().name.toLowerCase())}setContextTypeText(){this.element.classList.remove(this.passwordNotVisibleIcon),this.element.classList.add(this.passwordVisibleIcon),this.element.setAttribute("title","Hide Password"),this.element.setAttribute("aria-label","Hide Password")}setContextTypePassword(){this.element.classList.remove(this.passwordVisibleIcon),this.element.classList.add(this.passwordNotVisibleIcon),this.element.setAttribute("title","Show Password"),this.element.setAttribute("aria-label","Show Password")}}class l{#e;requirement;element;constructor(e){this.#e=new i.A(this),this.requirement=this.#e.isObject("requirement",e),this.element=this.#e.isElement("element",this.createSettingElement())}valid(){const e=this.element.firstElementChild;e.classList.add("g-form-password-requirements__icon--valid"),e.classList.remove("u-icon-cross"),e.classList.add("u-icon-check")}invalid(){const e=this.element.firstElementChild;e.classList.remove("g-form-password-requirements__icon--valid"),e.classList.remove("u-icon-check"),e.classList.add("u-icon-cross")}createSettingElement(){const e=document.createRange().createContextualFragment(`<div class="g-form-password-requirements__item"><span class="g-form-password-requirements__icon u-icon-cross"></span><span class="g-form-password-requirements__message">${this.requirement.message}</span></div>`);return e.firstChild?e.firstChild:e.firstElementChild}}class d{#e;element;settings;constructor(){this.#e=new i.A(this),this.element=this.#e.isElement("element",this.createPasswordRequirementElement()),this.settings=this.#e.isArray("settings",this.createSettingElement())}showElement(){this.element.classList.remove("u-hidden")}getPasswordSettings(){return this.#e.isArray("window.mivaJS.passwordSettings",window.mivaJS.passwordSettings)}createSettingElement(){const e=[];
1return this.getPasswordSettings().forEach((t=>{e.push(new l(t))})),e}createPasswordRequirementElement(){const e=document.createRange().createContextualFragment('<div class="g-form-password-requirements u-hidden"><div class="g-form-password-requirements__title">YOUR PASSSWORD MUST CONTAIN...</div></div>');return e.firstChild?e.firstChild:e.firstElementChild}}class h{#e;MODE_PASSWORD;MODE_TEXT;mode;element;container;region;InputPasswordToggle;InputPasswordRequirement;constructor(e){this.#e=new i.A(this),this.MODE_PASSWORD="password",this.MODE_TEXT="text",this.mode=this.MODE_PASSWORD,this.element=this.#e.isElement("element",e),this.container=this.createContainerElement(),this.region=this.createAriaLiveRegionElement(),this.InputPasswordToggle=new a,this.InputPasswordRequirement=new d,this.init()}init(){this.bindEvents(),this.setAttributeID(),this.setAttributeAriaControl(),this.buildDOM()}bindEvents(){this.onFocus=this.onFocus.bind(this),this.element.form.addEventListener("submit",this.onSubmit.bind(this)),this.container.addEventListener("click",this.onClick.bind(this)),this.hasPasswordRequirement()&&(this.element.addEventListener("input",this.onInput.bind(this)),this.element.addEventListener("focus",this.onFocus))}buildDOM(){this.element.parentElement.replaceChild(this.container,this.element),this.container.appendChild(this.element),this.InputPasswordToggle.isAllowed()&&this.container.appendChild(this.InputPasswordToggle.element),this.container.appendChild(this.region),this.hasPasswordRequirement()&&(this.InputPasswordRequirement.settings.forEach((e=>{this.InputPasswordRequirement.element.appendChild(e.element)})),this.container.insertAdjacentElement("afterend",this.InputPasswordRequirement.element))}hasPasswordRequirement(){return void 0!==this.InputPasswordRequirement&&this.element.classList.contains("js-input-password-requirement")}setModeFromInputType(){"password"===this.element.getAttribute("type").toLowerCase()?this.mode=this.MODE_PASSWORD:this.mode=this.MODE_TEXT}setAttributeID(){null===this.element.getAttribute("id")&&this.element.setAttribute("id",(0,r.A)())}setAttributeAriaControl(){this.InputPasswordToggle.isAllowed()&&this.InputPasswordToggle.element.setAttribute("aria-controls",this.element.getAttribute("id"))}getMode(){return this.mode}createContainerElement(){const e=document.createElement("div");return e.classList.add("g-form-input-password"),e}createAriaLiveRegionElement(){const e=document.createElement("div");return e.setAttribute("aria-live","polite"),e.setAttribute("role","alert"),e.classList.add("u-hide-visually"),e.textContent="Your password is hidden",e}onSubmit(){this.element.setAttribute("type","password")}onClick(e){const{target:t}=e;e.stopPropagation(),t===this.InputPasswordToggle.element&&this.toggleViewOfMode()}toggleViewOfMode(){this.getMode()===this.MODE_PASSWORD?this.setViewIntoTextMode():this.setViewIntoPasswordMode(),this.setModeFromInputType()}setViewIntoTextMode(){this.element.setAttribute("type","text"),this.element.setAttribute("autocomplete","off"),this.region.textContent="Your password is shown",this.InputPasswordToggle.isAllowed()&&this.InputPasswordToggle.setContextTypeText()}setViewIntoPasswordMode(){this.element.setAttribute("type","password"),this.element.removeAttribute("autocomplete"),this.region.textContent="Your password is hidden",this.InputPasswordToggle.isAllowed()&&this.InputPasswordToggle.setContextTypePassword()}onInput(e){e.stopPropagation(),this.InputPasswordRequirement.settings.forEach((e=>{new RegExp(e.requirement.pattern).test(this.element.value)?e.valid():e.invalid()}))}onFocus(){this.InputPasswordRequirement.showElement(),this.element.removeEventListener("focus",this.onFocus)}}class g{#e;constructor(e){this.#e=new i.A(this);const t=e.getAttribute("aria-controls"),s=document.getElementById(t);this.toggleField=this.#e.isElement("toggleField",e),this.toggleCondition=this.getToggleCondition(),this.toggleResetCondition=this.getToggleResetCondition(),this.containerToToggle=this.#e.isElement("containerToToggle",s),this.containerToToggleFields=this.getToggleContainerFormFields(),this.init()}init(){this.bindEvents(),this.checkIfToggleConditionIsMet()}bindEvents(){this.toggleField.addEventListener("input",this.onInput.bind(this))}onInput(){this.checkIfToggleConditionIsMet()}getToggleCondition(){return this.toggleField.dataset.inputToggleCondition&&this.toggleField.dataset.inputToggleCondition.length>0?this.toggleField.dataset.inputToggleCondition:null}getToggleResetCondition(){return this.toggleField.dataset.inputToggleReset&&"true"===this.toggleField.dataset.inputToggleReset}getToggleContainerFormFields(){const e=this.containerToToggle.getElementsByTagName("input"),t=this.containerToToggle.getElementsByTagName("select");return{inputs:e,memos:this.containerToToggle.getElementsByTagName("textarea"),selects:t}}toggleVisibilityByValueLength(){const e=this.toggleField.checked,t=this.toggleField.tagName,s=this.toggleField.type,i=this.toggleField.value;"INPUT"===t&&"checkbox"===s&&!e||0===i.length?this.hideToggleContainerElement():this.showToggleContainerElement()}toggleVisibilityByMatch(){this.toggleField.value===this.toggleCondition?this.showToggleContainerElement():this.hideToggleContainerElement()}resetContainerInputFields(e){if(e)for(const t of e){let e=t.type;"radio"===e||"checkbox"===e?t.checked=!1:t.value=t.defaultValue}}resetContainerSelectFields(e){if(e)for(const t of e)t.selectedIndex=0}resetContainerTextAreaFields(e){if(e)for(const t of e)t.value=""}resetContainerFormFields(){this.resetContainerInputFields(this.containerToToggleFields.inputs),this.resetContainerSelectFields(this.containerToToggleFields.selects),this.resetContainerTextAreaFields(this.containerToToggleFields.memos)}hideToggleContainerElement(){this.toggleResetCondition&&this.resetContainerFormFields(),this.containerToToggle.classList.add("u-hidden"),this.containerToToggle.setAttribute("aria-hidden",!0)}showToggleContainerElement(){this.containerToToggle.classList.remove("u-hidden"),this.containerToToggle.setAttribute("aria-hidden",!1)}checkIfToggleConditionIsMet(){this.toggleCondition?this.toggleVisibilityByMatch():this.toggleVisibilityByValueLength()}}class m{#e;options;formElement;validateElements;errorMessages;attributes;InputPassword;InputToggle;constructor(){let{beforeSubmit:e=null,errorClass:t="g-form-field__error",errorHideClass:s="u-hidden",errorInsertPosition:r="beforeend",errorMessages:o={},fieldContainer:n="",fieldContainerErrorClass:a="has-error",formElement:l=".js-form-validator",labelRequiredSelector:d=".is-required",onValidate:h=null,scrollToFirstError:g=!0,scrollToOptions:m={behavior:"smooth",block:"center"}}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this.#e=new i.A(this),this.formElement=this.#e.isElement("formElement",l),"FORM"!==this.formElement.tagName)throw new TypeError(`${this.constructor.name}::A valid form element is required`);this.errorMessages=this.#e.isObject("errorMessages",o),this.options={beforeSubmit:e,errorClass:this.#e.isString("errorClass",t),errorHideClass:this.#e.isString("errorHideClass",s),errorInsertPosition:this.#e.inSet("errorInsertPosition",this.#e.isString("errorInsertPosition",r),["beforebegin","afterbegin","beforeend","afterend"]),fieldContainer:this.#e.isString("fieldContainer",n),fieldContainerErrorClass:this.#e.isString("fieldContainerErrorClass",a),labelRequiredSelector:this.#e.isString("labelRequiredSelector",d),onValidate:h,scrollToFirstError:this.#e.isBoolean("scrollToFirstError",g),scrollToOptions:this.#e.isObject("scrollToOptions",m)},this.init()}
1init(){this.setInputPasswordToggle(),this.setInputToggle(),this.setAttributes(),this.setValidateElements(),this.setErrorMessages(),this.disableBrowserValidation(),this.bindEvents(),this.formElement.hasAttribute(this.attributes.form.toggleFields)&&this.initSecondaryToggleFields()}setAttributes(){this.attributes={error:{disable:{blur:"data-error-disable-blur"},message:"data-error-message"},form:{toggleFields:"data-form-toggle-fields"}}}setInputPasswordToggle(){const e=this.#e.isElementList("InputPassword",this.formElement.querySelectorAll('input[type="password"]'));this.InputPassword=[];for(const t of e)this.InputPassword.push(new h(t))}setInputToggle(){const e=this.#e.isElementList("InputToggle",this.formElement.getElementsByClassName("js-input-toggle"));for(const t of e)new g(t)}setValidateElements(){this.validateElements=this.#e.isElementList("validateElements","[required], [pattern]",{container:this.formElement})}setErrorMessages(){this.errorMessages.DEFAULT=this.#e.isString("errorMessages.DEFAULT",this.errorMessages.DEFAULT||"Please enter a value"),this.errorMessages.INPUT_CHECKBOX=this.#e.isString("errorMessages.INPUT_CHECKBOX",this.errorMessages.INPUT_CHECKBOX||"Please check the checkbox"),this.errorMessages.INPUT_DATE=this.#e.isString("errorMessages.INPUT_DATE",this.errorMessages.INPUT_DATE||"Please enter a valid date"),this.errorMessages.INPUT_EMAIL=this.#e.isString("errorMessages.INPUT_EMAIL",this.errorMessages.INPUT_EMAIL||"Please enter a valid email"),this.errorMessages.INPUT_FILE=this.#e.isString("errorMessages.INPUT_FILE",this.errorMessages.INPUT_FILE||"Please select a valid file"),this.errorMessages.INPUT_NUMBER=this.#e.isString("errorMessages.INPUT_NUMBER",this.errorMessages.INPUT_NUMBER||"Please enter a valid number"),this.errorMessages.INPUT_PASSWORD=this.#e.isString("errorMessages.INPUT_PASSWORD",this.errorMessages.INPUT_PASSWORD||"Please enter a valid password"),this.errorMessages.INPUT_RADIO=this.#e.isString("errorMessages.INPUT_RADIO",this.errorMessages.INPUT_RADIO||"Please select an option"),this.errorMessages.INPUT_RANGE=this.#e.isString("errorMessages.INPUT_RANGE",this.errorMessages.INPUT_RANGE||"Please select a range"),this.errorMessages.INPUT_SEARCH=this.#e.isString("errorMessages.INPUT_SEARCH",this.errorMessages.INPUT_SEARCH||"Please enter a value"),this.errorMessages.INPUT_TEL=this.#e.isString("errorMessages.INPUT_TEL",this.errorMessages.INPUT_TEL||"Please enter a valid telephone number"),this.errorMessages.INPUT_TEXT=this.#e.isString("errorMessages.INPUT_TEXT",this.errorMessages.INPUT_TEXT||"Please enter a value"),this.errorMessages.INPUT_URL=this.#e.isString("errorMessages.INPUT_URL",this.errorMessages.INPUT_URL||"Please enter a valid URL"),this.errorMessages.SELECT=this.#e.isString("errorMessages.SELECT",this.errorMessages.SELECT||"Please select an option"),this.errorMessages.TEXTAREA=this.#e.isString("errorMessages.TEXTAREA",this.errorMessages.TEXTAREA||"Please enter a value")}disableBrowserValidation(){this.formElement.hasAttribute("novalidate")||this.formElement.setAttribute("novalidate",!0)}bindEvents(){this.addValidateElementsEvents(),this.addSubmitEvents()}addValidateElementsEvents(){for(const e of this.validateElements)this.addValidateElementListeners(e)}removeValidateElementsEvents(){for(const e of this.validateElements)this.removeValidateElementListeners(e)}addValidateElementListeners(e){const t=this.#e.isElement("addValidateElementListeners - formElement",e);t.validateEventListener=this.validateFormElement.bind(this,t),"radio"===t.type||"checkbox"===t.type?t.addEventListener("change",t.validateEventListener):(t.addEventListener("input",t.validateEventListener),t.hasAttribute(this.attributes.error.disable.blur)||t.addEventListener("blur",t.validateEventListener))}removeValidateElementListeners(e){const t=this.#e.isElement("removeValidateElementListeners - formElement",e);"function"==typeof t.validateEventListener&&("radio"===t.type||"checkbox"===t.type||"input"===t.type?t.removeEventListener("change",t.validateEventListener):(t.removeEventListener("input",t.validateEventListener),t.removeEventListener("blur",t.validateEventListener)))}addSubmitEvents(){this.#e.isElement("addSubmitEvents - submitElement",'[type="submit"]',{container:this.formElement}).addEventListener("click",(e=>{this.validateForm(e)}))}validateFormElement(e,t){const s=this.#e.isElement("validateFormElement - formElement",e);return null===s.offsetParent||(s.validity.valid?(this.toggleError(s,"hide"),!0):(t&&"blur"!==t.type||this.toggleError(s,"show"),!1))}validateForm(e){let t=!0;"function"==typeof this.options.onValidate&&(t=this.options.onValidate(this,e));for(const e of this.validateElements)!this.validateFormElement(e)&&t&&(t=!1);if(!t)return e.preventDefault(),void(this.options.scrollToFirstError&&this.scrollToFirstError());"function"==typeof this.options.beforeSubmit&&this.options.beforeSubmit(this,e)}toggleError(e,t){const s=this.#e.isElement("toggleError - formElement",e),i=this.InputPassword.find((e=>e.element===s));if("show"!==t&&"hide"!==t)throw new TypeError(`${this.constructor.name}::toggleError an action of 'show' or 'hide'`);let r=s.parentElement;if(this.options.fieldContainer&&(r=s.closest(this.options.fieldContainer)),!r)throw new TypeError(`${this.constructor.name}::toggleError requires a valid container element`);const o=this.getErrorElement(r);if("show"===t){if(r.classList.add(this.options.fieldContainerErrorClass),i)return;o?o.classList.remove(this.options.errorHideClass):r.insertAdjacentElement(this.options.errorInsertPosition,this.createErrorMessage(s))}else{if(r.classList.remove(this.options.fieldContainerErrorClass),i)return;o&&o.classList.add(this.options.errorHideClass)}}getErrorElement(e){const t=this.#e.isElement("getErrorElement - errorContainerElement",e);if("beforebegin"===this.options.errorInsertPosition){const e=t.previousElementSibling;return!(!e||!e.classList.contains(this.options.errorClass))&&e}if("afterend"===this.options.errorInsertPosition){const e=t.nextElementSibling;return!(!e||!e.classList.contains(this.options.errorClass))&&e}const s=t.getElementsByClassName(this.options.errorClass)[0];return s||!1}createErrorMessage(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const s=this.#e.isElement("createErrorMessage - formElement",e);let i=this.#e.isString("createErrorMessage - message",t),r=document.createElement("div");if(!i.length)if(s.hasAttribute(this.attributes.error.message))i=s.getAttribute(this.attributes.error.message);else if(s.hasAttribute("title"))i=s.getAttribute("title");else{let e=s.tagName;if("INPUT"===e&&(e+="_"+s.getAttribute("type").toUpperCase()),i=this.errorMessages[e]||this.errorMessages.DEFAULT,"INPUT_NUMBER"===e){const e=s.getAttribute("min"),t=s.getAttribute("max");e&&(i+=`, minimum: ${e}`),t&&(i+=`, maximum: ${t}`)}}return r.classList.add(this.options.errorClass),r.textContent=i,r}scrollToFirstError(){const e=this.formElement.getElementsByClassName(this.options.fieldContainerErrorClass)[0];if(!e)return;const t=e.getBoundingClientRect();t.top>0&&t.bottom<window.innerHeight||e.scrollIntoView(this.options.scrollToOptions)}initSecondaryToggleFields(){new MutationObserver(((e,t)=>{if("object"==typeof window.ToggleDetails){if(t.disconnect(),!window.ToggleDetails.trigger||!window.ToggleDetails.secondary_fields)return;window.ToggleDetails.trigger.addEventListener("click",(()=>{this.setSecondaryToggleFields()})),this.setSecondaryToggleFields()}})).observe(document,{childList:!0,subtree:!0})}setSecondaryToggleFields(){const e=this.#e.isElement("setSecondaryToggleFields - triggerElement",window.ToggleDetails.trigger),t=this.#e.isElement("setSecondaryToggleFields - secondaryFields",window.ToggleDetails.secondary_fields).querySelectorAll(this.options.labelRequiredSelector);if(!t)return;let s=[];for(const e of t){let t=e.parentElement;if(this.options.fieldContainer&&(t=e.matches(this.options.fieldContainer)?e:e.closest(this.options.fieldContainer)),!t)return;const i=t.querySelectorAll("input, select");if(!i)return;for(const e of i)s.push(e)}if(e.checked)for(const e of s)e.required=!1,this.removeValidateElementListeners(e);else for(const e of s)e.required=!0,this.addValidateElementListeners(e);this.setValidateElements()}}}}]); 2//# sourceMappingURL=919.7179d143de108b738b94.chunk.js.map
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.