millions/millions_v1.js

58 lines
2.2 KiB
JavaScript

/* Millions - a non-tracking web counter/analytics */
(function(counterHost){
if (!window) return;
if ("doNotTrack" in navigator && navigator["doNotTrack"] === "1") return;
// inspired by:
// https://github.com/simpleanalytics/scripts/blob/master/src/default.js
// https://docs.simpleanalytics.com/what-we-collect
// https://docs.simpleanalytics.com/uniques
var getLocation = function(href) {
var match = href.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/);
return match && {
href: href,
protocol: match[1],
host: match[2],
hostname: match[3],
port: match[4],
pathname: match[5],
search: match[6],
hash: match[7]
} || { href: href };
};
var parseQuery = function(queryString) {
var query = {};
var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');
for (var i = 0; i < pairs.length; i++) {
var pair = pairs[i].split('=');
query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');
}
return query;
};
var selfUrl = getLocation(document.location.href);
// commented out for now // if (selfUrl=='localhost') return;
var refUrl = getLocation(document.referrer);
var bonzUrl = selfUrl.protocol + '//' + counterHost + '/one.php?for=' + selfUrl.hostname + '&path=' + encodeURIComponent(selfUrl.pathname) + '&width=' + window.innerWidth;
if (refUrl.href=='' || (refUrl.hostname && selfUrl.hostname != refUrl.hostname)) {
bonzUrl += '&unique=1';
}
var Q = parseQuery(selfUrl.search);
if (Q.utm_source || Q.ref || Q.pk_campaign) {
bonzUrl += '&ref=' + encodeURIComponent(Q.utm_source || Q.ref || Q.pk_campaign);
} else if (Q.fbclid) {
bonzUrl += '&ref=facebook.com';
} else if (refUrl.hostname && selfUrl.hostname != refUrl.hostname) {
bonzUrl += '&ref=' + encodeURIComponent(refUrl.hostname + refUrl.pathname);
}
var req = new XMLHttpRequest();
req.open("GET", bonzUrl, true);
req.send(null);
// we don't care about response yet
})('localhost');