chore(doc-app): ensure only canonical paths get sent to Google Analytics

Before we were simply sending the current location, but multiple URLs map
to the same document.
Now, we use the canonical path of the current document if available and
fall back to the $location path otherwise.
Includes tests!!

Closes #6402
This commit is contained in:
Peter Bacon Darwin
2014-02-21 21:35:12 +00:00
parent a4078fcae4
commit 3b5480e9fc
3 changed files with 59 additions and 24 deletions
+23
View File
@@ -0,0 +1,23 @@
angular.module('docsApp', [
'ngRoute',
'ngCookies',
'ngSanitize',
'ngAnimate',
'DocsController',
'versionsData',
'pagesData',
'directives',
'errors',
'examples',
'search',
'tutorials',
'versions',
'bootstrap',
'bootstrapPrettify',
'ui.bootstrap.dropdown'
])
.config(function($locationProvider) {
$locationProvider.html5Mode(true).hashPrefix('!');
});
+3 -24
View File
@@ -1,26 +1,4 @@
angular.module('docsApp', [
'ngRoute',
'ngCookies',
'ngSanitize',
'ngAnimate',
'versionsData',
'pagesData',
'directives',
'errors',
'examples',
'search',
'tutorials',
'versions',
'bootstrap',
'bootstrapPrettify',
'ui.bootstrap.dropdown'
])
.config(function($locationProvider) {
$locationProvider.html5Mode(true).hashPrefix('!');
})
angular.module('DocsController', [])
.controller('DocsController', function($scope, $rootScope, $location, $window, $cookies, NG_PAGES, NG_NAVIGATION, NG_VERSION) {
@@ -52,7 +30,8 @@ angular.module('docsApp', [
};
$scope.afterPartialLoaded = function() {
$window._gaq.push(['_trackPageview', $location.path()]);
var pagePath = $scope.currentPage ? $scope.currentPage.path : $location.path();
$window._gaq.push(['_trackPageview', pagePath]);
};
/** stores a cookie that is used by apache to decide which manifest ot send */
+33
View File
@@ -0,0 +1,33 @@
describe("DocsController", function() {
var $scope;
angular.module('fake', [])
.value('$cookies', {})
.value('NG_PAGES', {})
.value('NG_NAVIGATION', {})
.value('NG_VERSION', {});
beforeEach(module('fake', 'DocsController'));
beforeEach(inject(function($rootScope, $controller) {
$scope = $rootScope;
$controller('DocsController', { $scope: $scope });
}));
describe('afterPartialLoaded', function() {
it("should update the Google Analytics with currentPage path if currentPage exists", inject(function($window) {
$window._gaq = [];
$scope.currentPage = { path: 'a/b/c' };
$scope.afterPartialLoaded();
expect($window._gaq.pop()).toEqual(['_trackPageview', 'a/b/c']);
}));
it("should update the Google Analytics with $location.path if currentPage is missing", inject(function($window, $location) {
$window._gaq = [];
spyOn($location, 'path').andReturn('x/y/z');
$scope.afterPartialLoaded();
expect($window._gaq.pop()).toEqual(['_trackPageview', 'x/y/z']);
}));
});
});