PageSourceSearch

https://strategysystems.com/wp-content/mu-plugins/ss-cf7-attribution/assets/ss-cf7-attribution.js?ver=0.1.0

js strategysystems.com collected 2026-10-08 01:53:23 UTC 6,060 bytes, 219 lines download raw bytes

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.