1(function() { 2 var COOKIE_DAYS=365; 3 var SESSION_MINUTES=30; 4 5 function uuid() { 6 if (window.crypto && typeof window.crypto.randomUUID==='function') { 7 return window.crypto.randomUUID(); 8 } 9 10 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(c) { 11 var r=Math.random()*16|0; 12 var v=c==='x' ? r : (r&0x3|0x8); 13 return v.toString(16); 14 }); 15 } 16 17 function setCookie(name,value,days) { 18 var expires=''; 19 if (days) { 20 var date=new Date(); 21 date.setTime(date.getTime()+(days*24*60*60*1000)); 22 expires='; expires='+date.toUTCString(); 23 } 24 document.cookie=name+'='+encodeURIComponent(value)+expires+'; path=/; SameSite=Lax'; 25 } 26 27 function getCookie(name) { 28 var nameEQ=name+'='; 29 var parts=document.cookie.split(';'); 30 31 for (var i=0;i<parts.length;i++) { 32 var c=parts[i]; 33 while (c.charAt(0)===' ') { 34 c=c.substring(1,c.length); 35 } 36 if (c.indexOf(nameEQ)===0) { 37 return decodeURIComponent(c.substring(nameEQ.length,c.length)); 38 } 39 } 40 41 return ''; 42 } 43 44 function safeJsonParse(value) { 45 try { 46 return JSON.parse(value); 47 } catch (e) { 48 return null; 49 } 50 } 51 52 function nowIso() { 53 return new Date().toISOString(); 54 } 55 56 function parseQueryParams() { 57 var params=new URLSearchParams(window.location.search); 58 59 return { 60 utm_source: params.get('utm_source') || '', 61 utm_medium: params.get('utm_medium') || '', 62 utm_campaign: params.get('utm_campaign') || '', 63 utm_term: params.get('utm_term') || '', 64 utm_content: params.get('utm_content') || '', 65 gclid: params.get('gclid') || '', 66 msclkid: params.get('msclkid') || '', 67 fbclid: params.get('fbclid') || '' 68 }; 69 } 70 71 function detectDeviceType() { 72 var ua=(navigator.userAgent || '').toLowerCase(); 73 74 if (ua.indexOf('ipad')>-1 || ua.indexOf('tablet')>-1) { 75 return 'tablet'; 76 } 77 78 if ( 79 ua.indexOf('mobi')>-1 || 80 ua.indexOf('iphone')>-1 || 81 ua.indexOf('android')>-1 82 ) { 83 return 'mobile'; 84 } 85 86 return 'desktop'; 87 } 88 89 function getVisitorId() { 90 var visitorId=getCookie('ss_visitor_id'); 91 92 if (!visitorId) { 93 visitorId=uuid(); 94 setCookie('ss_visitor_id',visitorId,COOKIE_DAYS); 95 } 96 97 return visitorId; 98 } 99 100 function getSessionId() { 101 var sessionId=getCookie('ss_session_id'); 102 var lastSeenRaw=getCookie('ss_session_last_seen'); 103 var lastSeen=lastSeenRaw ? parseInt(lastSeenRaw,10) : 0; 104 var nowTs=Date.now(); 105 var expired=!lastSeen || (nowTs-lastSeen)>(SESSION_MINUTES*60*1000); 106 107 if (!sessionId || expired) { 108 sessionId=uuid(); 109 setCookie('ss_session_id',sessionId,1); 110 } 111 112 setCookie('ss_session_last_seen',String(nowTs),1); 113 114 return sessionId; 115 } 116 117 function getFirstTouch() { 118 var saved=safeJsonParse(getCookie('ss_first_touch')); 119 120 if (saved) { 121 return saved; 122 } 123 124 var query=parseQueryParams(); 125 126 var firstTouch={ 127 first_seen_at: nowIso(), 128 first_landing_url: window.location.href, 129 first_referrer_url: document.referrer || '', 130 first_utm_source: query.utm_source, 131 first_utm_medium: query.utm_medium, 132 first_utm_campaign: query.utm_campaign, 133 first_utm_term: query.utm_term, 134 first_utm_content: query.utm_content, 135 first_gclid: query.gclid, 136 first_msclkid: query.msclkid, 137 first_fbclid: query.fbclid 138 }; 139 140 setCookie('ss_first_touch',JSON.stringify(firstTouch),COOKIE_DAYS); 141 142 return firstTouch; 143 } 144 145 function buildAttributionData() { 146 var firstTouch=getFirstTouch(); 147 148 return { 149 visitor_id: getVisitorId(), 150 session_id: getSessionId(), 151 152 first_seen_at: firstTouch.first_seen_at || '', 153 first_landing_url: firstTouch.first_landing_url || '', 154 first_referrer_url: firstTouch.first_referrer_url || '', 155 156 first_utm_source: firstTouch.first_utm_source || '', 157 first_utm_medium: firstTouch.first_utm_medium || '', 158 first_utm_campaign: firstTouch.first_utm_campaign || '', 159 first_utm_term: firstTouch.first_utm_term || '', 160 first_utm_content: firstTouch.first_utm_content || '', 161 162 first_gclid: firstTouch.first_gclid || '', 163 first_msclkid: firstTouch.first_msclkid || '', 164 first_fbclid: firstTouch.first_fbclid || '', 165 166 current_url: window.location.href, 167 current_referrer_url: document.referrer || '', 168 169 device_type: detectDeviceType(), 170 user_agent: navigator.userAgent || '' 171 }; 172 } 173 174 function setFieldValue(fieldId,value) { 175 var field=document.getElementById(fieldId); 176 if (field) { 177 field.value=value || ''; 178 } 179 } 180 181 function hydrateFormFields() { 182 var data=buildAttributionData(); 183 184 window.SSLeadAttributionData=data; 185 186 setFieldValue('ss_visitor_id',data.visitor_id); 187 setFieldValue('ss_session_id',data.session_id); 188 189 setFieldValue('ss_first_seen_at',data.first_seen_at); 190 setFieldValue('ss_first_landing_url',data.first_landing_url); 191 setFieldValue('ss_first_referrer_url',data.first_referrer_url); 192 193 setFieldValue('ss_first_utm_source',data.first_utm_source); 194 setFieldValue('ss_first_utm_medium',data.first_utm_medium); 195 setFieldValue('ss_first_utm_campaign',data.first_utm_campaign); 196 setFieldValue('ss_first_utm_term',data.first_utm_term); 197 setFieldValue('ss_first_utm_content',data.first_utm_content); 198 199 setFieldValue('ss_first_gclid',data.first_gclid); 200 setFieldValue('ss_first_msclkid',data.first_msclkid); 201 setFieldValue('ss_first_fbclid',data.first_fbclid); 202 203 setFieldValue('ss_current_url',data.current_url); 204 setFieldValue('ss_current_referrer_url',data.current_referrer_url); 205 206 setFieldValue('ss_device_type',data.device_type); 207 setFieldValue('ss_user_agent',data.user_agent); 208 } 209 210 document.addEventListener('DOMContentLoaded',hydrateFormFields); 211 212 document.addEventListener('wpcf7beforesubmit',function() { 213 hydrateFormFields(); 214 }); 215 216 document.addEventListener('wpcf7submit',function() { 217 hydrateFormFields(); 218 }); 219})();
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.