2016-11-21 13:24:50 +01:00
|
|
|
'use strict';
|
|
|
|
|
2018-04-24 10:12:38 +02:00
|
|
|
var queue = window.fathom.q || [];
|
2018-04-24 09:45:46 +02:00
|
|
|
var trackerUrl = '';
|
2016-11-25 16:03:47 +01:00
|
|
|
var commands = {
|
|
|
|
"trackPageview": trackPageview,
|
|
|
|
"setTrackerUrl": setTrackerUrl,
|
|
|
|
};
|
|
|
|
|
|
|
|
// convert object to query string
|
|
|
|
function stringifyObject(json) {
|
|
|
|
var keys = Object.keys(json);
|
|
|
|
|
|
|
|
// omit empty
|
|
|
|
keys = keys.filter(function(k) {
|
|
|
|
return json[k].length > 0;
|
|
|
|
});
|
|
|
|
|
|
|
|
return '?' +
|
|
|
|
keys.map(function(k) {
|
|
|
|
return encodeURIComponent(k) + '=' +
|
|
|
|
encodeURIComponent(json[k]);
|
|
|
|
}).join('&');
|
|
|
|
}
|
|
|
|
|
|
|
|
function setTrackerUrl(v) {
|
|
|
|
trackerUrl = v;
|
|
|
|
}
|
|
|
|
|
|
|
|
function trackPageview() {
|
2018-04-24 09:45:46 +02:00
|
|
|
if(trackerUrl === '') {
|
|
|
|
console.error('Fathom: invalid tracker URL');
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2016-12-08 13:09:21 +01:00
|
|
|
// Respect "Do Not Track" requests
|
2018-04-24 09:45:46 +02:00
|
|
|
if(navigator.DoNotTrack === "1") {
|
2016-11-25 16:03:47 +01:00
|
|
|
return;
|
2016-11-21 13:24:50 +01:00
|
|
|
}
|
|
|
|
|
2016-12-08 13:09:21 +01:00
|
|
|
// get the path or canonical
|
|
|
|
var path = location.pathname + location.search;
|
2018-04-25 13:27:50 +02:00
|
|
|
var canonical = document.querySelector('link[rel="canonical"][href]');
|
|
|
|
if(canonical) {
|
2016-12-08 13:09:21 +01:00
|
|
|
path = canonical.href.substring(canonical.href.indexOf('/', 7)) || '/';
|
|
|
|
}
|
|
|
|
|
2016-11-21 13:24:50 +01:00
|
|
|
var d = {
|
2016-12-08 13:09:21 +01:00
|
|
|
h: location.hostname,
|
|
|
|
t: document.title,
|
2016-11-21 13:24:50 +01:00
|
|
|
l: navigator.language,
|
2016-12-08 13:09:21 +01:00
|
|
|
p: path,
|
2016-11-21 13:24:50 +01:00
|
|
|
sr: screen.width + "x" + screen.height,
|
|
|
|
t: document.title,
|
2016-12-10 14:16:05 +01:00
|
|
|
ru: document.referrer,
|
|
|
|
rk: ""
|
2016-11-21 13:24:50 +01:00
|
|
|
};
|
|
|
|
|
2016-11-25 16:03:47 +01:00
|
|
|
var i = document.createElement('img');
|
|
|
|
i.src = trackerUrl + stringifyObject(d);
|
|
|
|
document.body.appendChild(i);
|
|
|
|
}
|
2016-11-21 13:24:50 +01:00
|
|
|
|
2018-04-24 10:12:38 +02:00
|
|
|
// override global fathom object
|
|
|
|
window.fathom = function() {
|
2016-11-25 16:03:47 +01:00
|
|
|
var args = [].slice.call(arguments);
|
|
|
|
var c = args.shift();
|
|
|
|
commands[c].apply(this, args);
|
|
|
|
};
|
2016-11-21 13:24:50 +01:00
|
|
|
|
2016-11-25 16:03:47 +01:00
|
|
|
// process existing queue
|
2016-12-08 13:09:21 +01:00
|
|
|
queue.forEach(function(i) {
|
2018-04-24 10:12:38 +02:00
|
|
|
fathom.apply(this, i);
|
2016-12-08 13:09:21 +01:00
|
|
|
});
|