diff --git a/Rakefile b/Rakefile index f8071b7bb4719d143090b0b53bc825936fd57497..ce883fe7983c996071e87df049646c62d0bcf434 100644 --- a/Rakefile +++ b/Rakefile @@ -85,18 +85,20 @@ task :export do var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); - - Docs.afterLaunch = function() { - Docs.App.getController('Classes').addListener('showClass', function(cls, anchor) { - _gaq.push(['_trackEvent', 'Classes', 'Show', cls]); - if (anchor) { + + Docs.initEventTracking = function() { + Docs.App.getController('Classes').addListener({ + showClass: function(cls) { + _gaq.push(['_trackEvent', 'Classes', 'Show', cls]); + }, + showMember: function(cls, anchor) { _gaq.push(['_trackEvent', 'Classes', 'Member', cls + ' - ' + anchor]); + }, + showGuide: function(guide) { + _gaq.push(['_trackEvent', 'Guides', 'Show', guide]); } }); - Docs.App.getController('Classes').addListener('showGuide', function(guide) { - _gaq.push(['_trackEvent', 'Guides', 'Show', guide]); - }); - } + } EOHTML diff --git a/template/app.js b/template/app.js index 5bf8169e7573c24be140f5810e345055d9e07bbb..575aa54a7030968257bd5315e8c7316de274c890 100644 --- a/template/app.js +++ b/template/app.js @@ -10,6 +10,6 @@ Ext.Loader.setConfig({ Ext.require('Docs.Application'); -Ext.onReady(function() { +Ext.onReady(function() { Ext.create('Docs.Application'); }); diff --git a/template/app/Application.js b/template/app/Application.js index f39ba3baf8d3a3e77fe1fd009ce141be9eb3bba9..d1a60e4be1606c03ebc004671b5531e69dea91c5 100644 --- a/template/app/Application.js +++ b/template/app/Application.js @@ -26,9 +26,10 @@ Ext.define('Docs.Application', { Docs.Favorites.init(); Docs.History.init(); Docs.Settings.init(); - - if (Docs.afterLaunch) { - Docs.afterLaunch(); + + // When google analytics event tracking script present on page + if (Docs.initEventTracking) { + Docs.initEventTracking(); } } }); diff --git a/template/app/controller/Classes.js b/template/app/controller/Classes.js index 182ac5552653db2a7352e8312fc2f7f2fa843ac1..817a86b9acd78d50f3a9d5910a5090a9cef8edd9 100644 --- a/template/app/controller/Classes.js +++ b/template/app/controller/Classes.js @@ -3,7 +3,7 @@ */ Ext.define('Docs.controller.Classes', { extend: 'Ext.app.Controller', - + requires: [ 'Docs.History', 'Docs.Syntax' @@ -37,12 +37,28 @@ Ext.define('Docs.controller.Classes', { ], init: function() { - - this.addEvents({ - "showClass" : true, - "showGuide" : true - }); - + this.addEvents( + /** + * @event showClass + * Fired after class shown. Used for analytics event tracking. + * @param {String} cls name of the class. + */ + "showClass", + /** + * @event showMember + * Fired after class member scrolled to view. Used for analytics event tracking. + * @param {String} cls name of the class. + * @param {String} anchor name of the member in form type-name like "method-bind". + */ + "showMember", + /** + * @event showGuide + * Fired after guide shown. Used for analytics event tracking. + * @param {String} guide name of the guide. + */ + "showGuide" + ); + Ext.getBody().addListener('click', function(cmp, el) { this.loadClass(el.rel); }, this, { @@ -141,7 +157,6 @@ Ext.define('Docs.controller.Classes', { }, showClass: function(cls, anchor) { - if (this.currentCls != cls) { var container = Ext.getCmp('container'), showClass = container.down('showclass'), @@ -157,11 +172,12 @@ Ext.define('Docs.controller.Classes', { } this.getTree().selectClass(cls.name); - this.fireEvent('showClass', cls.name, anchor); + this.fireEvent('showClass', cls.name); } if (anchor) { this.getClassOverview().scrollToEl("#" + anchor); + this.fireEvent('showMember', cls.name, anchor); } else { this.getClassOverview().getEl().down('.x-panel-body').scrollTo('top', 0); } @@ -171,8 +187,6 @@ Ext.define('Docs.controller.Classes', { showGuide: function(name, noHistory) { noHistory || Docs.History.push("/guide/" + name); - - this.fireEvent('showGuide', name); Ext.data.JsonP.request({ url: this.getBaseUrl() + "/guides/" + name + "/README.js", @@ -181,6 +195,7 @@ Ext.define('Docs.controller.Classes', { Ext.getCmp("guide").update(json.guide); Ext.getCmp('container').layout.setActiveItem(2); Docs.Syntax.highlight(Ext.get("guide")); + this.fireEvent('showGuide', name); }, scope: this });