summaryrefslogtreecommitdiff
path: root/addons/web_analytics/static/src/js/web_analytics.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/web_analytics/static/src/js/web_analytics.js')
-rw-r--r--addons/web_analytics/static/src/js/web_analytics.js192
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
+};