sourcebuster
Version:
Get sources of your site's visitors (utm / organic / referral / typein).
116 lines (88 loc) • 3.88 kB
JavaScript
"use strict";
var terms = require('./terms'),
uri = require('./helpers/uri');
module.exports = {
fetch: function(prefs) {
var user = prefs || {},
params = {};
// Set `lifetime of the cookie` in months
params.lifetime = this.validate.checkFloat(user.lifetime) || 6;
params.lifetime = parseInt(params.lifetime * 30 * 24 * 60);
// Set `session length` in minutes
params.session_length = this.validate.checkInt(user.session_length) || 30;
// Set `timezone offset` in hours
params.timezone_offset = this.validate.checkInt(user.timezone_offset);
// Set `campaign param` for AdWords links
params.campaign_param = user.campaign_param || false;
// Set `user ip`
params.user_ip = user.user_ip || terms.none;
// Set `promocode`
if (user.promocode) {
params.promocode = {};
params.promocode.min = parseInt(user.promocode.min) || 100000;
params.promocode.max = parseInt(user.promocode.max) || 999999;
} else {
params.promocode = false;
}
// Set `typein attributes`
if (user.typein_attributes && user.typein_attributes.source && user.typein_attributes.medium) {
params.typein_attributes = {};
params.typein_attributes.source = user.typein_attributes.source;
params.typein_attributes.medium = user.typein_attributes.medium;
} else {
params.typein_attributes = { source: '(direct)', medium: '(none)' };
}
// Set `domain`
if (user.domain && this.validate.isString(user.domain)) {
params.domain = { host: user.domain, isolate: false };
} else if (user.domain && user.domain.host) {
params.domain = user.domain;
} else {
params.domain = { host: uri.getHost(document.location.hostname), isolate: false };
}
// Set `referral sources`
params.referrals = [];
if (user.referrals && user.referrals.length > 0) {
for (var ir = 0; ir < user.referrals.length; ir++) {
if (user.referrals[ir].host) {
params.referrals.push(user.referrals[ir]);
}
}
}
// Set `organic sources`
params.organics = [];
if (user.organics && user.organics.length > 0) {
for (var io = 0; io < user.organics.length; io++) {
if (user.organics[io].host && user.organics[io].param) {
params.organics.push(user.organics[io]);
}
}
}
params.organics.push({ host: 'bing.com', param: 'q', display: 'bing' });
params.organics.push({ host: 'yahoo.com', param: 'p', display: 'yahoo' });
params.organics.push({ host: 'about.com', param: 'q', display: 'about' });
params.organics.push({ host: 'aol.com', param: 'q', display: 'aol' });
params.organics.push({ host: 'ask.com', param: 'q', display: 'ask' });
params.organics.push({ host: 'globososo.com', param: 'q', display: 'globo' });
params.organics.push({ host: 'go.mail.ru', param: 'q', display: 'go.mail.ru' });
params.organics.push({ host: 'rambler.ru', param: 'query', display: 'rambler' });
params.organics.push({ host: 'tut.by', param: 'query', display: 'tut.by' });
params.referrals.push({ host: 't.co', display: 'twitter.com' });
params.referrals.push({ host: 'plus.url.google.com', display: 'plus.google.com' });
return params;
},
validate: {
checkFloat: function(v) {
return v && this.isNumeric(parseFloat(v)) ? parseFloat(v) : false;
},
checkInt: function(v) {
return v && this.isNumeric(parseInt(v)) ? parseInt(v) : false;
},
isNumeric: function(v){
return !isNaN(v);
},
isString: function(v) {
return Object.prototype.toString.call(v) === '[object String]';
}
}
};