sportsbet-mobile
Version:
Sportsbet mobile
280 lines (250 loc) • 6.65 kB
text/typescript
/// <reference path=".#ts/client.d.ts" />
var dataLayer = this.dataLayer = [];
var userArgs: any = {};
function userArgsReady() {
if (Meteor.loggingIn()) {
// console.log('logging in...');
return false;
}
if (Meteor.userId()) {
var user = Users.Profile.active();
if (!user) {
// if (!Backend.isProduction) {
// console.log('logged in and user data not here yet...');
// }
return false;
}
if (Reporting.Tag.db.find().count() !== user.tags.ids.length) {
// if (!Backend.isProduction) {
// console.log('user tags not here yet...');
// }
return false;
}
if (user.tracker.id && !user.tracker.fetch()) {
// if (!Backend.isProduction) {
// console.log('user tracker not here yet...');
// }
return false;
}
if (user.affiliate.id && !user.affiliate.fetch()) {
// if (!Backend.isProduction) {
// console.log('user affiliate not here yet...');
// }
return false;
}
}
return true;
}
var userArgsDep = new Tracker.Dependency();
Tracker.autorun(function () {
if (!userArgsReady()) {
// if (!Backend.isProduction) {
// console.log('user args not ready...');
// }
return;
}
if (Meteor.userId()) {
userArgs = {
visitorLoginStatus: 'Logged in',
visitorId: gtmVisitorId(),
visitorAffiliate: gtmAffiliate(),
visitorTracker: gtmTracker(),
userstagValue: gtmTag('Value'),
userstagLifestage: gtmTag('Lifestage'),
visitorUsername: Users.Profile.active().username
};
}
else {
userArgs = {
visitorLoginStatus: 'Logged out',
visitorId: 'Anonymous',
visitorAffiliate: undefined,
visitorTracker: undefined,
userstagValue: undefined,
userstagLifestage: undefined,
visitorUsername: undefined
};
}
userArgsDep.changed();
});
googleSend({
eventCategory: 'Main',
eventAction: 'Initial page load',
event: 'Page Load'
});
function googleSend(args, waitUser = false) {
// if (!Backend.isProduction) {
// console.log('initiating send:', args);
// }
Tracker.autorun(function () {
// if (!Backend.isProduction) {
// console.log('trying to send', args);
// }
userArgsDep.depend();
if (!userArgsReady() || (waitUser && !userArgs.visitorUsername)) {
// if (!Backend.isProduction) {
// console.log('user args not ready...', args);
// }
return;
}
Tracker.currentComputation.stop();
// All GTM parameters. Sending all of them even if empty
var gtmArgs = _.extend({
'event': undefined,
'eventCategory': undefined,
'eventAction': undefined,
'eventLabel': undefined,
'eventValue': undefined,
'pageEventArea': undefined,
'pageModule': undefined,
'pageActiveTab': gtmActiveTab(),
'pageVertical': undefined,
'pageLocale': gtmActiveLang(),
'pageProduct': undefined,
'pageGameName': undefined,
'deviceOrientation': getScreenOrientation(),
'creativeUrl': undefined,
'registrationsStarted': undefined,
'registrationsCompleted': undefined,
'engagementImpressions': undefined,
'engagementClicks': undefined,
'deposits': undefined,
'depositAmount': undefined,
'withdrawals': undefined,
'clickedPlayForFun': undefined,
'clickedPlayForReal': undefined,
'starRating': undefined,
'depositCount': undefined,
'depositTotal': undefined
}, userArgs);
// if (!Backend.isProduction) {
// console.log('sending...', gtmArgs);
// }
// GTM param name to GA param name map
var gaParam = {
eventCategory: 'eventCategory',
eventAction: 'eventAction',
eventLabel: 'eventLabel',
visitorId: 'dimension1',
pageVertical: 'dimension2',
pageModule: 'dimension3',
pageActiveTab: 'dimension4',
pageGameName: 'dimension5',
pageLocale: 'dimension6',
pageProduct: 'dimension7',
pageEventArea: 'dimension8',
visitorLoginStatus: 'dimension9',
creativeUrl: 'dimension10',
deviceOrientation: 'dimension11',
depositAmount: 'metrics1',
registrationsStarted: 'metrics2',
registrationsCompleted: 'metrics3',
engagementImpressions: 'metrics4',
engagementClicks: 'metrics5',
deposits: 'metrics6',
withdrawals: 'metrics7',
clickedPlayForFun: 'metrics8',
clickedPlayForReal: 'metrics9',
starRating: 'metrics10'
};
// Converting GTM property names to GA property names
var gaArgs = {};
gaArgs['hitType'] = 'event';
gaArgs['dimension1'] = gtmVisitorId();
gaArgs['dimension9'] = gtmLoginStatus();
gaArgs['dimension4'] = gtmActiveTab();
gaArgs['dimension6'] = gtmActiveLang();
gaArgs['dimension11'] = getScreenOrientation();
_.each(args, function (val, key) {
if (gaParam[key] && val) {
gaArgs[gaParam[key]] = val;
}
});
// Overriding default GTM values with incoming ones
_.each(args, function (val, key) {
gtmArgs[key] = val;
});
if (gtmArgs['event'] != 'Page Load') {
gtmArgs['event'] = gtmArgs['eventCategory'] + '+' + gtmArgs['eventAction'];
}
// Sending GTM event
dataLayer.push(gtmArgs);
// Sending GA event
if (typeof ga === 'function') {
ga('send', gaArgs);
}
Events.EventClient.add({
type: gtmArgs['event'],
tracker: $.cookie('refCode'),
reference: location.pathname
});
});
}
function gtmActiveTab() {
if (!Pages.Page.root) {
return;
}
return typeof Pages.active().title == 'function' ? (<any>Pages.active()).title() : Pages.active().title;
}
function gtmVisitorId() {
return Users.Profile.active() ? Users.Profile.active()._id : 'Anonymous';
}
function gtmAffiliate() {
var user = Users.Profile.active();
if (!user) {
return undefined;
}
var affiliate = user.affiliate;
if (!affiliate) {
return undefined;
}
var aff = affiliate.fetch();
if (!aff || !aff.name) {
return undefined;
}
return aff.name;
}
function gtmTracker() {
var user = Users.Profile.active();
if (!user) {
return undefined;
}
var userTracker = user.tracker;
if (!userTracker) {
return undefined;
}
var tracker = userTracker.fetch();
if (!tracker || !tracker.name) {
return undefined;
}
return tracker.name;
}
function gtmTag(name: string) {
var user = Users.Profile.active();
if (!user) {
return;
}
var group = Reporting.TagGroup.db.findOne({name});
if (!group) {
return;
}
var tag = user.tags.first({group});
if (!tag) {
return;
}
return tag._id;
}
function gtmLoginStatus() {
return Users.Profile.active() ? 'Logged in' : 'Logged out';
}
function gtmActiveLang() {
return Session.get('activeLanguage');
}
this.googleSend = googleSend;
this.gtmActiveTab = gtmActiveTab;
this.gtmVisitorId = gtmVisitorId;
this.gtmLoginStatus = gtmLoginStatus;
this.gtmActiveLang = gtmActiveLang;
this.gtmAffiliate = gtmAffiliate;
this.gtmTracker = gtmTracker;
this.gtmTag = gtmTag;