switch to jquery.couch2 for deffereds
This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
<link rel="stylesheet" href="style/demo.css" media="screen">
|
<link rel="stylesheet" href="style/demo.css" media="screen">
|
||||||
<script type="text/javascript" src="script/jquery-1.6.1.min.js"></script>
|
<script type="text/javascript" src="script/jquery-1.6.1.min.js"></script>
|
||||||
<script type="text/javascript" src="script/jquery.mustache.js"></script>
|
<script type="text/javascript" src="script/jquery.mustache.js"></script>
|
||||||
<script type="text/javascript" src="script/jquery.request.js"></script>
|
<script type="text/javascript" src="script/jquery.couch2.js"></script>
|
||||||
<script type="text/javascript" src="script/sammy-0.6.3.min.js"></script>
|
<script type="text/javascript" src="script/sammy-0.6.3.min.js"></script>
|
||||||
<script type="text/javascript" src="script/util.js"></script>
|
<script type="text/javascript" src="script/util.js"></script>
|
||||||
<script type="text/javascript" src="script/removalist.js"></script>
|
<script type="text/javascript" src="script/removalist.js"></script>
|
||||||
|
|||||||
63
attachments/script/jquery.couch2.js
Normal file
63
attachments/script/jquery.couch2.js
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
(function($) {
|
||||||
|
|
||||||
|
window.couch = {};
|
||||||
|
|
||||||
|
var cache = {};
|
||||||
|
|
||||||
|
var defaults = {
|
||||||
|
headers: {"Accept":"application/json"},
|
||||||
|
dataType:"json",
|
||||||
|
contentType: "application/json",
|
||||||
|
type: "GET",
|
||||||
|
url: "/"
|
||||||
|
};
|
||||||
|
|
||||||
|
couch.request = function(opts) {
|
||||||
|
var key = JSON.stringify(opts);
|
||||||
|
if (cache[key]) {
|
||||||
|
var dfd = $.Deferred();
|
||||||
|
dfd.resolve(jQuery.extend(true, {}, cache[key]));
|
||||||
|
return dfd.promise();
|
||||||
|
} else {
|
||||||
|
var ajaxOpts = $.extend({}, defaults, opts);
|
||||||
|
ajaxOpts.dataFilter = function (data) {
|
||||||
|
cache[key] = JSON.parse(data);
|
||||||
|
return data;
|
||||||
|
};
|
||||||
|
return $.ajax(ajaxOpts).promise();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
couch.clearCache = function() {
|
||||||
|
cache = {};
|
||||||
|
};
|
||||||
|
|
||||||
|
couch.get = function(url) {
|
||||||
|
return couch.request({url:url, type:'GET'});
|
||||||
|
};
|
||||||
|
|
||||||
|
couch.db = function(name, couchRoot) {
|
||||||
|
if(!couchRoot) couchRoot = "";
|
||||||
|
return {
|
||||||
|
name: name,
|
||||||
|
uri: couchRoot + "/" + encodeURIComponent(name) + "/",
|
||||||
|
|
||||||
|
get: function(id) {
|
||||||
|
return couch.request({url:this.uri + id, type:"GET"});
|
||||||
|
},
|
||||||
|
|
||||||
|
put: function(id, data) {
|
||||||
|
return couch.request({url:this.uri + id, type:"PUT", data:data});
|
||||||
|
},
|
||||||
|
|
||||||
|
designDocs: function(opts) {
|
||||||
|
return couch.request($.extend(defaults, {
|
||||||
|
url: this.uri + "_all_docs",
|
||||||
|
data: {startkey:'"_design/"', endkey:'"_design0"', include_docs:true}
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
})(jQuery);
|
||||||
@@ -1,215 +0,0 @@
|
|||||||
(function() {
|
|
||||||
var define = window.define
|
|
||||||
if(!define) define = function(deps, definer) {
|
|
||||||
if(!window.jQuery)
|
|
||||||
throw new Error("Can't find jQuery");
|
|
||||||
return definer(window.jQuery);
|
|
||||||
}
|
|
||||||
|
|
||||||
define(['jquery'], function(jQuery) {
|
|
||||||
|
|
||||||
//
|
|
||||||
// request.jquery
|
|
||||||
//
|
|
||||||
|
|
||||||
var DEFAULT_TIMEOUT = 3 * 60 * 1000; // 3 minutes
|
|
||||||
|
|
||||||
function request(options, callback) {
|
|
||||||
if(typeof options === 'string')
|
|
||||||
options = {'uri':options};
|
|
||||||
else
|
|
||||||
options = JSON.parse(JSON.stringify(options)); // Use a duplicate for mutating.
|
|
||||||
|
|
||||||
if (!options.uri)
|
|
||||||
throw new Error("options.uri is a required argument");
|
|
||||||
else if(typeof options.uri != "string")
|
|
||||||
throw new Error("options.uri must be a string");
|
|
||||||
|
|
||||||
; $.each(['proxy', '_redirectsFollowed', 'maxRedirects', 'followRedirect'], function(i, opt) {
|
|
||||||
if(options[opt])
|
|
||||||
throw new Error("options." + opt + " is not supported");
|
|
||||||
})
|
|
||||||
|
|
||||||
options.method = options.method || 'GET';
|
|
||||||
options.headers = options.headers || {};
|
|
||||||
|
|
||||||
if(options.headers.host)
|
|
||||||
throw new Error("Options.headers.host is not supported");
|
|
||||||
|
|
||||||
/*
|
|
||||||
// Browsers do not like this.
|
|
||||||
if(options.body)
|
|
||||||
options.headers['content-length'] = options.body.length;
|
|
||||||
*/
|
|
||||||
|
|
||||||
var headers = {};
|
|
||||||
var beforeSend = function(xhr, settings) {
|
|
||||||
if(!options.headers.authorization && options.auth) {
|
|
||||||
debugger
|
|
||||||
options.headers.authorization = 'Basic ' + b64_enc(options.auth.username + ':' + options.auth.password);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var key in options.headers)
|
|
||||||
xhr.setRequestHeader(key, options.headers[key]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Establish a place where the callback arguments will go.
|
|
||||||
var result = [];
|
|
||||||
|
|
||||||
var onSuccess = function(data, reason, xhr) {
|
|
||||||
result = [null, xhr, data];
|
|
||||||
}
|
|
||||||
|
|
||||||
var onError = function (xhr, reason, er) {
|
|
||||||
var body = undefined;
|
|
||||||
|
|
||||||
if(!er) {
|
|
||||||
if(reason == 'timeout') {
|
|
||||||
er = new Error("Request timeout");
|
|
||||||
} else if(reason == 'error') {
|
|
||||||
if(xhr.status > 299 && xhr.responseText.length > 0) {
|
|
||||||
// Looks like HTTP worked, so there is no error as far as request is concerned. Simulate a success scenario.
|
|
||||||
er = null;
|
|
||||||
body = xhr.responseText;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
er = new Error("Unknown error; reason = " + reason);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result = [er, xhr, body];
|
|
||||||
}
|
|
||||||
|
|
||||||
var onComplete = function(xhr, reason) {
|
|
||||||
if(result.length === 0)
|
|
||||||
result = [new Error("Result does not exist at completion time")];
|
|
||||||
return callback && callback.apply(this, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
var cors_creds = !!( options.creds || options.withCredentials );
|
|
||||||
|
|
||||||
return jQuery.ajax({ 'async' : true
|
|
||||||
, 'cache' : (options.cache || false)
|
|
||||||
, 'contentType': (options.headers['content-type'] || 'application/x-www-form-urlencoded')
|
|
||||||
, 'type' : options.method
|
|
||||||
, 'url' : options.uri
|
|
||||||
, 'data' : (options.body || undefined)
|
|
||||||
, 'timeout' : (options.timeout || request.DEFAULT_TIMEOUT)
|
|
||||||
, 'dataType' : 'text'
|
|
||||||
, 'processData': false
|
|
||||||
, 'beforeSend' : beforeSend
|
|
||||||
, 'success' : onSuccess
|
|
||||||
, 'error' : onError
|
|
||||||
, 'complete' : onComplete
|
|
||||||
, 'xhrFields' : { 'withCredentials': cors_creds
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
request.withCredentials = false;
|
|
||||||
request.DEFAULT_TIMEOUT = DEFAULT_TIMEOUT;
|
|
||||||
|
|
||||||
var shortcuts = [ 'get', 'put', 'post', 'head' ];
|
|
||||||
$.each(shortcuts, function(i, shortcut) {
|
|
||||||
var method = shortcut.toUpperCase();
|
|
||||||
var func = shortcut.toLowerCase();
|
|
||||||
|
|
||||||
request[func] = function(opts) {
|
|
||||||
if(typeof opts === 'string')
|
|
||||||
opts = {'method':method, 'uri':opts};
|
|
||||||
else {
|
|
||||||
opts = JSON.parse(JSON.stringify(opts));
|
|
||||||
opts.method = method;
|
|
||||||
}
|
|
||||||
|
|
||||||
var args = [opts].concat(Array.prototype.slice.apply(arguments, [1]));
|
|
||||||
return request.apply(this, args);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
request.json = function(options, callback) {
|
|
||||||
options = JSON.parse(JSON.stringify(options));
|
|
||||||
options.headers = options.headers || {};
|
|
||||||
options.headers['accept'] = options.headers['accept'] || 'application/json';
|
|
||||||
|
|
||||||
if(options.method !== 'GET')
|
|
||||||
options.headers['content-type'] = 'application/json';
|
|
||||||
|
|
||||||
return request(options, function(er, resp, body) {
|
|
||||||
if(!er)
|
|
||||||
body = JSON.parse(body)
|
|
||||||
return callback && callback(er, resp, body);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
request.couch = function(options, callback) {
|
|
||||||
return request.json(options, function(er, resp, body) {
|
|
||||||
if(er)
|
|
||||||
return callback && callback(er, resp, body);
|
|
||||||
|
|
||||||
if((resp.status < 200 || resp.status > 299) && body.error)
|
|
||||||
// The body is a Couch JSON object indicating the error.
|
|
||||||
return callback && callback(body, resp);
|
|
||||||
|
|
||||||
return callback && callback(er, resp, body);
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
jQuery(document).ready(function() {
|
|
||||||
jQuery.request = request;
|
|
||||||
})
|
|
||||||
|
|
||||||
return request;
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
//
|
|
||||||
// Utility
|
|
||||||
//
|
|
||||||
|
|
||||||
// MIT License from http://phpjs.org/functions/base64_encode:358
|
|
||||||
function b64_enc (data) {
|
|
||||||
// Encodes string using MIME base64 algorithm
|
|
||||||
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
|
||||||
var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc="", tmp_arr = [];
|
|
||||||
|
|
||||||
if (!data) {
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
// assume utf8 data
|
|
||||||
// data = this.utf8_encode(data+'');
|
|
||||||
|
|
||||||
do { // pack three octets into four hexets
|
|
||||||
o1 = data.charCodeAt(i++);
|
|
||||||
o2 = data.charCodeAt(i++);
|
|
||||||
o3 = data.charCodeAt(i++);
|
|
||||||
|
|
||||||
bits = o1<<16 | o2<<8 | o3;
|
|
||||||
|
|
||||||
h1 = bits>>18 & 0x3f;
|
|
||||||
h2 = bits>>12 & 0x3f;
|
|
||||||
h3 = bits>>6 & 0x3f;
|
|
||||||
h4 = bits & 0x3f;
|
|
||||||
|
|
||||||
// use hexets to index into b64, and append result to encoded string
|
|
||||||
tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
|
|
||||||
} while (i < data.length);
|
|
||||||
|
|
||||||
enc = tmp_arr.join('');
|
|
||||||
|
|
||||||
switch (data.length % 3) {
|
|
||||||
case 1:
|
|
||||||
enc = enc.slice(0, -2) + '==';
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
enc = enc.slice(0, -1) + '=';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return enc;
|
|
||||||
}
|
|
||||||
|
|
||||||
})();
|
|
||||||
@@ -4,10 +4,9 @@ var removalist = function() {
|
|||||||
return (parseFloat(bytes)/1024/1024).toString().substr(0,4) + "MB"
|
return (parseFloat(bytes)/1024/1024).toString().substr(0,4) + "MB"
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderRows(err, resp, body) {
|
function renderRows(rows) {
|
||||||
var response = JSON.parse(body);
|
var tableRows = [];
|
||||||
var rows = [];
|
rows.map(function(row) {
|
||||||
response.rows.map(function(row) {
|
|
||||||
var cells = [];
|
var cells = [];
|
||||||
app.headers.map(function(header) {
|
app.headers.map(function(header) {
|
||||||
var value = "";
|
var value = "";
|
||||||
@@ -17,25 +16,24 @@ var removalist = function() {
|
|||||||
}
|
}
|
||||||
cells.push(value);
|
cells.push(value);
|
||||||
})
|
})
|
||||||
rows.push({cells: cells});
|
tableRows.push({cells: cells});
|
||||||
})
|
})
|
||||||
util.render('dataTable', 'dataTableContainer', {
|
util.render('dataTable', 'dataTableContainer', {
|
||||||
rows: rows,
|
rows: tableRows,
|
||||||
headers: app.headers
|
headers: app.headers
|
||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function gotHeaders( err, resp, body ) {
|
function gotHeaders( headers ) {
|
||||||
app.csvUrl = app.baseURL + 'api/csv?headers=' + escape(body);
|
app.headers = headers;
|
||||||
|
app.csvUrl = app.baseURL + 'api/csv?headers=' + escape(JSON.stringify(headers));
|
||||||
util.render( 'actions', 'project-controls', $.extend({}, app.dbInfo, {url: app.csvUrl}) );
|
util.render( 'actions', 'project-controls', $.extend({}, app.dbInfo, {url: app.csvUrl}) );
|
||||||
app.headers = JSON.parse(body);
|
|
||||||
$.request($.extend({}, app.reqOpts, {uri: app.baseURL + 'api/rows?limit=10'}), renderRows);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function gotDb( err, resp, body ) {
|
function gotDb( dbInfo ) {
|
||||||
|
|
||||||
app.dbInfo = JSON.parse(body);
|
app.dbInfo = dbInfo;
|
||||||
|
|
||||||
$.extend(app.dbInfo, {
|
$.extend(app.dbInfo, {
|
||||||
"host": window.location.host,
|
"host": window.location.host,
|
||||||
@@ -46,10 +44,7 @@ var removalist = function() {
|
|||||||
|
|
||||||
util.render('tableContainer', app.container, app.dbInfo);
|
util.render('tableContainer', app.container, app.dbInfo);
|
||||||
util.render('title', 'project-title', app.dbInfo);
|
util.render('title', 'project-title', app.dbInfo);
|
||||||
util.render( 'generating', 'project-controls' );
|
util.render( 'generating', 'project-controls' );
|
||||||
|
|
||||||
$.request($.extend({}, app.reqOpts, {uri: app.baseURL + 'api/headers'}), gotHeaders);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -3,13 +3,6 @@ var app = {
|
|||||||
container: 'main_content'
|
container: 'main_content'
|
||||||
};
|
};
|
||||||
|
|
||||||
app.reqOpts = {
|
|
||||||
uri: app.baseURL + "api",
|
|
||||||
method: "GET",
|
|
||||||
headers: {"Content-type": "application/json"},
|
|
||||||
cache: true
|
|
||||||
}
|
|
||||||
|
|
||||||
app.handler = function(route) {
|
app.handler = function(route) {
|
||||||
route = route.path.slice(1, route.path.length);
|
route = route.path.slice(1, route.path.length);
|
||||||
if (route.length < 1) route = "home";
|
if (route.length < 1) route = "home";
|
||||||
@@ -17,11 +10,43 @@ app.handler = function(route) {
|
|||||||
window.scrollTo(0, 0);
|
window.scrollTo(0, 0);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// var query = {
|
||||||
|
// "descending" : true,
|
||||||
|
// "limit" : 20,
|
||||||
|
// success: function( data ) {
|
||||||
|
// if( data.rows.length === 0 ) {
|
||||||
|
// monocles.oldestDoc = false;
|
||||||
|
// monocles.hideLoader();
|
||||||
|
// posts = [];
|
||||||
|
// } else {
|
||||||
|
// monocles.oldestDoc = data.rows[ data.rows.length - 1 ];
|
||||||
|
// posts = data.rows;
|
||||||
|
// }
|
||||||
|
// renderStream();
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if ( opts.offsetDoc ) {
|
||||||
|
// $.extend( query, {
|
||||||
|
// "startkey": opts.offsetDoc.key,
|
||||||
|
// "startkey_docid": opts.offsetDoc.id,
|
||||||
|
// "skip": 1
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
app.after = {
|
app.after = {
|
||||||
home: function() {
|
home: function() {
|
||||||
|
|
||||||
$.request(app.reqOpts, removalist.gotDb);
|
couch.request({url: app.baseURL + "api"}).then(function(db) {
|
||||||
|
removalist.gotDb(db);
|
||||||
|
couch.request({url: app.baseURL + 'api/headers'}).then(function(headers) {
|
||||||
|
removalist.gotHeaders(headers);
|
||||||
|
couch.request({url: app.baseURL + 'api/rows?limit=10'}).then(function(response) {
|
||||||
|
removalist.renderRows(response.rows);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
$( '.csv' ).live('click', ( function( e ) {
|
$( '.csv' ).live('click', ( function( e ) {
|
||||||
window.location.href = app.csvUrl;
|
window.location.href = app.csvUrl;
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
@@ -29,12 +54,12 @@ app.after = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
app.s = $.sammy(function () {
|
app.sammy = $.sammy(function () {
|
||||||
this.get('', app.handler);
|
this.get('', app.handler);
|
||||||
this.get("#/", app.handler);
|
this.get("#/", app.handler);
|
||||||
this.get("#:route", app.handler);
|
this.get("#:route", app.handler);
|
||||||
});
|
});
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
app.s.run();
|
app.sammy.run();
|
||||||
})
|
})
|
||||||
Reference in New Issue
Block a user