diff --git "a/!*(£$&*%()_+£\"ERR$/z..\\#\\" "b/!*(£$&*%()_+£\"ERR$/z..\\#\\" deleted file mode 100644 index 6cd80daf..00000000 --- "a/!*(£$&*%()_+£\"ERR$/z..\\#\\" +++ /dev/null @@ -1,89 +0,0 @@ -Developer guide -=============== - - -Architecture ------------- - -![Architecture diagram][1] - - -StackEdit uses [RequireJS][2] for asynchronous module definition ([AMD][3]). - -### core - -The `core` module is responsible for: - -- creating the layout (using [UI Layout][4]) -- creating the editor (using [PageDown][5]) -- Loading/saving the settings -- detecting the offline status - -### fileMgr - -The `fileMgr` module is responsible for: - -- creating/deleting local files -- switching from one file to another -- setting/removing file's sync/publish location - -### synchronizer - -The `synchronizer` module is responsible for: - -- creating a new local file from a sync location (import) -- creating a new sync location from a local file (export) -- running 2 ways synchronization (upload and download) for all sync locations - -### publisher - -The `publisher` module is responsible for: - -- creating new publish locations -- updating existing publish locations - -#### publisher's providers - -A `provider` module can be associated with the `publisher` module if it implements the following functions: - -- `newPublishAttributes()`: returns a new [`publishAttributes`][6] object in order to create a new publish location -- `publish()`: performs publishing of one publish location - -#### publishAttributes - -A `publishAttributes` object is an object that describes a publish location. Attributes list differs from one provider to another except for the following attributes: - -- `publishIndex`: the unique index of the publish location -- `provider`: the `provider` module that handles the publish location -- `format`: the publishing format for the publish location. It can be: - - `markdown` for Markdown format - - `html` for HTML format - - `template` for template format - - - - - - - - - - - - - - - - - - - -> Written with [StackEdit](http://benweet.github.io/stackedit/). - - - [1]: http://benweet.github.io/stackedit/doc/img/architecture.png "Architecture diagram" - [2]: http://requirejs.org/ "RequireJS" - [3]: http://en.wikipedia.org/wiki/Asynchronous_module_definition "Asynchronous module definition" - [4]: http://layout.jquery-dev.net/ "UI Layout" - [5]: https://code.google.com/p/pagedown/ "PageDown" - [6]: #publishattributes \ No newline at end of file diff --git a/js/extensions/googleAnalytics.js b/js/extensions/googleAnalytics.js index af1c17bb..67f22af0 100644 --- a/js/extensions/googleAnalytics.js +++ b/js/extensions/googleAnalytics.js @@ -18,66 +18,6 @@ define([ 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"; @@ -91,13 +31,84 @@ define([ } }; - googleAnalytics.onReady = init; + var currentAction = "Unknown"; + googleAnalytics.onReady = function() { + + // 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) !== -1) + ]); + _gaq.push([ + '_trackEvent', + "Settings", + 'commitMsg backlink', + "" + (settings.commitMsg.indexOf(MAIN_URL) !== -1) + ]); + // Check if user has changed sshProxy + _gaq.push([ + '_trackEvent', + "Settings", + 'sshProxy unchanged', + "" + (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 === true) + ]); + }); + + // Catch window JavaScript errors + window.onerror = function(message, url, line) { + _gaq.push([ + "_trackEvent", + currentAction, + 'JS error', + message + "(" + url + ": " + line + ")" + ]); + }; + + init(); + }; googleAnalytics.onOfflineChanged = function(isOfflineParam) { isOffline = isOfflineParam; init(); }; - var currentAction = "Unknown"; var startTime = 0; googleAnalytics.onSyncRunning = function(isRunning) { if(isRunning === true) {