diff options
author | Adam Kocoloski <adam@cloudant.com> | 2011-08-15 15:45:15 -0400 |
---|---|---|
committer | Adam Kocoloski <adam@cloudant.com> | 2011-08-15 15:45:15 -0400 |
commit | 6ffe1675dd7b004e48891956a6bdbe32899ce80c (patch) | |
tree | 57326d9a498481e65bb0db38c66daf10896801f1 /rel/overlay/share/www/script/jquery.couch.js | |
parent | 52ff89ff7996e839b9e2f91fd76184d362a8aeb0 (diff) | |
parent | fdd1a5d0bc48b49b0df5c9217beff9574011283c (diff) |
Merge branch '11554-merge-couchdb-1.1'
Diffstat (limited to 'rel/overlay/share/www/script/jquery.couch.js')
-rw-r--r-- | rel/overlay/share/www/script/jquery.couch.js | 95 |
1 files changed, 66 insertions, 29 deletions
diff --git a/rel/overlay/share/www/script/jquery.couch.js b/rel/overlay/share/www/script/jquery.couch.js index 114e5801..634a03fe 100644 --- a/rel/overlay/share/www/script/jquery.couch.js +++ b/rel/overlay/share/www/script/jquery.couch.js @@ -22,25 +22,6 @@ return encodeURIComponent(docID); }; - function prepareUserDoc(user_doc, new_password) { - if (typeof hex_sha1 == "undefined") { - alert("creating a user doc requires sha1.js to be loaded in the page"); - return; - } - var user_prefix = "org.couchdb.user:"; - user_doc._id = user_doc._id || user_prefix + user_doc.name; - if (new_password) { - // handle the password crypto - user_doc.salt = $.couch.newUUID(); - user_doc.password_sha = hex_sha1(new_password + user_doc.salt); - } - user_doc.type = "user"; - if (!user_doc.roles) { - user_doc.roles = []; - } - return user_doc; - }; - var uuidCache = []; $.extend($.couch, { @@ -87,8 +68,11 @@ options = options || {}; $.ajax({ type: "GET", url: this.urlPrefix + "/_session", + beforeSend: function(xhr) { + xhr.setRequestHeader('Accept', 'application/json'); + }, complete: function(req) { - var resp = $.httpData(req, "json"); + var resp = httpData(req, "json"); if (req.status == 200) { if (options.success) options.success(resp); } else if (options.error) { @@ -112,19 +96,41 @@ signup: function(user_doc, password, options) { options = options || {}; // prepare user doc based on name and password - user_doc = prepareUserDoc(user_doc, password); + user_doc = this.prepareUserDoc(user_doc, password); $.couch.userDb(function(db) { db.saveDoc(user_doc, options); }); }, - + + prepareUserDoc: function(user_doc, new_password) { + if (typeof hex_sha1 == "undefined") { + alert("creating a user doc requires sha1.js to be loaded in the page"); + return; + } + var user_prefix = "org.couchdb.user:"; + user_doc._id = user_doc._id || user_prefix + user_doc.name; + if (new_password) { + // handle the password crypto + user_doc.salt = $.couch.newUUID(); + user_doc.password_sha = hex_sha1(new_password + user_doc.salt); + } + user_doc.type = "user"; + if (!user_doc.roles) { + user_doc.roles = []; + } + return user_doc; + }, + login: function(options) { options = options || {}; $.ajax({ type: "POST", url: this.urlPrefix + "/_session", dataType: "json", data: {name: options.name, password: options.password}, + beforeSend: function(xhr) { + xhr.setRequestHeader('Accept', 'application/json'); + }, complete: function(req) { - var resp = $.httpData(req, "json"); + var resp = httpData(req, "json"); if (req.status == 200) { if (options.success) options.success(resp); } else if (options.error) { @@ -140,8 +146,11 @@ $.ajax({ type: "DELETE", url: this.urlPrefix + "/_session", dataType: "json", username : "_", password : "_", + beforeSend: function(xhr) { + xhr.setRequestHeader('Accept', 'application/json'); + }, complete: function(req) { - var resp = $.httpData(req, "json"); + var resp = httpData(req, "json"); if (req.status == 200) { if (options.success) options.success(resp); } else if (options.error) { @@ -385,7 +394,7 @@ dataType: "json", data: toJSON(doc), beforeSend : beforeSend, complete: function(req) { - var resp = $.httpData(req, "json"); + var resp = httpData(req, "json"); if (req.status == 200 || req.status == 201 || req.status == 202) { doc._id = resp.id; doc._rev = resp.rev; @@ -450,7 +459,7 @@ copyDoc: function(docId, options, ajaxOptions) { ajaxOptions = $.extend(ajaxOptions, { complete: function(req) { - var resp = $.httpData(req, "json"); + var resp = httpData(req, "json"); if (req.status == 201) { if (options.success) options.success(resp); } else if (options.error) { @@ -563,7 +572,7 @@ replicate: function(source, target, ajaxOptions, repOpts) { repOpts = $.extend({source: source, target: target}, repOpts); - if (repOpts.continuous) { + if (repOpts.continuous && !repOpts.cancel) { ajaxOptions.successStatus = 202; } ajax({ @@ -593,9 +602,36 @@ } }); + var httpData = $.httpData || function( xhr, type, s ) { // lifted from jq1.4.4 + var ct = xhr.getResponseHeader("content-type") || "", + xml = type === "xml" || !type && ct.indexOf("xml") >= 0, + data = xml ? xhr.responseXML : xhr.responseText; + + if ( xml && data.documentElement.nodeName === "parsererror" ) { + $.error( "parsererror" ); + } + if ( s && s.dataFilter ) { + data = s.dataFilter( data, type ); + } + if ( typeof data === "string" ) { + if ( type === "json" || !type && ct.indexOf("json") >= 0 ) { + data = $.parseJSON( data ); + } else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) { + $.globalEval( data ); + } + } + return data; + }; + function ajax(obj, options, errorMessage, ajaxOptions) { + + var defaultAjaxOpts = { + contentType: "application/json", + headers:{"Accept": "application/json"} + }; + options = $.extend({successStatus: 200}, options); - ajaxOptions = $.extend({contentType: "application/json"}, ajaxOptions); + ajaxOptions = $.extend(defaultAjaxOpts, ajaxOptions); errorMessage = errorMessage || "Unknown error"; $.ajax($.extend($.extend({ type: "GET", dataType: "json", cache : !$.browser.msie, @@ -608,7 +644,7 @@ }, complete: function(req) { try { - var resp = $.httpData(req, "json"); + var resp = httpData(req, "json"); } catch(e) { if (options.error) { options.error(req.status, req, e); @@ -638,6 +674,7 @@ var commit = options.ensure_full_commit; delete options.ensure_full_commit; return function(xhr) { + xhr.setRequestHeader('Accept', 'application/json'); xhr.setRequestHeader("X-Couch-Full-Commit", commit.toString()); }; } |