diff --git a/karma.conf.js b/karma.conf.js index 5fcf05a..5d7ba02 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -1,7 +1,7 @@ module.exports = function(config) { config.set({ basePath: '', - frameworks: ['mocha', 'chai-jquery', 'jquery-2.1.0', 'chai', 'sinon-chai', 'fixture'], + frameworks: ['mocha', 'chai-jquery', 'jquery-2.1.0', 'chai-changes', 'chai', 'sinon-chai', 'fixture'], files: [ 'public/javascripts/vendor/d3.v3.min.js', 'public/javascripts/vendor/raphael-min.js', @@ -10,6 +10,8 @@ module.exports = function(config) { 'public/javascripts/vendor/handlebars-v3.0.3.js', 'public/javascripts/landing-pages.js', 'public/javascripts/traffic.js', + 'public/javascripts/content.js', + 'public/javascripts/helper/dataHelper.js', 'tests/**/*Spec.js', 'tests/fixtures/**/*' ], diff --git a/package.json b/package.json index b1594b7..f7e4528 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "devDependencies": { "karma": "^0.13.2", "karma-chai": "0.1.0", + "karma-chai-changes": "0.0.1", "karma-chai-jquery": "^1.0.0", "karma-coverage": "^0.4.2", "karma-coveralls": "^1.1.2", diff --git a/public/index.html b/public/index.html index 7b5cc5c..f1dc263 100644 --- a/public/index.html +++ b/public/index.html @@ -71,6 +71,7 @@

Most popular pages

+ @@ -105,7 +106,8 @@

Most popular pages

  • {{ title }} - visits: {{ visits }} + mobile: {{ visits.mobile }} + desktop: {{ visits.desktop }}
  • {{/pages}} diff --git a/public/javascripts/content.js b/public/javascripts/content.js index 4b14760..05d673c 100644 --- a/public/javascripts/content.js +++ b/public/javascripts/content.js @@ -7,23 +7,42 @@ pages: [], el: false, - endpoint: function(){ - return "/realtime?ids=ga:"+matrix.settings.profileId+"&metrics=rt%3Apageviews&dimensions=rt%3ApageTitle,rt:pagePath&max-results=10&sort=-rt%3Apageviews" + endpoint: function(){ + return "/historic?"+ + "ids=ga:"+matrix.settings.profileId+"&"+ + "metrics=ga:pageviews&"+ + "dimensions=ga:pageTitle,ga:pagePath,ga:deviceCategory&"+ + "start-date=today&end-date=today&"+ + "max-results=1000&"+ + "sort=-ga%3Apageviews" }, - parseResponse: function(data){ - var i, _i; - - content.pages = []; + parseData: function(data) { + var i, _i, + row, url, device, oldRow, visits, visitsDevice, + titleColumn = 0, urlColumn= 1, deviceColumn = 2, visitsColumn = 3; for(i=0,_i=data.rows.length; i<_i; i++){ - content.pages.push({ - title: data.rows[i][0],//.split(' — ').slice(0,-1).join(' - '), - url: data.rows[i][1], - visits: data.rows[i][2] - //displayHits: root.matrix.numberWithCommas(data.rows[i].week2), - //percentageUp: root.matrix.numberWithCommas(Math.round(data.rows[i].percent_change)) + "%" - }); + row = data.rows[i]; + url = row[urlColumn]; + device = row[deviceColumn].toLowerCase(); + visits = parseInt(row[visitsColumn]); + if(oldRow = window.dataHelper.findWithUrl(content.pages, url)) { + oldRow.visits[device] += visits; + }else { + visitsDevice = { desktop: 0, mobile: 0 }; + visitsDevice[device] += visits; + content.pages.push({ + title: data.rows[i][titleColumn], + url: data.rows[i][urlColumn], + visits: visitsDevice + }); + } } - + }, + parseResponse: function(error, data){ + if(error) { return -1; } + if(!data.hasOwnProperty("rows")) { return -1; } + content.pages = []; + content.parseData(data); content.displayResults(); }, displayResults: function(){ diff --git a/public/javascripts/helper/dataHelper.js b/public/javascripts/helper/dataHelper.js new file mode 100644 index 0000000..3bb3669 --- /dev/null +++ b/public/javascripts/helper/dataHelper.js @@ -0,0 +1,12 @@ +window.dataHelper = { + findWithUrl: function(data, url) { + var i, dataLength = data.length; + for(i=0;i