sourcebuster
Version:
Get sources of your site's visitors (utm / organic / referral / typein).
106 lines (88 loc) • 2.96 kB
JavaScript
var delimiter = require('../data').delimiter;
module.exports = {
encodeData: function(s) {
return encodeURIComponent(s).replace(/\!/g, '%21')
.replace(/\~/g, '%7E')
.replace(/\*/g, '%2A')
.replace(/\'/g, '%27')
.replace(/\(/g, '%28')
.replace(/\)/g, '%29');
},
decodeData: function(s) {
try {
return decodeURIComponent(s).replace(/\%21/g, '!')
.replace(/\%7E/g, '~')
.replace(/\%2A/g, '*')
.replace(/\%27/g, "'")
.replace(/\%28/g, '(')
.replace(/\%29/g, ')');
} catch(err1) {
// try unescape for backward compatibility
try { return unescape(s); } catch(err2) { return ''; }
}
},
set: function(name, value, minutes, domain, excl_subdomains) {
var expires, basehost;
if (minutes) {
var date = new Date();
date.setTime(date.getTime() + (minutes * 60 * 1000));
expires = '; expires=' + date.toGMTString();
} else {
expires = '';
}
if (domain && !excl_subdomains) {
basehost = ';domain=.' + domain;
} else {
basehost = '';
}
document.cookie = this.encodeData(name) + '=' + this.encodeData(value) + expires + basehost + '; path=/';
},
get: function(name) {
var nameEQ = this.encodeData(name) + '=',
ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) === ' ') { c = c.substring(1, c.length); }
if (c.indexOf(nameEQ) === 0) {
return this.decodeData(c.substring(nameEQ.length, c.length));
}
}
return null;
},
destroy: function(name, domain, excl_subdomains) {
this.set(name, '', -1, domain, excl_subdomains);
},
parse: function(yummy) {
var cookies = [],
data = {};
if (typeof yummy === 'string') {
cookies.push(yummy);
} else {
for (var prop in yummy) {
if (yummy.hasOwnProperty(prop)) {
cookies.push(yummy[prop]);
}
}
}
for (var i1 = 0; i1 < cookies.length; i1++) {
var cookie_array;
data[this.unsbjs(cookies[i1])] = {};
if (this.get(cookies[i1])) {
cookie_array = this.get(cookies[i1]).split(delimiter);
} else {
cookie_array = [];
}
for (var i2 = 0; i2 < cookie_array.length; i2++) {
var tmp_array = cookie_array[i2].split('='),
result_array = tmp_array.splice(0, 1);
result_array.push(tmp_array.join('='));
data[this.unsbjs(cookies[i1])][result_array[0]] = this.decodeData(result_array[1]);
}
}
return data;
},
unsbjs: function (string) {
return string.replace('sbjs_', '');
}
};
;