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'));
|