From 405810b856bb92b91622cc63b709e0e05a93cc33 Mon Sep 17 00:00:00 2001 From: Jamie Levinson Date: Wed, 7 Oct 2015 16:27:28 -0500 Subject: [PATCH 1/6] Setting up test if search query is in path --- src/analytics-manager.js | 37 ++++++++++++++++++++++++++++++++--- src/analytics-manager.spec.js | 25 +++++++++++++++++++++++ 2 files changed, 59 insertions(+), 3 deletions(-) diff --git a/src/analytics-manager.js b/src/analytics-manager.js index 4b611f5..cb79293 100644 --- a/src/analytics-manager.js +++ b/src/analytics-manager.js @@ -15,7 +15,8 @@ var AnalyticsManager = { init: function(options) { this._settings = $.extend({ site: '', - ingestUrl: '' + ingestUrl: '', + searchQueryParam: 'q', }, options); if (!this._settings.site) { @@ -27,6 +28,10 @@ var AnalyticsManager = { body[0].addEventListener('click', this.trackClick); }, + getWindowLocation: function () { + return window.location; + }, + trackClick: function(event) { var trackedElement = $(event.target).closest('[data-track-category]'); var category = trackedElement.data('track-category'); @@ -86,7 +91,7 @@ var AnalyticsManager = { }, sendChartbeatEvent: function(title) { - var path = window.location.pathname; + var path = this.getWindowLocation().pathname; if (window.pSUPERFLY) { window.pSUPERFLY.virtualPage(path, title); } else { @@ -94,8 +99,34 @@ var AnalyticsManager = { } }, + pathInfo: function () { + var pathInfo; + var url = this.getWindowLocation(); + var urlParams; + (window.onpopstate = function () { + var match, + pl = /\+/g, // Regex for replacing addition symbol with a space + search = /([^&=]+)=?([^&]*)/g, + decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); }, + query = window.location.search.substring(1); + + urlParams = {}; + while (match = search.exec(query)) + urlParams[decode(match[1])] = decode(match[2]); + })(); + + if (this._settings.searchQueryParam) { + pathInfo = '/one/two/three?search=hey' + } else { + pathInfo = '/one/two/three?search=hey' + } + + return pathInfo; + }, + trackPageView: function(freshPage, optionalTitle) { - var path = window.location.pathname; + //var path = this.getWindowLocation().pathname; + var path = this.pathInfo(); if (this.trackedPaths.indexOf(path) < 0) { ga('send', 'pageview', path); ga('adTracker.send', 'pageview', this._settings.site + path); diff --git a/src/analytics-manager.spec.js b/src/analytics-manager.spec.js index e627b9d..47246ee 100644 --- a/src/analytics-manager.spec.js +++ b/src/analytics-manager.spec.js @@ -318,4 +318,29 @@ describe("AnalyticsManager", function() { }); }); }); + + describe("#pathInfo", function() { + + it("strips all parameters except the specified query parameter", function () { + var pathName = '/one/two/three'; + var queryParam = 'search'; + var goodQuery = queryParam + '=hey'; + + subject.init({ + site: 'testsite', + searchQueryParam: queryParam + }); + + sandbox.stub(subject, 'getWindowLocation').returns({ + pathname: pathName, + search: 'no=123&' + goodQuery + '¬ToBeIncluded=something' + }); + + var path = subject.pathInfo(); + + expect(path).to.equal(pathName + '?' + goodQuery); + }); + + it("should provide path without query parameters if no parameter is given", function () {}); + }); }); From 91363429b092a7873f7cbbc03ba9dba43fb98644 Mon Sep 17 00:00:00 2001 From: Jamie Levinson Date: Wed, 7 Oct 2015 17:21:07 -0500 Subject: [PATCH 2/6] Refactor a bit --- src/analytics-manager.js | 27 +++++++++++---------------- src/analytics-manager.spec.js | 2 +- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/analytics-manager.js b/src/analytics-manager.js index cb79293..f39bf5b 100644 --- a/src/analytics-manager.js +++ b/src/analytics-manager.js @@ -101,24 +101,19 @@ var AnalyticsManager = { pathInfo: function () { var pathInfo; - var url = this.getWindowLocation(); - var urlParams; - (window.onpopstate = function () { - var match, - pl = /\+/g, // Regex for replacing addition symbol with a space - search = /([^&=]+)=?([^&]*)/g, - decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); }, - query = window.location.search.substring(1); - - urlParams = {}; - while (match = search.exec(query)) - urlParams[decode(match[1])] = decode(match[2]); - })(); - + var path = this.getWindowLocation().pathname; + var searchQuery = getParameterByName(this._settings.searchQueryParam); + // http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript + function getParameterByName(name) { + name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); + var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), + results = regex.exec(location.search); + return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); + } if (this._settings.searchQueryParam) { - pathInfo = '/one/two/three?search=hey' + pathInfo = '/one/two/three?q=hey' } else { - pathInfo = '/one/two/three?search=hey' + pathInfo = path } return pathInfo; diff --git a/src/analytics-manager.spec.js b/src/analytics-manager.spec.js index 47246ee..7e05e07 100644 --- a/src/analytics-manager.spec.js +++ b/src/analytics-manager.spec.js @@ -323,7 +323,7 @@ describe("AnalyticsManager", function() { it("strips all parameters except the specified query parameter", function () { var pathName = '/one/two/three'; - var queryParam = 'search'; + var queryParam = 'q'; var goodQuery = queryParam + '=hey'; subject.init({ From 7d7a36b2c2dfc17bdc3a58da39eefcf568a8bd4f Mon Sep 17 00:00:00 2001 From: Jamie Levinson Date: Thu, 8 Oct 2015 12:46:16 -0500 Subject: [PATCH 3/6] Fix test, update bower.json --- package.json | 3 ++- src/analytics-manager.js | 25 ++++++++++++------------- src/analytics-manager.spec.js | 7 ++++--- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/package.json b/package.json index 97e7843..b680fe8 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { - "priate": true, + "name": "bulbs-public-analytics-manager", + "private": true, "scripts": { "test": "./node_modules/karma/bin/karma start resources/karma.conf.js" }, diff --git a/src/analytics-manager.js b/src/analytics-manager.js index f39bf5b..06b4642 100644 --- a/src/analytics-manager.js +++ b/src/analytics-manager.js @@ -99,28 +99,27 @@ var AnalyticsManager = { } }, + getParameterByName: function(name) { + name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); + var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), + results = regex.exec(this.getWindowLocation().search); + return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); + }, + pathInfo: function () { var pathInfo; var path = this.getWindowLocation().pathname; - var searchQuery = getParameterByName(this._settings.searchQueryParam); - // http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript - function getParameterByName(name) { - name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]"); - var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"), - results = regex.exec(location.search); - return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " ")); - } - if (this._settings.searchQueryParam) { - pathInfo = '/one/two/three?q=hey' + var searchQuery = this.getParameterByName(this._settings.searchQueryParam); + // Does a search query exist in the path? + if (searchQuery.length) { + pathInfo = '/search?' + this._settings.searchQueryParam + '=' + searchQuery; } else { - pathInfo = path + pathInfo = path; } - return pathInfo; }, trackPageView: function(freshPage, optionalTitle) { - //var path = this.getWindowLocation().pathname; var path = this.pathInfo(); if (this.trackedPaths.indexOf(path) < 0) { ga('send', 'pageview', path); diff --git a/src/analytics-manager.spec.js b/src/analytics-manager.spec.js index 7e05e07..fc8615f 100644 --- a/src/analytics-manager.spec.js +++ b/src/analytics-manager.spec.js @@ -322,9 +322,10 @@ describe("AnalyticsManager", function() { describe("#pathInfo", function() { it("strips all parameters except the specified query parameter", function () { - var pathName = '/one/two/three'; + var pathName = '/search'; var queryParam = 'q'; - var goodQuery = queryParam + '=hey'; + var searchQuery = 'depp' + var goodQuery = queryParam + '=' + searchQuery; subject.init({ site: 'testsite', @@ -333,7 +334,7 @@ describe("AnalyticsManager", function() { sandbox.stub(subject, 'getWindowLocation').returns({ pathname: pathName, - search: 'no=123&' + goodQuery + '¬ToBeIncluded=something' + search: 'no=123&' + goodQuery + '¬ToBeIncluded=something', }); var path = subject.pathInfo(); From bf9b785008665697ec2e98aa9b335f6062b9ebb0 Mon Sep 17 00:00:00 2001 From: Jamie Levinson Date: Thu, 8 Oct 2015 13:09:41 -0500 Subject: [PATCH 4/6] Add test --- src/analytics-manager.spec.js | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/analytics-manager.spec.js b/src/analytics-manager.spec.js index fc8615f..1cefea5 100644 --- a/src/analytics-manager.spec.js +++ b/src/analytics-manager.spec.js @@ -342,6 +342,23 @@ describe("AnalyticsManager", function() { expect(path).to.equal(pathName + '?' + goodQuery); }); - it("should provide path without query parameters if no parameter is given", function () {}); + it("should provide path without query parameters if no parameter is given", function () { + var pathName = '/one/two/three/four'; + var queryParam = ''; + + subject.init({ + site: 'testsite', + searchQueryParam: queryParam + }); + + sandbox.stub(subject, 'getWindowLocation').returns({ + pathname: pathName, + search: pathName + '?hjghsgd&digg', + }); + + var path = subject.pathInfo(); + + expect(path).to.equal(pathName); + }); }); }); From 3beca647400c94a174f21f045a5ee3ad5040aa40 Mon Sep 17 00:00:00 2001 From: Jamie Levinson Date: Thu, 8 Oct 2015 14:10:44 -0500 Subject: [PATCH 5/6] Update pathINfo --- src/analytics-manager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/analytics-manager.js b/src/analytics-manager.js index 06b4642..11e4ee2 100644 --- a/src/analytics-manager.js +++ b/src/analytics-manager.js @@ -112,7 +112,7 @@ var AnalyticsManager = { var searchQuery = this.getParameterByName(this._settings.searchQueryParam); // Does a search query exist in the path? if (searchQuery.length) { - pathInfo = '/search?' + this._settings.searchQueryParam + '=' + searchQuery; + pathInfo = path + '?' + this._settings.searchQueryParam + '=' + searchQuery; } else { pathInfo = path; } From 272c5302148319ac77209b7502b2bad7d5bec6ff Mon Sep 17 00:00:00 2001 From: Jamie Levinson Date: Thu, 8 Oct 2015 14:46:42 -0500 Subject: [PATCH 6/6] Remove comment --- src/analytics-manager.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/analytics-manager.js b/src/analytics-manager.js index 11e4ee2..08bd6ce 100644 --- a/src/analytics-manager.js +++ b/src/analytics-manager.js @@ -110,7 +110,6 @@ var AnalyticsManager = { var pathInfo; var path = this.getWindowLocation().pathname; var searchQuery = this.getParameterByName(this._settings.searchQueryParam); - // Does a search query exist in the path? if (searchQuery.length) { pathInfo = path + '?' + this._settings.searchQueryParam + '=' + searchQuery; } else {