Skip to content

Instantly share code, notes, and snippets.

@umit
Created November 16, 2017 08:59
Show Gist options
  • Save umit/e5c13bd17e76d308c40e60a349cd8861 to your computer and use it in GitHub Desktop.
Save umit/e5c13bd17e76d308c40e60a349cd8861 to your computer and use it in GitHub Desktop.
var _caq = _caq || {};
var _gcol = _gcol || {unUsedParameters: ['rootUrl'], rootUrl: _caq["rootUrl"], channel: _caq["channel"]};
_gcol.AppendPixel = function (data) {
var instance = this;
var url = instance.rootUrl + "__gc.gif?_=" + Math.random().toString().slice(12) + "&p=" + instance.RemoveAndEncodeParameters(data);
var _pixel = document.createElement("img");
_pixel.src = url;
_pixel.id = Math.random() + "_pixel";
_pixel.style.display = "none";
document.body.insertBefore(_pixel, document.body.firstChild);
document.body.removeChild(_pixel);
}
_gcol.Fire = function (event, data) {
if (typeof event != "string") {
throw(new Error("missing event name parameter"));
}
if (data) {
data.channel = _gcol.channel;
data["event"] = event;
return _gcol.AppendPixel(data);
}
}
_gcol.RemoveAndEncodeParameters = function (data) {
var instance = this;
var bi = instance.getBrowserInformation();
data.ref = instance.getReferrer();
data.os = bi.os;
data.bv = bi.bv;
data.bn = bi.bn;
data.res = instance.getResolution();
var dataToProcess = data;
var length = instance.unUsedParameters.length;
for (var i = 0; i < length; i++) {
delete dataToProcess[instance.unUsedParameters[i]];
}
for (var i in dataToProcess) {
if (dataToProcess[i] === null || dataToProcess[i] === undefined) {
delete dataToProcess[i];
}
}
return encodeURIComponent(_gcol.psv(dataToProcess));
}
_gcol.escape = function (value) {
if (typeof value != 'string') return;
return value.replace(/\|/g, "\\|");
}
_gcol.psv = function (obj) {
var s = [];
for (var i in obj) {
s.push(i);
s.push(_gcol.escape(obj[i]));
}
var res = s.join("||");
return res;
}
_gcol.getResolution = function() {
return window.screen.availWidth + "x" + window.screen.availHeight;
}
_gcol.getReferrer = function() {
var referrer = document.referrer;
var host = document.location.host;
if(referrer.indexOf(host)<0){
return document.referrer;
}
return "";
}
_gcol.getBrowserInformation = function() {
var nVer = navigator.appVersion;
var nAgt = navigator.userAgent;
var browserName = navigator.appName;
var fullVersion = '' + parseFloat(navigator.appVersion);
var majorVersion = parseInt(navigator.appVersion, 10);
var nameOffset, verOffset, ix;
// In Opera, the true version is after "Opera" or after "Version"
if ((verOffset = nAgt.indexOf("Opera")) != -1) {
browserName = "Opera";
fullVersion = nAgt.substring(verOffset + 6);
if ((verOffset = nAgt.indexOf("Version")) != -1)
fullVersion = nAgt.substring(verOffset + 8);
}
// In MSIE, the true version is after "MSIE" in userAgent
else if ((verOffset = nAgt.indexOf("MSIE")) != -1) {
browserName = "Microsoft Internet Explorer";
fullVersion = nAgt.substring(verOffset + 5);
}
// In Chrome, the true version is after "Chrome"
else if ((verOffset = nAgt.indexOf("Chrome")) != -1) {
browserName = "Chrome";
fullVersion = nAgt.substring(verOffset + 7);
}
// In Safari, the true version is after "Safari" or after "Version"
else if ((verOffset = nAgt.indexOf("Safari")) != -1) {
browserName = "Safari";
fullVersion = nAgt.substring(verOffset + 7);
if ((verOffset = nAgt.indexOf("Version")) != -1)
fullVersion = nAgt.substring(verOffset + 8);
}
// In Firefox, the true version is after "Firefox"
else if ((verOffset = nAgt.indexOf("Firefox")) != -1) {
browserName = "Firefox";
fullVersion = nAgt.substring(verOffset + 8);
}
// In most other browsers, "name/version" is at the end of userAgent
else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) <
(verOffset = nAgt.lastIndexOf('/'))) {
browserName = nAgt.substring(nameOffset, verOffset);
fullVersion = nAgt.substring(verOffset + 1);
if (browserName.toLowerCase() == browserName.toUpperCase()) {
browserName = navigator.appName;
}
}
// trim the fullVersion string at semicolon/space if present
if ((ix = fullVersion.indexOf(";")) != -1)
fullVersion = fullVersion.substring(0, ix);
if ((ix = fullVersion.indexOf(" ")) != -1)
fullVersion = fullVersion.substring(0, ix);
majorVersion = parseInt('' + fullVersion, 10);
if (isNaN(majorVersion)) {
fullVersion = '' + parseFloat(navigator.appVersion);
majorVersion = parseInt(navigator.appVersion, 10);
}
var OSName = "Unknown OS";
if (navigator.appVersion.indexOf("Win") != -1) OSName = "Windows";
if (navigator.appVersion.indexOf("Mac") != -1) OSName = "MacOS";
if (navigator.appVersion.indexOf("X11") != -1) OSName = "UNIX";
if (navigator.appVersion.indexOf("Linux") != -1) OSName = "Linux";
return { "os": OSName, "bv": fullVersion, "bn": browserName };
}
if (typeof module !== 'undefined' && module.exports) {
exports._gcol = _gcol
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment