From ea73f35be72af9fc7b0fdda5f21a1899b49d1f04 Mon Sep 17 00:00:00 2001 From: Nicolas Stepien Date: Wed, 20 Jun 2012 22:56:33 +0200 Subject: [PATCH] More responseType document/json. --- 4chan_x.user.js | 48 +++++++++++++++++++++++++++++++++--------------- script.coffee | 47 +++++++++++++++++++++++++++++++---------------- 2 files changed, 64 insertions(+), 31 deletions(-) diff --git a/4chan_x.user.js b/4chan_x.user.js index 3542bd3ae..8da0d8558 100644 --- a/4chan_x.user.js +++ b/4chan_x.user.js @@ -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; diff --git a/script.coffee b/script.coffee index 41c310479..63c2d8518 100644 --- a/script.coffee +++ b/script.coffee @@ -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