UNPKG

3.15 kBJavaScriptView Raw
1/*
2 * Copyright (c) 2021 Snowplow Analytics Ltd, 2010 Anthon Pang
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice, this
9 * list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its
16 * contributors may be used to endorse or promote products derived from
17 * this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31/**
32 * Use this function to load Snowplow
33 *
34 * @param object - p The window
35 * @param object - l The document
36 * @param string - o "script", the tag name of script elements
37 * @param string - w The source of the Snowplow script. Make sure you get the latest version.
38 * @param string - i The Snowplow namespace. The Snowplow user should set this.
39 * @param undefined - n The new script (to be created inside the function)
40 * @param undefined - g The first script on the page (to be found inside the function)
41 */
42;(function(p,l,o,w,i,n,g) {
43 "p:nomunge, l:nomunge, o:nomunge, w:nomunge, i:nomunge, n:nomunge, g:nomunge";
44
45 // Stop if the Snowplow namespace i already exists
46 if (!p[i]) {
47
48 // Initialise the 'GlobalSnowplowNamespace' array
49 p['GlobalSnowplowNamespace'] = p['GlobalSnowplowNamespace'] || [];
50
51 // Add the new Snowplow namespace to the global array so sp.js can find it
52 p['GlobalSnowplowNamespace'].push(i);
53
54 // Create the Snowplow function
55 p[i] = function() {
56 (p[i].q = p[i].q || []).push(arguments);
57 };
58
59 // Initialise the asynchronous queue
60 p[i].q = p[i].q || [];
61
62 // Create a new script element
63 n = l.createElement(o);
64
65 // Get the first script on the page
66 g = l.getElementsByTagName(o)[0];
67
68 // The new script should load asynchronously
69 n.async = 1;
70
71 // Load Snowplow
72 n.src = w;
73
74 // Insert the Snowplow script before every other script so it executes as soon as possible
75 g.parentNode.insertBefore(n,g);
76 }
77} (window, document, 'script', '//{{url}}/sp.js', 'new_name_here'));