diff --git a/4chan_x.js b/4chan_x.js index 48e6dfe29..1ece8ac43 100644 --- a/4chan_x.js +++ b/4chan_x.js @@ -1674,7 +1674,7 @@ }, node: function(root) { var el, id, link, qid, quote, quotes, tid, _i, _len, _ref, _results; - if (root.className === 'inline') { + if (root.className) { return; } id = root.id || $('td[id]', root).id; @@ -1731,53 +1731,52 @@ return _results; }, toggle: function(e) { - var el, id, inline, req, root, td, threadID; + var el, id, inline, req, root, table, threadID; e.preventDefault(); if (!(id = this.hash.slice(1))) { return; } root = $.x('ancestor::td[1]', this); - if (td = $("#i" + id, root)) { - $.rm($.x('ancestor::table[1]', td)); + if (table = $("#i" + id, root)) { + $.rm(table); if (this.className === 'backlink') { $.show($.x('ancestor::table[1]', d.getElementById(id))); } return; } - inline = $.el('table', { - className: 'inline', - innerHTML: "" - }); - td = $('td', inline); if (el = d.getElementById(id)) { - td.innerHTML = el.innerHTML; + inline = quoteInline.table(id, el.innerHTML); + if (this.className === 'backlink') { + $.after($('td > br:first-of-type, td > a:last-of-type', this.parentNode), inline); + return $.hide($.x('ancestor::table[1]', el)); + } else { + return $.after(this.parentNode, inline); + } } else { - td.innerHTML = "Loading " + id + "..."; + inline = $.el('td', { + className: 'reply inline', + id: "i" + id, + innerHTML: "Loading " + id + "..." + }); + $.after(this.parentNode, inline); threadID = this.pathname.split('/').pop() || $.x('ancestor::div[@class="thread"]/div', this).id; if (req = g.requests[threadID]) { if (req.readyState === 4) { - quoteInline.parse(req, id, threadID, inline); + return quoteInline.parse(req, id, threadID, inline); } } else { - g.requests[threadID] = $.get(this.href, (function() { + return g.requests[threadID] = $.get(this.href, (function() { return quoteInline.parse(this, id, threadID, inline); })); } } - if (this.className === 'backlink') { - $.after($('td > br:first-of-type, td > a:last-of-type', this.parentNode), inline); - return $.hide($.x('ancestor::table[1]', el)); - } else { - return $.after(this.parentNode, inline); - } }, parse: function(req, id, threadID, inline) { - var body, clone, html, op, reply, _i, _len, _ref; + var body, html, newInline, op, reply, _i, _len, _ref; if (req.status !== 200) { inline.innerHTML = "" + req.status + " " + req.statusText; return; } - clone = inline.cloneNode(true); body = $.el('body', { innerHTML: req.responseText }); @@ -1794,8 +1793,16 @@ } } } - $('td', clone).innerHTML = html; - return $.replace(inline, clone); + newInline = quoteInline.table(id, html); + $.addClass(newInline, 'crossquote'); + return $.replace(inline, newInline); + }, + table: function(id, html) { + return $.el('table', { + className: 'inline', + id: "i" + id, + innerHTML: "" + html + "" + }); } }; quotePreview = { @@ -1914,7 +1921,7 @@ }, cb: { node: function(root) { - if (root.className === 'inline') { + if (root.className) { return; } unread.replies.push(root); diff --git a/script.coffee b/script.coffee index 4da2cbb1e..04981b09e 100644 --- a/script.coffee +++ b/script.coffee @@ -1352,7 +1352,7 @@ quoteBacklink = init: -> g.callbacks.push quoteBacklink.node node: (root) -> - return if root.className is 'inline' + return if root.className #better coffee-script way of doing this? id = root.id or $('td[id]', root).id quotes = {} @@ -1388,21 +1388,25 @@ quoteInline = e.preventDefault() return unless id = @hash[1..] root = $.x 'ancestor::td[1]', this - if td = $ "#i#{id}", root - $.rm $.x 'ancestor::table[1]', td + if table = $ "#i#{id}", root + $.rm table if @className is 'backlink' $.show $.x 'ancestor::table[1]', d.getElementById id return - inline = $.el 'table', - className: 'inline' - innerHTML: "" - td = $ 'td', inline if el = d.getElementById id - td.innerHTML = el.innerHTML + inline = quoteInline.table id, el.innerHTML + if @className is 'backlink' + $.after $('td > br:first-of-type, td > a:last-of-type', @parentNode), inline + $.hide $.x 'ancestor::table[1]', el + else + $.after @parentNode, inline else - td.innerHTML = "Loading #{id}..." + inline = $.el 'td', + className: 'reply inline' + id: "i#{id}" + innerHTML: "Loading #{id}..." + $.after @parentNode, inline # or ... is for index page new posts. - # FIXME x-thread quotes threadID = @pathname.split('/').pop() or $.x('ancestor::div[@class="thread"]/div', this).id if req = g.requests[threadID] if req.readyState is 4 @@ -1410,17 +1414,11 @@ quoteInline = else #FIXME need an array of callbacks g.requests[threadID] = $.get @href, (-> quoteInline.parse this, id, threadID, inline) - if @className is 'backlink' - $.after $('td > br:first-of-type, td > a:last-of-type', @parentNode), inline - $.hide $.x 'ancestor::table[1]', el - else - $.after @parentNode, inline parse: (req, id, threadID, inline) -> if req.status isnt 200 inline.innerHTML = "#{req.status} #{req.statusText}" return - clone = inline.cloneNode true body = $.el 'body', innerHTML: req.responseText if id == threadID #OP @@ -1431,8 +1429,14 @@ quoteInline = if reply.id == id html = reply.innerHTML break - $('td', clone).innerHTML = html - $.replace inline, clone + newInline = quoteInline.table id, html + $.addClass newInline, 'crossquote' + $.replace inline, newInline + table: (id, html) -> + $.el 'table', + className: 'inline' + id: "i#{id}" + innerHTML: "#{html}" quotePreview = init: -> @@ -1513,7 +1517,7 @@ unread = cb: node: (root) -> - return if root.className is 'inline' + return if root.className unread.replies.push root unread.updateTitle() Favicon.update()