201 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			201 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
define([
 | 
						|
    "jquery",
 | 
						|
    "underscore",
 | 
						|
    "settings",
 | 
						|
    "config",
 | 
						|
], function($, _, settings) {
 | 
						|
 | 
						|
    var googleAnalytics = {
 | 
						|
        extensionId: "googleAnalytics",
 | 
						|
        extensionName: 'Google Analytics',
 | 
						|
        optional: true,
 | 
						|
        settingsBloc: '<p>Sends anonymous statistics about usage and errors to help improve StackEdit.</p>'
 | 
						|
    };
 | 
						|
 | 
						|
    var isLoaded = false;
 | 
						|
    var isOffline = false;
 | 
						|
    window["_gaq"] = [];
 | 
						|
 | 
						|
    var init = function() {
 | 
						|
        if(isLoaded === false && isOffline === false) {
 | 
						|
 | 
						|
            // First configure GA
 | 
						|
            _gaq.push([
 | 
						|
                '_setAccount',
 | 
						|
                GOOGLE_ANALYTICS_ACCOUNT_ID
 | 
						|
            ]);
 | 
						|
            _gaq.push([
 | 
						|
                '_trackPageview'
 | 
						|
            ]);
 | 
						|
 | 
						|
            // Collect informations about user settings
 | 
						|
            _gaq.push([
 | 
						|
                '_trackEvent',
 | 
						|
                "Settings",
 | 
						|
                'layoutOrientation',
 | 
						|
                "" + settings.layoutOrientation
 | 
						|
            ]);
 | 
						|
            _gaq.push([
 | 
						|
                '_trackEvent',
 | 
						|
                "Settings",
 | 
						|
                'lazyRendering',
 | 
						|
                "" + settings.lazyRendering
 | 
						|
            ]);
 | 
						|
            _gaq.push([
 | 
						|
                '_trackEvent',
 | 
						|
                "Settings",
 | 
						|
                'editorFontSize',
 | 
						|
                "" + settings.editorFontSize
 | 
						|
            ]);
 | 
						|
            // Check if user has removed back links
 | 
						|
            _gaq.push([
 | 
						|
                '_trackEvent',
 | 
						|
                "Settings",
 | 
						|
                'defaultContent backlink',
 | 
						|
                "" + settings.defaultContent.indexOf(MAIN_URL) >= 0
 | 
						|
            ]);
 | 
						|
            _gaq.push([
 | 
						|
                '_trackEvent',
 | 
						|
                "Settings",
 | 
						|
                'commitMsg backlink',
 | 
						|
                "" + settings.commitMsg.indexOf(MAIN_URL) >= 0
 | 
						|
            ]);
 | 
						|
            // Check if user has changed sshProxy
 | 
						|
            _gaq.push([
 | 
						|
                '_trackEvent',
 | 
						|
                "Settings",
 | 
						|
                'sshProxy changed',
 | 
						|
                "" + settings.sshProxy != SSH_PROXY_URL
 | 
						|
            ]);
 | 
						|
            // Check if extensions have been disabled
 | 
						|
            _.each(settings.extensionSettings, function(config, extensionId) {
 | 
						|
                _gaq.push([
 | 
						|
                    '_trackEvent',
 | 
						|
                    "Extensions",
 | 
						|
                    extensionId + " enabled",
 | 
						|
                    "" + config.enabled
 | 
						|
                ]);
 | 
						|
            });
 | 
						|
 | 
						|
            // Now load GA script using jQuery
 | 
						|
            var gaUrl = "/ga.js";
 | 
						|
            if(location.search.match(/(\?|&)console/)) {
 | 
						|
                gaUrl = "/u/ga_debug.js";
 | 
						|
            }
 | 
						|
            $.ajax({
 | 
						|
                url: "http://www.google-analytics.com" + gaUrl,
 | 
						|
                dataType: "script"
 | 
						|
            }).done(function() {
 | 
						|
                isLoaded = true;
 | 
						|
            });
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    googleAnalytics.onReady = init;
 | 
						|
    googleAnalytics.onOfflineChanged = function(isOfflineParam) {
 | 
						|
        isOffline = isOfflineParam;
 | 
						|
        init();
 | 
						|
    };
 | 
						|
 | 
						|
    var currentAction = "Unknown";
 | 
						|
    var startTime = 0;
 | 
						|
    googleAnalytics.onSyncRunning = function(isRunning) {
 | 
						|
        if(isRunning === true) {
 | 
						|
            currentAction = "Sync";
 | 
						|
            startTime = new Date().getTime();
 | 
						|
        }
 | 
						|
    };
 | 
						|
    googleAnalytics.onPublishRunning = function(isRunning) {
 | 
						|
        if(isRunning === true) {
 | 
						|
            currentAction = "Publish";
 | 
						|
            startTime = new Date().getTime();
 | 
						|
        }
 | 
						|
    };
 | 
						|
    googleAnalytics.onAsyncRunning = function(isRunning) {
 | 
						|
        if(isRunning === false) {
 | 
						|
            currentAction = "Unknown";
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    // Log sync time
 | 
						|
    googleAnalytics.onSyncSuccess = function() {
 | 
						|
        var endTime = new Date().getTime();
 | 
						|
        _gaq.push([
 | 
						|
            '_trackTiming',
 | 
						|
            'Sync',
 | 
						|
            'SyncTime',
 | 
						|
            endTime - startTime
 | 
						|
        ]);
 | 
						|
    };
 | 
						|
    // Log import frequency and provider
 | 
						|
    googleAnalytics.onSyncImportSuccess = function(fileDescList, provider) {
 | 
						|
        _gaq.push([
 | 
						|
            '_trackEvent',
 | 
						|
            'Sync',
 | 
						|
            'SyncImport',
 | 
						|
        ]);
 | 
						|
        _gaq.push([
 | 
						|
            '_trackEvent',
 | 
						|
            'Sync',
 | 
						|
            'SyncImport provider',
 | 
						|
            provider.providerId
 | 
						|
        ]);
 | 
						|
    };
 | 
						|
    // Log export frequency and provider
 | 
						|
    googleAnalytics.onSyncExportSuccess = function(fileDesc, syncAttributes) {
 | 
						|
        _gaq.push([
 | 
						|
            '_trackEvent',
 | 
						|
            'Sync',
 | 
						|
            'SyncExport',
 | 
						|
        ]);
 | 
						|
        _gaq.push([
 | 
						|
            '_trackEvent',
 | 
						|
            'Sync',
 | 
						|
            'SyncExport provider',
 | 
						|
            syncAttributes.provider.providerId
 | 
						|
        ]);
 | 
						|
    };
 | 
						|
    // Log publish time and provider
 | 
						|
    googleAnalytics.onPublishSuccess = function(fileDesc) {
 | 
						|
        var endTime = new Date().getTime();
 | 
						|
        _gaq.push([
 | 
						|
            '_trackTiming',
 | 
						|
            'Publish',
 | 
						|
            'PublishSuccess',
 | 
						|
            endTime - startTime
 | 
						|
        ]);
 | 
						|
        _.each(fileDesc.publishLocations, function(publishAttributes) {
 | 
						|
            _gaq.push([
 | 
						|
                '_trackEvent',
 | 
						|
                'Publish',
 | 
						|
                'PublishSuccess provider',
 | 
						|
                publishAttributes.provider.providerId
 | 
						|
            ]);
 | 
						|
        });
 | 
						|
    };
 | 
						|
    // Log new publication's provider
 | 
						|
    googleAnalytics.onNewPublishSuccess = function(fileDesc, publishAttributes) {
 | 
						|
        _gaq.push([
 | 
						|
            '_trackEvent',
 | 
						|
            'Publish',
 | 
						|
            'NewPublish provider',
 | 
						|
            publishAttributes.provider.providerId
 | 
						|
        ]);
 | 
						|
    };
 | 
						|
 | 
						|
    // Log error messages
 | 
						|
    googleAnalytics.onError = function(error) {
 | 
						|
        if(_.isString(error) || !error.message) {
 | 
						|
            return;
 | 
						|
        }
 | 
						|
        _gaq.push([
 | 
						|
            '_trackEvent',
 | 
						|
            currentAction,
 | 
						|
            'Error',
 | 
						|
            error.message
 | 
						|
        ]);
 | 
						|
    };
 | 
						|
 | 
						|
    return googleAnalytics;
 | 
						|
 | 
						|
}); |