1var module_122540644155=function(){"use strict";async function _getData(url="",type="json"){const response=await fetch(url,{method:"GET"});if(!response.ok)throw new Error(response.statusText);return"json"===type?response.json():response.text()}function validateEmailFormat(field){const val=field.value.trim(),format=new RegExp(/^(([^<>()\[\]\\.,;:\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,}))$/),checkGeneric="true"===field.dataset.check,username=val.split("@")[0]?.toLowerCase(),domain=val.split("@")[1]?.toLowerCase(),provider=domain?.split(".")[0],isGeneric=["email"].includes(username)||["126","163","21cn","aim","alice","aliyun","aol","arnet","att","bell","bellsouth","blueyonder","bol","bt","btinternet","charter","comcast","cox","daum","deped","duck","earthlink","email","example","facebook","fastmail","fibertel","foxmail","free","freeserve","games","globo","globomail","gmail","gmx","google","googlemail","hanmail","hotmail","hush","hushmail","icloud","ig","iname","inbox","itelefonica","juno","keemail","laposte","lavabit","libero","list","live","love","mac","mail","me","msn","nate","naver","neuf","ntlworld","o2","oi","online","orange","outlook","pobox","poste","prodigy","proton","protonmail","qq","r7","rambler","rocketmail","rogers","safe-mail","sbcglobal","sfr","sharklasers","shaw","sina","sky","skynet","speedy","sympatico","t-online","talktalk","telenet","teletu","terra","tin","tiscali","tuta","tutamail","tutanota","tvcablenet","uol","verizon","virgilio","virgin","virginmedia","voo","wanadoo","web","wow","ya","yahoo","yandex","yeah","ygm","ymail","zipmail","zoho","zohomail"].includes(provider);return""===val&&field.required?{isGeneric:isGeneric,isValid:!1,message:"Please complete this required field."}:""!==val?format.test(val)?checkGeneric&&isGeneric?{isGeneric:isGeneric,isValid:!1,message:"Please enter a work email address."}:{isGeneric:isGeneric,isValid:!0}:{isGeneric:isGeneric,isValid:!1,message:"Please enter a valid email address."}:{isGeneric:isGeneric,isValid:!0}}function getFormatValidation({field:field}){switch(field.type){case"text":case"textarea":return function(field){return""===field.value.trim()&&field.required?{isValid:!1,message:"Please complete this required field."}:{isValid:!0}}(field);case"email":return validateEmailFormat(field);case"tel":return function(field){const iti=window.intlTelInputGlobals.getInstance(field),val=field.value.trim(),errorMap=["Please enter a valid phone number.","Please enter a valid country code.","Phone number is too short.","Phone number is too long.","Please enter a phone number in international format."];if(""===val&&field.required)return{isValid:!1,message:"Please complete this required field."};if(""!==val){if(void 0===iti||iti.isValidNumber())return{isValid:!0};{const errorCode=iti.getValidationError();return void 0===errorMap[errorCode]?{isValid:!1,message:"Please enter a valid phone number."}:{isValid:!1,message:errorMap[errorCode]}}}return{isValid:!0}}(field);case"select-one":return function(field){return""===field.value.trim()&&field.required?{isValid:!1,message:"Please select an option from the dropdown menu."}:{isValid:!0}}(field);default:return{isValid:!0}}}const responseCache={};async function getEmailValidation({email:email,ipAddrPromise:ipAddrPromise}){const cachedResponse=responseCache[email];if(cachedResponse)return cachedResponse;analytics.track("Email Submission Attempted",{email:email});const ipAddress=await ipAddrPromise,response=await async function(email,ipAddress=""){const zb=new URL("https://api.zerobounce.net/v2/validate");zb.searchParams.append("api_key","dfd9ee0fbed64f38a080e00cedc35f86"),zb.searchParams.append("email",email),zb.searchParams.append("ip_address",ipAddress);try{return await _getData(zb)}catch(error){throw new Error(`ZeroBounce could not be reached: ${error.message}`)}}(email,ipAddress);return analytics.track("Email Validation Data Received",{...response}),responseCache[email]=response,response}function getValidationData({field:field,ipAddrPromise:ipAddrPromise}){return"email"===field.type?async function({field:field,ipAddrPromise:ipAddrPromise}){const format=validateEmailFormat(field);if(!format.isValid)return format;const val=field.value.trim();try{const response=await getEmailValidation({email:val,ipAddrPromise:ipAddrPromise}),checkGeneric="true"===field.dataset.check,isGeneric=response.free_email;return"invalid"===response.status?{isGeneric:isGeneric,isValid:!1,message:"Please enter a valid email address."}:checkGeneric&&response.free_email?{isGeneric:isGeneric,isValid:!1,message:"Please enter a work email address."}:response.error?(console.error(response.error),analytics.track("Email Validation Call Failed",{email:val,error:response.error}),{isGeneric:format.isGeneric,isValid:!0}):{isGeneric:isGeneric,isValid:!0}}catch(error){return console.error(error),analytics.track("Email Validation Call Failed",{email:val,error:error.message}),{isGeneric:format.isGeneric,isValid:!1,message:"Sorry, we were unable to validate your email address. Please refresh the page and try again."}}}({field:field,ipAddrPromise:ipAddrPromise}):getFormatValidation({field:field})}function handleInvalid({field:field,message:message}){const fieldParent=field.closest(".field-wrapper");if(!field.closest("form").contains(fieldParent))return;let fieldError=fieldParent.querySelector(".field__error-text");if(!fieldParent.contains(fieldError)){const fieldErrorID=`${field.id}__error`;fieldError=document.createElement("p"),fieldError.id=fieldErrorID,fieldError.classList.add("field__error-text"),field.setAttribute("aria-invalid","true"),field.setAttribute("aria-describedby",fieldErrorID),fieldParent.appendChild(fieldError),fieldParent.classList.add("has-error")}fieldError.textContent=message}async function reportValidity({event:event,ipAddrPromise:ipAddrPromise,target:target}){let validation={};
1"input"===event.type?validation=getFormatValidation({field:target}):"focusout"!==event.type&&"submit"!==event.type||(validation=await getValidationData({field:target,ipAddrPromise:ipAddrPromise})),!validation.isValid&&validation.message?handleInvalid({field:target,message:validation.message}):validation.isValid?function({field:field}){const fieldParent=field.closest(".field-wrapper"),fieldError=fieldParent?.querySelector(".field__error-text");field.closest("form").contains(fieldParent)&&fieldParent.contains(fieldError)&&(field.removeAttribute("aria-invalid"),field.removeAttribute("aria-describedby"),fieldParent.removeChild(fieldError),fieldParent.classList.remove("has-error"))}({field:target}):handleInvalid({field:target,message:"Please complete this required field"})}function getHubSpotUTK(){const cookie=document.cookie.replace(/(?:(?:^|.*;\s*)hubspotutk\s*\=\s*([^;]*).*$)|^.*$/,"$1");return""===cookie?null:cookie}const submitForm=function(fn){function _f(){return _f.isCalled||(_f.isCalled=!0,_f.res=fn.apply(this,arguments)),_f.res}return _f.prototype=fn.prototype,_f.isCalled=!1,_f}((async function({form:form,settings:settings,validation:validation}){const hsAPI=new URL(form.action),sourceData=new FormData(form),hsFormFields=[],formData={routeName:settings.routeName,default:settings.default};for(const[name,value]of sourceData)"ignore"!==name&&(formData[name]=value.trim(),hsFormFields.push({name:name,value:value}));const email=formData.email,goal=formData.goal;formData.is_generic_email=validation.email.isGeneric,formData.exclusion=function({email:email,goal:goal}){const user=email.split("@")[0],domain=email.split("@")[1]?.toLowerCase();return domain?.match(/\.ru(?=\.|\b)/)?"russia":user?.match(/^([a-z._]{0,10}[-]?\d{4,}$|\d{2,})|\.alumno(s?)$/)||domain?.match(/(^|\.)(?:ac|alum?(?:nos)?\w*|(colegio|lycee)\w*|edu?(?:bc|ca|cacao|cation)?|esc(?:cola|cuela|20)?\w*|\w*k12\w*|\w*schools?|(nyc)?(e?stu)(?:d|dent|dents|dante|diante)?|u4sd|lexart.cl|iessaserra|lamilagrosalaudio|myhapa|udd|sgsintpaulus|uc|uinter|lawtonps|lausd|dpsnc|newdesignscharter|cohoes|ubc|fsd5|islington)(?=\.|\b)/)?"student":"virtual-events"===goal||"education"===goal?goal:"none"}({email:email,goal:goal});const params=new URLSearchParams(window.location.search);for(const[key,value]of params.entries())formData[key]=value;try{!async function({form:form,formData:formData,response:response,settings:settings}){if(settings.default.enabled&&settings.default.formId&&settings.default.teamId){analytics.track("Submitted Schedule Meeting Form",{...formData});const redirectUrl={russia:"https://www.kumospace.com/page/submitted-russia",student:"https://www.kumospace.com/page/submitted-education",education:"https://www.kumospace.com/page/submitted-education","virtual-events":"https://www.kumospace.com/page/submitted-virtual-events"}[formData.exclusion];if(redirectUrl)return void(window.location.href=new URL(redirectUrl));await window.DefaultSDK.submit({form_id:settings.default.formId,team_id:settings.default.teamId,responses:{firstname:formData.firstname,lastname:formData.lastname,email:formData.email,goal:formData.goal,size:formData.size},questions:[{id:"firstname",name:"First name",type:"text",options:[]},{id:"lastname",name:"Last name",type:"text",options:[]},{id:"email",name:"Email",type:"email",options:[]},{id:"goal",name:"Goal for using Kumospace?",type:"text",options:[]},{id:"size",name:"Company size",type:"text",options:[]}]},{onSuccess:()=>{analytics.track("Scheduled Meeting",{...formData,meeting_time:args?.slot?.start});const formParent=form.parentElement,formID=form.id;form.remove();const fragment=document.createRange().createContextualFragment(response.inlineMessage),heading=document.getElementById(`${formID}_heading`);formParent.contains(heading)&&heading.dataset.confirmation&&(heading.textContent=heading.dataset.confirmation,delete heading.dataset.confirmation),formParent.classList.add("flow"),formParent.append(fragment)}})}if(!formData.default.enabled){if(analytics.track("Web Form Submitted",{...formData}),response.redirectUri)return void(location.href=new URL(response.redirectUri));if(response.inlineMessage){const formParent=form.parentElement,formID=form.id;form.remove();const fragment=document.createRange().createContextualFragment(response.inlineMessage),heading=document.getElementById(`${formID}_heading`);formParent.contains(heading)&&heading.dataset.confirmation&&(heading.textContent=heading.dataset.confirmation,delete heading.dataset.confirmation),formParent.classList.add("flow"),formParent.append(fragment)}}}({form:form,formData:formData,response:await async function(url="",data={}){const response=await fetch(url,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(data)});if(!response.ok)throw await response.json();return response.json()}(hsAPI,{context:{hutk:getHubSpotUTK(),ipAddress:""===settings.ipAddress?null:settings.ipAddress,pageName:document.title,pageUri:window.location.href.toString()},fields:hsFormFields}),settings:settings})}catch(error){!function({form:form,formData:formData,error:error}){console.error(`HubSpot could not be reached: ${error.message}`),analytics.track("Form Submission Failed",{data:formData,error:error.errors}),formError=document.createElement("p"),formError.textContent="Sorry, something went wrong and your submission was not accepted. Please refresh the page and try again. If this error message persists, contact us directly at [email protected].",formError.classList.add("text-sm"),formError.style.color="red",form.appendChild(formError)}({form:form,formData:formData,error:error})}}));
1async function processForm({event:event,ipAddrPromise:ipAddrPromise,settings:settings}){event.preventDefault();const submitButton=event.submitter,submitButtonText=submitButton.innerText;submitButton.disabled=!0,submitButton.innerText="Validating...";const validation=await async function({form:form,ipAddrPromise:ipAddrPromise}){const fields=form.querySelectorAll("input, select, textarea"),validationPromises=await Promise.all([...fields].map((field=>getValidationData({field:field,ipAddrPromise:ipAddrPromise})))),values={};[...fields].forEach(((field,index)=>{values[field.name]=validationPromises[index]}));const invalidFields=[...fields].filter(((field,index)=>!validationPromises[index].isValid));return{...values,invalidFields:invalidFields}}({form:event.target,ipAddrPromise:ipAddrPromise}),invalidFields=validation.invalidFields;if(invalidFields.length>0)return submitButton.disabled=!1,submitButton.innerText=submitButtonText,invalidFields.forEach((field=>{reportValidity({event:event,ipAddrPromise:ipAddrPromise,target:field})})),void invalidFields[0].focus();submitButton.disabled=!0,submitButton.innerText="Submitting...";const phoneField=document.querySelector('[type="tel"]');if(event.target.contains(phoneField)){const iti=window.intlTelInputGlobals.getInstance(phoneField),onlyCountries=["au","at","be","br","dk","fi","de","hk","is","ie","il","it","jp","lu","mx","nl","no","pl","pt","ro","kr","es","se","ch","tr","us"];phoneField.value=iti.getNumber();const isInList=onlyCountries.includes(iti.getSelectedCountryData().iso2),isLikelyMobile=iti.getNumberType()===intlTelInputUtils.numberType.MOBILE||iti.getNumberType()===intlTelInputUtils.numberType.FIXED_LINE_OR_MOBILE;isInList&&isLikelyMobile||(phoneField.name="ignore")}submitForm({form:event.target,settings:settings,validation:validation})}const ipAddrPromise=async function(delay=1e3){const ipify=new URL("https://api.ipify.org"),fallback=new Promise((resolve=>{setTimeout(resolve,delay,"")}));return await Promise.race([fallback,_getData(ipify,"text").catch((error=>(console.error(`ipify could not be reached: ${error.message}`),"")))])}();var fn;fn=function(){document.querySelectorAll("form").forEach((async form=>{const settings={ipAddress:await ipAddrPromise,routeName:form.dataset.route||"",default:{enabled:!!form.dataset.team&&!!form.dataset.form,teamId:form.dataset.team,formId:form.dataset.form}};form.addEventListener("input",function(fn,delay=500){let timeoutID;return(...args)=>{timeoutID&&clearTimeout(timeoutID),timeoutID=setTimeout((()=>{fn.apply(null,args),timeoutID=null}),delay)}}((event=>{const{target:target}=event;target.matches("input, select, textarea")&&reportValidity({event:event,ipAddrPromise:ipAddrPromise,target:target})}))),form.addEventListener("focusout",(event=>{const{target:target}=event;target.matches("input, select, textarea")&&reportValidity({event:event,ipAddrPromise:ipAddrPromise,target:target})})),form.addEventListener("submit",(event=>{event.preventDefault(),processForm({event:event,ipAddrPromise:ipAddrPromise,settings:settings})}))}))},"complete"===document.readyState||"interactive"===document.readyState?(setTimeout(fn,1),document.removeEventListener("DOMContentLoaded",fn)):document.addEventListener("DOMContentLoaded",fn)}(); 2//# sourceURL=https://9035810.fs1.hubspotusercontent-na1.net/hubfs/9035810/hub_generated/module_assets/1/122540644155/1747765666783/module_form-v2.js
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.