From b61746809809f412bdb157c28a1e8c12e2ee3198 Mon Sep 17 00:00:00 2001
From: Robin Ward <robin.ward@gmail.com>
Date: Mon, 13 Jan 2014 15:30:19 -0500
Subject: [PATCH] FIX: `currentPath` was not changing when transitioning to the
 same path. Added a new hook to allow other kinds of analytics.

---
 .../controllers/application_controller.js     | 25 ----------------
 .../discourse/initializers/page_tracking.js   | 15 ++++++++++
 .../javascripts/discourse/lib/page_tracker.js | 30 +++++++++++++++++++
 3 files changed, 45 insertions(+), 25 deletions(-)
 delete mode 100644 app/assets/javascripts/discourse/controllers/application_controller.js
 create mode 100644 app/assets/javascripts/discourse/initializers/page_tracking.js
 create mode 100644 app/assets/javascripts/discourse/lib/page_tracker.js

diff --git a/app/assets/javascripts/discourse/controllers/application_controller.js b/app/assets/javascripts/discourse/controllers/application_controller.js
deleted file mode 100644
index 1202464f7..000000000
--- a/app/assets/javascripts/discourse/controllers/application_controller.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*global _gaq:true */
-
-/**
-  The base controller for all things Discourse
-
-  @class ApplicationController
-  @extends Discourse.Controller
-  @namespace Discourse
-  @module Discourse
-**/
-Discourse.ApplicationController = Discourse.Controller.extend({
-
-  routeChanged: function(){
-    if (window._gaq === undefined) { return; }
-
-    if(this.afterFirstHit) {
-      Em.run.schedule('afterRender', function() {
-        _gaq.push(['_trackPageview']);
-      });
-    } else {
-      this.afterFirstHit = true;
-    }
-  }.observes('currentPath')
-
-});
diff --git a/app/assets/javascripts/discourse/initializers/page_tracking.js b/app/assets/javascripts/discourse/initializers/page_tracking.js
new file mode 100644
index 000000000..6ed83dd8b
--- /dev/null
+++ b/app/assets/javascripts/discourse/initializers/page_tracking.js
@@ -0,0 +1,15 @@
+/**
+  Sets up the PageTracking hook.
+**/
+Discourse.addInitializer(function() {
+  var pageTracker = Discourse.PageTracker.current();
+  pageTracker.start();
+
+  // Out of the box, Discourse tries to track google analytics
+  // if it is present
+  if (typeof window._gaq !== 'undefined') { 
+    pageTracker.on('change', function() {
+      window._gaq.push(['_trackPageview']);
+    });
+  }
+});
diff --git a/app/assets/javascripts/discourse/lib/page_tracker.js b/app/assets/javascripts/discourse/lib/page_tracker.js
new file mode 100644
index 000000000..d8a74a148
--- /dev/null
+++ b/app/assets/javascripts/discourse/lib/page_tracker.js
@@ -0,0 +1,30 @@
+/**
+  Called whenever the "page" changes. This allows us to set up analytics 
+  and other tracking.
+
+  To get notified when the page changes, you can install a hook like so:
+
+  ```javascript
+    Discourse.PageTracker.current().on('change', function(url) {
+      console.log('the page changed to: ' + url);
+    });
+  ```
+
+  @class PageTracker
+  @namespace Discourse
+  @module Discourse
+**/
+Discourse.PageTracker = Ember.Object.extend(Ember.Evented, {
+  start: function() {
+    if (this.get('started')) { return; }
+
+    var router = Discourse.__container__.lookup('router:main'),
+        self = this;
+
+    router.on('didTransition', function() {
+      self.trigger('change', this.get('url'));
+    });
+    this.set('started', true);
+  }
+});
+Discourse.PageTracker.reopenClass(Discourse.Singleton);