diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9a8546db6..5e54771c5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,9 @@ Sometimes the changelog has notes (not comprehensive) acknowledging people's wor
### v1.11.29
+**v1.11.29.5** *(2016-04-02)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.29.5/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.29.5/builds/4chan-X-noupdate.crx "Chromium version")]
+- Remove upvotes.
+
**v1.11.29.4** *(2016-04-01)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.29.4/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.29.4/builds/4chan-X-noupdate.crx "Chromium version")]
- Fix image expansion under current 4chan theme.
diff --git a/builds/4chan-X-beta.crx b/builds/4chan-X-beta.crx
index 369ebfe42..ead0a65e9 100644
Binary files a/builds/4chan-X-beta.crx and b/builds/4chan-X-beta.crx differ
diff --git a/builds/4chan-X-beta.meta.js b/builds/4chan-X-beta.meta.js
index 4efed5424..8d46701c6 100644
--- a/builds/4chan-X-beta.meta.js
+++ b/builds/4chan-X-beta.meta.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 4chan X beta
-// @version 1.11.29.4
+// @version 1.11.29.5
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
diff --git a/builds/4chan-X-beta.user.js b/builds/4chan-X-beta.user.js
index 87d618a4f..165e50f2b 100644
--- a/builds/4chan-X-beta.user.js
+++ b/builds/4chan-X-beta.user.js
@@ -1,7 +1,7 @@
// Generated by CoffeeScript
// ==UserScript==
// @name 4chan X beta
-// @version 1.11.29.4
+// @version 1.11.29.5
// @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, Upvotes, 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, 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,8 +270,7 @@
'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'],
- 'Upvotes': [true, 'Upvote posts.']
+ 'Quote Threading': [false, 'Thread conversations']
}
},
imageExpansion: {
@@ -432,8 +431,7 @@
pruneReplies: {
'Prune Replies': false,
'Max Replies': 1000
- },
- upvoteText: ''
+ }
};
Conf = {};
@@ -445,7 +443,7 @@
doc = d.documentElement;
g = {
- VERSION: '1.11.29.4',
+ VERSION: '1.11.29.5',
NAMESPACE: '4chan X.',
boards: {}
};
@@ -7114,103 +7112,6 @@
}
};
- 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;
- }
- 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;
- }
- if (QR.nodes) {
- $.off(QR.nodes.com, 'input', Upvotes.setText);
- }
- QR.quote.call(this);
- com = QR.nodes.com;
- text = Conf['upvoteText'] + "\n";
- pos = com.selectionStart;
- Upvotes.context = com.value.slice(0, pos);
- com.value = com.value.slice(0, pos) + text + com.value.slice(pos);
- pos += text.length;
- com.setSelectionRange(pos, pos);
- $.event('input', null, com);
- Upvotes.post = $.id('selected');
- return $.on(com, 'input', Upvotes.setText);
- },
- setText: function() {
- var context;
- context = Upvotes.context;
- if ($.id('selected') === Upvotes.post && this.value.slice(0, context.length) === context) {
- Conf['upvoteText'] = this.value.slice(context.length).split('\n')[0];
- return $.set('upvoteText', Conf['upvoteText']);
- } else {
- return $.off(this, 'input', Upvotes.setText);
- }
- }
- };
-
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,
@@ -21428,13 +21329,6 @@
":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" +
@@ -21962,6 +21856,15 @@
":root.md2016 .inline div.post {\n" +
" max-width: 100%;\n" +
"}\n" +
+":root.md2016 #unread-line {\n" +
+" display: block;\n" +
+" position: relative;\n" +
+" top: 7.5px;\n" +
+"}\n" +
+":root.md2016 .threadContainer {\n" +
+" margin-left: 26px;\n" +
+" border-left: none;\n" +
+"}\n" +
"/* XXX Moved to end of stylesheet to avoid breaking whole stylesheet in Maxthon. */\n" +
"@supports (text-decoration-style: dashed) or (-moz-text-decoration-style: dashed) {\n" +
" .quotelink.forwardlink,\n" +
@@ -21975,7 +21878,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], ['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]]
+ 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]]
};
Main.init();
diff --git a/builds/4chan-X-noupdate.crx b/builds/4chan-X-noupdate.crx
index ddad961ce..ebde9795c 100644
Binary files a/builds/4chan-X-noupdate.crx and b/builds/4chan-X-noupdate.crx differ
diff --git a/builds/4chan-X-noupdate.user.js b/builds/4chan-X-noupdate.user.js
index c84afaf17..5b17249c1 100644
--- a/builds/4chan-X-noupdate.user.js
+++ b/builds/4chan-X-noupdate.user.js
@@ -1,7 +1,7 @@
// Generated by CoffeeScript
// ==UserScript==
// @name 4chan X
-// @version 1.11.29.4
+// @version 1.11.29.5
// @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, Upvotes, 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, 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,8 +270,7 @@
'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'],
- 'Upvotes': [true, 'Upvote posts.']
+ 'Quote Threading': [false, 'Thread conversations']
}
},
imageExpansion: {
@@ -432,8 +431,7 @@
pruneReplies: {
'Prune Replies': false,
'Max Replies': 1000
- },
- upvoteText: ''
+ }
};
Conf = {};
@@ -445,7 +443,7 @@
doc = d.documentElement;
g = {
- VERSION: '1.11.29.4',
+ VERSION: '1.11.29.5',
NAMESPACE: '4chan X.',
boards: {}
};
@@ -7114,103 +7112,6 @@
}
};
- 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;
- }
- 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;
- }
- if (QR.nodes) {
- $.off(QR.nodes.com, 'input', Upvotes.setText);
- }
- QR.quote.call(this);
- com = QR.nodes.com;
- text = Conf['upvoteText'] + "\n";
- pos = com.selectionStart;
- Upvotes.context = com.value.slice(0, pos);
- com.value = com.value.slice(0, pos) + text + com.value.slice(pos);
- pos += text.length;
- com.setSelectionRange(pos, pos);
- $.event('input', null, com);
- Upvotes.post = $.id('selected');
- return $.on(com, 'input', Upvotes.setText);
- },
- setText: function() {
- var context;
- context = Upvotes.context;
- if ($.id('selected') === Upvotes.post && this.value.slice(0, context.length) === context) {
- Conf['upvoteText'] = this.value.slice(context.length).split('\n')[0];
- return $.set('upvoteText', Conf['upvoteText']);
- } else {
- return $.off(this, 'input', Upvotes.setText);
- }
- }
- };
-
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,
@@ -21428,13 +21329,6 @@
":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" +
@@ -21962,6 +21856,15 @@
":root.md2016 .inline div.post {\n" +
" max-width: 100%;\n" +
"}\n" +
+":root.md2016 #unread-line {\n" +
+" display: block;\n" +
+" position: relative;\n" +
+" top: 7.5px;\n" +
+"}\n" +
+":root.md2016 .threadContainer {\n" +
+" margin-left: 26px;\n" +
+" border-left: none;\n" +
+"}\n" +
"/* XXX Moved to end of stylesheet to avoid breaking whole stylesheet in Maxthon. */\n" +
"@supports (text-decoration-style: dashed) or (-moz-text-decoration-style: dashed) {\n" +
" .quotelink.forwardlink,\n" +
@@ -21975,7 +21878,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], ['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]]
+ 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]]
};
Main.init();
diff --git a/builds/4chan-X.crx b/builds/4chan-X.crx
index 321bc588b..faef949b4 100644
Binary files a/builds/4chan-X.crx and b/builds/4chan-X.crx differ
diff --git a/builds/4chan-X.meta.js b/builds/4chan-X.meta.js
index ae22b2c62..47c289ea9 100644
--- a/builds/4chan-X.meta.js
+++ b/builds/4chan-X.meta.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 4chan X
-// @version 1.11.29.4
+// @version 1.11.29.5
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js
index ef8c89cb6..eadd485f9 100644
--- a/builds/4chan-X.user.js
+++ b/builds/4chan-X.user.js
@@ -1,7 +1,7 @@
// Generated by CoffeeScript
// ==UserScript==
// @name 4chan X
-// @version 1.11.29.4
+// @version 1.11.29.5
// @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, Upvotes, 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, 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,8 +270,7 @@
'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'],
- 'Upvotes': [true, 'Upvote posts.']
+ 'Quote Threading': [false, 'Thread conversations']
}
},
imageExpansion: {
@@ -432,8 +431,7 @@
pruneReplies: {
'Prune Replies': false,
'Max Replies': 1000
- },
- upvoteText: ''
+ }
};
Conf = {};
@@ -445,7 +443,7 @@
doc = d.documentElement;
g = {
- VERSION: '1.11.29.4',
+ VERSION: '1.11.29.5',
NAMESPACE: '4chan X.',
boards: {}
};
@@ -7114,103 +7112,6 @@
}
};
- 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;
- }
- 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;
- }
- if (QR.nodes) {
- $.off(QR.nodes.com, 'input', Upvotes.setText);
- }
- QR.quote.call(this);
- com = QR.nodes.com;
- text = Conf['upvoteText'] + "\n";
- pos = com.selectionStart;
- Upvotes.context = com.value.slice(0, pos);
- com.value = com.value.slice(0, pos) + text + com.value.slice(pos);
- pos += text.length;
- com.setSelectionRange(pos, pos);
- $.event('input', null, com);
- Upvotes.post = $.id('selected');
- return $.on(com, 'input', Upvotes.setText);
- },
- setText: function() {
- var context;
- context = Upvotes.context;
- if ($.id('selected') === Upvotes.post && this.value.slice(0, context.length) === context) {
- Conf['upvoteText'] = this.value.slice(context.length).split('\n')[0];
- return $.set('upvoteText', Conf['upvoteText']);
- } else {
- return $.off(this, 'input', Upvotes.setText);
- }
- }
- };
-
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,
@@ -21428,13 +21329,6 @@
":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" +
@@ -21962,6 +21856,15 @@
":root.md2016 .inline div.post {\n" +
" max-width: 100%;\n" +
"}\n" +
+":root.md2016 #unread-line {\n" +
+" display: block;\n" +
+" position: relative;\n" +
+" top: 7.5px;\n" +
+"}\n" +
+":root.md2016 .threadContainer {\n" +
+" margin-left: 26px;\n" +
+" border-left: none;\n" +
+"}\n" +
"/* XXX Moved to end of stylesheet to avoid breaking whole stylesheet in Maxthon. */\n" +
"@supports (text-decoration-style: dashed) or (-moz-text-decoration-style: dashed) {\n" +
" .quotelink.forwardlink,\n" +
@@ -21975,7 +21878,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], ['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]]
+ 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]]
};
Main.init();
diff --git a/builds/4chan-X.zip b/builds/4chan-X.zip
index eb443c506..16bb1dd77 100644
Binary files a/builds/4chan-X.zip and b/builds/4chan-X.zip differ
diff --git a/builds/updates-beta.xml b/builds/updates-beta.xml
index 04404ece9..3f459d8c9 100644
--- a/builds/updates-beta.xml
+++ b/builds/updates-beta.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/builds/updates.xml b/builds/updates.xml
index 2781042ae..76d6368a1 100644
--- a/builds/updates.xml
+++ b/builds/updates.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/version.json b/version.json
index 1c1f45ebb..656bc2547 100644
--- a/version.json
+++ b/version.json
@@ -1,4 +1,4 @@
{
- "version": "1.11.29.4",
- "date": "2016-04-02T03:36:56.776Z"
+ "version": "1.11.29.5",
+ "date": "2016-04-02T09:30:52.063Z"
}