Add (You). Close #920.

This commit is contained in:
Nicolas Stepien 2013-02-23 17:07:40 +01:00
parent ce5e03fa81
commit 0c220617d9
5 changed files with 89 additions and 30 deletions

View File

@ -43,7 +43,7 @@
*/
(function() {
var $, $$, Anonymize, ArchiveLink, AutoGIF, Board, Build, Clone, Conf, Config, DeleteLink, DownloadLink, ExpandComment, ExpandThread, Favicon, FileInfo, Filter, Fourchan, Get, Header, ImageExpand, ImageHover, Keybinds, Main, Menu, Misc, Nav, Notification, Polyfill, Post, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, Quotify, Recursive, Redirect, RelativeDates, ReplyHiding, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, d, doc, g,
var $, $$, Anonymize, ArchiveLink, AutoGIF, Board, Build, Clone, Conf, Config, DeleteLink, DownloadLink, ExpandComment, ExpandThread, Favicon, FileInfo, Filter, Fourchan, Get, Header, ImageExpand, ImageHover, Keybinds, Main, Menu, Misc, Nav, Notification, Polyfill, Post, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, ReplyHiding, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, d, doc, g,
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
__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; };
@ -111,6 +111,7 @@
'Quote Previewing': [true, 'Show quoted post on hover.'],
'Quote Highlighting': [true, 'Highlight the previewed post.'],
'Resurrect Quotes': [true, 'Link dead quotes to the archives.'],
'Mark Quotes of You': [true, 'Add \'(You)\' to quotes linking to your posts.'],
'Mark OP Quotes': [true, 'Add \'(OP)\' to OP quotes.'],
'Mark Cross-thread Quotes': [true, 'Add \'(Cross-thread)\' to cross-threads quotes.']
}
@ -3904,6 +3905,36 @@
}
};
QuoteYou = {
init: function() {
if (g.VIEW === 'catalog' || !Conf['Mark Quotes of You'] || !Conf['Quick Reply']) {
return;
}
this.text = '\u00A0(You)';
return Post.prototype.callbacks.push({
name: 'Mark Quotes of You',
cb: this.node
});
},
node: function() {
var postID, quotelink, quotelinks, quotes, thread, threadID, _i, _len, _ref;
if (this.isClone) {
return;
}
if (!(quotes = this.quotes).length) {
return;
}
quotelinks = this.nodes.quotelinks;
for (_i = 0, _len = quotelinks.length; _i < _len; _i++) {
quotelink = quotelinks[_i];
_ref = Get.postDataFromLink(quotelink), threadID = _ref.threadID, postID = _ref.postID;
if ((thread = QR.yourPosts.threads[threadID]) && __indexOf.call(thread, postID) >= 0) {
$.add(quotelink, $.tn(QuoteYou.text));
}
}
}
};
QuoteOP = {
init: function() {
if (g.VIEW === 'catalog' || !Conf['Mark OP Quotes']) {
@ -3916,7 +3947,7 @@
});
},
node: function() {
var board, op, postID, quote, quotelinks, quotes, _i, _j, _len, _len1, _ref, _ref1;
var board, op, postID, quotelink, quotelinks, quotes, _i, _j, _len, _len1, _ref, _ref1;
if (this.isClone && this.thread === this.context.thread) {
return;
}
@ -3926,8 +3957,8 @@
quotelinks = this.nodes.quotelinks;
if (this.isClone && (_ref = this.thread.fullID, __indexOf.call(quotes, _ref) >= 0)) {
for (_i = 0, _len = quotelinks.length; _i < _len; _i++) {
quote = quotelinks[_i];
quote.textContent = quote.textContent.replace(QuoteOP.text, '');
quotelink = quotelinks[_i];
quotelink.textContent = quotelink.textContent.replace(QuoteOP.text, '');
}
}
op = (this.isClone ? this.context : this).thread.fullID;
@ -3935,10 +3966,10 @@
return;
}
for (_j = 0, _len1 = quotelinks.length; _j < _len1; _j++) {
quote = quotelinks[_j];
_ref1 = Get.postDataFromLink(quote), board = _ref1.board, postID = _ref1.postID;
quotelink = quotelinks[_j];
_ref1 = Get.postDataFromLink(quotelink), board = _ref1.board, postID = _ref1.postID;
if (("" + board + "." + postID) === op) {
$.add(quote, $.tn(QuoteOP.text));
$.add(quotelink, $.tn(QuoteOP.text));
}
}
}
@ -3956,7 +3987,7 @@
});
},
node: function() {
var board, data, quote, quotelinks, quotes, thread, _i, _len, _ref;
var board, data, quotelink, quotelinks, quotes, thread, _i, _len, _ref;
if (this.isClone && this.thread === this.context.thread) {
return;
}
@ -3966,16 +3997,16 @@
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];
data = Get.postDataFromLink(quote);
quotelink = quotelinks[_i];
data = Get.postDataFromLink(quotelink);
if (!data.threadID) {
continue;
}
if (this.isClone) {
quote.textContent = quote.textContent.replace(QuoteCT.text, '');
quotelink.textContent = quotelink.textContent.replace(QuoteCT.text, '');
}
if (data.board === this.board.ID && data.threadID !== thread.ID) {
$.add(quote, $.tn(QuoteCT.text));
$.add(quotelink, $.tn(QuoteCT.text));
}
}
}
@ -6962,6 +6993,7 @@
initFeature('Quote Inlining', QuoteInline);
initFeature('Quote Previewing', QuotePreview);
initFeature('Quote Backlinks', QuoteBacklink);
initFeature('Mark Quotes of You', QuoteYou);
initFeature('Mark OP Quotes', QuoteOP);
initFeature('Mark Cross-thread Quotes', QuoteCT);
initFeature('Anonymize', Anonymize);

View File

@ -2,13 +2,16 @@ beta
- Mayhem
Major rewrite of 4chan X.
New feature, the Header:
Access the list of boards directly from the Header.
From the Header's menu, access to:
Settings
Quick Reply shortcut
Image Expansion
Can be auto-hidden.
New features:
Header:
Access the list of boards directly from the Header.
From the Header's menu, access to:
Settings
Quick Reply shortcut
Image Expansion
Can be auto-hidden.
(You):
"(You)" will be added to quotes linking to your posts.
QR changes:
Clicking the submit button while uploading will abort the upload and won't start re-uploading automatically anymore.

View File

@ -55,6 +55,7 @@ Config =
'Quote Previewing': [true, 'Show quoted post on hover.']
'Quote Highlighting': [true, 'Highlight the previewed post.']
'Resurrect Quotes': [true, 'Link dead quotes to the archives.']
'Mark Quotes of You': [true, 'Add \'(You)\' to quotes linking to your posts.']
'Mark OP Quotes': [true, 'Add \'(OP)\' to OP quotes.']
'Mark Cross-thread Quotes': [true, 'Add \'(Cross-thread)\' to cross-threads quotes.']
imageExpansion:

View File

@ -2546,6 +2546,28 @@ QuoteBacklink =
@containers[id] or=
$.el 'span', className: 'container'
QuoteYou =
init: ->
return if g.VIEW is 'catalog' or !Conf['Mark Quotes of You'] or !Conf['Quick Reply']
# \u00A0 is nbsp
@text = '\u00A0(You)'
Post::callbacks.push
name: 'Mark Quotes of You'
cb: @node
node: ->
# Stop there if it's a clone.
return if @isClone
# Stop there if there's no quotes in that post.
return unless (quotes = @quotes).length
{quotelinks} = @nodes
for quotelink in quotelinks
{threadID, postID} = Get.postDataFromLink quotelink
if (thread = QR.yourPosts.threads[threadID]) and postID in thread
$.add quotelink, $.tn QuoteYou.text
return
QuoteOP =
init: ->
return if g.VIEW is 'catalog' or !Conf['Mark OP Quotes']
@ -2560,20 +2582,20 @@ QuoteOP =
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
{quotelinks} = @nodes
# rm (OP) from cross-thread quotes.
if @isClone and @thread.fullID in quotes
for quote in quotelinks
quote.textContent = quote.textContent.replace QuoteOP.text, ''
for quotelink in quotelinks
quotelink.textContent = quotelink.textContent.replace QuoteOP.text, ''
op = (if @isClone then @context else @).thread.fullID
# add (OP) to quotes quoting this context's OP.
return unless op in quotes
for quote in quotelinks
{board, postID} = Get.postDataFromLink quote
for quotelink in quotelinks
{board, postID} = Get.postDataFromLink quotelink
if "#{board}.#{postID}" is op
$.add quote, $.tn QuoteOP.text
$.add quotelink, $.tn QuoteOP.text
return
QuoteCT =
@ -2590,16 +2612,16 @@ QuoteCT =
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
{quotelinks} = @nodes
{board, thread} = if @isClone then @context else @
for quote in quotelinks
data = Get.postDataFromLink quote
for quotelink in quotelinks
data = Get.postDataFromLink quotelink
continue unless data.threadID # deadlink
if @isClone
quote.textContent = quote.textContent.replace QuoteCT.text, ''
quotelink.textContent = quotelink.textContent.replace QuoteCT.text, ''
if data.board is @board.ID and data.threadID isnt thread.ID
$.add quote, $.tn QuoteCT.text
$.add quotelink, $.tn QuoteCT.text
return
Anonymize =

View File

@ -330,6 +330,7 @@ Main =
initFeature 'Quote Inlining', QuoteInline
initFeature 'Quote Previewing', QuotePreview
initFeature 'Quote Backlinks', QuoteBacklink
initFeature 'Mark Quotes of You', QuoteYou
initFeature 'Mark OP Quotes', QuoteOP
initFeature 'Mark Cross-thread Quotes', QuoteCT
initFeature 'Anonymize', Anonymize