86 lines
2.5 KiB
JavaScript
86 lines
2.5 KiB
JavaScript
this.recline = this.recline || {};
|
|
this.recline.Backend = this.recline.Backend || {};
|
|
|
|
(function($, my) {
|
|
// ## DataProxy Backend
|
|
//
|
|
// For connecting to [DataProxy-s](http://github.com/okfn/dataproxy).
|
|
//
|
|
// When initializing the DataProxy backend you can set the following attributes:
|
|
//
|
|
// * dataproxy: {url-to-proxy} (optional). Defaults to http://jsonpdataproxy.appspot.com
|
|
//
|
|
// Datasets using using this backend should set the following attributes:
|
|
//
|
|
// * url: (required) url-of-data-to-proxy
|
|
// * format: (optional) csv | xls (defaults to csv if not specified)
|
|
//
|
|
// Note that this is a **read-only** backend.
|
|
my.DataProxy = Backbone.Model.extend({
|
|
defaults: {
|
|
dataproxy_url: 'http://jsonpdataproxy.appspot.com'
|
|
},
|
|
sync: function(method, model, options) {
|
|
var self = this;
|
|
if (method === "read") {
|
|
if (model.__type__ == 'Dataset') {
|
|
var base = self.get('dataproxy_url');
|
|
// TODO: should we cache for extra efficiency
|
|
var data = {
|
|
url: model.get('url')
|
|
, 'max-results': 1
|
|
, type: model.get('format') || 'csv'
|
|
};
|
|
var jqxhr = $.ajax({
|
|
url: base
|
|
, data: data
|
|
, dataType: 'jsonp'
|
|
});
|
|
var dfd = $.Deferred();
|
|
my.wrapInTimeout(jqxhr).done(function(results) {
|
|
model.fields.reset(_.map(results.fields, function(fieldId) {
|
|
return {id: fieldId};
|
|
})
|
|
);
|
|
dfd.resolve(model, jqxhr);
|
|
})
|
|
.fail(function(arguments) {
|
|
dfd.reject(arguments);
|
|
});
|
|
return dfd.promise();
|
|
}
|
|
} else {
|
|
alert('This backend only supports read operations');
|
|
}
|
|
},
|
|
query: function(dataset, queryObj) {
|
|
var base = this.get('dataproxy_url');
|
|
var data = {
|
|
url: dataset.get('url')
|
|
, 'max-results': queryObj.size
|
|
, type: dataset.get('format')
|
|
};
|
|
var jqxhr = $.ajax({
|
|
url: base
|
|
, data: data
|
|
, dataType: 'jsonp'
|
|
});
|
|
var dfd = $.Deferred();
|
|
jqxhr.done(function(results) {
|
|
var _out = _.map(results.data, function(doc) {
|
|
var tmp = {};
|
|
_.each(results.fields, function(key, idx) {
|
|
tmp[key] = doc[idx];
|
|
});
|
|
return tmp;
|
|
});
|
|
dfd.resolve(_out);
|
|
});
|
|
return dfd.promise();
|
|
}
|
|
});
|
|
recline.Model.backends['dataproxy'] = new my.DataProxy();
|
|
|
|
|
|
}(jQuery, this.recline.Backend));
|