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