diff options
| author | Christophe Simonis <chs@openerp.com> | 2012-12-04 14:13:22 +0100 |
|---|---|---|
| committer | Christophe Simonis <chs@openerp.com> | 2012-12-04 14:13:22 +0100 |
| commit | a7ec9f37434c59b3a8dd9fb502deba3e66c0f935 (patch) | |
| tree | 80cc30003ed4fdad9e49f88874a2db81c180fb96 /addons/web_analytics | |
| parent | 966890c54023da8161787769ddf9a157aad4a4a7 (diff) | |
[FIX] web_analytics: works in monodb mode
bzr revid: chs@openerp.com-20121204131322-ob2hgda17oj83fax
Diffstat (limited to 'addons/web_analytics')
| -rw-r--r-- | addons/web_analytics/static/src/js/web_analytics.js | 192 |
1 files changed, 113 insertions, 79 deletions
diff --git a/addons/web_analytics/static/src/js/web_analytics.js b/addons/web_analytics/static/src/js/web_analytics.js index 0de8e9e087b..01c7cc2a7a3 100644 --- a/addons/web_analytics/static/src/js/web_analytics.js +++ b/addons/web_analytics/static/src/js/web_analytics.js @@ -14,16 +14,17 @@ openerp.web_analytics = function(instance) { (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; - ga.async = true + ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga,s); })(); - if (instance.webclient) { - // Set the account and domain to start tracking - _gaq.push(['_setAccount', 'UA-7333765-1']); // vta@openerp.com localhost + var init_tracker = function() { + // initialize tracker + _gaq.push(['_setAccount', 'UA-7333765-1']); + //_gaq.push(['_setAccount', 'UA-36797757-1']); // Debug code _gaq.push(['_setDomainName', 'none']); // Change for the real domain // Track user types @@ -43,87 +44,120 @@ openerp.web_analytics = function(instance) { _gaq.push(['_setCustomVar', 3, 'View Type', 'default', 3]); _gaq.push(['_trackPageview']); + }; - var self = this; - instance.webclient.on('state_pushed', self, function(state) { - // Track only pages corresponding to a 'normal' view of OpenERP, views - // related to client actions are tracked by the action manager - if (state.model && state.view_type) { - // Track object usage - _gaq.push(['_setCustomVar', 2, 'Object', state.model, 3]); - // Tack view usage - _gaq.push(['_setCustomVar', 3, 'View Type', state.view_type, 3]); - // Track the page - var url = instance.web_analytics.parseUrl({'model': state.model, 'view_type': state.view_type}); - _gaq.push(['_trackPageview', url]); + var on_state_pushed = function(state) { + // Track only pages corresponding to a 'normal' view of OpenERP, views + // related to client actions are tracked by the action manager + if (state.model && state.view_type) { + // Track object usage + _gaq.push(['_setCustomVar', 2, 'Object', state.model, 3]); + // Tack view usage + _gaq.push(['_setCustomVar', 3, 'View Type', state.view_type, 3]); + // Track the page + var url = instance.web_analytics.generateUrl({'model': state.model, 'view_type': state.view_type}); + _gaq.push(['_trackPageview', url]); + } + }; + + var include_tracker = function() { + // include the tracker into views and managers + + // Track the events related with the creation and the modification of records + instance.web.FormView = instance.web.FormView.extend({ + init: function(parent, dataset, view_id, options) { + this._super.apply(this, arguments); + var self = this; + this.on('record_created', self, function(r) { + var url = instance.web_analytics.generateUrl({'model': this.model, 'view_type': 'form'}); + _gaq.push(['_trackEvent', this.model, 'on_button_create_save', url]); + }); + this.on('record_saved', self, function(r) { + var url = instance.web_analytics.generateUrl({'model': this.model, 'view_type': 'form'}); + _gaq.push(['_trackEvent', this.model, 'on_button_edit_save', url]); + }); } }); - } - // Track the events related with the creation and the modification of records - instance.web.FormView = instance.web.FormView.extend({ - init: function(parent, dataset, view_id, options) { - this._super.apply(this, arguments); - var self = this; - this.on('record_created', self, function(r) { - var url = instance.web_analytics.parseUrl({'model': this.model, 'view_type': 'form'}); - _gaq.push(['_trackEvent', this.model, 'on_button_create_save', url]); - }); - this.on('record_saved', self, function(r) { - var url = instance.web_analytics.parseUrl({'model': this.model, 'view_type': 'form'}); - _gaq.push(['_trackEvent', this.model, 'on_button_edit_save', url]); - }); - } - }); + // Track client actions + instance.web.ActionManager.include({ + ir_actions_client: function (action, options) { + var url = instance.web_analytics.generateUrl({'action': action.tag}); + _gaq.push(['_trackPageview', url]); + return this._super.apply(this, arguments); + }, + }); - // Track client actions - instance.web.ActionManager.include({ - ir_actions_client: function (action, options) { - var url = instance.web_analytics.parseUrl({'action': action.tag}); - _gaq.push(['_trackPageview', url]); - return this._super.apply(this, arguments); - }, - }); - - // Track button events - instance.web.View.include({ - do_execute_action: function(action_data, dataset, record_id, on_closed) { - console.log(action_data); - var category = this.model || dataset.model || ''; - var action; - if (action_data.name && _.isNaN(action_data.name-0)) { - action = action_data.name; - } else { - action = action_data.string || action_data.special || ''; - } - var label = instance.web_analytics.parseUrl({'model': category, 'view_type': this.view_type}); - _gaq.push(['_trackEvent', category, action, label]); - return this._super.apply(this, arguments); - }, - }); - - // Track error events - instance.web.CrashManager = instance.web.CrashManager.extend({ - show_error: function(error) { - var hash = window.location.hash; - var params = $.deparam(hash.substr(hash.indexOf('#')+1)); - var options = {}; - if (params.model && params.view_type) { - options = {'model': params.model, 'view_type': params.view_type}; - } else { - options = {'action': params.action}; - } - var label = instance.web_analytics.parseUrl(options); - if (error.code) { - _gaq.push(['_trackEvent', error.message, error.data.fault_code, label, ,true]); - } else { - _gaq.push(['_trackEvent', error.type, error.data.debug, label, ,true]); + // Track button events + instance.web.View.include({ + do_execute_action: function(action_data, dataset, record_id, on_closed) { + console.log(action_data); + var category = this.model || dataset.model || ''; + var action; + if (action_data.name && _.isNaN(action_data.name-0)) { + action = action_data.name; + } else { + action = action_data.string || action_data.special || ''; + } + var label = instance.web_analytics.generateUrl({'model': category, 'view_type': this.view_type}); + _gaq.push(['_trackEvent', category, action, label]); + return this._super.apply(this, arguments); + }, + }); + + // Track error events + instance.web.CrashManager.include({ + show_error: function(error) { + var hash = window.location.hash; + var params = $.deparam(hash.substr(hash.indexOf('#')+1)); + var options = {}; + if (params.model && params.view_type) { + options = {'model': params.model, 'view_type': params.view_type}; + } else { + options = {'action': params.action}; + } + var label = instance.web_analytics.generateUrl(options); + if (error.code) { + _gaq.push(['_trackEvent', error.message, error.data.fault_code, label, ,true]); + } else { + _gaq.push(['_trackEvent', error.type, error.data.debug, label, ,true]); + } + this._super.apply(this, arguments); + }, + }); + }; + + + if (instance.client instanceof instance.web.WebClient) { // not for embedded clients + init_tracker(); + + // Set the account and domain to start tracking + instance.client.on('state_pushed', this, on_state_pushed); + + include_tracker(); + } else if (!instance.client) { + // client does not already exists, we are in monodb mode + + instance.web.WebClient.include({ + init: function() { + init_tracker(); + return this._super.apply(this, arguments); + }, + start: function() { + var self = this; + return this._super.apply(this, arguments).done(function() { + self.on('state_pushed', self, on_state_pushed); + include_tracker(); + }); } - this._super.apply(this, arguments); - }, - }); + }); + } + + // ---------------------------------------------------------------- + // utility functions + // ---------------------------------------------------------------- - instance.web_analytics.parseUrl = function(options) { + instance.web_analytics.generateUrl = function(options) { var url = ''; _.each(options, function(value, key) { url += '/' + key + '=' + value; @@ -131,4 +165,4 @@ openerp.web_analytics = function(instance) { return url; }; -};
\ No newline at end of file +}; |
