PluginProbe
Depicter — Popup & Slider Builder / trunk
Depicter — Popup & Slider Builder vtrunk
4.8.1 trunk 1.0.0 1.1.0 1.1.2 1.1.4 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.3.0 1.3.1 1.3.2 1.3.3 1.3.5 1.3.8 1.5.0 1.5.1 1.5.2 1.5.5 1.6.0 1.6.1 1.6.2 1.7.0 All 76 releases
depicter / resources / scripts / player / external-layers / form / layer.js

layer.js in Depicter — Popup & Slider Builder trunk, at resources/scripts/player/external-layers/form/layer.js

1 lines 3.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 !function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var i in r)("object"==typeof exports?exports:e)[i]=r[i]}}(Depicter,(()=>(()=>{"use strict";var e={};if((e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})})(e),!window.Depicter)throw new Error("Depicter must be loaded before external layers");if(!window.Depicter.env)throw new Error("Depicter.env is not available. Make sure Depicter is properly initialized.");const{Layer:t,env:r}=window.Depicter;class i extends t{constructor(e,t,i,s,a,o){super(e,t,i,s,a,o),this.type="form",this.nestable=!0,this.frame.classList.add(`${r.prefix}-${this.type}-layer`),this.resetAfterSubmit="false"!==this.element.getAttribute("data-reset-after-submit"),this.recaptchaPromise=this.prepareReCaptcha(),this.element.addEventListener("submit",(e=>{e.preventDefault(),this._onFormSubmit()})),this.isSubmitting=!1}async prepareReCaptcha(){this.recaptchaKey=this.element.querySelector('[name="_g_recaptcha_key"]')?.getAttribute("value"),this.recaptchaKey&&await this.holder.composer.dependencyManager.loadScript(`https://www.google.com/recaptcha/api.js?render=${this.recaptchaKey}`)}async _onFormSubmit(){if(this.isSubmitting)return;if(this.recaptchaPromise&&await this.recaptchaPromise,this.recaptchaKey)try{const e=await window.grecaptcha.execute(this.recaptchaKey,{action:"submit"}),t=this.element.querySelector('[name="_g_recaptcha_token"]');t?t.setAttribute("value",e):this.element.append(`<input type="hidden" name="_g_recaptcha_token" value="${e}" />`)}catch(e){this.element.querySelector('[name="_g_recaptcha_token"]')?.remove();const t=document.createElement("input");t.setAttribute("type","hidden"),t.setAttribute("name","_g_recaptcha_error"),t.setAttribute("value",e?.message||e.toString()),this.element.append(t)}const e=new FormData(this.element),t=this.element.querySelector('[type="submit"]');t?.classList.add("depicter-is-loading");const r=["token","csrf","auth","password","secret","key","depicter-csrf","action"];if(document.referrer){const t=new URL(document.referrer);r.forEach((e=>{t.searchParams.has(e)&&t.searchParams.delete(e)})),e.append("referrerURL",t.toString())}const i=new URL(window.location.href);r.forEach((e=>{i.searchParams.has(e)&&i.searchParams.delete(e)})),e.append("pageURL",i.toString()),this.isSubmitting=!0,await this._sendForm(e),t?.classList.remove("depicter-is-loading"),this.isSubmitting=!1}async _sendForm(e){this.isSubmitting=!0;const t=this.element.getAttribute("action");try{this.trigger("formSubmit",[this]);const r=await fetch(t,{method:"POST",body:e}),i=await r.json();i.success?(this.resetAfterSubmit&&this.element.reset(),this.trigger("formSubmitted",[this,i]),this.composer.trigger("formSubmitted",[this,i])):(this.trigger("formSubmitError",[this,i]),this.composer.trigger("formSubmitError",[this,i]))}catch(e){this.trigger("formSubmitError",[this,e]),this.composer.trigger("formSubmitError",[this,e]),console.error(e)}}}return window.Depicter.externalLayers.form=i,window.Depicter.externalLayers["survey:form"]=i,e})()));