Add accurate OP and Cross-thread indicators.

This commit is contained in:
Nicolas Stepien 2012-09-11 05:46:02 +02:00
parent 37f399bf48
commit c72d8fcdeb
2 changed files with 162 additions and 7 deletions

View File

@ -74,7 +74,7 @@
*/
(function() {
var $, $$, AutoGIF, Board, Build, Clone, Conf, Config, FileInfo, Get, ImageHover, Main, Post, QuoteBacklink, QuoteInline, QuotePreview, Quotify, Redirect, RevealSpoilers, Sauce, Thread, Time, UI, d, g,
var $, $$, AutoGIF, Board, Build, Clone, Conf, Config, FileInfo, Get, ImageHover, Main, Post, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, Quotify, Redirect, RevealSpoilers, Sauce, Thread, Time, UI, d, g,
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
@ -141,7 +141,7 @@
'Quote Preview': [true, 'Show quoted post on hover.'],
'Quote Highlighting': [true, 'Highlight the previewed post.'],
'Resurrect Quotes': [true, 'Linkify dead quotes to archives.'],
'Indicate OP quote': [true, 'Add \'(OP)\' to OP quotes.'],
'Indicate OP Quotes': [true, 'Add \'(OP)\' to OP quotes.'],
'Indicate Cross-thread Quotes': [true, 'Add \'(Cross-thread)\' to cross-threads quotes.']
}
},
@ -965,6 +965,20 @@
$.log(err, 'Quote Backlinks');
}
}
if (Conf['Indicate OP Quotes']) {
try {
QuoteOP.init();
} catch (err) {
$.log(err, 'Indicate OP Quotes');
}
}
if (Conf['Indicate Cross-thread Quotes']) {
try {
QuoteCT.init();
} catch (err) {
$.log(err, 'Indicate Cross-thread Quotes');
}
}
if (Conf['Time Formatting']) {
try {
Time.init();
@ -1450,7 +1464,7 @@
link.href = "/" + board + "/res/" + threadID + "#p" + postID;
link.nextSibling.href = "/" + board + "/res/" + threadID + "#q" + postID;
board = g.boards[board] || new Board(board);
thread = g.threads["" + board + "." + threadID] || new Thread(threadID, inBoard);
thread = g.threads["" + board + "." + threadID] || new Thread(threadID, board);
post = new Post(pc, thread, board);
Main.callbackNodes(Post, [post]);
return Get.insert(post, root, context);
@ -1652,7 +1666,7 @@
className: 'inline'
});
root = (isBacklink = $.hasClass(quotelink, 'backlink')) ? quotelink.parentNode.parentNode : $.x('ancestor-or-self::*[parent::blockquote][1]', quotelink);
context = Get.postFromRoot($.x('ancestor::div[contains(@class,"postContainer")][1]', this));
context = Get.postFromRoot($.x('ancestor::div[contains(@class,"postContainer")][1]', quotelink));
$.after(root, inline);
Get.postClone(board, threadID, postID, inline, context);
if (!(board === g.BOARD.ID && $.x("ancestor::div[@id='t" + threadID + "']", quotelink))) {
@ -1862,6 +1876,79 @@
}
};
QuoteOP = {
init: function() {
this.text = '\u00A0(OP)';
return Post.prototype.callbacks.push({
name: 'Indicate OP Quotes',
cb: this.node
});
},
node: function() {
var board, op, quote, quotelinks, quotes, thread, _i, _j, _len, _len1, _ref;
if (this.isClone && this.thread === this.context.thread) {
return;
}
if (!(quotes = this.quotes).length) {
return;
}
quotelinks = this.nodes.quotelinks;
if (this.isClone && -1 < quotes.indexOf("" + this.board + "." + this.thread)) {
for (_i = 0, _len = quotelinks.length; _i < _len; _i++) {
quote = quotelinks[_i];
quote.textContent = quote.textContent.replace(QuoteOP.text, '');
}
}
_ref = this.isClone ? this.context : this, board = _ref.board, thread = _ref.thread;
op = "" + board + "." + thread;
if (!(-1 < quotes.indexOf(op))) {
return;
}
for (_j = 0, _len1 = quotelinks.length; _j < _len1; _j++) {
quote = quotelinks[_j];
if (("" + (quote.pathname.split('/')[1]) + "." + quote.hash.slice(2)) === op) {
$.add(quote, $.tn(QuoteOP.text));
}
}
}
};
QuoteCT = {
init: function() {
this.text = '\u00A0(Cross-thread)';
return Post.prototype.callbacks.push({
name: 'Indicate Cross-thread Quotes',
cb: this.node
});
},
node: function() {
var board, path, qBoard, qThread, quote, quotelinks, quotes, thread, _i, _len, _ref;
if (this.isClone && this.thread === this.context.thread) {
return;
}
if (!(quotes = this.quotes).length) {
return;
}
quotelinks = this.nodes.quotelinks;
_ref = this.isClone ? this.context : this, board = _ref.board, thread = _ref.thread;
for (_i = 0, _len = quotelinks.length; _i < _len; _i++) {
quote = quotelinks[_i];
if ($.hasClass(quote, 'deadlink')) {
continue;
}
path = quote.pathname.split('/');
qBoard = path[1];
qThread = path[3];
if (this.isClone && qBoard === this.board.ID && +qThread !== this.thread.ID) {
quote.textContent = quote.textContent.replace(QuoteCT.text, '');
}
if (qBoard === board.ID && +qThread !== thread.ID) {
$.add(quote, $.tn(QuoteCT.text));
}
}
}
};
Time = {
init: function() {
this.funk = this.createFunc(Conf['time']);

View File

@ -55,7 +55,7 @@ Config =
'Quote Preview': [true, 'Show quoted post on hover.']
'Quote Highlighting': [true, 'Highlight the previewed post.']
'Resurrect Quotes': [true, 'Linkify dead quotes to archives.']
'Indicate OP quote': [true, 'Add \'(OP)\' to OP quotes.']
'Indicate OP Quotes': [true, 'Add \'(OP)\' to OP quotes.']
'Indicate Cross-thread Quotes': [true, 'Add \'(Cross-thread)\' to cross-threads quotes.']
filter:
name: [
@ -769,6 +769,20 @@ Main =
# XXX handle error
$.log err, 'Quote Backlinks'
if Conf['Indicate OP Quotes']
try
QuoteOP.init()
catch err
# XXX handle error
$.log err, 'Indicate OP Quotes'
if Conf['Indicate Cross-thread Quotes']
try
QuoteCT.init()
catch err
# XXX handle error
$.log err, 'Indicate Cross-thread Quotes'
if Conf['Time Formatting']
try
Time.init()
@ -1263,7 +1277,7 @@ Get =
board = g.boards[board] or
new Board board
thread = g.threads["#{board}.#{threadID}"] or
new Thread threadID, inBoard
new Thread threadID, board
post = new Post pc, thread, board
Main.callbackNodes Post, [post]
Get.insert post, root, context
@ -1467,7 +1481,7 @@ QuoteInline =
quotelink.parentNode.parentNode
else
$.x 'ancestor-or-self::*[parent::blockquote][1]', quotelink
context = Get.postFromRoot $.x 'ancestor::div[contains(@class,"postContainer")][1]', @
context = Get.postFromRoot $.x 'ancestor::div[contains(@class,"postContainer")][1]', quotelink
$.after root, inline
Get.postClone board, threadID, postID, inline, context
@ -1658,6 +1672,60 @@ QuoteBacklink =
@containers[id] or=
$.el 'span', className: 'container'
QuoteOP =
init: ->
# \u00A0 is nbsp
@text = '\u00A0(OP)'
Post::callbacks.push
name: 'Indicate OP Quotes'
cb: @node
node: ->
# Stop there if it's a clone of a post in the same thread.
return if @isClone and @thread is @context.thread
# Stop there if there's no quotes in that post.
return unless (quotes = @quotes).length
quotelinks = @nodes.quotelinks
# rm (OP) from cross-thread quotes.
if @isClone and -1 < quotes.indexOf "#{@board}.#{@thread}"
for quote in quotelinks
quote.textContent = quote.textContent.replace QuoteOP.text, ''
{board, thread} = if @isClone then @context else @
op = "#{board}.#{thread}"
# add (OP) to quotes quoting this context's OP.
return unless -1 < quotes.indexOf op
for quote in quotelinks
if "#{quote.pathname.split('/')[1]}.#{quote.hash[2..]}" is op
$.add quote, $.tn QuoteOP.text
return
QuoteCT =
init: ->
# \u00A0 is nbsp
@text = '\u00A0(Cross-thread)'
Post::callbacks.push
name: 'Indicate Cross-thread Quotes'
cb: @node
node: ->
# Stop there if it's a clone of a post in the same thread.
return if @isClone and @thread is @context.thread
# Stop there if there's no quotes in that post.
return unless (quotes = @quotes).length
quotelinks = @nodes.quotelinks
{board, thread} = if @isClone then @context else @
for quote in quotelinks
continue if $.hasClass quote, 'deadlink'
path = quote.pathname.split '/'
qBoard = path[1]
qThread = path[3]
if @isClone and qBoard is @board.ID and +qThread isnt @thread.ID
quote.textContent = quote.textContent.replace QuoteCT.text, ''
if qBoard is board.ID and +qThread isnt thread.ID
$.add quote, $.tn QuoteCT.text
return
Time =
init: ->
@funk = @createFunc Conf['time']