Add Thread Excerpt.

This commit is contained in:
Nicolas Stepien 2013-02-16 16:42:15 +01:00
parent a042751724
commit 03fdfa8c68
4 changed files with 43 additions and 3 deletions

View File

@ -43,7 +43,7 @@
*/ */
(function() { (function() {
var $, $$, Anonymize, ArchiveLink, AutoGIF, Board, Build, Clone, Conf, Config, DeleteLink, DownloadLink, FileInfo, Filter, Get, Header, ImageExpand, ImageHover, Main, Menu, Notification, Polyfill, Post, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, Quotify, Recursive, Redirect, RelativeDates, ReplyHiding, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadHiding, ThreadStats, ThreadUpdater, Time, UI, d, doc, g, var $, $$, Anonymize, ArchiveLink, AutoGIF, Board, Build, Clone, Conf, Config, DeleteLink, DownloadLink, FileInfo, Filter, Get, Header, ImageExpand, ImageHover, Main, Menu, Notification, Polyfill, Post, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, Quotify, Recursive, Redirect, RelativeDates, ReplyHiding, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, Time, UI, 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; }, __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, __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; }; __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; };
@ -90,7 +90,7 @@
'Thread Updater': [true, 'Fetch and insert new replies. Has more options in its own dialog.'], 'Thread Updater': [true, 'Fetch and insert new replies. Has more options in its own dialog.'],
'Unread Count': [true, 'Show the unread posts count in the tab title.'], 'Unread Count': [true, 'Show the unread posts count in the tab title.'],
'Unread Favicon': [true, 'Show a different favicon when there are unread posts.'], 'Unread Favicon': [true, 'Show a different favicon when there are unread posts.'],
'Post in Title': [true, 'Show the thread\'s subject in the tab title.'], 'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title.'],
'Thread Stats': [true, 'Display reply and image count.'], 'Thread Stats': [true, 'Display reply and image count.'],
'Thread Watcher': [true, 'Bookmark threads.'], 'Thread Watcher': [true, 'Bookmark threads.'],
'Auto Watch': [true, 'Automatically watch threads that you start.'], 'Auto Watch': [true, 'Automatically watch threads that you start.'],
@ -2533,6 +2533,12 @@
}; };
Get = { Get = {
threadExcerpt: function(thread) {
var excerpt, op, _ref;
op = thread.posts[thread];
excerpt = ((_ref = op.info.subject) != null ? _ref.trim() : void 0) || op.info.comment.replace(/\n+/g, ' // ') || Conf['Anonymize'] && 'Anonymous' || $('.nameBlock', op.nodes.info).textContent.trim();
return "/" + thread.board + "/ - " + excerpt;
},
postFromRoot: function(root) { postFromRoot: function(root) {
var board, index, link, post, postID; var board, index, link, post, postID;
link = $('a[title="Highlight this post"]', root); link = $('a[title="Highlight this post"]', root);
@ -3886,6 +3892,21 @@
} }
}; };
ThreadExcerpt = {
init: function() {
if (g.VIEW !== 'thread' || !Conf['Thread Excerpt']) {
return;
}
return Thread.prototype.callbacks.push({
name: 'Thread Excerpt',
cb: this.node
});
},
node: function() {
return d.title = Get.threadExcerpt(this);
}
};
ThreadStats = { ThreadStats = {
init: function() { init: function() {
if (g.VIEW !== 'thread' || !Conf['Thread Stats']) { if (g.VIEW !== 'thread' || !Conf['Thread Stats']) {
@ -5596,6 +5617,7 @@
initFeature('Reveal Spoilers', RevealSpoilers); initFeature('Reveal Spoilers', RevealSpoilers);
initFeature('Auto-GIF', AutoGIF); initFeature('Auto-GIF', AutoGIF);
initFeature('Image Hover', ImageHover); initFeature('Image Hover', ImageHover);
initFeature('Thread Excerpt', ThreadExcerpt);
initFeature('Thread Stats', ThreadStats); initFeature('Thread Stats', ThreadStats);
initFeature('Thread Updater', ThreadUpdater); initFeature('Thread Updater', ThreadUpdater);
console.timeEnd('All initializations'); console.timeEnd('All initializations');

View File

@ -36,7 +36,7 @@ Config =
'Thread Updater': [true, 'Fetch and insert new replies. Has more options in its own dialog.'] 'Thread Updater': [true, 'Fetch and insert new replies. Has more options in its own dialog.']
'Unread Count': [true, 'Show the unread posts count in the tab title.'] 'Unread Count': [true, 'Show the unread posts count in the tab title.']
'Unread Favicon': [true, 'Show a different favicon when there are unread posts.'] 'Unread Favicon': [true, 'Show a different favicon when there are unread posts.']
'Post in Title': [true, 'Show the thread\'s subject in the tab title.'] 'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title.']
'Thread Stats': [true, 'Display reply and image count.'] 'Thread Stats': [true, 'Display reply and image count.']
'Thread Watcher': [true, 'Bookmark threads.'] 'Thread Watcher': [true, 'Bookmark threads.']
'Auto Watch': [true, 'Automatically watch threads that you start.'] 'Auto Watch': [true, 'Automatically watch threads that you start.']

View File

@ -1366,6 +1366,13 @@ Build =
container container
Get = Get =
threadExcerpt: (thread) ->
op = thread.posts[thread]
excerpt = op.info.subject?.trim() or
op.info.comment.replace(/\n+/g, ' // ') or
Conf['Anonymize'] and 'Anonymous' or
$('.nameBlock', op.nodes.info).textContent.trim()
"/#{thread.board}/ - #{excerpt}"
postFromRoot: (root) -> postFromRoot: (root) ->
link = $ 'a[title="Highlight this post"]', root link = $ 'a[title="Highlight this post"]', root
board = link.pathname.split('/')[1] board = link.pathname.split('/')[1]
@ -2413,6 +2420,16 @@ ImageHover =
$.ajax URL, onreadystatechange: (-> clearTimeout timeoutID if @status is 404), $.ajax URL, onreadystatechange: (-> clearTimeout timeoutID if @status is 404),
type: 'head' type: 'head'
ThreadExcerpt =
init: ->
return if g.VIEW isnt 'thread' or !Conf['Thread Excerpt']
Thread::callbacks.push
name: 'Thread Excerpt'
cb: @node
node: ->
d.title = Get.threadExcerpt @
ThreadStats = ThreadStats =
init: -> init: ->
return if g.VIEW isnt 'thread' or !Conf['Thread Stats'] return if g.VIEW isnt 'thread' or !Conf['Thread Stats']

View File

@ -333,6 +333,7 @@ Main =
initFeature 'Reveal Spoilers', RevealSpoilers initFeature 'Reveal Spoilers', RevealSpoilers
initFeature 'Auto-GIF', AutoGIF initFeature 'Auto-GIF', AutoGIF
initFeature 'Image Hover', ImageHover initFeature 'Image Hover', ImageHover
initFeature 'Thread Excerpt', ThreadExcerpt
initFeature 'Thread Stats', ThreadStats initFeature 'Thread Stats', ThreadStats
initFeature 'Thread Updater', ThreadUpdater initFeature 'Thread Updater', ThreadUpdater
console.timeEnd 'All initializations' console.timeEnd 'All initializations'