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

View File

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