jiti-meet/modules/statistics/AnalyticsAdapter.js

48 lines
1.7 KiB
JavaScript

/* global config */
var ScriptUtil = require('../util/ScriptUtil');
// Load the integration of a third-party analytics API such as Google Analytics.
// Since we cannot guarantee the quality of the third-party service (e.g. their
// server may take noticeably long time to respond), it is in our best interest
// (in the sense that the intergration of the analytics API is important to us
// but not enough to allow it to prevent people from joining a conference) to
// download the API asynchronously. Additionally, Google Analytics will download
// its implementation asynchronously anyway so it makes sense to append the
// loading on our side rather than prepend it.
if (config.disableThirdPartyRequests !== true) {
ScriptUtil.loadScript(
'analytics.js?v=1',
/* async */ true,
/* prepend */ false);
}
// NoopAnalytics
function NoopAnalytics() {}
NoopAnalytics.prototype.sendEvent = function () {};
// AnalyticsAdapter
function AnalyticsAdapter() {
// XXX Since we asynchronously load the integration of the analytics API and
// the analytics API may asynchronously load its implementation (e.g. Google
// Analytics), we cannot make the decision with respect to which analytics
// implementation we will use here and we have to postpone it i.e. we will
// make a lazy decision.
}
AnalyticsAdapter.prototype.sendEvent = function (action, data) {
var a = this.analytics;
if (a === null || typeof a === 'undefined') {
var AnalyticsImpl = window.Analytics || NoopAnalytics;
this.analytics = a = new AnalyticsImpl();
}
try {
a.sendEvent.apply(a, arguments);
} catch (ignored) {}
};
module.exports = new AnalyticsAdapter();