stupid quote inlining

This commit is contained in:
James Campos 2011-05-14 09:30:31 -07:00
parent c638042de4
commit da42517019
2 changed files with 144 additions and 1 deletions

View File

@ -58,7 +58,7 @@
*/
(function() {
var $, $$, Favicon, NAMESPACE, Recaptcha, anonymize, config, d, expandComment, expandThread, g, imageHover, imgExpand, imgGif, imgPreloading, keybinds, localize, log, main, nav, nodeInserted, options, qr, quoteBacklink, quotePreview, redirect, replyHiding, reportButton, sauce, threadHiding, threading, titlePost, ui, unread, updater, watcher, _config, _ref;
var $, $$, Favicon, NAMESPACE, Recaptcha, anonymize, config, d, expandComment, expandThread, g, imageHover, imgExpand, imgGif, imgPreloading, keybinds, localize, log, main, nav, nodeInserted, options, qr, quoteBacklink, quoteInline, quotePreview, redirect, replyHiding, reportButton, sauce, threadHiding, threading, titlePost, ui, unread, updater, watcher, _config, _ref;
var __slice = Array.prototype.slice;
if (typeof console !== "undefined" && console !== null) {
log = function(arg) {
@ -84,6 +84,7 @@
'Post in Title': [true, 'Show the op\'s post in the tab title'],
'Quick Reply': [true, 'Reply without leaving the page'],
'Quote Backlinks': [false, 'Add quote backlinks'],
'Quote Inline': [false, 'Show quoted post inline on quote click'],
'Quote Preview': [false, 'Show quote content on hover'],
'Reply Hiding': [true, 'Hide single replies'],
'Report Button': [true, 'Add report buttons'],
@ -1715,6 +1716,85 @@
return _results;
}
};
quoteInline = {
init: function() {
return g.callbacks.push(quoteInline.node);
},
node: function(root) {
var quote, _i, _len, _ref, _results;
_ref = $$('a.quotelink', root);
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
quote = _ref[_i];
quote.removeAttribute('onclick');
_results.push($.bind(quote, 'click', quoteInline.toggle));
}
return _results;
},
toggle: function(e) {
var el, id, inline, next, req, td, threadID;
e.preventDefault();
if (!(id = this.hash.slice(1))) {
return;
}
if ((next = this.parentNode.nextSibling) && (next.nodeName === 'TABLE')) {
$.rm(next);
return;
}
inline = $.el('table', {
className: 'inline',
innerHTML: '<tbody><tr><td class=reply></td></tr></tbody>'
});
td = $('td', inline);
if (el = d.getElementById(id)) {
td.innerHTML = el.innerHTML;
} else {
td.innerHTML = "Loading " + id + "...";
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);
}
} else {
g.requests[threadID] = $.get(this.href, (function() {
return quoteInline.parse(this, id, threadID, inline);
}));
}
}
return $.after(this.parentNode, inline);
},
parse: function(req, id, threadID, oldInline) {
var body, html, inline, op, reply, td, _i, _len, _ref;
inline = $.el('table', {
className: 'inline',
innerHTML: '<tbody><tr><td class=reply></td></tr></tbody>'
});
td = $('td', inline);
if (req.status !== 200) {
td.innerHTML = "" + req.status + " " + req.statusText;
$.replace(oldInline, inline);
return;
}
body = $.el('body', {
innerHTML: req.responseText
});
if (id === threadID) {
op = threading.op($('form[name=delform] > *', body));
html = op.innerHTML;
} else {
_ref = $$('td.reply', body);
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
reply = _ref[_i];
if (reply.id === id) {
html = reply.innerHTML;
break;
}
}
}
td.innerHTML = html;
return $.replace(oldInline, inline);
}
};
quotePreview = {
init: function() {
var preview;
@ -2267,6 +2347,9 @@
if ($.config('Quote Backlinks')) {
quoteBacklink.init();
}
if ($.config('Quote Inline')) {
quoteInline.init();
}
if ($.config('Quote Preview')) {
quotePreview.init();
}

View File

@ -28,6 +28,7 @@ config =
'Post in Title': [true, 'Show the op\'s post in the tab title']
'Quick Reply': [true, 'Reply without leaving the page']
'Quote Backlinks': [false, 'Add quote backlinks']
'Quote Inline': [false, 'Show quoted post inline on quote click']
'Quote Preview': [false, 'Show quote content on hover']
'Reply Hiding': [true, 'Hide single replies']
'Report Button': [true, 'Add report buttons']
@ -1372,6 +1373,62 @@ quoteBacklink =
$.bind link, 'mouseout', ui.hoverend
$.before $('td > br, blockquote', el), link
quoteInline =
init: ->
g.callbacks.push quoteInline.node
node: (root) ->
for quote in $$ 'a.quotelink', root
quote.removeAttribute 'onclick'
$.bind quote, 'click', quoteInline.toggle
toggle: (e) ->
e.preventDefault()
return unless id = @hash[1..]
if (next = @parentNode.nextSibling) and (next.nodeName is 'TABLE')
$.rm next
return
inline = $.el 'table',
className: 'inline'
innerHTML: '<tbody><tr><td class=reply></td></tr></tbody>'
td = $ 'td', inline
if el = d.getElementById id
td.innerHTML = el.innerHTML
else
td.innerHTML = "Loading #{id}..."
# 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
quoteInline.parse req, id, threadID, inline
else
#FIXME need an array of callbacks
g.requests[threadID] = $.get @href, (-> quoteInline.parse this, id, threadID, inline)
$.after @parentNode, inline
parse: (req, id, threadID, oldInline) ->
#this is fucking stupid
inline = $.el 'table',
className: 'inline'
innerHTML: '<tbody><tr><td class=reply></td></tr></tbody>'
td = $ 'td', inline
if req.status isnt 200
td.innerHTML = "#{req.status} #{req.statusText}"
$.replace oldInline, inline
return
body = $.el 'body',
innerHTML: req.responseText
if id == threadID #OP
op = threading.op $ 'form[name=delform] > *', body
html = op.innerHTML
else
for reply in $$ 'td.reply', body
if reply.id == id
html = reply.innerHTML
break
td.innerHTML = html
$.replace oldInline, inline
quotePreview =
init: ->
g.callbacks.push quotePreview.node
@ -1770,6 +1827,9 @@ main =
if $.config 'Quote Backlinks'
quoteBacklink.init()
if $.config 'Quote Inline'
quoteInline.init()
if $.config 'Quote Preview'
quotePreview.init()