Skip to content
This repository has been archived by the owner on Feb 13, 2019. It is now read-only.

Commit

Permalink
Merge pull request #5 from theonion/ga-query
Browse files Browse the repository at this point in the history
Update path info to include search queries and add tests
  • Loading branch information
jmelvnsn committed Oct 9, 2015
2 parents b499d5a + 272c530 commit 9e0d15a
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 4 deletions.
3 changes: 2 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -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"
},
Expand Down
30 changes: 27 additions & 3 deletions src/analytics-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ var AnalyticsManager = {
init: function(options) {
this._settings = $.extend({
site: '',
ingestUrl: ''
ingestUrl: '',
searchQueryParam: 'q',
}, options);

if (!this._settings.site) {
Expand All @@ -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');
Expand Down Expand Up @@ -86,16 +91,35 @@ var AnalyticsManager = {
},

sendChartbeatEvent: function(title) {
var path = window.location.pathname;
var path = this.getWindowLocation().pathname;
if (window.pSUPERFLY) {
window.pSUPERFLY.virtualPage(path, title);
} else {
console.warn('pSUPERFLY not available');
}
},

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 = this.getParameterByName(this._settings.searchQueryParam);
if (searchQuery.length) {
pathInfo = path + '?' + this._settings.searchQueryParam + '=' + searchQuery;
} else {
pathInfo = path;
}
return pathInfo;
},

trackPageView: function(freshPage, optionalTitle) {
var path = window.location.pathname;
var path = this.pathInfo();
if (this.trackedPaths.indexOf(path) < 0) {
ga('send', 'pageview', path);
ga('adTracker.send', 'pageview', this._settings.site + path);
Expand Down
43 changes: 43 additions & 0 deletions src/analytics-manager.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -318,4 +318,47 @@ describe("AnalyticsManager", function() {
});
});
});

describe("#pathInfo", function() {

it("strips all parameters except the specified query parameter", function () {
var pathName = '/search';
var queryParam = 'q';
var searchQuery = 'depp'
var goodQuery = queryParam + '=' + searchQuery;

subject.init({
site: 'testsite',
searchQueryParam: queryParam
});

sandbox.stub(subject, 'getWindowLocation').returns({
pathname: pathName,
search: 'no=123&' + goodQuery + '&notToBeIncluded=something',
});

var path = subject.pathInfo();

expect(path).to.equal(pathName + '?' + goodQuery);
});

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);
});
});
});

0 comments on commit 9e0d15a

Please sign in to comment.