PageSourceSearch

https://phonefinder.co.za/cdn/shop/t/2/assets/pf-form.js?v=180272662639617137041780572288

js phonefinder.co.za collected 2026-10-07 14:02:58 UTC 5,131 bytes, 2 lines download raw bytes

1(function(){"use strict";var GEO_API="https://ipapi.co/json/",FORM_SELECTOR=".pf-lead-form",SA_PHONE_RE=/^(\+27|0)[6-8][0-9]{8}$/,SA_ID_RE=/^[0-9]{13}$/,EMAIL_RE=/^[^\s@]+@[^\s@]+\.[^\s@]+$/;function validateForm(form){var errors=[],firstname=form.querySelector('[name="firstname"]'),surname=form.querySelector('[name="surname"]'),idNumber=form.querySelector('[name="id_number"]'),email=form.querySelector('[name="email"]'),cellphone=form.querySelector('[name="cellphone_number"]');return clearErrors(form),(!firstname||!firstname.value.trim())&&errors.push({el:firstname,msg:"Please enter your first name"}),(!surname||!surname.value.trim())&&errors.push({el:surname,msg:"Please enter your surname"}),(!idNumber||!SA_ID_RE.test(idNumber.value.trim()))&&errors.push({el:idNumber,msg:"Please enter a valid 13-digit SA ID number"}),(!email||!EMAIL_RE.test(email.value.trim()))&&errors.push({el:email,msg:"Please enter a valid email address"}),(!cellphone||!SA_PHONE_RE.test(cellphone.value.trim().replace(/\s/g,"")))&&errors.push({el:cellphone,msg:"Please enter a valid SA cellphone number"}),errors.forEach(function(err){showFieldError(err.el,err.msg)}),errors.length===0}function showFieldError(el,msg){if(el){el.classList.add("pf-field-error");var hint=document.createElement("span");hint.className="pf-field-error-msg",hint.textContent=msg,el.parentNode.appendChild(hint)}}function clearErrors(form){form.querySelectorAll(".pf-field-error").forEach(function(el){el.classList.remove("pf-field-error")}),form.querySelectorAll(".pf-field-error-msg").forEach(function(el){el.remove()})}function getGeo(){return fetch(GEO_API).then(function(r){return r.json()}).then(function(data){return{country:data.country_name||"",ipaddress:data.ip||"",towncity:data.city||"",county:data.region||"",postcode:data.postal||"",latitude:data.latitude?String(data.latitude):"",longitude:data.longitude?String(data.longitude):""}}).catch(function(){return{}})}function applyGeo(form,geo){var geoMap={"pf-field-user-agent":navigator.userAgent||"","pf-field-country":geo.country||"","pf-field-ipaddress":geo.ipaddress||"","pf-field-city":geo.towncity||"","pf-field-region":geo.county||"","pf-field-postcode":geo.postcode||"","pf-field-latitude":geo.latitude||"","pf-field-longitude":geo.longitude||""};Object.keys(geoMap).forEach(function(id){var el=form.querySelector("#"+id);el&&(el.value=geoMap[id])}),Object.assign(window.pfTracking,geo)}function buildPayload(form,vertical){var config=window.pfWebhooks&&window.pfWebhooks[vertical]||{},payload={sid:config.sid||"4001",suppier_key:config.suppierKey||"",campid:config.campid||"",tenant_name:"phonefinder",channel:"Web"},inputs=form.querySelectorAll("input[name], select[name], textarea[name]");return inputs.forEach(function(input){var name=input.name,value=input.value.trim();name&&value&&(payload[name]=value)}),(!payload.ssid||payload.ssid==="")&&(payload.ssid="ORGANIC"),delete payload.suppier_key_display,payload}function postToLeadByte(vertical,payload){var config=window.pfWebhooks&&window.pfWebhooks[vertical]||{},endpoint=config.endpoint;return endpoint?fetch(endpoint,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(payload)}).then(function(r){if(!r.ok)throw new Error("HTTP "+r.status);return r.json()}):(console.error("[pf-form] No endpoint configured for vertical:",vertical),Promise.reject(new Error("No endpoint")))}function setSubmitting(form,isSubmitting){var btn=form.querySelector('[type="submit"]');btn&&(btn.disabled=isSubmitting,btn.textContent=isSubmitting?"Submitting...":"Apply Now")}function showSuccess(form){var successEl=form.querySelector(".pf-form-success"),fieldsEl=form.querySelector(".pf-form-fields");fieldsEl&&(fieldsEl.style.display="none"),successEl&&(successEl.style.display="block")}function showError(form,message){var errorEl=form.querySelector(".pf-form-submit-error");errorEl&&(errorEl.textContent=message||"Something went wrong. Please try again.",errorEl.style.display="block"),setSubmitting(form,!1)}function handleSubmit(e){e.preventDefault();var form=e.currentTarget,vertical=form.dataset.vertical||"phones";validateForm(form)&&(setSubmitting(form,!0),Promise.resolve(pfGeoCache||getGeo()).then(function(geo){return pfGeoCache=geo,applyGeo(form,geo),buildPayload(form,vertical)}).then(function(payload){return postToLeadByte(vertical,payload)}).then(function(response){console.log("[pf-form] LeadByte response:",response),showSuccess(form)}).catch(function(err){console.error("[pf-form] Submission error:",err),showError(form,"Something went wrong. Please try again.")}))}function bindForms(){document.querySelectorAll(FORM_SELECTOR).forEac
1h(function(form){form.removeEventListener("submit",handleSubmit),form.addEventListener("submit",handleSubmit)})}document.addEventListener("DOMContentLoaded",bindForms),document.addEventListener("pf:drawer:open",bindForms);var pfGeoCache=null;document.addEventListener("pf:drawer:open",function(){pfGeoCache||getGeo().then(function(geo){pfGeoCache=geo})}),window.pfForm={bind:bindForms}})();
2//# sourceMappingURL=/cdn/shop/t/2/assets/pf-form.js.map?v=180272662639617137041780572288

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.