fathom/assets/js/tracker.js

75 lines
1.6 KiB
JavaScript
Raw Normal View History

'use strict';
2018-04-24 08:12:38 +00:00
var queue = window.fathom.q || [];
2018-04-24 07:45:46 +00:00
var trackerUrl = '';
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 07:45:46 +00:00
if(trackerUrl === '') {
console.error('Fathom: invalid tracker URL');
return;
}
// Respect "Do Not Track" requests
if('doNotTrack' in navigator && navigator.doNotTrack === "1") {
return;
}
// get the path or canonical
var path = location.pathname + location.search;
2018-04-25 11:27:50 +00:00
var canonical = document.querySelector('link[rel="canonical"][href]');
if(canonical) {
path = canonical.href.substring(canonical.href.indexOf('/', 7)) || '/';
}
var d = {
h: location.hostname,
t: document.title,
l: navigator.language,
p: path,
sr: screen.width + "x" + screen.height,
t: document.title,
ru: document.referrer,
rk: ""
};
var i = document.createElement('img');
i.src = trackerUrl + stringifyObject(d);
document.body.appendChild(i);
}
2018-04-24 08:12:38 +00:00
// override global fathom object
window.fathom = function() {
var args = [].slice.call(arguments);
var c = args.shift();
commands[c].apply(this, args);
};
// process existing queue
queue.forEach(function(i) {
2018-04-24 08:12:38 +00:00
fathom.apply(this, i);
});