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 4b611f5..08bd6ce 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,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 = 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); diff --git a/src/analytics-manager.spec.js b/src/analytics-manager.spec.js index e627b9d..1cefea5 100644 --- a/src/analytics-manager.spec.js +++ b/src/analytics-manager.spec.js @@ -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 + '¬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 () { + 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); + }); + }); });