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') { this.analytics = a = new (window.Analytics || NoopAnalytics)(); } try { a.sendEvent.apply(a, arguments); } catch (ignored) {} }; module.exports = new AnalyticsAdapter();