[#313,backend][s]: use jquery deferred if available - fixes #313.

This commit is contained in:
Rufus Pollock
2013-02-08 13:31:03 +00:00
parent 3e27edd9c4
commit 723d128d13
10 changed files with 41 additions and 21 deletions

View File

@@ -23,7 +23,6 @@
<!-- 3rd party JS libraries --> <!-- 3rd party JS libraries -->
<script type="text/javascript" src="{{page.root}}vendor/jquery/1.7.1/jquery.js"></script> <script type="text/javascript" src="{{page.root}}vendor/jquery/1.7.1/jquery.js"></script>
<script type="text/javascript" src="{{page.root}}vendor/underscore/1.4.2/underscore.js"></script> <script type="text/javascript" src="{{page.root}}vendor/underscore/1.4.2/underscore.js"></script>
<script type="text/javascript" src="{{page.root}}vendor/underscore.deferred/0.4.0/underscore.deferred.js"></script>
<script type="text/javascript" src="{{page.root}}vendor/backbone/0.9.2/backbone.js"></script> <script type="text/javascript" src="{{page.root}}vendor/backbone/0.9.2/backbone.js"></script>
<script type="text/javascript" src="{{page.root}}vendor/mustache/0.5.0-dev/mustache.js"></script> <script type="text/javascript" src="{{page.root}}vendor/mustache/0.5.0-dev/mustache.js"></script>
<script type="text/javascript" src="{{page.root}}vendor/bootstrap/2.0.2/bootstrap.js"></script> <script type="text/javascript" src="{{page.root}}vendor/bootstrap/2.0.2/bootstrap.js"></script>

View File

@@ -27,6 +27,9 @@ this.recline.Backend.Ckan = this.recline.Backend.Ckan || {};
my.__type__ = 'ckan'; my.__type__ = 'ckan';
// private - use either jQuery or Underscore Deferred depending on what is available
var Deferred = _.isUndefined(this.jQuery) ? _.Deferred : jQuery.Deferred;
// Default CKAN API endpoint used for requests (you can change this but it will affect every request!) // Default CKAN API endpoint used for requests (you can change this but it will affect every request!)
// //
// DEPRECATION: this will be removed in v0.7. Please set endpoint attribute on dataset instead // DEPRECATION: this will be removed in v0.7. Please set endpoint attribute on dataset instead
@@ -41,7 +44,7 @@ this.recline.Backend.Ckan = this.recline.Backend.Ckan || {};
dataset.id = out.resource_id; dataset.id = out.resource_id;
var wrapper = my.DataStore(out.endpoint); var wrapper = my.DataStore(out.endpoint);
} }
var dfd = new _.Deferred(); var dfd = new Deferred();
var jqxhr = wrapper.search({resource_id: dataset.id, limit: 0}); var jqxhr = wrapper.search({resource_id: dataset.id, limit: 0});
jqxhr.done(function(results) { jqxhr.done(function(results) {
// map ckan types to our usual types ... // map ckan types to our usual types ...
@@ -84,7 +87,7 @@ this.recline.Backend.Ckan = this.recline.Backend.Ckan || {};
var wrapper = my.DataStore(out.endpoint); var wrapper = my.DataStore(out.endpoint);
} }
var actualQuery = my._normalizeQuery(queryObj, dataset); var actualQuery = my._normalizeQuery(queryObj, dataset);
var dfd = new _.Deferred(); var dfd = new Deferred();
var jqxhr = wrapper.search(actualQuery); var jqxhr = wrapper.search(actualQuery);
jqxhr.done(function(results) { jqxhr.done(function(results) {
var out = { var out = {

View File

@@ -5,6 +5,9 @@ this.recline.Backend.CouchDB = this.recline.Backend.CouchDB || {};
(function($, my) { (function($, my) {
my.__type__ = 'couchdb'; my.__type__ = 'couchdb';
// use either jQuery or Underscore Deferred depending on what is available
var Deferred = _.isUndefined(this.jQuery) ? _.Deferred : jQuery.Deferred;
// ## CouchDB Wrapper // ## CouchDB Wrapper
// //
// Connecting to [CouchDB] (http://www.couchdb.apache.org/) endpoints. // Connecting to [CouchDB] (http://www.couchdb.apache.org/) endpoints.
@@ -197,7 +200,7 @@ my.__type__ = 'couchdb';
var db_url = dataset.db_url; var db_url = dataset.db_url;
var view_url = dataset.view_url; var view_url = dataset.view_url;
var cdb = new my.CouchDBWrapper(db_url, view_url); var cdb = new my.CouchDBWrapper(db_url, view_url);
var dfd = new _.Deferred(); var dfd = new Deferred();
// if 'doc' attribute is present, return schema of that // if 'doc' attribute is present, return schema of that
// else return schema of 'value' attribute which contains // else return schema of 'value' attribute which contains
@@ -239,7 +242,7 @@ my.__type__ = 'couchdb';
// //
// //
my.save = function (changes, dataset) { my.save = function (changes, dataset) {
var dfd = new _.Deferred(); var dfd = new Deferred();
var total = changes.creates.length + changes.updates.length + changes.deletes.length; var total = changes.creates.length + changes.updates.length + changes.deletes.length;
var results = {'done': [], 'fail': [] }; var results = {'done': [], 'fail': [] };
@@ -280,7 +283,7 @@ my.save = function (changes, dataset) {
// @param {Object} recline.Dataset instance // @param {Object} recline.Dataset instance
// @param {Object} recline.Query instance. // @param {Object} recline.Query instance.
my.query = function(queryObj, dataset) { my.query = function(queryObj, dataset) {
var dfd = new _.Deferred(); var dfd = new Deferred();
var db_url = dataset.db_url; var db_url = dataset.db_url;
var view_url = dataset.view_url; var view_url = dataset.view_url;
var query_options = dataset.query_options; var query_options = dataset.query_options;
@@ -475,7 +478,7 @@ function randomId(length, chars) {
} }
_createDocument = function (new_doc, dataset) { _createDocument = function (new_doc, dataset) {
var dfd = new _.Deferred(); var dfd = new Deferred();
var db_url = dataset.db_url; var db_url = dataset.db_url;
var view_url = dataset.view_url; var view_url = dataset.view_url;
var _id = new_doc['id']; var _id = new_doc['id'];
@@ -497,7 +500,7 @@ _createDocument = function (new_doc, dataset) {
}; };
_updateDocument = function (new_doc, dataset) { _updateDocument = function (new_doc, dataset) {
var dfd = new _.Deferred(); var dfd = new Deferred();
var db_url = dataset.db_url; var db_url = dataset.db_url;
var view_url = dataset.view_url; var view_url = dataset.view_url;
var _id = new_doc['id']; var _id = new_doc['id'];
@@ -527,7 +530,7 @@ _updateDocument = function (new_doc, dataset) {
}; };
_deleteDocument = function (del_doc, dataset) { _deleteDocument = function (del_doc, dataset) {
var dfd = new _.Deferred(); var dfd = new Deferred();
var db_url = dataset.db_url; var db_url = dataset.db_url;
var view_url = dataset.view_url; var view_url = dataset.view_url;
var _id = del_doc['id']; var _id = del_doc['id'];

View File

@@ -6,6 +6,9 @@ this.recline.Backend.CSV = this.recline.Backend.CSV || {};
(function(my) { (function(my) {
my.__type__ = 'csv'; my.__type__ = 'csv';
// use either jQuery or Underscore Deferred depending on what is available
var Deferred = _.isUndefined(this.jQuery) ? _.Deferred : jQuery.Deferred;
// ## fetch // ## fetch
// //
// fetch supports 3 options depending on the attribute provided on the dataset argument // fetch supports 3 options depending on the attribute provided on the dataset argument
@@ -24,7 +27,7 @@ this.recline.Backend.CSV = this.recline.Backend.CSV || {};
// } // }
// </pre> // </pre>
my.fetch = function(dataset) { my.fetch = function(dataset) {
var dfd = new _.Deferred(); var dfd = new Deferred();
if (dataset.file) { if (dataset.file) {
var reader = new FileReader(); var reader = new FileReader();
var encoding = dataset.encoding || 'UTF-8'; var encoding = dataset.encoding || 'UTF-8';

View File

@@ -10,6 +10,10 @@ this.recline.Backend.DataProxy = this.recline.Backend.DataProxy || {};
// Needed because use JSONP so do not receive e.g. 500 errors // Needed because use JSONP so do not receive e.g. 500 errors
my.timeout = 5000; my.timeout = 5000;
// use either jQuery or Underscore Deferred depending on what is available
var Deferred = _.isUndefined(this.jQuery) ? _.Deferred : jQuery.Deferred;
// ## load // ## load
// //
// Load data from a URL via the [DataProxy](http://github.com/okfn/dataproxy). // Load data from a URL via the [DataProxy](http://github.com/okfn/dataproxy).
@@ -26,7 +30,7 @@ this.recline.Backend.DataProxy = this.recline.Backend.DataProxy || {};
data: data, data: data,
dataType: 'jsonp' dataType: 'jsonp'
}); });
var dfd = new _.Deferred(); var dfd = new Deferred();
_wrapInTimeout(jqxhr).done(function(results) { _wrapInTimeout(jqxhr).done(function(results) {
if (results.error) { if (results.error) {
dfd.reject(results.error); dfd.reject(results.error);
@@ -50,7 +54,7 @@ this.recline.Backend.DataProxy = this.recline.Backend.DataProxy || {};
// Many of backends use JSONP and so will not get error messages and this is // Many of backends use JSONP and so will not get error messages and this is
// a crude way to catch those errors. // a crude way to catch those errors.
var _wrapInTimeout = function(ourFunction) { var _wrapInTimeout = function(ourFunction) {
var dfd = new _.Deferred(); var dfd = new Deferred();
var timer = setTimeout(function() { var timer = setTimeout(function() {
dfd.reject({ dfd.reject({
message: 'Request Error: Backend did not respond after ' + (my.timeout / 1000) + ' seconds' message: 'Request Error: Backend did not respond after ' + (my.timeout / 1000) + ' seconds'

View File

@@ -5,6 +5,9 @@ this.recline.Backend.ElasticSearch = this.recline.Backend.ElasticSearch || {};
(function($, my) { (function($, my) {
my.__type__ = 'elasticsearch'; my.__type__ = 'elasticsearch';
// use either jQuery or Underscore Deferred depending on what is available
var Deferred = _.isUndefined(this.jQuery) ? _.Deferred : jQuery.Deferred;
// ## ElasticSearch Wrapper // ## ElasticSearch Wrapper
// //
// A simple JS wrapper around an [ElasticSearch](http://www.elasticsearch.org/) endpoints. // A simple JS wrapper around an [ElasticSearch](http://www.elasticsearch.org/) endpoints.
@@ -179,7 +182,7 @@ this.recline.Backend.ElasticSearch = this.recline.Backend.ElasticSearch || {};
// ### fetch // ### fetch
my.fetch = function(dataset) { my.fetch = function(dataset) {
var es = new my.Wrapper(dataset.url, my.esOptions); var es = new my.Wrapper(dataset.url, my.esOptions);
var dfd = new _.Deferred(); var dfd = new Deferred();
es.mapping().done(function(schema) { es.mapping().done(function(schema) {
if (!schema){ if (!schema){
@@ -207,7 +210,7 @@ this.recline.Backend.ElasticSearch = this.recline.Backend.ElasticSearch || {};
my.save = function(changes, dataset) { my.save = function(changes, dataset) {
var es = new my.Wrapper(dataset.url, my.esOptions); var es = new my.Wrapper(dataset.url, my.esOptions);
if (changes.creates.length + changes.updates.length + changes.deletes.length > 1) { if (changes.creates.length + changes.updates.length + changes.deletes.length > 1) {
var dfd = new _.Deferred(); var dfd = new Deferred();
msg = 'Saving more than one item at a time not yet supported'; msg = 'Saving more than one item at a time not yet supported';
alert(msg); alert(msg);
dfd.reject(msg); dfd.reject(msg);
@@ -225,7 +228,7 @@ this.recline.Backend.ElasticSearch = this.recline.Backend.ElasticSearch || {};
// ### query // ### query
my.query = function(queryObj, dataset) { my.query = function(queryObj, dataset) {
var dfd = new _.Deferred(); var dfd = new Deferred();
var es = new my.Wrapper(dataset.url, my.esOptions); var es = new my.Wrapper(dataset.url, my.esOptions);
var jqxhr = es.query(queryObj); var jqxhr = es.query(queryObj);
jqxhr.done(function(results) { jqxhr.done(function(results) {

View File

@@ -5,6 +5,9 @@ this.recline.Backend.GDocs = this.recline.Backend.GDocs || {};
(function(my) { (function(my) {
my.__type__ = 'gdocs'; my.__type__ = 'gdocs';
// use either jQuery or Underscore Deferred depending on what is available
var Deferred = _.isUndefined(this.jQuery) ? _.Deferred : jQuery.Deferred;
// ## Google spreadsheet backend // ## Google spreadsheet backend
// //
// Fetch data from a Google Docs spreadsheet. // Fetch data from a Google Docs spreadsheet.
@@ -29,13 +32,13 @@ this.recline.Backend.GDocs = this.recline.Backend.GDocs || {};
// * fields: array of Field objects // * fields: array of Field objects
// * records: array of objects for each row // * records: array of objects for each row
my.fetch = function(dataset) { my.fetch = function(dataset) {
var dfd = new _.Deferred(); var dfd = new Deferred();
var urls = my.getGDocsAPIUrls(dataset.url); var urls = my.getGDocsAPIUrls(dataset.url);
// TODO cover it with tests // TODO cover it with tests
// get the spreadsheet title // get the spreadsheet title
(function () { (function () {
var titleDfd = new _.Deferred(); var titleDfd = new Deferred();
jQuery.getJSON(urls.spreadsheet, function (d) { jQuery.getJSON(urls.spreadsheet, function (d) {
titleDfd.resolve({ titleDfd.resolve({

View File

@@ -5,6 +5,9 @@ this.recline.Backend.Solr = this.recline.Backend.Solr || {};
(function($, my) { (function($, my) {
my.__type__ = 'solr'; my.__type__ = 'solr';
// use either jQuery or Underscore Deferred depending on what is available
var Deferred = _.isUndefined(this.jQuery) ? _.Deferred : jQuery.Deferred;
// ### fetch // ### fetch
// //
// dataset must have a solr or url attribute pointing to solr endpoint // dataset must have a solr or url attribute pointing to solr endpoint
@@ -18,7 +21,7 @@ this.recline.Backend.Solr = this.recline.Backend.Solr || {};
dataType: 'jsonp', dataType: 'jsonp',
jsonp: 'json.wrf' jsonp: 'json.wrf'
}); });
var dfd = new _.Deferred(); var dfd = new Deferred();
jqxhr.done(function(results) { jqxhr.done(function(results) {
// if we get 0 results we cannot get fields // if we get 0 results we cannot get fields
var fields = [] var fields = []
@@ -51,7 +54,7 @@ this.recline.Backend.Solr = this.recline.Backend.Solr || {};
dataType: 'jsonp', dataType: 'jsonp',
jsonp: 'json.wrf' jsonp: 'json.wrf'
}); });
var dfd = new _.Deferred(); var dfd = new Deferred();
jqxhr.done(function(results) { jqxhr.done(function(results) {
var out = { var out = {
total: results.response.numFound, total: results.response.numFound,

View File

@@ -4,7 +4,7 @@ this.recline.Model = this.recline.Model || {};
(function(my) { (function(my) {
// private - use either jQuery or Underscore Deferred depending on what is available // use either jQuery or Underscore Deferred depending on what is available
var Deferred = _.isUndefined(this.jQuery) ? _.Deferred : jQuery.Deferred; var Deferred = _.isUndefined(this.jQuery) ? _.Deferred : jQuery.Deferred;
// ## <a id="dataset">Dataset</a> // ## <a id="dataset">Dataset</a>

View File

@@ -10,7 +10,6 @@
<script type="text/javascript" src="../vendor/jquery/1.7.1/jquery.js"></script> <script type="text/javascript" src="../vendor/jquery/1.7.1/jquery.js"></script>
<script type="text/javascript" src="../vendor/underscore/1.4.2/underscore.js"></script> <script type="text/javascript" src="../vendor/underscore/1.4.2/underscore.js"></script>
<script type="text/javascript" src="../vendor/underscore.deferred/0.4.0/underscore.deferred.js"></script>
<script type="text/javascript" src="../vendor/backbone/0.9.2/backbone.js"></script> <script type="text/javascript" src="../vendor/backbone/0.9.2/backbone.js"></script>
<script type="text/javascript" src="../vendor/moment/1.6.2/moment.js"></script> <script type="text/javascript" src="../vendor/moment/1.6.2/moment.js"></script>
<script type="text/javascript" src="../vendor/mustache/0.5.0-dev/mustache.js"></script> <script type="text/javascript" src="../vendor/mustache/0.5.0-dev/mustache.js"></script>