From 97dcf0878068d261caa6caa381cb4d4592aa7d2c Mon Sep 17 00:00:00 2001 From: Rufus Pollock Date: Sat, 20 Oct 2012 01:40:37 +0100 Subject: [PATCH 1/3] [backend/gdocs][s]: minor improvement to support handling spreadsheet urls where #gid=xxx is missing. --- src/backend.gdocs.js | 7 +++++-- test/backend.gdocs.test.js | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/backend.gdocs.js b/src/backend.gdocs.js index 0860dc7f..4a36c302 100644 --- a/src/backend.gdocs.js +++ b/src/backend.gdocs.js @@ -130,7 +130,7 @@ this.recline.Backend.GDocs = this.recline.Backend.GDocs || {}; // Convenience function to get GDocs JSON API Url from standard URL my.getGDocsAPIUrls = function(url) { // https://docs.google.com/spreadsheet/ccc?key=XXXX#gid=YYY - var regex = /.*spreadsheet\/ccc?.*key=([^#?&+]+).*gid=([\d]+).*/; + var regex = /.*spreadsheet\/ccc?.*key=([^#?&+]+)[^#]*(#gid=([\d]+).*)?/; var matches = url.match(regex); var key; var worksheet; @@ -139,7 +139,10 @@ this.recline.Backend.GDocs = this.recline.Backend.GDocs || {}; if(!!matches) { key = matches[1]; // the gid in url is 0-based and feed url is 1-based - worksheet = parseInt(matches[2]) + 1; + worksheet = parseInt(matches[3]) + 1; + if (isNaN(worksheet)) { + worksheet = 1; + } urls = { worksheet : 'https://spreadsheets.google.com/feeds/list/'+ key +'/'+ worksheet +'/public/values?alt=json', spreadsheet: 'https://spreadsheets.google.com/feeds/worksheets/'+ key +'/public/basic?alt=json' diff --git a/test/backend.gdocs.test.js b/test/backend.gdocs.test.js index 5efc98cc..0e860b9c 100644 --- a/test/backend.gdocs.test.js +++ b/test/backend.gdocs.test.js @@ -310,6 +310,10 @@ test("GDocs Backend.getUrl", function() { var exp2 = 'https://spreadsheets.google.com/feeds/worksheets/' + key + '/public/basic?alt=json' equal(exp1, out.worksheet); equal(exp2, out.spreadsheet); + + var url = 'https://docs.google.com/spreadsheet/ccc?key=' + key; + var out = recline.Backend.GDocs.getGDocsAPIUrls(url); + equal(out.worksheet, exp1); }); })(this.jQuery); From c63a3b0a4f9b5e94df424a77725799497d64f8bc Mon Sep 17 00:00:00 2001 From: Rufus Pollock Date: Sat, 20 Oct 2012 01:58:44 +0100 Subject: [PATCH 2/3] [#180,demos/search][s]: refactor bespoke template handling. --- demos/search/app.js | 93 ++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 47 deletions(-) diff --git a/demos/search/app.js b/demos/search/app.js index 343bbb6b..e9d4536d 100644 --- a/demos/search/app.js +++ b/demos/search/app.js @@ -125,52 +125,7 @@ function setupMoreComplexExample(config) { var dataset = new recline.Model.Dataset(config); // async as may be fetching remote dataset.fetch().done(function() { - if (dataset.get('url').indexOf('openspending') === -1) { - // generic template function - var template = function(record) { - var template = '
\ -
    \ - {{#data}} \ -
  • {{key}}: {{value}}
  • \ - {{/data}} \ -
\ - '; - var data = _.map(_.keys(record), function(key) { - return { key: key, value: record[key] }; - }); - return Mustache.render(template, { - data: data - }); - } - } else { - // generic template function - var template = function(record) { - record['time'] = record['time.label_facet'] - var template = '
\ -

\ - {{record.dataset}} {{record.time}} \ - – {{amount_formatted}} \ -

\ -
    \ - {{#data}} \ -
  • {{key}}: {{value}}
  • \ - {{/data}} \ -
\ - '; - var data = []; - _.each(_.keys(record), function(key) { - if (key !='_id' && key != 'id') { - data.push({ key: key, value: record[key] }); - } - }); - return Mustache.render(template, { - record: record, - amount_formatted: formatAmount(record['amount']), - data: data - }); - } - } - + var template = templates[dataset.get('url')] || templates['generic']; var searchView = new SearchView({ el: $el, model: dataset, @@ -179,7 +134,7 @@ function setupMoreComplexExample(config) { searchView.render(); dataset.queryState.set({ - size: 10 + size: 5 }, {silent: true} ); @@ -190,6 +145,50 @@ function setupMoreComplexExample(config) { }); }; +var templates = { + // generic template function + 'generic': function(record) { + var template = '
\ +
    \ + {{#data}} \ +
  • {{key}}: {{value}}
  • \ + {{/data}} \ +
\ + '; + var data = _.map(_.keys(record), function(key) { + return { key: key, value: record[key] }; + }); + return Mustache.render(template, { + data: data + }); + }, + 'http://openspending.org/api/search': function(record) { + record['time'] = record['time.label_facet'] + var template = '
\ +

\ + {{record.dataset}} {{record.time}} \ + – {{amount_formatted}} \ +

\ +
    \ + {{#data}} \ +
  • {{key}}: {{value}}
  • \ + {{/data}} \ +
\ + '; + var data = []; + _.each(_.keys(record), function(key) { + if (key !='_id' && key != 'id') { + data.push({ key: key, value: record[key] }); + } + }); + return Mustache.render(template, { + record: record, + amount_formatted: formatAmount(record['amount']), + data: data + }); + } +} + var sampleData = [ { title: 'War and Peace', From 07b270ff9665fa62d00d752a6203b4dcd97d3176 Mon Sep 17 00:00:00 2001 From: Rufus Pollock Date: Sat, 20 Oct 2012 02:32:33 +0100 Subject: [PATCH 3/3] [#180,demos/search][m]: google docs example using nigeria oil spill data - closes #180. --- demos/search/app.js | 33 ++++++++++++++++++++++++++++++--- demos/search/index.html | 7 ++++++- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/demos/search/app.js b/demos/search/app.js index e9d4536d..df2f9bfc 100644 --- a/demos/search/app.js +++ b/demos/search/app.js @@ -74,6 +74,7 @@ var SearchView = Backbone.View.extend({
\
\
\ +

records found

\
\ \
\ @@ -99,6 +100,8 @@ var SearchView = Backbone.View.extend({ }); this.el.html(html); + this.el.find('.total span').text(this.model.recordCount); + var view = new recline.View.FacetViewer({ model: this.model }); @@ -138,8 +141,9 @@ function setupMoreComplexExample(config) { }, {silent: true} ); - if (dataset.get('url').indexOf('openspending') != -1) { - dataset.queryState.addFacet('dataset'); + if (dataset.get('url') in templates) { + // for gdocs example + dataset.queryState.addFacet('cause'); } dataset.query(); }); @@ -153,6 +157,7 @@ var templates = { {{#data}} \
  • {{key}}: {{value}}
  • \ {{/data}} \ + \
    \ '; var data = _.map(_.keys(record), function(key) { @@ -171,8 +176,9 @@ var templates = { \
      \ {{#data}} \ -
    • {{key}}: {{value}}
    • \ +
    • {{key}}: {{value}}
    • \ {{/data}} \ +
    \
    \ '; var data = []; @@ -186,6 +192,27 @@ var templates = { amount_formatted: formatAmount(record['amount']), data: data }); + }, + 'https://docs.google.com/spreadsheet/ccc?key=0Aon3JiuouxLUdExXSTl2Y01xZEszOTBFZjVzcGtzVVE': function(record) { + var template = '
    \ +

    \ + {{record.incidentsite}} – {{record.datereported}} – {{record.estimatedspillvolumebbl}} barrels \ +

    \ +
      \ + {{#data}} \ +
    • {{key}}: {{value}}
    • \ + {{/data}} \ +
    \ +
    \ + '; + var data = []; + _.each(_.keys(record), function(key) { + data.push({ key: key, value: record[key] }); + }); + return Mustache.render(template, { + record: record, + data: data + }); } } diff --git a/demos/search/index.html b/demos/search/index.html index d7e3dda7..a26646b6 100644 --- a/demos/search/index.html +++ b/demos/search/index.html @@ -73,6 +73,11 @@ ul.facet-items { list-style-type: none; margin-left: 0; } + +.record ul { + list-style-type: none; + margin-left: 0; +}