| 1 |
var FireBox_Form=function(){function e(e){this.form=e,this.submitButtonClass=".firebox-block-button-element",this.formControlGroupClass=".fb-form-control-group",this.formInputClass=".fb-form-input",this.formMessageClass=".fb-form-response",this.skipEmptyValidation=!0,this.isSubmitting=!1,this.requiredFieldMessage=this.form.querySelector(".fb_form_required_field_message").value,this.invalidEmailMessage=this.form.querySelector(".fb_form_invalid_email_message").value,this.honeypotFieldTriggered=this.form.querySelector(".fb_form_honeypot_field_triggered")?this.form.querySelector(".fb_form_honeypot_field_triggered").value:"",this.initEvents()}var t=e.prototype;return t.initEvents=function(){var t=this;this.prepareFormButtons(),this.form.querySelector(this.submitButtonClass)&&this.form.querySelector(this.submitButtonClass).addEventListener("click",this.submitForm.bind(this)),this.form.addEventListener("focusout",function(e){t.updateFieldStateWhileTyping(e)}),this.form.addEventListener("keydown",function(e){t.onFormKeyDown(e)})},t.prepareFormButtons=function(){this.form.querySelectorAll(".firebox-block-button-element").forEach(function(e){e.setAttribute("tabindex",0)})},t.updateFieldStateWhileTyping=function(e){var t,r=e.target.closest(this.formInputClass);r&&((t=this.validateField(r)).error?this.setFieldHasError(r,t.error):this.setFieldHasNoError(r))},t.isTextareaField=function(e){return e.closest("textarea.fb-form-input")},t.submitForm=function(n){var o=this;if(n.preventDefault(),!this.isSubmitting){this.skipEmptyValidation=!1;var a=this.getFields();if(a){var s=!0,l={form_id:this.form.querySelector('input[name="fb_form[form_id]"]').value,fields:{}},c=null;if(Object.keys(a).forEach(function(e){var t=a[e];"fb_form[hnpt]"===t.name&&""!==t.value&&(s=!1,o.showFormMessage(o.honeypotFieldTriggered,!0));var r=o.validateField(t);if(r.error)return s=!1,o.setFieldHasError(t.element,r.error),void(c||(c=!0,t.element.focus()));o.setFieldHasNoError(t.element);var i=(i=e.replace("fb_form[","")).replace("]","");"phonenumber"===t.type&&(i=i.replace(/\[\w+\]/g,"")),l.fields[i]=r.value}),s){this.setLoading(!0);var f=this,e=this.emitEvent("beforeSubmit",{submitEvent:n});if(e.defaultPrevented)return e.detail.hasOwnProperty("error")&&this.showFormMessage(e.detail.error,!0),void f.setLoading(!1);var t=this.form.closest(".fb-inst"),m=t?t.firebox:null,u=t?t.dataset.id:null,r=!!t&&parseInt(t.firebox.box_log_id);this.emitEvent("onSubmitClientValidated",{submitEvent:n}),this.addCaptchaFields(l);(function o(s){var e=new FormData;return e.append("nonce",fbox_js_object.nonce),e.append("action","fb_form_submit"),e.append("form_data",JSON.stringify(l)),e.append("box_log_id",r),e.append("box_id",u),fetch(fbox_js_object.ajax_url,{method:"post",body:e}).then(function(e){return e.json()}).then(function(t){if(s&&"invalid_nonce"===t.error)return f.refreshNonce().then(function(e){return e?o(!1):(f.showFormMessage(t.message,!0),f.emitEvent("error",{response:t}),void f.setLoading(!1))});var i,e;t.validation&&t.validation.length?(i=!1,t.validation.forEach(function(e){var t="fb_form["+e.name+"]";"radio"===e.type?t+="[]":"phonenumber"===e.type&&(t+="[value]");var r=f.form.querySelector(f.formInputClass+'[name="'+t+'"]');i=!0,f.setFieldHasError(r,e.validation_message)}),i&&f.showFormMessage(t.message,!0),f.emitEvent("validation_error",{response:t})):t.error?(f.showFormMessage(t.message,t.error),f.emitEvent("error",{response:t})):(m.emitEvent("conversion",{campaignID:u,type:"submission",box_log_id:m.box_log_id}),"message"===t.action?f.showFormMessage(t.message,t.error):(e=f.emitEvent("beforeRedirectUser",{url:t.redirectURL}),f.isSafeRedirectURL(e.detail.url)?window.location.href=e.detail.url:console.warn("FireBox: refused to redirect to an unsupported URL.")),t.resetForm&&f.resetForm(a),t.hideForm&&f.form.classList.add("fb-hide-form"),f.form.closest(".fb-inst")&&f.form.closest(".fb-inst").classList.add("fb-form-success"),f.emitEvent("success",{response:t,submitButton:n.srcElement})),f.emitEvent("afterSubmit",{response:t});var r=f.getFormMessage();r&&!f.isInViewport(r)&&r.scrollIntoView(),t.hideForm||f.setLoading(!1)})})(!0).catch(function(){f.setLoading(!1),f.showFormMessage(fbox_js_object.form_submit_failed,!0),f.emitEvent("error",{})})}}}},t.refreshNonce=function(){return window.FireBox&&"function"==typeof window.FireBox.refreshNonce?window.FireBox.refreshNonce():Promise.resolve(null)},t.addCaptchaFields=function(e){var t=this.form.querySelector('input[name="cf-turnstile-response"]');t&&(e.fields["cf-turnstile-response"]=t.value);var r=this.form.querySelector('textarea[name="h-captcha-response"]');r&&(e.fields["h-captcha-response"]=r.value)},t.isInViewport=function(e){var t=e.getBoundingClientRect();return 0<=t.top&&0<=t.left&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)},t.emitEvent=function(e,t,r){var i;if(e)return(t=t||{}).instance=this,(r=r||!0)&&(i="FireBoxForm"+this.capitalize(e),this.dispatchEvent(i,document,t)),this.dispatchEvent(e,this.form,t)},t.capitalize=function(e){return"string"!=typeof e?"":e.charAt(0).toUpperCase()+e.slice(1)},t.dispatchEvent=function(e,t,r){var i=new CustomEvent(e,{detail:r,cancelable:!0});return t.dispatchEvent(i),i},t.resetForm=function(t){Object.keys(t).forEach(function(e){t[e].element.value="","radio"===t[e].type&&(t[e].element.checked=!1)})},t.setLoading=function(e){void 0===e&&(e=!0),this.isSubmitting=e;var t=this.form.querySelector(this.submitButtonClass);t&&((t.disabled=e)?(t.dataset.initialLabel||t.setAttribute("data-initial-label",t.innerHTML),t.classList.add("is-working"),t.setAttribute("aria-disabled","true"),t.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="18" height="18" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid"><circle cx="50" cy="50" fill="none" stroke="currentColor" stroke-width="10" r="40" stroke-dasharray="164.93361431346415 56.97787143782138"><animateTransform attributeName="transform" type="rotate" repeatCount="indefinite" dur="1s" values="0 50 50;360 50 50" keyTimes="0;1"></animateTransform></circle></svg>'):(t.innerHTML=t.dataset.initialLabel,t.classList.remove("is-working"),t.removeAttribute("aria-disabled")))},t.isSafeRedirectURL=function(e){if("string"!=typeof e||""===e.trim())return!1;try{var t=new URL(e,window.location.href);return"http:"===t.protocol||"https:"===t.protocol}catch(e){return!1}},t.showFormMessage=function(e,t){void 0===t&&(t=!1);var r=this.getFormMessage();r||(this.form.appendChild(this.getFormMessageTemplate()),r=this.getFormMessage()),r.classList.add("fb-msg-is-visible"),r.innerHTML=e,t?r.classList.add("is-error"):r.classList.remove("is-error")},t.getFormMessage=function(){return this.form.querySelector(this.formMessageClass)},t.getFormMessageTemplate=function(){var e=document.createElement("div");return e.className=this.formMessageClass.substring(1),e},t.hideFormMessage=function(){var e=this.getFormMessage();e&&(e.classList.remove("fb-msg-is-visible","is-error"),e.innerHTML="")},t.setFieldHasError=function(e,t){var r,i;!e||(r=e.closest(this.formControlGroupClass))&&(r.classList.contains("has-errors")?r.querySelector(".fb-form-field-error").textContent=t:(r.classList.add("has-errors"),(i=this.getErrorMessageTemplate()).textContent=t,r.appendChild(i)))},t.getErrorMessageTemplate=function(){var e=document.createElement("div");return e.className="fb-form-field-error",e},t.setFieldHasNoError=function(e){var t=e.closest(this.formControlGroupClass);t&&t.classList.contains("has-errors")&&(t.classList.remove("has-errors"),t.querySelector(".fb-form-field-error").remove())},t.validateField=function(e){var t=e.name,r=e.type,i=e.value,o=e.classList,s=e.required||!1,n=!1;if(s&&"hidden"!==r&&("checkbox"===r&&i instanceof Array?0===i.length&&(n=!0):"phonenumber"===r?""===i.value.trim()&&(n=!0):""===i.trim()&&(n=!0),o.contains("fb-date-time-input")&&""==i&&document.querySelector(".flatpickr-calendar.open")&&(n=!1)),s&&"hidden"===r&&o.contains("fb-date-time-input")&&""===i&&(n=!0),"email"===r)if(""===i)n=!0;else if(!this.validateEmail(i))return{error:this.invalidEmailMessage};if(n&&!this.skipEmptyValidation)return{error:this.requiredFieldMessage};var a=e instanceof HTMLElement?e:e.element,l=null;return a.closest(".fb-form-control-group")&&(l=a.closest(".fb-form-control-group").dataset.fieldId),{name:t,type:r,value:i,id:l}},t.getFields=function(){var d=this,h=[];return this.form.querySelectorAll(this.formInputClass).forEach(function(e){var t=e.name.replace("[]","");if(t&&!h[t]){var r="input",i=e.name,o=e.type,s=e.value;switch(o){case"select-one":r="select";break;case"textarea":r=o}var n,a,l,c,f,m=d.form.querySelector(r+'.fb-form-input[name="'+i+'"]');"radio"==o?(s="",(n=d.form.querySelector(r+'.fb-form-input[name="'+i+'"]:checked'))&&(s=(m=n)?m.value:"")):"checkbox"===o?(s="",(a=d.form.querySelectorAll(r+'.fb-form-input[name="'+i+'"]:checked')).length&&(s=[],a.forEach(function(e){s.push(e.value)}))):e.closest(".fpf-phone-control")&&(c=(l=e.closest(".fpf-phone-control")).querySelector(".fpf-phone-control--flag--selector"),f=l.querySelector(".fpf-phone-control--number"),s={code:c.value,value:f.value},m=l,o="phonenumber");var u={name:i,type:o,value:s,required:e.required,classList:e.classList,element:m};h[t]=u}}),h},t.validateEmail=function(e){return String(e).toLowerCase().match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)},t.onFormKeyDown=function(e){if("Enter"===e.key||13===e.keyCode){var t=e.target.closest(".fpf-phone-control");if(t&&t.querySelector(".fpf-phone-control--flag.is-focused"))return void e.preventDefault();this.isTextareaField(e.target)||(e.preventDefault(),this.submitForm(e))}},e}();document.addEventListener("DOMContentLoaded",function(e){document.querySelectorAll("form.wp-block-firebox-form").forEach(function(e){new FireBox_Form(e)})}); |