72 lines
1.8 KiB
JavaScript
72 lines
1.8 KiB
JavaScript
/*
|
|
* This creates two functions and adds them to MailPoet object
|
|
* - `trackEvent` which should be used in normal circumstances.
|
|
* This function tracks an event and sends it to mixpanel.
|
|
* This function does nothing if analytics is disabled.
|
|
* - `forceTrackEvent` which sends given event to analytics
|
|
* even if it has been disabled.
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* This is to cache events which are triggered before the mixpanel
|
|
* library is loaded. This might happen if an event is tracked
|
|
* on page load and the mixpanel library takes a long time to load.
|
|
* After it is loaded all events are posted.
|
|
* @type {Array.Object}
|
|
*/
|
|
var eventsCache = [];
|
|
|
|
function track(name, data){
|
|
if (typeof window.mixpanel.track !== "function") {
|
|
window.mixpanel.init(window.mixpanelTrackingId);
|
|
}
|
|
window.mixpanel.track(name, data);
|
|
}
|
|
|
|
function exportMixpanel(MailPoet) {
|
|
MailPoet.forceTrackEvent = track;
|
|
|
|
if (window.mailpoet_analytics_enabled) {
|
|
MailPoet.trackEvent = track;
|
|
} else {
|
|
MailPoet.trackEvent = function () {};
|
|
}
|
|
}
|
|
|
|
function trackCachedEvents() {
|
|
eventsCache.map(function (event) {
|
|
if (window.mailpoet_analytics_enabled || event.forced) {
|
|
window.mixpanel.track(event.name, event.data)
|
|
}
|
|
});
|
|
}
|
|
|
|
function initializeMixpanelWhenLoaded() {
|
|
if (typeof window.mixpanel === "object") {
|
|
exportMixpanel(MailPoet);
|
|
trackCachedEvents();
|
|
} else {
|
|
setTimeout(initializeMixpanelWhenLoaded, 100);
|
|
}
|
|
}
|
|
|
|
function cacheEvent(forced, name, data) {
|
|
eventsCache.push({
|
|
name: name,
|
|
data: data,
|
|
forced: forced
|
|
});
|
|
}
|
|
|
|
define(
|
|
['mailpoet', 'underscore'],
|
|
function(MailPoet, _) {
|
|
|
|
MailPoet.trackEvent = _.partial(cacheEvent, false);
|
|
MailPoet.forceTrackEvent = _.partial(cacheEvent, true);
|
|
|
|
initializeMixpanelWhenLoaded();
|
|
}
|
|
);
|