PageSourceSearch

https://www.vikings-immersive.com/themes/subtheme_vim/src/js/utmkeeper.js

js vikings-immersive.com collected 2026-10-05 02:01:17 UTC 4,577 bytes, 155 lines download raw bytes

1const searchEngines = [
2    "google",
3    "bing",
4    "yahoo",
5    "baidu",
6    "yandex",
7    "duckduckgo",
8    "ask",
9    "ecosia",
10    "aol",
11    "archive",
12    "naver",
13  ],
14  createStore = () => {
15    const o = {
16      utm_source: void 0,
17      utm_campaign: void 0,
18      utm_content: void 0,
19      utm_medium: void 0,
20      utm_term: void 0,
21      ad_id: void 0,
22      cp_smn_content: void 0,
23      cp_smn_term: void 0,
24      cp_smn_source: void 0,
25      fbclid: void 0,
26    };
27    return {
28      get: (e) => {
29        if (o.hasOwnProperty(e)) return o[e];
30      },
31      update: (e, t) => {
32        o.hasOwnProperty(e) && (o[e] = t);
33      },
34      getAll: () => o,
35      delete: (e) => {
36        o.hasOwnProperty(e) && (o[e] = void 0);
37      },
38      unserialize: (e) => {
39        try {
40          var t = JSON.parse(e);
41          for (const r in t)
42            o.hasOwnProperty(r) &&
43              0 !== t[r].toString().length &&
44              (o[r] = t[r].toString());
45        } catch (e) {
46          throw Error("Store is malformed");
47        }
48      },
49    };
50  },
51  utmStorageKey = "fever_utm",
52  store = createStore(),
53  updateSessionStorage = (e) => {
54    window.sessionStorage.setItem(utmStorageKey, JSON.stringify(e));
55  },
56  readSessionStorage = () => {
57    var e = window.sessionStorage.getItem(utmStorageKey);
58    if ("string" == typeof e) return e;
59  },
60  getURLWithoutSuffix = (e) => {
61    return e.replace(/https?:\/\//, "").replace(/\.[^\.]+$/, "");
62  },
63  updateUTMParamsFromReferer = () => {
64    if (!store.get("utm_source"))
65      if (document.referrer.length)
66        if (document.referrer.includes("com.google.android"))
67          (store.update("utm_source", "discover"),
68            store.update("utm_medium", "referral"));
69        else
70          try {
71            const t = getURLWithoutSuffix(document.referrer);
72            getURLWithoutSuffix(document.location.href) === t
73              ? (store.update("utm_source", "direct"),
74                store.delete("utm_medium"))
75              : searchEngines.filter((e) => t.includes(e)).length
76                ? (store.update("utm_medium", "organic"),
77                  store.update("utm_source", t))
78                : (store.update("utm_source", t),
79                  store.update("utm_medium", "referral"));
80          } catch (e) {
81            (store.update("utm_source", "unknown"),
82              store.update("utm_medium", "referral"));
83          }
84      else store.update("utm_source", "direct");
85  },
86  getURLParameters = (e) => Object.fromEntries(new URLSearchParams(e)),
87  storeSessionUTMParams = () => {
88    var e = readSessionStorage();
89    if (void 0 !== e)
90      try {
91        store.unserialize(e);
92      } catch (e) {}
93    var e = window.location["search"],
94      t = getURLParameters(e);
95    for (const r in t)
96      (store.update(r, t[r]), updateSessionStorage(store.getAll()));
97    updateUTMParamsFromReferer();
98  },
99  getInnerUtmValues = (e) => {
100    if (e && e.dataset)
101      return {
102        cp_landing_term: e.dataset.gaAction,
103        cp_landing: e.dataset.gaAction,
104        cp_landing_source: e.dataset.utmSource,
105      };
106  },
107  applyUtmsToUrl = (e, t) => {
108    for (var r in t)
109      void 0 !== t[r] && "_target" !== t[r] && e.searchParams.set(r, t[r]);
110  },
111  getUtmParams = () => store.getAll(),
112  validDomains = {
113    "https://feverup.com": !0,
114    "https://use.fvr.to": !0,
115    "https://webclient3.staging.feverup.com": !0,
116  },
117  isValidDomain = (e) => {
118    try {
119      var t = new URL(e.getAttribute("href")).origin;
120      return Boolean(validDomains[t]);
121    } catch (e) {
122      return !1;
123    }
124  },
125  processLinks = () => {
126    var e = Array.from(document.links).filter((e) => isValidDomain(e));
127    if (e.length) {
128      const o = getUtmParams();
129      for (const a of e)
130        a.addEventListener("click", (evt) => {
131          evt.preventDefault();
132          const innerUtms = getInnerUtmValues(a);
133          const url = new URL(a.href); // FIX 2
134          const existingParams = Object.fromEntries(
135            new URLSearchParams(url.search).entries(),
136          );
137          const merged = Object.assign({}, innerUtms, o, existingParams);
138          applyUtmsToUrl(url, merged);
139          window.open(url.toString(), "_blank"); // FIX 3
140        });
141    }
142  },
143  initFeverUTM = () => {
144    storeSessionUTMParams();
145    // FIX 1
146    if (
147      document.readyState === "interactive" ||
148      document.readyState === "complete"
149    ) {
150      processLinks();
151    } else {
152      document.addEventListener("DOMContentLoaded", processLinks);
153    }
154  };
155initFeverUTM();

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.