1import{_ as v,o as a,c as l,F as m,e as f,t as _,h as d,w as E,D as w,a as g,b as F,n as u,g as V,E as C,G as L,H as x,I as b,V as T,J as p,W as I,K as B,r as M}from"./app-index-CXQob2hh.js";import N from"./ch-BaseField-D44cyf1j.js";function q(e){return typeof e=="boolean"?e:typeof e=="number"?e!==0:typeof e=="string"?e!=="0"&&e!=="":!!e}function y(e){return e==null?!0:typeof e=="string"?e.trim().length===0:!1}const O=["subscribe","newsletter"];function S(e){return String(e||"").trim().toLowerCase().replace(/[^a-z0-9_]+/g,"_").replace(/_+/g,"_").replace(/^_+|_+$/g,"")}const H={name:"BaseForm",components:{BaseField:N},setup(){return{formIdSuffix:B()}},data(){return{consent:{},formValues:{},fieldErrors:{},showErrors:!1,isSubmitting:!1,submitFlag:!1,hasErrors:!1,errorList:[],fieldValidityByName:{},nickname:"",antispamToken:null,formStartedAt:0}},props:{settings:{type:Object,required:!0},title:{type:String,required:!1},description:{type:String,required:!1},submitText:{type:String,required:!1}},computed:{getId(){return"form_"+this.formIdSuffix},formName(){const e=S(this.safeSettings.form_type)||"unknown",i=S(this.safeSettings.form_subtype)||"default";return"form_"+e+"__"+i},safeSettings(){const e=this.settings||{},r=(Array.isArray(e.fields)?e.fields:e.fields||[]).filter(Boolean).map(s=>({...s,optional:q(s.optional),validation:s.validation!==void 0?Number(s.validation):0}));return{additional_class:e.additional_class||"",link_class:e.link_class||"",form_type:e.form_type||"",form_subtype:e.form_subtype||"",ctform_id:typeof e.ctform_id=="string"?e.ctform_id:"",hs_language:e.hs_language||"",has_button_placeholder:!!e.has_button_placeholder,capterra_tracking:!!e.capterra_tracking,fields:r,messages:{submit_title:e.messages?.submit_title||"",submit_text:e.messages?.submit_text||"",field_error:e.messages?.field_error||"",form_error:e.messages?.form_error||""},consent:e.consent||null}},hasButtonPlaceholder(){return this.safeSettings.has_button_placeholder}},watch:{settings:{immediate:!0,handler(){this.initStateFromSettings()}}},mounted(){typeof window<"u"&&(this.formStartedAt=Date.now(),this.fetchAntispamToken())},methods:{onFormStart(){try{p("FormStart",{form_id:this.formName,ctform_id:String(this.safeSettings.ctform_id||"")})}catch{}},async fetchAntispamToken(){try{const e=await fetch("/api/v2/vue/form/token",{method:"GET",headers:{Accept:"application/json"},credentials:"same-origin"});if(!e.ok)return;const i=await e.json();i&&typeof i.ts=="number"&&typeof i.sig=="string"&&(this.antispamToken={ts:i.ts,sig:i.sig})}catch{}},initStateFromSettings(){const e={};for(const r of this.safeSettings.fields){if(!r||r.type==="button_placeholder")continue;const s=r.field_name;s&&(Object.prototype.hasOwnProperty.call(this.formValues,s)?e[s]=this.formValues[s]:e[s]="")}this.formValues=e;const i=this.safeSettings.consent;if(i?.options?.order?.length){const r={...this.consent};for(const s of i.options.order)Object.prototype.hasOwnProperty.call(r,s)||(r[s]=!1);this.consent=r}this.fieldErrors={},this.hasErrors=!1,this.showErrors=!1},buttonLabel(e){return e?.label?e.label:this.submitText},setFieldValue(e,i){this.formValues={...this.formValues,[e]:i},this.fieldErrors[e]&&(this.fieldErrors={...this.fieldErrors,[e]:""})},setFieldValidity(e,i){this.fieldValidityByName={...this.fieldValidityByName,[e]:!!i}},validate(){let e=!0;const i={};for(const r of this.safeSettings.fields){if(!r||r.type==="button_placeholder")continue;const s=r.field_name;if(!s)continue;const n=this.formValues[s];if(!r.optional&&y(n)){e=!1,i[s]=this.safeSettings.messages.field_error;continue}if(r.optional&&y(n))continue;this.fieldValidityByName[s]===!1&&(e=!1,i[s]=this.safeSettings.messages.form_error)}for(const r of this.safeSettings.consent?.options?.required||[])this.consent[r]||(e=!1);return this.fieldErrors=i,e},processResponse(e){const i=!!(e?.status&&e?.valid);if(this.submitFlag=i,e?.valid===!1){const r={};for(const s of this.safeSettings.fields){const n=s?.field_name;if(!n)continue;const t=e.errors?.[n];t?.messages?.length&&(r[n]=t.messages.join(" "))}this.fieldErrors={...this.fieldErrors,...r};return}if(i){try{T(this.formName)}catch{}try{const r=String(this.safeSettings.form_type||"").toLowerCase();!O.some(n=>r.includes(n))&&p("SubmitApplication",{form_id:this.formName,ctform_id:String(this.safeSettings.ctform_id||"")},{eventId:this.pendingEventId,skipCollector:!0})}catch{}if(this.safeSettings.capterra_tracking)try{I()}catch{}}}
1,async submitForm(){if(typeof window>"u"||this.isSubmitting)return!1;if(!this.validate())return this.showErrors=!0,this.$refs.form_wrapper?.classList.add("show-errors"),this.hasErrors=!0,!1;this.hasErrors=!1,this.showErrors=!1,this.$refs.form_wrapper?.classList.remove("show-errors");const e={};for(const s of this.safeSettings.fields){if(!s||s.type==="button_placeholder")continue;const n=s.field_name;n&&(e[n]=this.formValues[n])}const i={...this.consent};e.hs_language=this.safeSettings.hs_language,this.pendingEventId=C();const r={method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({values:e,consent:i,page_url:typeof location<"u"?location.href:"",nickname:this.nickname,token_ts:this.antispamToken?.ts||0,token_sig:this.antispamToken?.sig||"",form_started_at:this.formStartedAt,event_id:this.pendingEventId,ctform_id:String(this.safeSettings.ctform_id||""),ct_sid:x()||void 0,ct_vid:L()||void 0})};this.isSubmitting=!0;try{const s=await fetch("/api/v2/vue/form/"+this.safeSettings.form_type+"/"+this.safeSettings.form_subtype+"/submit",r);if(!s.ok){this.hasErrors=!0;try{b("SubmitError",{form_id:this.formName,ctform_id:String(this.safeSettings.ctform_id||""),reason:"http_"+s.status})}catch{}return!1}const n=await s.json();this.processResponse(n),n?.valid===!1&&(this.hasErrors=!0,this.showErrors=!0,this.$refs.form_wrapper?.classList.add("show-errors"))}catch{this.hasErrors=!0;try{b("SubmitError",{form_id:this.formName,ctform_id:String(this.safeSettings.ctform_id||""),reason:"network"})}catch{}}finally{this.isSubmitting=!1}return!1},consentChecked(e){this.consent={...this.consent,[e]:!this.consent[e]}},fakeLabelClick(e){typeof document>"u"||document.getElementById(this.getId+"_"+e)?.click()},isConsentItemRequired(e){return(this.safeSettings.consent?.options?.required||[]).indexOf(e)>-1}}},A=["innerHTML"],j=["innerHTML"],P={key:0,class:"form-title t-h2"},D=["innerHTML"],R=["id","name","data-matomo-form-name"],U={class:"vbub-field-nickname","aria-hidden":"true"},z=["for"],G=["id"],J=["value","disabled"],K={key:0,class:"form-consent"},W=["onClick"],X=["name","id","required","checked","onChange"],Y=["for","innerHTML"],Q=["innerHTML"],Z={key:1,class:"error-text error-notice t-small-strong"},$={key:2,class:"vbub-actions"},ee=["value","disabled"];function te(e,i,r,s,n,t){const k=M("BaseField");return a(),l("div",{class:u(["bub-form-wrapper",t.safeSettings.additional_class]),ref:"form_wrapper"},[n.submitFlag?(a(),l(m,{key:0},[f("h2",{class:"form-title t-h2",innerHTML:t.safeSettings.messages.submit_title},null,8,A),f("div",{class:"form-description t-body",innerHTML:t.safeSettings.messages.submit_text},null,8,j)],64)):(a(),l(m,{key:1},[r.title?(a(),l("h2",P,_(r.title),1)):d("",!0),r.description?(a(),l("div",{key:1,class:"form-description t-body",innerHTML:r.description},null,8,D)):d("",!0),f("form",{id:t.getId,name:t.formName,"data-matomo-form-name":t.formName,class:"vbub-form",onSubmit:i[1]||(i[1]=V((...o)=>t.submitForm&&t.submitForm(...o),["prevent"])),onFocusinOnce:i[2]||(i[2]=(...o)=>t.onFormStart&&t.onFormStart(...o))},[f("div",U,[f("label",{for:t.getId+"_nickname"},"Nickname",8,z),E(f("input",{id:t.getId+"_nickname","onUpdate:modelValue":i[0]||(i[0]=o=>n.nickname=o),type:"text",name:"nickname",tabindex:"-1",autocomplete:"off"},null,8,G),[[w,n.nickname]])]),(a(!0),l(m,null,g(t.safeSettings.fields,(o,h)=>(a(),l(m,{key:h},[o.type!=="button_placeholder"?(a(),F(k,{key:0,field:o,error:t.safeSettings.messages.field_error,"validation-error":n.fieldErrors[o.field_name],"form-suffix":s.formIdSuffix,"model-value":n.formValues[o.field_name],"onUpdate:modelValue":c=>t.setFieldValue(o.field_name,c),onValidity:c=>t.setFieldValidity(c?.name||o.field_name,c?.isValid)},null,8,["field","error","validation-error","form-suffix","model-value","onUpdate:modelValue","onValidity"])):(a(),l("div",{key:1,class:u(["vbub-field vbub-button-placeholder",o.class])},[f("input",{type:"submit",class:u(["bub-link ui-button",t.safeSettings.link_class||"btn-yellow"]),value:t.buttonLabel(o),disabled:n.isSubmitting},null,10,J)],2))],64))),128)),t.safeSettings.consent?(a(),l("div",K,[(a(!0),l(m,null,g(t.safeSettings.consent.options.order,(o,h)=>(a(),l("div",{key:h,class:u(["form-consent-item",{checked:!!n.consent[o],"has-error":n.showErrors&&t.isConsentItemRequired(o)&&!n.consent[o]}])},[f("span",{class:"fake-checkbox",onClick:c=>t.fakeLabelClick(o)},null,8,W),f("input",{type:"checkbox",name:o,id:t.getId+"_"+o,class:"form-consent-item-checkbox",required:t.isConsentItemRequired(o),checked:!!n.consent[o],onChange:c=>t.consentChecked(o)},null,40,X),f("label",{for:t.getId+"_"+o,class:"ui-label",innerHTML:t.safeSettings.consent.items[o]},null,8,Y)],2))),128)),t.safeSettings.consent.description?(a(),l("div",{key:0,class:"form-consent-description t-caption",innerHTML:t.safeSettings.consent.description},null,8,Q)):d("",!0)])):d("",!0),n.hasErrors?(a(),l("div",Z,_(t.safeSettings.messages.form_error),1)):d("",!0),t.hasButtonPlaceholder?d("",!0):(a(),l("div",$,[f("input",{type:"submit",class:"bub-link btn-yellow ui-button",value:r.submitText,disabled:n.isSubmitting},null,8,ee)]))],40,R)],64))],2)}const re=v(H,[["render",te]]);export{re as default};
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.