diff --git a/app/assets/javascripts/discourse/initializers/page-tracking.js.es6 b/app/assets/javascripts/discourse/initializers/page-tracking.js.es6 index bfb3f3d7f..caa1290e0 100644 --- a/app/assets/javascripts/discourse/initializers/page-tracking.js.es6 +++ b/app/assets/javascripts/discourse/initializers/page-tracking.js.es6 @@ -5,7 +5,14 @@ export default { name: "page-tracking", after: 'register-discourse-location', - initialize: function() { + initialize: function(container) { + + // Tell our AJAX system to track a page transition + var router = container.lookup('router:main'); + router.on('willTransition', function() { + Discourse.viewTrackingRequired(); + }); + var pageTracker = Discourse.PageTracker.current(); pageTracker.start(); @@ -19,7 +26,6 @@ export default { return; } - // Also use Universal Analytics if it is present if (typeof window.ga !== 'undefined') { pageTracker.on('change', function(url, title) { diff --git a/app/assets/javascripts/discourse/mixins/ajax.js b/app/assets/javascripts/discourse/mixins/ajax.js index 6f19357d4..d69383008 100644 --- a/app/assets/javascripts/discourse/mixins/ajax.js +++ b/app/assets/javascripts/discourse/mixins/ajax.js @@ -7,8 +7,15 @@ @namespace Discourse @module Discourse **/ + +var _trackView = false; + Discourse.Ajax = Em.Mixin.create({ + viewTrackingRequired: function() { + _trackView = true; + }, + /** Our own $.ajax method. Makes sure the .then method executes in an Ember runloop for performance reasons. Also automatically adjusts the URL to support installs @@ -42,6 +49,11 @@ Discourse.Ajax = Em.Mixin.create({ var performAjax = function(resolve, reject) { + if (_trackView) { + _trackView = false; + args.headers = { 'Discourse-Track-View': true }; + } + args.success = function(xhr) { Ember.run(null, resolve, xhr); }; diff --git a/app/assets/javascripts/discourse/routes/discourse_route.js b/app/assets/javascripts/discourse/routes/discourse_route.js index 75be93d63..5d189de93 100644 --- a/app/assets/javascripts/discourse/routes/discourse_route.js +++ b/app/assets/javascripts/discourse/routes/discourse_route.js @@ -26,6 +26,14 @@ Discourse.Route = Ember.Route.extend({ }, actions: { + + // Ember doesn't provider a router `willTransition` event so let's make one + willTransition: function() { + var router = this.container.lookup('router:main'); + Ember.run.once(router, router.trigger, 'willTransition'); + return this._super(); + }, + _collectTitleTokens: function(tokens) { // If there's a title token method, call it and get the token if (this.titleToken) {