More responseType document/json.

This commit is contained in:
Nicolas Stepien 2012-06-20 22:56:33 +02:00
parent b126ffadab
commit ea73f35be7
2 changed files with 64 additions and 31 deletions

View File

@ -339,7 +339,7 @@
r = new XMLHttpRequest();
type || (type = form && 'post' || 'get');
r.open(type, url, true);
r.responseType = $.engine === 'presto' && responseType === 'document' ? '' : responseType || '';
r.responseType = $.engine === 'presto' && responseType === 'document' || $.engine === 'webkit' && responseType === 'json' ? '' : responseType || '';
for (key in headers) {
val = headers[key];
r.setRequestHeader(key, val);
@ -349,7 +349,7 @@
r.send(form);
return r;
},
cache: function(url, cb) {
cache: function(url, responseType, cb) {
var req;
if (req = $.cache.requests[url]) {
if (req.readyState === 4) {
@ -372,6 +372,8 @@
onabort: function() {
return delete $.cache.requests[url];
}
}, {
responseType: responseType
});
req.callbacks = [cb];
return $.cache.requests[url] = req;
@ -773,7 +775,7 @@
_ref = this.href.match(/(\d+)#p(\d+)/), _ = _ref[0], threadID = _ref[1], replyID = _ref[2];
this.textContent = "Loading " + replyID + "...";
a = this;
return $.cache(this.pathname, function() {
return $.cache(this.pathname, 'document', function() {
return ExpandComment.parse(this, a, threadID, replyID);
});
},
@ -783,8 +785,12 @@
a.textContent = "" + req.status + " " + req.statusText;
return;
}
doc = d.implementation.createHTMLDocument('');
doc.documentElement.innerHTML = req.response;
if ($.engine === 'presto') {
doc = d.implementation.createHTMLDocument('');
doc.documentElement.innerHTML = req.response;
} else {
doc = req.response;
}
node = d.importNode(doc.getElementById("m" + replyID), true);
quotes = node.getElementsByClassName('quotelink');
for (_i = 0, _len = quotes.length; _i < _len; _i++) {
@ -847,7 +853,7 @@
switch (a.textContent[0]) {
case '+':
a.textContent = a.textContent.replace('+', '\u00d7 Loading...');
$.cache(pathname, function() {
$.cache(pathname, 'document', function() {
return ExpandThread.parse(this, thread, a);
});
break;
@ -884,8 +890,12 @@
return;
}
a.textContent = a.textContent.replace('\u00d7 Loading...', '-');
doc = d.implementation.createHTMLDocument('');
doc.documentElement.innerHTML = req.response;
if ($.engine === 'presto') {
doc = d.implementation.createHTMLDocument('');
doc.documentElement.innerHTML = req.response;
} else {
doc = req.response;
}
threadID = thread.id.slice(1);
nodes = [];
_ref = $$('.replyContainer', doc);
@ -3101,11 +3111,11 @@
}
root.textContent = "Loading post No." + postID + "...";
if (threadID) {
return $.cache("/" + board + "/res/" + threadID, function() {
return $.cache("/" + board + "/res/" + threadID, 'document', function() {
return Get.parsePost(this, board, threadID, postID, root, cb);
});
} else if (url = Redirect.post(board, postID)) {
return $.cache(url, function() {
return $.cache(url, 'json', function() {
return Get.parseArchivedPost(this, board, postID, root, cb);
});
}
@ -3115,7 +3125,7 @@
status = req.status;
if (status !== 200) {
if (url = Redirect.post(board, postID)) {
$.cache(url, function() {
$.cache(url, 'json', function() {
return Get.parseArchivedPost(this, board, postID, root, cb);
});
} else {
@ -3123,11 +3133,15 @@
}
return;
}
doc = d.implementation.createHTMLDocument('');
doc.documentElement.innerHTML = req.response;
if ($.engine === 'presto') {
doc = d.implementation.createHTMLDocument('');
doc.documentElement.innerHTML = req.response;
} else {
doc = req.response;
}
if (!(pc = doc.getElementById("pc" + postID))) {
if (url = Redirect.post(board, postID)) {
$.cache(url, function() {
$.cache(url, 'json', function() {
return Get.parseArchivedPost(this, board, postID, root, cb);
});
} else {
@ -3155,7 +3169,11 @@
},
parseArchivedPost: function(req, board, postID, root, cb) {
var bq, br, capcode, data, email, file, filename, filesize, isOP, max, name, nameBlock, pc, pi, piM, span, spoiler, subject, threadID, thumb_src, timestamp, trip;
data = JSON.parse(req.response);
if ($.engine === 'webkit') {
data = JSON.parse(req.response);
} else {
data = req.response;
}
$.addClass(root, 'archivedPost');
if (data.error) {
root.textContent = data.error;

View File

@ -279,7 +279,7 @@ $.extend $,
type or= form and 'post' or 'get'
r.open type, url, true
r.responseType =
if $.engine is 'presto' and responseType is 'document'
if $.engine is 'presto' and responseType is 'document' or $.engine is 'webkit' and responseType is 'json'
''
else
responseType or ''
@ -289,16 +289,19 @@ $.extend $,
$.extend r.upload, upCallbacks
r.send form
r
cache: (url, cb) ->
cache: (url, responseType, cb) ->
if req = $.cache.requests[url]
if req.readyState is 4
cb.call req
else
req.callbacks.push cb
else
req = $.ajax url,
req = $.ajax url, {
onload: -> cb.call @ for cb in @callbacks
onabort: -> delete $.cache.requests[url]
}, {
responseType: responseType
}
req.callbacks = [cb]
$.cache.requests[url] = req
cb:
@ -602,14 +605,17 @@ ExpandComment =
[_, threadID, replyID] = @href.match /(\d+)#p(\d+)/
@textContent = "Loading #{replyID}..."
a = @
$.cache @pathname, -> ExpandComment.parse @, a, threadID, replyID
$.cache @pathname, 'document', -> ExpandComment.parse @, a, threadID, replyID
parse: (req, a, threadID, replyID) ->
if req.status isnt 200
a.textContent = "#{req.status} #{req.statusText}"
return
doc = d.implementation.createHTMLDocument ''
doc.documentElement.innerHTML = req.response
if $.engine is 'presto'
doc = d.implementation.createHTMLDocument ''
doc.documentElement.innerHTML = req.response
else
doc = req.response
# Import the node to fix quote.hashes
# as they're empty when in a different document.
@ -657,7 +663,7 @@ ExpandThread =
switch a.textContent[0]
when '+'
a.textContent = a.textContent.replace '+', '\u00d7 Loading...'
$.cache pathname, -> ExpandThread.parse @, thread, a
$.cache pathname, 'document', -> ExpandThread.parse @, thread, a
when '\u00d7'
a.textContent = a.textContent.replace '\u00d7 Loading...', '+'
@ -684,8 +690,11 @@ ExpandThread =
a.textContent = a.textContent.replace '\u00d7 Loading...', '-'
doc = d.implementation.createHTMLDocument ''
doc.documentElement.innerHTML = req.response
if $.engine is 'presto'
doc = d.implementation.createHTMLDocument ''
doc.documentElement.innerHTML = req.response
else
doc = req.response
threadID = thread.id[1..]
nodes = []
@ -2391,17 +2400,17 @@ Get =
root.textContent = "Loading post No.#{postID}..."
if threadID
$.cache "/#{board}/res/#{threadID}", ->
$.cache "/#{board}/res/#{threadID}", 'document', ->
Get.parsePost @, board, threadID, postID, root, cb
else if url = Redirect.post board, postID
$.cache url, ->
$.cache url, 'json', ->
Get.parseArchivedPost @, board, postID, root, cb
parsePost: (req, board, threadID, postID, root, cb) ->
{status} = req
if status isnt 200
# The thread can die by the time we check a quote.
if url = Redirect.post board, postID
$.cache url, ->
$.cache url, 'json', ->
Get.parseArchivedPost @, board, postID, root, cb
else
root.textContent =
@ -2411,13 +2420,16 @@ Get =
"Error #{req.status}: #{req.statusText}."
return
doc = d.implementation.createHTMLDocument ''
doc.documentElement.innerHTML = req.response
if $.engine is 'presto'
doc = d.implementation.createHTMLDocument ''
doc.documentElement.innerHTML = req.response
else
doc = req.response
unless pc = doc.getElementById "pc#{postID}"
# The post can be deleted by the time we check a quote.
if url = Redirect.post board, postID
$.cache url, ->
$.cache url, 'json', ->
Get.parseArchivedPost @, board, postID, root, cb
else
root.textContent = "Post No.#{postID} has not been found."
@ -2435,7 +2447,10 @@ Get =
$.replace root.firstChild, pc
cb() if cb
parseArchivedPost: (req, board, postID, root, cb) ->
data = JSON.parse req.response
if $.engine is 'webkit'
data = JSON.parse req.response
else
data = req.response
$.addClass root, 'archivedPost'
if data.error
root.textContent = data.error