PageSourceSearch

https://katalon.com/js/KatalonTracking.js?ver=

js katalon.com collected 2026-09-24 09:00:25 UTC 13,399 bytes, 240 lines download raw bytes

1(function() {
2    function getConsentedGroupsFromCookie() {
3        var match = document.cookie.match(/(?:^|;\s*)OptanonConsent=([^;]+)/);
4        if (!match) return [];
5        var decoded = decodeURIComponent(match[1]);
6        var groupsPart = decoded.split("&").find(function (p) { return p.indexOf("groups=") === 0; });
7        if (!groupsPart) return [];
8        return groupsPart.replace("groups=", "")
9            .split(",")
10            .filter(function (g) { return g.indexOf(":1") === g.length - 2; })
11            .map(function (g) { return g.split(":")[0]; });
12    }
13
14    function hasPerformanceConsent(consentedGroups) {
15        return (consentedGroups || getConsentedGroupsFromCookie()).indexOf("C0002") !== -1;
16    }
17
18    // PathFactory content-syndication/nurture links append pf_-prefixed query params;
19    // that traffic gets counted by PathFactory itself and was spamming Segment with
20    // low-value duplicate pageviews, so skip loading Segment for it.
21    function isSpamFromPathFactory() {
22        var params = new URLSearchParams(window.location.search);
23        var keys = Array.from(params.keys());
24        return keys.some(function(key) { return key.indexOf('pf_') === 0; });
25    }
26
27    function KatalonTracking() {
28        this.track = function(eventName, eventData, callback) {
29            var getPath = window.location.pathname;
30            if (window._DATADOG_SYNTHETICS_BROWSER === undefined) {
31                if (typeof analytics != 'undefined') {
32                    analytics.track(eventName, eventData, callback);
33                } else {
34                    // load segment script and track
35                    var src = ("https:" === document.location.protocol ? "https://" : "http://") + "cdn.segment.com/analytics.js/v1/XrHxalhZW8XsDbwYcANgl8MsU9nzINNW/analytics.min.js";
36                    
37                    var timeoutLoadScriptID; // 5s to load, if client blocked -> callback function will run
38                    timeoutLoadScriptID = window.setTimeout(function() {
39                        // callback action
40                        if (callback && typeof(callback) == "function") {
41                            callback();
42                        }
43                    }, 5000);
44
45                    jQuery.getScript(src, function() {
46                        //update localStoarge not load segment again
47                        localStorage.setItem('load_segment_sript', 'true');
48                        let analyticInterval = setInterval(() => {
49                            if (typeof analytics != 'undefined') {
50                                analytics.track(eventName, eventData, callback);
51                                clearInterval(analyticInterval);
52                                window.clearTimeout(timeoutLoadScriptID);
53                            }
54                        }, 500);
55                    }).fail(function(){
56                        console.log('fail, go ahead');
57                        if (callback && typeof(callback) == "function") {
58                            callback();
59                        }
60                    });
61                }
62            }
63        }
64        this.loadSegmentScript = function() {
65            !function(){var i="analytics",analytics=window[i]=window[i]||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","screen","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware","register"];analytics.factory=function(e){return function(){if(window[i].initialized)return window[i][e].apply(window[i],arguments);var n=Array.prototype.slice.call(arguments);if(["track","screen","alias","group","page","identify"].indexOf(e)>-1){var c=document.querySelector("link[rel='canonical']");n.push({__t:"bpc",c:c&&c.getAttribute("href")||void 0,p:location.pathname,u:location.href,s:location.search,t:document.title,r:document.referrer})}n.unshift(e);analytics.push(n);return analytics}};for(var n=0;n<analytics.methods.length;n++){var key=analytics.methods[n];analytics[key]=analytics.factory(key)}analytics.load=function(key,n){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.setAttribute("data-global-segment-analytics-key",i);t.src="https://cdn.segment.com/analytics.js/v1/" + key + "/analytics.min.js";var r=document.getElementsByTagName("script")[0];r.parentNode.insertBefore(t,r);analytics._loadOptions=n};
65analytics._writeKey="XrHxalhZW8XsDbwYcANgl8MsU9nzINNW";analytics.SNIPPET_VERSION="5.2.0";
66            analytics.load("XrHxalhZW8XsDbwYcANgl8MsU9nzINNW");
67            analytics.page();
68            }}();
69        }
70
71        // OneTrust's AutoBlock can cloak (type="text/plain") or fail to (re)insert the
72        // Set timeout 10s to wait for Segment to load, then try to reload it if it hasn't initialized yet.
73        this.ensureSegmentLoaded = function(maxWaitMs, intervalMs) {
74            var self = this;
75            maxWaitMs = maxWaitMs || 10000;
76            intervalMs = intervalMs || 1000;
77            var elapsed = 0;
78
79            function isLoaded() {
80                return !!(window.analytics && window.analytics.initialized);
81            }
82
83            function isStuck() {
84                var scriptEl = document.querySelector('script[src*="cdn.segment.com/analytics.js/v1"]');
85                return !scriptEl || scriptEl.type === 'text/plain';
86            }
87
88            function attempt() {
89                if (isLoaded()) return;
90
91                if (isStuck()) {
92                    // clear the stub so loadSegmentScript's setup isn't swallowed by
93                    // its own "Segment snippet included twice" guard
94                    window.analytics = undefined;
95                    self.loadSegmentScript();
96                }
97
98                elapsed += intervalMs;
99                if (elapsed >= maxWaitMs) {
100                    if (!isLoaded()) {
101                        console.warn('[KatalonTracking] Segment did not initialize after ' + maxWaitMs + 'ms, giving up.');
102                    }
103                    return;
104                }
105
106                setTimeout(attempt, intervalMs);
107            }
108
109            attempt();
110        }
111
112        this.send_event_tracking = function(event_name, event_label, event_category) {
113            //get utm from local storage 
114            var utmMedium = localStorage.getItem("utm_medium");
115            var utmCampaign = localStorage.getItem("utm_campaign");
116            var utmContent = localStorage.getItem("utm_content");
117            var utmTerm = localStorage.getItem("utm_term");
118            var utmSource = localStorage.getItem("utm_source");
119
120            // call class KatalonTracking to handle tracking
121            katalonTracking.track("Button Clicked", {
122                event_name: event_name,
123                category: event_category,
124                label: event_label,
125                tracking_version: 1,
126                utm_medium: utmMedium || "",
127                utm_campaign: utmCampaign || "",
128                utm_content: utmContent || "",
129                utm_term: utmTerm || "",
130                utm_source: utmSource || "",
131            });
132
133            if (typeof gtag != "undefined") {
134                gtag('event', event_name, {
135                    'event_category' : event_category,
136                    'event_label' : event_label,
137                    'value': 0
138                });
139            }
140        }
141
142        this.send_event_tracking_v2 = function(event_name, event_label, event_category) {
143            //get utm from local storage
144            var utmMedium = localStorage.getItem("utm_medium");
145            var utmCampaign = localStorage.getItem("utm_campaign");
146            var utmContent = localStorage.getItem("utm_content");
147            var utmTerm = localStorage.getItem("utm_term");
148            var utmSource = localStorage.getItem("utm_source");
149
150            // call class KatalonTracking to handle tracking
151            katalonTracking.track("Button Clicked", {
152                button_name: event_name,
153                page_name: event_label,
154                category: event_category,
155                tracking_version: 2,
156                utm_medium: utmMedium || "",
157                utm_campaign: utmCampaign || "",
158                utm_content: utmContent || "",
159                utm_term: utmTerm || "",
160                utm_source: utmSource || "",
161            });
162
163            if (typeof gtag != "undefined") {
164                gtag('event', `${event_name} Button Clicked`, {
165                    'event_category' : event_category,
166                    'event_label' : event_label,
167                    'value': 0
168                });
169            }
170        }
171
172        // hubspot tracking
173        this.loadHubspotTrackingScript = function() {
174            var getPath = window.location.pathname;
175            var script = document.createElement('script');
176            script.onload = function() {
177
178            };
179            script.src = "//js.hs-scripts.com/2465122.js";
180            script.id = "hs-script-loader";
181
182            if (window._DATADOG_SYNTHETICS_BROWSER === undefined && !getPath.includes('verify-email')) {
183                document.getElementsByTagName('head')[0].appendChild(script);
184            }
185            // <script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/2465122.js"></script>
186        }
187
188        // posthog tracking — call explicitly per page, not auto-loaded on init
189        this.loadPostHogScript = function() {
190            if (window._DATADOG_SYNTHETICS_BROWSER !== undefined) return;
191            if (window.posthog && window.posthog.__SV) return;
192
193            !function(t,e){var o,n,p,r;e.__SV||(window.posthog && window.posthog.__loaded)||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="Xi tn init mn Qr yn xn pn capture calculateEventProperties Tn register register_once register_for_session unregister unregister_for_session Pn getFeatureFlag getFeatureFlagPayload getFeatureFlagResult isFeatureEnabled reloadFeatureFlags updateFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSurveysLoaded onSessionId getSurveys getActiveMatchingSurveys renderSurvey displaySurvey cancelPendingSurvey canRenderSurvey canRenderSurveyAsync On identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset setIdentity clearIdentity get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException addExceptionStep captureLog startExceptionAutocapture stopExceptionAutocapture loadToolbar get_property getSessionProperty Mn Cn createPersonProfile setInternalOrTestUser Rn vn Fn opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing get_explicit_consent_status is_capturing clear_opt_in_out_capturing kn debug Kr En getPageViewId captureTraceFeedback captureTraceMetric hn".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
194            posthog.init('phc_vDLZ2FaVfkf8abtz9TFFd7oFgDdXPtWEMuwbD3FLxXuA', {
195                api_host: 'https://eu.i.posthog.com',
196                defaults: '2026-05-30',
197            })
198        }
199
200        this.initAfterConsent = function(consentedGroups) {
201            if (this._trackingInitialized) return;
202            if (!hasPerformanceConsent(consentedGroups)) return;
203            this._trackingInitialized = true;
204
205            var self = this;
206            function doLoad() {
207                if (!isSpamFromPathFactory()) {
208                    self.ensureSegmentLoaded();
209                }
210            }
211
212            if (document.readyState === 'complete') {
213                doLoad();
214            } else {
215                window.addEventListener('load', doLoad);
216            }
217        }
218
219    };
220
221    var katalonTracking = window.katalonTracking = new KatalonTracking();
222    katalonTracking.initAfterConsent();
223
224    jQuery('.trackable').click(function() {
225        katalonTracking.send_event_tracking(
226            jQuery(this).data('event-name'),
227            jQuery(this).data('event-label'),
228            jQuery(this).data('event-category')
229        );
230    });
231
232    jQuery(document).on('click', '.trackable-v2', function() {
233        katalonTracking.send_event_tracking_v2(
234            jQuery(this).data('event-name'),
235            jQuery(this).data('event-label'),
236            jQuery(this).data('event-category')
237        );
238    });
239
240})();

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.