PageSourceSearch

https://happytravels.com.au/wp-content/plugins/stonedigital-leadso…/assets/js/public.js?ver=1791313636

js happytravels.com.au collected 2026-10-06 20:00:16 UTC 9,760 bytes, 332 lines download raw bytes

1function setCookie(name, value, days) {
2    var expires = "";
3    if (days) {
4        var date = new Date();
5        date.setTime(date.getTime() + (days*24*60*60*1000));
6        expires = "; expires=" + date.toUTCString();
7    }
8
9    document.cookie = name + "=" + (value || "")  + expires + "; path=/; SameSite=None; Secure";
10
11    // Check if the cookie was set successfully immediately
12    if (document.cookie.indexOf(name + "=" + encodeURIComponent(value)) !== -1) {
13        // console.log("Cookie set successfully.");
14        return true;
15    } else {
16        // console.error("Failed to set cookie correctly.");
17        return false;
18    }
19}
20
21function getCookie(name) {
22    var nameEQ = name + "=";
23    var ca = document.cookie.split(';');
24    for(var i=0;i < ca.length;i++) {
25        var c = ca[i];
26        while (c.charAt(0)==' ') c = c.substring(1,c.length);
27        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
28    }
29    return "";
30}
31
32function eraseCookie(name) {
33    try {
34        document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
35    } catch (e) {
36        console.error('Failed to erase Cookie item.');
37    }
38}
39
40function setLocalStorage(name, value) {
41    try {
42        localStorage.setItem(name, value);
43        var storedValue = localStorage.getItem(name);
44
45        if (storedValue === value) {
46            // console.log("Item set successfully in localStorage.");
47            return true;
48        } else {
49            console.error("Failed to set item correctly in localStorage.");
50            return false;
51        }
52    } catch (e) {
53        console.error('Local Storage is not available.');
54        return false;
55    }
56}
57
58function getLocalStorage(name) {
59    try {
60        return localStorage.getItem(name);
61    } catch (e) {
62        console.error('Local Storage is not available.');
63        return null;
64    }
65}
66
67function eraseLocalStorage(name) {
68    try {
69        localStorage.removeItem(name);
70    } catch (e) {
71        console.error('Failed to erase Local Storage item.');
72    }
73}
74
75function setSessionStorage(name, value) {
76    jQuery.ajax({
77        url: sdlst.ajax_url,
78        type: 'POST',
79        data: {
80            action: 'sdlst_set_session_storage',
81            name: name,
82            value: value
83        },
84        success: function (response) {
85            // console.log(response);
86        },
87        error: function (response) {
88            console.error('Failed to set session storage.');
89        }
90    });
91}
92
93function getSessionStorage(name) {
94    jQuery.ajax({
95        url: sdlst.ajax_url,
96        type: 'POST',
97        data: {
98            action: 'sdlst_get_session_storage',
99            name: name
100        },
101        success: function (response) {
102            return response.data;
103        },
104        error: function (response) {
105            console.error('Failed to get session storage.');
106        }
107    });
108}
109
110function eraseSessionStorage(name) {
111    jQuery.ajax({
112        url: sdlst.ajax_url,
113        type: 'POST',
114        data: {
115            action: 'sdlst_erase_session_storage',
116            name: name
117        },
118        success: function (response) {
119            return response.data;
120        },
121        error: function (response) {
122            console.error('Failed to erase session storage.');
123        }
124    });
125}
126
127function storeData(name, value, days = 30) {
128    let success = false;
129    let storageMethod = '';
130
131    try {
132        if (setCookie(name, value, days)) {
133            success = true;
134            storageMethod = 'cookies';
135        }
136    } catch (e) {
137        console.error('Cookies are not available.');
138    }
139
140    return;
141    // If cookies didn't work, try localStorage
142    if (!success) {
143        try {
144            if (setLocalStorage(name, value)) {
145                success = true;
146                storageMethod = 'localStorage';
147            } else {
148                // If localStorage set fails, try sessionStorage immediately
149                try {
150                    setSessionStorage(name, value);
151                    success = true;
152                    storageMethod = 'sessionStorage';
153                } catch (e) {
154                    console.error('Session Storage is not available.');
155                }
156            }
157        } catch (e) {
158            console.error('Local Storage is not available.');
159        }
160    }
161
162    if (success) {
163        console.log(`Data stored successfully in ${storageMethod}.`);
164    } else {
165        console.error('Failed to store data in any available storage.');
166    }
167}
168
169function getData(name) {
170    let value = getCookie(name);
171
172    if (value !== undefined && value !== "") {
173        return value;
174    }
175
176    value = getLocalStorage(name);
177
178    if (value !== undefined && value !== "") {
179        return value;
180    }
181
182    return getSessionStorage(name);
183}
184
185function eraseData(name) {
186    eraseCookie(name);
187    eraseLocalStorage(name);
188    eraseSessionStorage(name);
189}
190
191function processData() {
192    let queryString = window.location.search;
193    let urlParams = new URLSearchParams(queryString);
194    let utmAllowedTerms = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content", "referrer"];
195    let utmTermsObj = {};
196
197    // Fetch UTM parameters and referrer
198    urlParams.forEach((value, key) => {
199        if (utmAllowedTerms.includes(key)) {
200            utmTermsObj[key] = value;
201        }
202    });
203
204    if (document.referrer) {
205        utmTermsObj["referrer"] = document.referrer.replace(/^https?:\/\//, '');
206    }
207
208    // Update UTM fields in Gravity Forms
209    updateUTMFields(utmTermsObj);
210
211    let utmTermsJsonString = JSON.stringify(utmTermsObj);
212    let utmTermsNumber = Object.keys(utmTermsObj).length;
213    console.log('utmTermsNumber', utmTermsNumber);
214
215    // Check if referrer is on staging website
216    let referrerIsNotOwnWebsite = document.referrer.includes("stonedigital.dev") || document.referrer.includes("stonedigital.com.au");
217    referrerIsNotOwnWebsite = false;
218
219    let sourceListCookie = getData("utm_source_list");
220    sourceListCookie = decodeURIComponent(sourceListCookie);
221    let sourceListArray;
222
223    // Prepare source list array from cookie data
224    if (getData("utm_source_list")) {
225        sourceListArray = sourceListCookie.split("\n");
226    } else {
227        sourceListArray = [];
228    }
229
230    // Limit to the latest 10 entries
231    if (sourceListArray.length >= 10) {
232        sourceListArray = sourceListArray.slice(-9);  // Keep the latest 9 entries
233    }
234	// Track unique URLs and use an incrementing counter
235	let count = 1;
236
237	// Update each item in sourceListArray directly
238	sourceListArray = sourceListArray.map(item => {
239		// Extract the URL part after "||||||"
240		let url = item.split("||||||")[1];
241		// Replace "10" with the current count and increment the count
242		return `${count++}||||||${url}`;
243	});
244
245	console.log(sourceListArray);
246    let newSourceListIndex = sourceListArray.length + 1;
247
248    // Construct new source list entry if there are UTM parameters and referrer is internal
249    if (utmTermsNumber > 0 && !referrerIsNotOwnWebsite) {
250        let newSourceListText = newSourceListIndex;
251        for (let i = 0; i < utmAllowedTerms.length; i++) {
252            let termKey = utmAllowedTerms[i];
253            let termValue = (utmTermsObj[termKey] == null) ? "" : utmTermsObj[termKey];
254            newSourceListText += "|" + termValue;
255        }
256        sourceListArray.push(newSourceListText);
257    }
258
259    let sourceListString = sourceListArray.join("\n");
260    sourceListString = encodeURIComponent(sourceListString);
261
262    // Store updated source list back into the cookie
263    if (!referrerIsNotOwnWebsite) {
264        storeData("utm_source_list", sourceListString, 30);  // Assuming storeData sets a cookie with 30 days expiry
265    }
266
267    document.querySelectorAll(".utm_source_list textarea").forEach(input => {
268        input.value = sourceListArray.join("\n");
269    });
270}
271
272function updateUTMFields(utmTermsObj) {
273    // Define the class of the parent container that holds the UTM fields
274    let parentClass = '.gfield'; // Replace with your actual parent class
275
276    // Loop through each UTM field and update its value if it exists in the form
277    let fieldLabels = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"];
278
279    fieldLabels.forEach(label => {
280        let fieldValue = utmTermsObj[label] || "";
281
282        // Store the UTM value in a cookie
283        if (fieldValue) {
284            storeData(label, fieldValue, 30);
285        }
286
287        let fieldElement = document.querySelector(`${parentClass}.${label} input[type="hidden"]`);
288
289        // Update the field value if it exists
290        if (fieldElement) {
291            if (!fieldValue) {
292                fieldValue = getData(label);
293            }
294
295            fieldElement.value = fieldValue;
296        }
297    });
298}
299
300jQuery(document).on('gform_confirmation_loaded', function(event, formId) {
301    eraseData('sdlst_initial_source');
302    eraseData('sdlst_final_source');
303    eraseData('utm_source_list');
304    console.log('removed UTM cookies via gform_confirmation_loaded');
305});
306
307jQuery(document).on('gform_post_render', function() {
308    processData();
309});
310
311(function() {
312    let pageviewCount = getCookie("pageviewCount");
313    if (typeof pageviewCount === "undefined") {
314        pageviewCount = 1;
315    } else {
316        pageviewCount++;
317    }
318    // console.log("pageviewCount", pageviewCount);
319    setCookie("pageviewCount", pageviewCount, 30);
320})();
321
322jQuery(document).ready(function($) {
323    if (jQuery('.utm_source_list textarea').length) {
324        processData();
325    }
326});
327
328// Code Snippet to use in browser console to make all hidden fields visible
329/**
330let inputs = document.querySelectorAll("input[type='hidden']");
331inputs.forEach(input => input.setAttribute("type", "text"));
332 */

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.