86 lines
2.5 KiB
JavaScript
86 lines
2.5 KiB
JavaScript
// The code in this file is from Segment's website:
|
|
// https://segment.com/docs/sources/website/analytics.js/quickstart/
|
|
import { configuration } from './config';
|
|
|
|
(function () {
|
|
// Create a queue, but don't obliterate an existing one!
|
|
const analytics = window.analytics = window.analytics || [];
|
|
|
|
// If the real analytics.js is already on the page return.
|
|
if (analytics.initialize) return;
|
|
|
|
// If the snippet was invoked already show an error.
|
|
if (analytics.invoked) {
|
|
if (window.console && console.error) {
|
|
console.error('Segment snippet included twice.');
|
|
}
|
|
return;
|
|
}
|
|
|
|
// Invoked flag, to make sure the snippet
|
|
// is never invoked twice.
|
|
analytics.invoked = true;
|
|
|
|
// A list of the methods in Analytics.js to stub.
|
|
analytics.methods = [
|
|
'trackSubmit',
|
|
'trackClick',
|
|
'trackLink',
|
|
'trackForm',
|
|
'pageview',
|
|
'identify',
|
|
'reset',
|
|
'group',
|
|
'track',
|
|
'ready',
|
|
'alias',
|
|
'debug',
|
|
'page',
|
|
'once',
|
|
'off',
|
|
'on',
|
|
];
|
|
|
|
// Define a factory to create stubs. These are placeholders
|
|
// for methods in Analytics.js so that you never have to wait
|
|
// for it to load to actually record data. The `method` is
|
|
// stored as the first argument, so we can replay the data.
|
|
analytics.factory = function (method) {
|
|
return function () {
|
|
const args = Array.prototype.slice.call(arguments);
|
|
args.unshift(method);
|
|
analytics.push(args);
|
|
return analytics;
|
|
};
|
|
};
|
|
|
|
// For each of our methods, generate a queueing stub.
|
|
for (let i = 0; i < analytics.methods.length; i++) {
|
|
const key = analytics.methods[i];
|
|
analytics[key] = analytics.factory(key);
|
|
}
|
|
|
|
// Define a method to load Analytics.js from our CDN,
|
|
// and that will be sure to only ever load it once.
|
|
analytics.load = function (key, options) {
|
|
// Create an async script element based on your key.
|
|
const script = document.createElement('script');
|
|
script.type = 'text/javascript';
|
|
script.async = true;
|
|
script.src = `https://cdn.segment.com/analytics.js/v1/${
|
|
key}/analytics.min.js`;
|
|
|
|
// Insert our script next to the first script element.
|
|
const first = document.getElementsByTagName('script')[0];
|
|
first.parentNode.insertBefore(script, first);
|
|
analytics._loadOptions = options;
|
|
};
|
|
|
|
// Add a version to keep track of what's in the wild.
|
|
analytics.SNIPPET_VERSION = '4.1.0';
|
|
|
|
// Load Analytics.js with your key, which will automatically
|
|
// load the tools you've enabled for your account. Boosh!
|
|
analytics.load(configuration.SEGMENT_KEY);
|
|
}());
|