PageSourceSearch

https://www.insideedition.com/modules/contrib/ctd_tealium/js/ctd-tealium-extra.js

js insideedition.com collected 2026-10-02 02:23:29 UTC 6,100 bytes, 170 lines download raw bytes

1/**
2 * @file Contains a global variable object for use with Tealium.
3 */
4var ctdTealium = {
5  init: function () {
6    this.campaign = this.getHashParam('ftag');
7    this.viewGuid = this.createGuid();
8    this.isMobile = this.isMobile();
9    this.isAmp    = this.isAmp();
10    this.isVideoEmbedded = this.isVideoEmbedded();
11    this.initSiteObject();
12
13    return this;
14  },
15
16  // This is to support legacy Brightcove video plugin code.
17  initSiteObject: function () {
18    window.site          = window.site          || {};
19    window.site.ftag     = window.site.ftag     || this.campaign;
20    window.site.campaign = window.site.campaign || this.campaign;
21    window.site.vguid    = window.site.vguid    || this.viewGuid;
22    window.site.viewguid = window.site.viewguid || this.viewGuid;
23  },
24
25  /**
26   * Determines if is a mobile device based on user agent.
27   *
28   * @return {boolean}
29   */
30  isMobile: function () {
31    'use strict';
32    var check = false;
33    (function (a) {
34      if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) {
35        check = true;
36      }
37    })(navigator.userAgent || navigator.vendor || window.opera);
38    return check;
39  },
40
41  /**
42   * Attempt to determine if this is an AMP page.
43   *
44   * @return {boolean}
45   */
46  isAmp: function () {
47    // First check for the query param then check for a hash param.
48    return this.hasQueryParam('%3Famp') || this.getQueryParam('amp') || (this.getHashParam('amp') === 'amp');
49  },
50
51  /**
52   *  Attempt to determine if this is an embedded Video page
53   *
54   * @return {boolean}
55   */
56  isVideoEmbedded: function () {
57    return window.location.href.includes('/video-embed/');
58  },
59
60  /**
61   * Creates a guid.
62   *
63   * This function should only be used by ctdTealium.init().
64   *
65   * If a piece of code needs the Tealium viewGuid, get the viewGuid variable (e.g. ctdTealium.viewGuid).
66   *
67   * @returns {string}
68   */
69  createGuid: function () {
70    'use strict';
71    function _p8(s) {
72      var p = (Math.random().toString(16) + '000000000').substr(2, 8);
73      return s ? '-' + p.substr(0, 4) + '-' + p.substr(4, 4) : p;
74    }
75
76    return _p8() + _p8(true) + _p8(true) + _p8();
77  },
78
79  /**
80   * Check if a query parameter exists.
81   *
82   * @param {string} name
83   *
84   * @return {boolean}
85   */
86  hasQueryParam: function (name) {
87    return (window.location.search.indexOf(name) !== -1);
88  },
89
90  /**
91   * Get the value of a query parameter or all query parameters.
92   *
93   * False if does not exist. True if exists but has no value.
94   *
95   * @param {string=} name
96   *
97   * @return {boolean|string}
98   */
99  getQueryParam: function (name) {
100    var params = {};
101    if (!window.location.search) {
102      return false;
103    }
104    window.location.search.substring(1).split('&').forEach(function (value, index) {
105      let parts = value.split('=');
106      params[parts[0]] = parts.length === 1 ? true : decodeURIComponent(parts[1].replace(/\+/g, ' '));
107    });
108    if (!name) {
109      return params;
110    }
111    if (!this.hasQueryParam(name)) {
112      return false;
113    }
114    return params[name];
115  },
116
117  /**
118   * Get the value of a part of the URL hash.
119   *
120   * @param {string} variable
121   *
122   * @return {string|boolean}
123   */
124  getHashParam: function (variable) {
125    'use strict';
126    var hash = window.location.hash.substring(1);
127    if (!variable) {
128      return hash;
129    }
130    if (hash.indexOf(variable) === -1) {
131      return false;
132    }
133    var param = hash.substring(hash.indexOf(variable));
134    if (param.indexOf('&') !== -1) {
135      param = param.split('&')[0];
136    }
137    var value = true;
138    if (param.indexOf('=') !== -1) {
139      value = param.split('=')[1];
140    }
141    return value;
142  },
143
144  /**
145   * Extend/Merge two objects.
146   *
147   * @param {Object} target
148   * @param {Object} source
149   *
150   * @return {Object}
151   */
152  extend: function (target, source) {
153    'use strict';
154    target = target || {};
155    for (var prop in source) {
156      if (typeof source[prop] === 'object') {
157        target[prop] = this.extend(target[prop], source[prop]);
158      }
159      else {
160        target[prop] = source[prop];
161      }
162    }
163    return target;
164  },
165  get merge() {
166    return this.extend;
167  }
168};
169
170ctdTealium.init();

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.