Release 4chan X v1.11.29.0.

This commit is contained in:
ccd0 2016-03-31 04:05:04 -07:00
parent 8d2d4b056b
commit 584b40f58a
13 changed files with 297 additions and 21 deletions

View File

@ -2,6 +2,12 @@
Sometimes the changelog has notes (not comprehensive) acknowledging people's work. This does not mean the changes are their fault, only that their code was used. All changes to the script are chosen by and the fault of the maintainer (ccd0).
### v1.11.29
**v1.11.29.0** *(2016-03-31)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.29.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.29.0/builds/4chan-X-noupdate.crx "Chromium version")]
- Based on v1.11.28.3.
- Add upvote count and button.
### v1.11.28
**v1.11.28.3** *(2016-03-27)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.28.3/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.28.3/builds/4chan-X-noupdate.crx "Chromium version")]

Binary file not shown.

View File

@ -1,6 +1,6 @@
// ==UserScript==
// @name 4chan X beta
// @version 1.11.28.3
// @version 1.11.29.0
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X

View File

@ -1,7 +1,7 @@
// Generated by CoffeeScript
// ==UserScript==
// @name 4chan X beta
// @version 1.11.28.3
// @version 1.11.29.0
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@ -119,7 +119,7 @@
'use strict';
(function() {
var $, $$, Anonymize, AntiAutoplay, ArchiveLink, Banner, Board, Build, Callbacks, Captcha, CatalogLinks, CatalogThread, Clone, Conf, Config, Connection, CrossOrigin, CustomCSS, DataBoard, DeleteLink, DownloadLink, E, Embedding, ExpandComment, ExpandThread, FappeTyme, Favicon, Fetcher, FileInfo, Filter, Flash, Fourchan, Gallery, Get, Header, IDColor, IDHighlight, ImageCommon, ImageExpand, ImageHover, ImageLoader, Index, Keybinds, Linkify, Main, MarkNewIPs, Menu, Metadata, Nav, NormalizeURL, Notice, PSAHiding, PassLink, Polyfill, Post, PostHiding, PostSuccessful, PruneReplies, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, ShimSet, SimpleDict, Thread, ThreadExcerpt, ThreadHiding, ThreadLinks, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, Volume, c, d, doc, g,
var $, $$, Anonymize, AntiAutoplay, ArchiveLink, Banner, Board, Build, Callbacks, Captcha, CatalogLinks, CatalogThread, Clone, Conf, Config, Connection, CrossOrigin, CustomCSS, DataBoard, DeleteLink, DownloadLink, E, Embedding, ExpandComment, ExpandThread, FappeTyme, Favicon, Fetcher, FileInfo, Filter, Flash, Fourchan, Gallery, Get, Header, IDColor, IDHighlight, ImageCommon, ImageExpand, ImageHover, ImageLoader, Index, Keybinds, Linkify, Main, MarkNewIPs, Menu, Metadata, Nav, NormalizeURL, Notice, PSAHiding, PassLink, Polyfill, Post, PostHiding, PostSuccessful, PruneReplies, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, ShimSet, SimpleDict, Thread, ThreadExcerpt, ThreadHiding, ThreadLinks, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, Upvotes, Volume, c, d, doc, g,
slice = [].slice,
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; },
extend = 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; },
@ -270,7 +270,8 @@
'Highlight Own Posts': [true, 'Highlights own posts.', 1],
'Mark OP Quotes': [true, 'Add \'(OP)\' to OP quotes.'],
'Mark Cross-thread Quotes': [true, 'Add \'(Cross-thread)\' to cross-threads quotes.'],
'Quote Threading': [false, 'Thread conversations']
'Quote Threading': [false, 'Thread conversations'],
'Upvotes': [true, 'Upvote posts.']
}
},
imageExpansion: {
@ -443,7 +444,7 @@
doc = d.documentElement;
g = {
VERSION: '1.11.28.3',
VERSION: '1.11.29.0',
NAMESPACE: '4chan X.',
boards: {}
};
@ -7112,6 +7113,88 @@
}
};
Upvotes = {
count: {},
text: '\u305D\u3046\u3060\u306D',
regexp: /(?:^>.*\n)+(?:i|top|holy|shit|ay*|oh?|omg|god|jesus|christ|fuck|fukken|fucking?|\s|[.,-])*(?:\u305D\u3046\u3060\u306D|this(?! )|\+1|upvote(?! )d?|under[ -]?rated|\/thread|10\/10|(?:lol|kek|lel|lmao)(?:'?d|[.!]?$)|(?:ha)+[.!]?$|saved|nice(?! )|my sides)(?=\b|\W|$)/gmi,
init: function() {
var ref;
if (!(((ref = g.VIEW) === 'thread' || ref === 'index') && Conf['Upvotes'])) {
return;
}
this.textPosted = g.BOARD.ID === 'r9k' ? 'This.' : this.text;
return Post.callbacks.push({
name: 'Upvotes',
cb: this.node
});
},
node: function() {
var a, context, k, len1, len2, q, quote, quotes, ref, ref1, ref2, results;
if (this.isFetchedQuote || ((ref = this.origin) != null ? ref.isFetchedQuote : void 0)) {
return;
}
if (this.isClone) {
this.nodes.vote = $('.upvote', this.nodes.info);
$.on(this.nodes.vote, 'click', Upvotes.vote);
return;
}
a = $.el('a', {
className: 'upvote',
href: 'javascript:;',
textContent: '+'
});
$.add(this.nodes.info, a);
this.nodes.vote = a;
$.on(a, 'click', Upvotes.vote);
if (g.VIEW !== 'thread') {
return;
}
Upvotes.count[this.fullID] = 0;
quotes = {};
ref1 = this.info.comment.match(Upvotes.regexp) || [];
for (k = 0, len1 = ref1.length; k < len1; k++) {
context = ref1[k];
ref2 = context.match(/>>\d+/g) || [];
for (q = 0, len2 = ref2.length; q < len2; q++) {
quote = ref2[q];
quotes[quote.slice(2)] = true;
}
}
results = [];
for (quote in quotes) {
results.push(Upvotes.increment(g.BOARD + "." + quote));
}
return results;
},
increment: function(fullID) {
var count, k, len1, post, ref;
if (!(fullID in Upvotes.count)) {
return;
}
count = ++Upvotes.count[fullID];
post = g.posts[fullID];
ref = [post].concat(slice.call(post.clones));
for (k = 0, len1 = ref.length; k < len1; k++) {
post = ref[k];
post.nodes.vote.textContent = Upvotes.text + "x" + count;
}
},
vote: function() {
var com, pos, text;
if (!QR.postingIsEnabled) {
return;
}
QR.quote.call(this);
com = QR.nodes.com;
text = Upvotes.textPosted + "\n";
pos = com.selectionStart;
com.value = com.value.slice(0, +pos + 1 || 9e9) + text + com.value.slice(pos);
pos += text.length;
com.setSelectionRange(pos, pos);
return $.event('input', null, com);
}
};
QR = {
mimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/vnd.adobe.flash.movie', 'application/x-shockwave-flash', 'video/webm'],
validExtension: /\.(jpe?g|png|gif|pdf|swf|webm)$/i,
@ -21304,6 +21387,13 @@
":root.gallery-open.fixed #header-bar:not(.autohide) #shortcuts .fa::before {\n" +
" visibility: hidden;\n" +
"}\n" +
"/* Upvotes */\n" +
".upvote {\n" +
" margin: 0 4px;\n" +
"}\n" +
".post .menu-button:not(:last-of-type) {\n" +
" margin-right: -4px;\n" +
"}\n" +
"/* General */\n" +
":root.yotsuba .dialog {\n" +
" background-color: #F0E0D6;\n" +
@ -21820,7 +21910,7 @@
cssWWW: "#captcha-cnt {\n" +
" height: auto;\n" +
"}",
features: [['Polyfill', Polyfill], ['Normalize URL', NormalizeURL], ['Captcha Configuration', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Thread Links', ThreadLinks], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Cooldown', QR.cooldown], ['Pass Link', PassLink], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Edit Link', QR.oekaki.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash], ['Prune Replies', PruneReplies]]
features: [['Polyfill', Polyfill], ['Normalize URL', NormalizeURL], ['Captcha Configuration', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Thread Links', ThreadLinks], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Cooldown', QR.cooldown], ['Pass Link', PassLink], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Edit Link', QR.oekaki.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Upvotes', Upvotes], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash], ['Prune Replies', PruneReplies]]
};
Main.init();

Binary file not shown.

View File

@ -1,7 +1,7 @@
// Generated by CoffeeScript
// ==UserScript==
// @name 4chan X
// @version 1.11.28.3
// @version 1.11.29.0
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@ -119,7 +119,7 @@
'use strict';
(function() {
var $, $$, Anonymize, AntiAutoplay, ArchiveLink, Banner, Board, Build, Callbacks, Captcha, CatalogLinks, CatalogThread, Clone, Conf, Config, Connection, CrossOrigin, CustomCSS, DataBoard, DeleteLink, DownloadLink, E, Embedding, ExpandComment, ExpandThread, FappeTyme, Favicon, Fetcher, FileInfo, Filter, Flash, Fourchan, Gallery, Get, Header, IDColor, IDHighlight, ImageCommon, ImageExpand, ImageHover, ImageLoader, Index, Keybinds, Linkify, Main, MarkNewIPs, Menu, Metadata, Nav, NormalizeURL, Notice, PSAHiding, PassLink, Polyfill, Post, PostHiding, PostSuccessful, PruneReplies, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, ShimSet, SimpleDict, Thread, ThreadExcerpt, ThreadHiding, ThreadLinks, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, Volume, c, d, doc, g,
var $, $$, Anonymize, AntiAutoplay, ArchiveLink, Banner, Board, Build, Callbacks, Captcha, CatalogLinks, CatalogThread, Clone, Conf, Config, Connection, CrossOrigin, CustomCSS, DataBoard, DeleteLink, DownloadLink, E, Embedding, ExpandComment, ExpandThread, FappeTyme, Favicon, Fetcher, FileInfo, Filter, Flash, Fourchan, Gallery, Get, Header, IDColor, IDHighlight, ImageCommon, ImageExpand, ImageHover, ImageLoader, Index, Keybinds, Linkify, Main, MarkNewIPs, Menu, Metadata, Nav, NormalizeURL, Notice, PSAHiding, PassLink, Polyfill, Post, PostHiding, PostSuccessful, PruneReplies, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, ShimSet, SimpleDict, Thread, ThreadExcerpt, ThreadHiding, ThreadLinks, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, Upvotes, Volume, c, d, doc, g,
slice = [].slice,
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; },
extend = 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; },
@ -270,7 +270,8 @@
'Highlight Own Posts': [true, 'Highlights own posts.', 1],
'Mark OP Quotes': [true, 'Add \'(OP)\' to OP quotes.'],
'Mark Cross-thread Quotes': [true, 'Add \'(Cross-thread)\' to cross-threads quotes.'],
'Quote Threading': [false, 'Thread conversations']
'Quote Threading': [false, 'Thread conversations'],
'Upvotes': [true, 'Upvote posts.']
}
},
imageExpansion: {
@ -443,7 +444,7 @@
doc = d.documentElement;
g = {
VERSION: '1.11.28.3',
VERSION: '1.11.29.0',
NAMESPACE: '4chan X.',
boards: {}
};
@ -7112,6 +7113,88 @@
}
};
Upvotes = {
count: {},
text: '\u305D\u3046\u3060\u306D',
regexp: /(?:^>.*\n)+(?:i|top|holy|shit|ay*|oh?|omg|god|jesus|christ|fuck|fukken|fucking?|\s|[.,-])*(?:\u305D\u3046\u3060\u306D|this(?! )|\+1|upvote(?! )d?|under[ -]?rated|\/thread|10\/10|(?:lol|kek|lel|lmao)(?:'?d|[.!]?$)|(?:ha)+[.!]?$|saved|nice(?! )|my sides)(?=\b|\W|$)/gmi,
init: function() {
var ref;
if (!(((ref = g.VIEW) === 'thread' || ref === 'index') && Conf['Upvotes'])) {
return;
}
this.textPosted = g.BOARD.ID === 'r9k' ? 'This.' : this.text;
return Post.callbacks.push({
name: 'Upvotes',
cb: this.node
});
},
node: function() {
var a, context, k, len1, len2, q, quote, quotes, ref, ref1, ref2, results;
if (this.isFetchedQuote || ((ref = this.origin) != null ? ref.isFetchedQuote : void 0)) {
return;
}
if (this.isClone) {
this.nodes.vote = $('.upvote', this.nodes.info);
$.on(this.nodes.vote, 'click', Upvotes.vote);
return;
}
a = $.el('a', {
className: 'upvote',
href: 'javascript:;',
textContent: '+'
});
$.add(this.nodes.info, a);
this.nodes.vote = a;
$.on(a, 'click', Upvotes.vote);
if (g.VIEW !== 'thread') {
return;
}
Upvotes.count[this.fullID] = 0;
quotes = {};
ref1 = this.info.comment.match(Upvotes.regexp) || [];
for (k = 0, len1 = ref1.length; k < len1; k++) {
context = ref1[k];
ref2 = context.match(/>>\d+/g) || [];
for (q = 0, len2 = ref2.length; q < len2; q++) {
quote = ref2[q];
quotes[quote.slice(2)] = true;
}
}
results = [];
for (quote in quotes) {
results.push(Upvotes.increment(g.BOARD + "." + quote));
}
return results;
},
increment: function(fullID) {
var count, k, len1, post, ref;
if (!(fullID in Upvotes.count)) {
return;
}
count = ++Upvotes.count[fullID];
post = g.posts[fullID];
ref = [post].concat(slice.call(post.clones));
for (k = 0, len1 = ref.length; k < len1; k++) {
post = ref[k];
post.nodes.vote.textContent = Upvotes.text + "x" + count;
}
},
vote: function() {
var com, pos, text;
if (!QR.postingIsEnabled) {
return;
}
QR.quote.call(this);
com = QR.nodes.com;
text = Upvotes.textPosted + "\n";
pos = com.selectionStart;
com.value = com.value.slice(0, +pos + 1 || 9e9) + text + com.value.slice(pos);
pos += text.length;
com.setSelectionRange(pos, pos);
return $.event('input', null, com);
}
};
QR = {
mimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/vnd.adobe.flash.movie', 'application/x-shockwave-flash', 'video/webm'],
validExtension: /\.(jpe?g|png|gif|pdf|swf|webm)$/i,
@ -21304,6 +21387,13 @@
":root.gallery-open.fixed #header-bar:not(.autohide) #shortcuts .fa::before {\n" +
" visibility: hidden;\n" +
"}\n" +
"/* Upvotes */\n" +
".upvote {\n" +
" margin: 0 4px;\n" +
"}\n" +
".post .menu-button:not(:last-of-type) {\n" +
" margin-right: -4px;\n" +
"}\n" +
"/* General */\n" +
":root.yotsuba .dialog {\n" +
" background-color: #F0E0D6;\n" +
@ -21820,7 +21910,7 @@
cssWWW: "#captcha-cnt {\n" +
" height: auto;\n" +
"}",
features: [['Polyfill', Polyfill], ['Normalize URL', NormalizeURL], ['Captcha Configuration', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Thread Links', ThreadLinks], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Cooldown', QR.cooldown], ['Pass Link', PassLink], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Edit Link', QR.oekaki.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash], ['Prune Replies', PruneReplies]]
features: [['Polyfill', Polyfill], ['Normalize URL', NormalizeURL], ['Captcha Configuration', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Thread Links', ThreadLinks], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Cooldown', QR.cooldown], ['Pass Link', PassLink], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Edit Link', QR.oekaki.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Upvotes', Upvotes], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash], ['Prune Replies', PruneReplies]]
};
Main.init();

Binary file not shown.

View File

@ -1,6 +1,6 @@
// ==UserScript==
// @name 4chan X
// @version 1.11.28.3
// @version 1.11.29.0
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X

View File

@ -1,7 +1,7 @@
// Generated by CoffeeScript
// ==UserScript==
// @name 4chan X
// @version 1.11.28.3
// @version 1.11.29.0
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@ -119,7 +119,7 @@
'use strict';
(function() {
var $, $$, Anonymize, AntiAutoplay, ArchiveLink, Banner, Board, Build, Callbacks, Captcha, CatalogLinks, CatalogThread, Clone, Conf, Config, Connection, CrossOrigin, CustomCSS, DataBoard, DeleteLink, DownloadLink, E, Embedding, ExpandComment, ExpandThread, FappeTyme, Favicon, Fetcher, FileInfo, Filter, Flash, Fourchan, Gallery, Get, Header, IDColor, IDHighlight, ImageCommon, ImageExpand, ImageHover, ImageLoader, Index, Keybinds, Linkify, Main, MarkNewIPs, Menu, Metadata, Nav, NormalizeURL, Notice, PSAHiding, PassLink, Polyfill, Post, PostHiding, PostSuccessful, PruneReplies, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, ShimSet, SimpleDict, Thread, ThreadExcerpt, ThreadHiding, ThreadLinks, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, Volume, c, d, doc, g,
var $, $$, Anonymize, AntiAutoplay, ArchiveLink, Banner, Board, Build, Callbacks, Captcha, CatalogLinks, CatalogThread, Clone, Conf, Config, Connection, CrossOrigin, CustomCSS, DataBoard, DeleteLink, DownloadLink, E, Embedding, ExpandComment, ExpandThread, FappeTyme, Favicon, Fetcher, FileInfo, Filter, Flash, Fourchan, Gallery, Get, Header, IDColor, IDHighlight, ImageCommon, ImageExpand, ImageHover, ImageLoader, Index, Keybinds, Linkify, Main, MarkNewIPs, Menu, Metadata, Nav, NormalizeURL, Notice, PSAHiding, PassLink, Polyfill, Post, PostHiding, PostSuccessful, PruneReplies, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, RandomAccessList, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, ShimSet, SimpleDict, Thread, ThreadExcerpt, ThreadHiding, ThreadLinks, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, Upvotes, Volume, c, d, doc, g,
slice = [].slice,
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; },
extend = 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; },
@ -270,7 +270,8 @@
'Highlight Own Posts': [true, 'Highlights own posts.', 1],
'Mark OP Quotes': [true, 'Add \'(OP)\' to OP quotes.'],
'Mark Cross-thread Quotes': [true, 'Add \'(Cross-thread)\' to cross-threads quotes.'],
'Quote Threading': [false, 'Thread conversations']
'Quote Threading': [false, 'Thread conversations'],
'Upvotes': [true, 'Upvote posts.']
}
},
imageExpansion: {
@ -443,7 +444,7 @@
doc = d.documentElement;
g = {
VERSION: '1.11.28.3',
VERSION: '1.11.29.0',
NAMESPACE: '4chan X.',
boards: {}
};
@ -7112,6 +7113,88 @@
}
};
Upvotes = {
count: {},
text: '\u305D\u3046\u3060\u306D',
regexp: /(?:^>.*\n)+(?:i|top|holy|shit|ay*|oh?|omg|god|jesus|christ|fuck|fukken|fucking?|\s|[.,-])*(?:\u305D\u3046\u3060\u306D|this(?! )|\+1|upvote(?! )d?|under[ -]?rated|\/thread|10\/10|(?:lol|kek|lel|lmao)(?:'?d|[.!]?$)|(?:ha)+[.!]?$|saved|nice(?! )|my sides)(?=\b|\W|$)/gmi,
init: function() {
var ref;
if (!(((ref = g.VIEW) === 'thread' || ref === 'index') && Conf['Upvotes'])) {
return;
}
this.textPosted = g.BOARD.ID === 'r9k' ? 'This.' : this.text;
return Post.callbacks.push({
name: 'Upvotes',
cb: this.node
});
},
node: function() {
var a, context, k, len1, len2, q, quote, quotes, ref, ref1, ref2, results;
if (this.isFetchedQuote || ((ref = this.origin) != null ? ref.isFetchedQuote : void 0)) {
return;
}
if (this.isClone) {
this.nodes.vote = $('.upvote', this.nodes.info);
$.on(this.nodes.vote, 'click', Upvotes.vote);
return;
}
a = $.el('a', {
className: 'upvote',
href: 'javascript:;',
textContent: '+'
});
$.add(this.nodes.info, a);
this.nodes.vote = a;
$.on(a, 'click', Upvotes.vote);
if (g.VIEW !== 'thread') {
return;
}
Upvotes.count[this.fullID] = 0;
quotes = {};
ref1 = this.info.comment.match(Upvotes.regexp) || [];
for (k = 0, len1 = ref1.length; k < len1; k++) {
context = ref1[k];
ref2 = context.match(/>>\d+/g) || [];
for (q = 0, len2 = ref2.length; q < len2; q++) {
quote = ref2[q];
quotes[quote.slice(2)] = true;
}
}
results = [];
for (quote in quotes) {
results.push(Upvotes.increment(g.BOARD + "." + quote));
}
return results;
},
increment: function(fullID) {
var count, k, len1, post, ref;
if (!(fullID in Upvotes.count)) {
return;
}
count = ++Upvotes.count[fullID];
post = g.posts[fullID];
ref = [post].concat(slice.call(post.clones));
for (k = 0, len1 = ref.length; k < len1; k++) {
post = ref[k];
post.nodes.vote.textContent = Upvotes.text + "x" + count;
}
},
vote: function() {
var com, pos, text;
if (!QR.postingIsEnabled) {
return;
}
QR.quote.call(this);
com = QR.nodes.com;
text = Upvotes.textPosted + "\n";
pos = com.selectionStart;
com.value = com.value.slice(0, +pos + 1 || 9e9) + text + com.value.slice(pos);
pos += text.length;
com.setSelectionRange(pos, pos);
return $.event('input', null, com);
}
};
QR = {
mimeTypes: ['image/jpeg', 'image/png', 'image/gif', 'application/pdf', 'application/vnd.adobe.flash.movie', 'application/x-shockwave-flash', 'video/webm'],
validExtension: /\.(jpe?g|png|gif|pdf|swf|webm)$/i,
@ -21304,6 +21387,13 @@
":root.gallery-open.fixed #header-bar:not(.autohide) #shortcuts .fa::before {\n" +
" visibility: hidden;\n" +
"}\n" +
"/* Upvotes */\n" +
".upvote {\n" +
" margin: 0 4px;\n" +
"}\n" +
".post .menu-button:not(:last-of-type) {\n" +
" margin-right: -4px;\n" +
"}\n" +
"/* General */\n" +
":root.yotsuba .dialog {\n" +
" background-color: #F0E0D6;\n" +
@ -21820,7 +21910,7 @@
cssWWW: "#captcha-cnt {\n" +
" height: auto;\n" +
"}",
features: [['Polyfill', Polyfill], ['Normalize URL', NormalizeURL], ['Captcha Configuration', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Thread Links', ThreadLinks], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Cooldown', QR.cooldown], ['Pass Link', PassLink], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Edit Link', QR.oekaki.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash], ['Prune Replies', PruneReplies]]
features: [['Polyfill', Polyfill], ['Normalize URL', NormalizeURL], ['Captcha Configuration', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Thread Links', ThreadLinks], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Cooldown', QR.cooldown], ['Pass Link', PassLink], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Edit Link', QR.oekaki.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Upvotes', Upvotes], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash], ['Prune Replies', PruneReplies]]
};
Main.init();

Binary file not shown.

View File

@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X-beta.crx' version='1.11.28.3' />
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X-beta.crx' version='1.11.29.0' />
</app>
</gupdate>

View File

@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X.crx' version='1.11.28.3' />
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X.crx' version='1.11.29.0' />
</app>
</gupdate>

View File

@ -1,4 +1,4 @@
{
"version": "1.11.28.3",
"date": "2016-03-27T23:59:43.063Z"
"version": "1.11.29.0",
"date": "2016-03-31T11:03:12.056Z"
}