stupid quote inlining
This commit is contained in:
parent
c638042de4
commit
da42517019
85
4chan_x.js
85
4chan_x.js
@ -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();
|
||||
}
|
||||
|
||||
@ -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()
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user