diff --git a/CHANGELOG.md b/CHANGELOG.md index 95b2c30a0..90d2eba56 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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.15 + +**v1.11.15.0** *(2015-11-01)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.15.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.15.0/builds/4chan-X-noupdate.crx "Chromium version")] +- Based on v1.11.14.12. +- Add `Open Threads in New Tab` option (off by default), which makes `[Reply]` links on threads and links in the 4chan X catalog open in a new tab. + ### v1.11.14 **v1.11.14.12** *(2015-10-31)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.14.12/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.14.12/builds/4chan-X-noupdate.crx "Chromium version")] diff --git a/builds/4chan-X-beta.crx b/builds/4chan-X-beta.crx index 977d76beb..ee5293d83 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 96dcec8fb..058d0b11a 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.14.12 +// @version 1.11.15.0 // @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 e7cfd17c7..68a8af50d 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.14.12 +// @version 1.11.15.0 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X @@ -117,7 +117,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, Notice, PSAHiding, Polyfill, Post, PostHiding, PostSuccessful, 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, 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, Notice, PSAHiding, Polyfill, Post, PostHiding, PostSuccessful, 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; }, @@ -130,6 +130,7 @@ 'JSON Navigation': [true, 'Replace the original board index with one supporting searching, sorting, infinite scrolling, and a catalog mode.'], 'Use 4chan X Catalog': [true, 'Link to 4chan X\'s catalog instead of the native 4chan one.', 1], 'Index Refresh Notifications': [false, 'Show a notice at the top of the page when the index is refreshed.', 1], + 'Open Threads in New Tab': [false, 'Make links to threads in the index / 4chan X catalog open in a new tab.'], 'External Catalog': [false, 'Link to external catalog instead of the internal one.'], 'Catalog Links': [false, 'Add toggle link in header menu to turn Navigation links into links to each board\'s catalog.'], 'Announcement Hiding': [true, 'Add button to hide 4chan announcements.'], @@ -414,7 +415,7 @@ doc = d.documentElement; g = { - VERSION: '1.11.14.12', + VERSION: '1.11.15.0', NAMESPACE: '4chan X.', boards: {} }; @@ -2243,9 +2244,9 @@ } this.root.textContent = "Loading post No." + this.postID + "..."; if (this.threadID) { - $.cache("//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json", (function(self) { - return function() { - return self.fetchedPost(this); + $.cache("//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json", (function(_this) { + return function(e) { + return _this.fetchedPost(e.target); }; })(this)); } else { @@ -2297,9 +2298,9 @@ $.cleanCache(function(url) { return url === api; }); - $.cache(api, (function(self) { - return function() { - return self.fetchedPost(this); + $.cache(api, (function(_this) { + return function(e) { + return _this.fetchedPost(e.target); }; })(this)); return; @@ -2320,7 +2321,7 @@ }; Fetcher.prototype.archivedPost = function() { - var url; + var archive, url; if (!Conf['Resurrect Quotes']) { return false; } @@ -2330,17 +2331,18 @@ }))) { return false; } + archive = Redirect.data.post[this.boardID]; if (/^https:\/\//.test(url) || location.protocol === 'http:') { - $.cache(url, (function(self) { - return function() { - return self.parseArchivedPost(this.response, url); + $.cache(url, (function(_this) { + return function(e) { + return _this.parseArchivedPost(e.target.response, url); }; })(this), { responseType: 'json', - withCredentials: url.archive.withCredentials + withCredentials: archive.withCredentials }); return true; - } else if (Conf['Except Archives from Encryption']) { + } else if (Conf['Exempt Archives from Encryption']) { CrossOrigin.json(url, (function(_this) { return function(response) { var key, media, ref; @@ -2348,7 +2350,7 @@ if (media) { for (key in media) { if (/_link$/.test(key)) { - if (!((media[key] != null) && (ref = media[key].match(/^(http:\/\/[^\/]+\/)?/)[0], indexOf.call(url.archive.imagehosts, ref) >= 0))) { + if (!((ref = media[key]) != null ? ref.match(/^http:\/\//) : void 0)) { delete media[key]; } } @@ -6117,7 +6119,8 @@ } for (u = 0, len3 = containers.length; u < len3; u++) { container = containers[u]; - nodes = [$.tn(' '), link = a.cloneNode(true)]; + link = a.cloneNode(true); + nodes = container.firstChild ? [$.tn(' '), link] : [link]; if (Conf['Quote Previewing']) { $.on(link, 'mouseover', QuotePreview.mouseover); } @@ -14489,15 +14492,14 @@ return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path; }, post: function(archive, arg) { - var URL, boardID, postID, protocol; + var boardID, postID, protocol, url; boardID = arg.boardID, postID = arg.postID; protocol = Redirect.protocol(archive); - URL = new String("" + protocol + archive.domain + "/_/api/chan/post/?board=" + boardID + "&num=" + postID); - if (!Redirect.securityCheck(URL)) { + url = "" + protocol + archive.domain + "/_/api/chan/post/?board=" + boardID + "&num=" + postID; + if (!Redirect.securityCheck(url)) { return ''; } - URL.archive = archive; - return URL; + return url; }, file: function(archive, arg) { var boardID, filename; @@ -14527,8 +14529,8 @@ boardID = arg.boardID, postID = arg.postID; return "https://so.fgts.jp/report/?board=" + boardID + "&no=" + postID; }, - securityCheck: function(URL) { - return /^https:\/\//.test(URL) || location.protocol === 'http:' || Conf['Except Archives from Encryption']; + securityCheck: function(url) { + return /^https:\/\//.test(url) || location.protocol === 'http:' || Conf['Exempt Archives from Encryption']; }, navigate: function(dest, data, alternative) { var url; @@ -16356,6 +16358,34 @@ } }; + ThreadLinks = { + init: function() { + if (!(g.VIEW === 'index' && Conf['Open Threads in New Tab'])) { + return; + } + Post.callbacks.push({ + name: 'Thread Links', + cb: this.node + }); + return CatalogThread.callbacks.push({ + name: 'Thread Links', + cb: this.catalogNode + }); + }, + node: function() { + if (this.isReply || this.isClone) { + return; + } + return ThreadLinks.process($('.replylink', this.nodes.info)); + }, + catalogNode: function() { + return ThreadLinks.process(this.nodes.thumb.parentNode); + }, + process: function(link) { + return link.target = '_blank'; + } + }; + Time = { init: function() { var ref; @@ -19283,6 +19313,9 @@ ":root.hide-backlinks .backlink.filtered + .hashlink.filtered {\n" + " display: none;\n" + "}\n" + +".postNum + .container::before {\n" + +" content: \" \";\n" + +"}\n" + ".inline {\n" + " border: 1px solid;\n" + " display: table;\n" + @@ -19946,17 +19979,12 @@ " margin: 2px;\n" + " vertical-align: middle;\n" + "}\n" + -".reply .menu-button, \n" + -".op .menu-button,\n" + +".post .menu-button,\n" + "#thread-watcher .menu-button {\n" + -" margin-left: -1px !important;\n" + -" width: 20px;\n" + +" width: 18px;\n" + " height: 15px;\n" + " text-align: center;\n" + "}\n" + -".menu-button + .container :first-child {\n" + -" margin-left: -5px;\n" + -"}\n" + "#menu {\n" + " position: fixed;\n" + " outline: none;\n" + @@ -20365,9 +20393,6 @@ ":root.yotsuba #board-list a, :root.yotsuba #shortcuts a {\n" + " color: #800000;\n" + "}\n" + -":root.yotsuba.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.yotsuba #fourchanx-settings fieldset, :root.yotsuba .section-main div::before {\n" + " border-color: #D9BFB7;\n" + @@ -20444,9 +20469,6 @@ ":root.yotsuba-b #board-list a, :root.yotsuba-b #shortcuts a {\n" + " color: #34345C;\n" + "}\n" + -":root.yotsuba-b.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.yotsuba-b #fourchanx-settings fieldset, :root.yotsuba-b .section-main div::before {\n" + " border-color: #B7C5D9;\n" + @@ -20523,9 +20545,6 @@ ":root.futaba #header-bar a, :root.futaba #notifications a {\n" + " color: #800000;\n" + "}\n" + -":root.futaba.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.futaba #fourchanx-settings fieldset, :root.futaba .section-main div::before {\n" + " border-color: #D9BFB7;\n" + @@ -20597,9 +20616,6 @@ ":root.burichan #header-bar a, :root.burichan #header-bar #notifications a {\n" + " color: #34345C;\n" + "}\n" + -":root.burichan.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.burichan #fourchanx-settings fieldset, :root.burichan .section-main div::before {\n" + " border-color: #B7C5D9;\n" + @@ -20667,9 +20683,6 @@ ":root.tomorrow #header-bar a, :root.tomorrow #notifications a {\n" + " color: #81A2BE;\n" + "}\n" + -":root.tomorrow.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(95,137,172,0.4);\n" + -"}\n" + "/* Settings */\n" + ":root.tomorrow #fourchanx-settings fieldset, :root.tomorrow .section-main div::before {\n" + " border-color: #111;\n" + @@ -20820,9 +20833,6 @@ ":root.photon #header-bar a, :root.photon #notifications a {\n" + " color: #FF6600;\n" + "}\n" + -":root.photon.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,51,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.photon #fourchanx-settings fieldset, :root.photon .section-main div::before {\n" + " border-color: #CCC;\n" + @@ -20906,9 +20916,6 @@ ":root.spooky #board-list a, :root.spooky #shortcuts a {\n" + " color: #FE9600;\n" + "}\n" + -":root.spooky.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.spooky #fourchanx-settings fieldset, :root.spooky .section-main div::before {\n" + " border-color: #707070;\n" + @@ -21007,7 +21014,7 @@ cssWWW: "#captcha-cnt {\n" + " height: auto;\n" + "}", - features: [['Polyfill', Polyfill], ['Captcha Replacement', 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], ['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], ['Oekaki Links', QR.oekaki], ['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], ['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]] + features: [['Polyfill', Polyfill], ['Captcha Replacement', 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], ['Oekaki Links', QR.oekaki], ['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], ['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]] }; Main.init(); diff --git a/builds/4chan-X-noupdate.crx b/builds/4chan-X-noupdate.crx index 76bdcf5e9..eae743f78 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 885c48348..d72379333 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.14.12 +// @version 1.11.15.0 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X @@ -117,7 +117,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, Notice, PSAHiding, Polyfill, Post, PostHiding, PostSuccessful, 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, 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, Notice, PSAHiding, Polyfill, Post, PostHiding, PostSuccessful, 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; }, @@ -130,6 +130,7 @@ 'JSON Navigation': [true, 'Replace the original board index with one supporting searching, sorting, infinite scrolling, and a catalog mode.'], 'Use 4chan X Catalog': [true, 'Link to 4chan X\'s catalog instead of the native 4chan one.', 1], 'Index Refresh Notifications': [false, 'Show a notice at the top of the page when the index is refreshed.', 1], + 'Open Threads in New Tab': [false, 'Make links to threads in the index / 4chan X catalog open in a new tab.'], 'External Catalog': [false, 'Link to external catalog instead of the internal one.'], 'Catalog Links': [false, 'Add toggle link in header menu to turn Navigation links into links to each board\'s catalog.'], 'Announcement Hiding': [true, 'Add button to hide 4chan announcements.'], @@ -414,7 +415,7 @@ doc = d.documentElement; g = { - VERSION: '1.11.14.12', + VERSION: '1.11.15.0', NAMESPACE: '4chan X.', boards: {} }; @@ -2243,9 +2244,9 @@ } this.root.textContent = "Loading post No." + this.postID + "..."; if (this.threadID) { - $.cache("//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json", (function(self) { - return function() { - return self.fetchedPost(this); + $.cache("//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json", (function(_this) { + return function(e) { + return _this.fetchedPost(e.target); }; })(this)); } else { @@ -2297,9 +2298,9 @@ $.cleanCache(function(url) { return url === api; }); - $.cache(api, (function(self) { - return function() { - return self.fetchedPost(this); + $.cache(api, (function(_this) { + return function(e) { + return _this.fetchedPost(e.target); }; })(this)); return; @@ -2320,7 +2321,7 @@ }; Fetcher.prototype.archivedPost = function() { - var url; + var archive, url; if (!Conf['Resurrect Quotes']) { return false; } @@ -2330,17 +2331,18 @@ }))) { return false; } + archive = Redirect.data.post[this.boardID]; if (/^https:\/\//.test(url) || location.protocol === 'http:') { - $.cache(url, (function(self) { - return function() { - return self.parseArchivedPost(this.response, url); + $.cache(url, (function(_this) { + return function(e) { + return _this.parseArchivedPost(e.target.response, url); }; })(this), { responseType: 'json', - withCredentials: url.archive.withCredentials + withCredentials: archive.withCredentials }); return true; - } else if (Conf['Except Archives from Encryption']) { + } else if (Conf['Exempt Archives from Encryption']) { CrossOrigin.json(url, (function(_this) { return function(response) { var key, media, ref; @@ -2348,7 +2350,7 @@ if (media) { for (key in media) { if (/_link$/.test(key)) { - if (!((media[key] != null) && (ref = media[key].match(/^(http:\/\/[^\/]+\/)?/)[0], indexOf.call(url.archive.imagehosts, ref) >= 0))) { + if (!((ref = media[key]) != null ? ref.match(/^http:\/\//) : void 0)) { delete media[key]; } } @@ -6117,7 +6119,8 @@ } for (u = 0, len3 = containers.length; u < len3; u++) { container = containers[u]; - nodes = [$.tn(' '), link = a.cloneNode(true)]; + link = a.cloneNode(true); + nodes = container.firstChild ? [$.tn(' '), link] : [link]; if (Conf['Quote Previewing']) { $.on(link, 'mouseover', QuotePreview.mouseover); } @@ -14489,15 +14492,14 @@ return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path; }, post: function(archive, arg) { - var URL, boardID, postID, protocol; + var boardID, postID, protocol, url; boardID = arg.boardID, postID = arg.postID; protocol = Redirect.protocol(archive); - URL = new String("" + protocol + archive.domain + "/_/api/chan/post/?board=" + boardID + "&num=" + postID); - if (!Redirect.securityCheck(URL)) { + url = "" + protocol + archive.domain + "/_/api/chan/post/?board=" + boardID + "&num=" + postID; + if (!Redirect.securityCheck(url)) { return ''; } - URL.archive = archive; - return URL; + return url; }, file: function(archive, arg) { var boardID, filename; @@ -14527,8 +14529,8 @@ boardID = arg.boardID, postID = arg.postID; return "https://so.fgts.jp/report/?board=" + boardID + "&no=" + postID; }, - securityCheck: function(URL) { - return /^https:\/\//.test(URL) || location.protocol === 'http:' || Conf['Except Archives from Encryption']; + securityCheck: function(url) { + return /^https:\/\//.test(url) || location.protocol === 'http:' || Conf['Exempt Archives from Encryption']; }, navigate: function(dest, data, alternative) { var url; @@ -16356,6 +16358,34 @@ } }; + ThreadLinks = { + init: function() { + if (!(g.VIEW === 'index' && Conf['Open Threads in New Tab'])) { + return; + } + Post.callbacks.push({ + name: 'Thread Links', + cb: this.node + }); + return CatalogThread.callbacks.push({ + name: 'Thread Links', + cb: this.catalogNode + }); + }, + node: function() { + if (this.isReply || this.isClone) { + return; + } + return ThreadLinks.process($('.replylink', this.nodes.info)); + }, + catalogNode: function() { + return ThreadLinks.process(this.nodes.thumb.parentNode); + }, + process: function(link) { + return link.target = '_blank'; + } + }; + Time = { init: function() { var ref; @@ -19283,6 +19313,9 @@ ":root.hide-backlinks .backlink.filtered + .hashlink.filtered {\n" + " display: none;\n" + "}\n" + +".postNum + .container::before {\n" + +" content: \" \";\n" + +"}\n" + ".inline {\n" + " border: 1px solid;\n" + " display: table;\n" + @@ -19946,17 +19979,12 @@ " margin: 2px;\n" + " vertical-align: middle;\n" + "}\n" + -".reply .menu-button, \n" + -".op .menu-button,\n" + +".post .menu-button,\n" + "#thread-watcher .menu-button {\n" + -" margin-left: -1px !important;\n" + -" width: 20px;\n" + +" width: 18px;\n" + " height: 15px;\n" + " text-align: center;\n" + "}\n" + -".menu-button + .container :first-child {\n" + -" margin-left: -5px;\n" + -"}\n" + "#menu {\n" + " position: fixed;\n" + " outline: none;\n" + @@ -20365,9 +20393,6 @@ ":root.yotsuba #board-list a, :root.yotsuba #shortcuts a {\n" + " color: #800000;\n" + "}\n" + -":root.yotsuba.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.yotsuba #fourchanx-settings fieldset, :root.yotsuba .section-main div::before {\n" + " border-color: #D9BFB7;\n" + @@ -20444,9 +20469,6 @@ ":root.yotsuba-b #board-list a, :root.yotsuba-b #shortcuts a {\n" + " color: #34345C;\n" + "}\n" + -":root.yotsuba-b.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.yotsuba-b #fourchanx-settings fieldset, :root.yotsuba-b .section-main div::before {\n" + " border-color: #B7C5D9;\n" + @@ -20523,9 +20545,6 @@ ":root.futaba #header-bar a, :root.futaba #notifications a {\n" + " color: #800000;\n" + "}\n" + -":root.futaba.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.futaba #fourchanx-settings fieldset, :root.futaba .section-main div::before {\n" + " border-color: #D9BFB7;\n" + @@ -20597,9 +20616,6 @@ ":root.burichan #header-bar a, :root.burichan #header-bar #notifications a {\n" + " color: #34345C;\n" + "}\n" + -":root.burichan.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.burichan #fourchanx-settings fieldset, :root.burichan .section-main div::before {\n" + " border-color: #B7C5D9;\n" + @@ -20667,9 +20683,6 @@ ":root.tomorrow #header-bar a, :root.tomorrow #notifications a {\n" + " color: #81A2BE;\n" + "}\n" + -":root.tomorrow.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(95,137,172,0.4);\n" + -"}\n" + "/* Settings */\n" + ":root.tomorrow #fourchanx-settings fieldset, :root.tomorrow .section-main div::before {\n" + " border-color: #111;\n" + @@ -20820,9 +20833,6 @@ ":root.photon #header-bar a, :root.photon #notifications a {\n" + " color: #FF6600;\n" + "}\n" + -":root.photon.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,51,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.photon #fourchanx-settings fieldset, :root.photon .section-main div::before {\n" + " border-color: #CCC;\n" + @@ -20906,9 +20916,6 @@ ":root.spooky #board-list a, :root.spooky #shortcuts a {\n" + " color: #FE9600;\n" + "}\n" + -":root.spooky.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.spooky #fourchanx-settings fieldset, :root.spooky .section-main div::before {\n" + " border-color: #707070;\n" + @@ -21007,7 +21014,7 @@ cssWWW: "#captcha-cnt {\n" + " height: auto;\n" + "}", - features: [['Polyfill', Polyfill], ['Captcha Replacement', 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], ['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], ['Oekaki Links', QR.oekaki], ['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], ['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]] + features: [['Polyfill', Polyfill], ['Captcha Replacement', 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], ['Oekaki Links', QR.oekaki], ['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], ['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]] }; Main.init(); diff --git a/builds/4chan-X.crx b/builds/4chan-X.crx index 850ee7406..5d835e7c4 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 6f1522789..4183356d9 100644 --- a/builds/4chan-X.meta.js +++ b/builds/4chan-X.meta.js @@ -1,6 +1,6 @@ // ==UserScript== // @name 4chan X -// @version 1.11.14.12 +// @version 1.11.15.0 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js index f0e632702..dddd7fbc2 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.14.12 +// @version 1.11.15.0 // @minGMVer 1.14 // @minFFVer 26 // @namespace 4chan-X @@ -117,7 +117,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, Notice, PSAHiding, Polyfill, Post, PostHiding, PostSuccessful, 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, 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, Notice, PSAHiding, Polyfill, Post, PostHiding, PostSuccessful, 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; }, @@ -130,6 +130,7 @@ 'JSON Navigation': [true, 'Replace the original board index with one supporting searching, sorting, infinite scrolling, and a catalog mode.'], 'Use 4chan X Catalog': [true, 'Link to 4chan X\'s catalog instead of the native 4chan one.', 1], 'Index Refresh Notifications': [false, 'Show a notice at the top of the page when the index is refreshed.', 1], + 'Open Threads in New Tab': [false, 'Make links to threads in the index / 4chan X catalog open in a new tab.'], 'External Catalog': [false, 'Link to external catalog instead of the internal one.'], 'Catalog Links': [false, 'Add toggle link in header menu to turn Navigation links into links to each board\'s catalog.'], 'Announcement Hiding': [true, 'Add button to hide 4chan announcements.'], @@ -414,7 +415,7 @@ doc = d.documentElement; g = { - VERSION: '1.11.14.12', + VERSION: '1.11.15.0', NAMESPACE: '4chan X.', boards: {} }; @@ -2243,9 +2244,9 @@ } this.root.textContent = "Loading post No." + this.postID + "..."; if (this.threadID) { - $.cache("//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json", (function(self) { - return function() { - return self.fetchedPost(this); + $.cache("//a.4cdn.org/" + this.boardID + "/thread/" + this.threadID + ".json", (function(_this) { + return function(e) { + return _this.fetchedPost(e.target); }; })(this)); } else { @@ -2297,9 +2298,9 @@ $.cleanCache(function(url) { return url === api; }); - $.cache(api, (function(self) { - return function() { - return self.fetchedPost(this); + $.cache(api, (function(_this) { + return function(e) { + return _this.fetchedPost(e.target); }; })(this)); return; @@ -2320,7 +2321,7 @@ }; Fetcher.prototype.archivedPost = function() { - var url; + var archive, url; if (!Conf['Resurrect Quotes']) { return false; } @@ -2330,17 +2331,18 @@ }))) { return false; } + archive = Redirect.data.post[this.boardID]; if (/^https:\/\//.test(url) || location.protocol === 'http:') { - $.cache(url, (function(self) { - return function() { - return self.parseArchivedPost(this.response, url); + $.cache(url, (function(_this) { + return function(e) { + return _this.parseArchivedPost(e.target.response, url); }; })(this), { responseType: 'json', - withCredentials: url.archive.withCredentials + withCredentials: archive.withCredentials }); return true; - } else if (Conf['Except Archives from Encryption']) { + } else if (Conf['Exempt Archives from Encryption']) { CrossOrigin.json(url, (function(_this) { return function(response) { var key, media, ref; @@ -2348,7 +2350,7 @@ if (media) { for (key in media) { if (/_link$/.test(key)) { - if (!((media[key] != null) && (ref = media[key].match(/^(http:\/\/[^\/]+\/)?/)[0], indexOf.call(url.archive.imagehosts, ref) >= 0))) { + if (!((ref = media[key]) != null ? ref.match(/^http:\/\//) : void 0)) { delete media[key]; } } @@ -6117,7 +6119,8 @@ } for (u = 0, len3 = containers.length; u < len3; u++) { container = containers[u]; - nodes = [$.tn(' '), link = a.cloneNode(true)]; + link = a.cloneNode(true); + nodes = container.firstChild ? [$.tn(' '), link] : [link]; if (Conf['Quote Previewing']) { $.on(link, 'mouseover', QuotePreview.mouseover); } @@ -14489,15 +14492,14 @@ return "" + (Redirect.protocol(archive)) + archive.domain + "/" + path; }, post: function(archive, arg) { - var URL, boardID, postID, protocol; + var boardID, postID, protocol, url; boardID = arg.boardID, postID = arg.postID; protocol = Redirect.protocol(archive); - URL = new String("" + protocol + archive.domain + "/_/api/chan/post/?board=" + boardID + "&num=" + postID); - if (!Redirect.securityCheck(URL)) { + url = "" + protocol + archive.domain + "/_/api/chan/post/?board=" + boardID + "&num=" + postID; + if (!Redirect.securityCheck(url)) { return ''; } - URL.archive = archive; - return URL; + return url; }, file: function(archive, arg) { var boardID, filename; @@ -14527,8 +14529,8 @@ boardID = arg.boardID, postID = arg.postID; return "https://so.fgts.jp/report/?board=" + boardID + "&no=" + postID; }, - securityCheck: function(URL) { - return /^https:\/\//.test(URL) || location.protocol === 'http:' || Conf['Except Archives from Encryption']; + securityCheck: function(url) { + return /^https:\/\//.test(url) || location.protocol === 'http:' || Conf['Exempt Archives from Encryption']; }, navigate: function(dest, data, alternative) { var url; @@ -16356,6 +16358,34 @@ } }; + ThreadLinks = { + init: function() { + if (!(g.VIEW === 'index' && Conf['Open Threads in New Tab'])) { + return; + } + Post.callbacks.push({ + name: 'Thread Links', + cb: this.node + }); + return CatalogThread.callbacks.push({ + name: 'Thread Links', + cb: this.catalogNode + }); + }, + node: function() { + if (this.isReply || this.isClone) { + return; + } + return ThreadLinks.process($('.replylink', this.nodes.info)); + }, + catalogNode: function() { + return ThreadLinks.process(this.nodes.thumb.parentNode); + }, + process: function(link) { + return link.target = '_blank'; + } + }; + Time = { init: function() { var ref; @@ -19283,6 +19313,9 @@ ":root.hide-backlinks .backlink.filtered + .hashlink.filtered {\n" + " display: none;\n" + "}\n" + +".postNum + .container::before {\n" + +" content: \" \";\n" + +"}\n" + ".inline {\n" + " border: 1px solid;\n" + " display: table;\n" + @@ -19946,17 +19979,12 @@ " margin: 2px;\n" + " vertical-align: middle;\n" + "}\n" + -".reply .menu-button, \n" + -".op .menu-button,\n" + +".post .menu-button,\n" + "#thread-watcher .menu-button {\n" + -" margin-left: -1px !important;\n" + -" width: 20px;\n" + +" width: 18px;\n" + " height: 15px;\n" + " text-align: center;\n" + "}\n" + -".menu-button + .container :first-child {\n" + -" margin-left: -5px;\n" + -"}\n" + "#menu {\n" + " position: fixed;\n" + " outline: none;\n" + @@ -20365,9 +20393,6 @@ ":root.yotsuba #board-list a, :root.yotsuba #shortcuts a {\n" + " color: #800000;\n" + "}\n" + -":root.yotsuba.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.yotsuba #fourchanx-settings fieldset, :root.yotsuba .section-main div::before {\n" + " border-color: #D9BFB7;\n" + @@ -20444,9 +20469,6 @@ ":root.yotsuba-b #board-list a, :root.yotsuba-b #shortcuts a {\n" + " color: #34345C;\n" + "}\n" + -":root.yotsuba-b.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.yotsuba-b #fourchanx-settings fieldset, :root.yotsuba-b .section-main div::before {\n" + " border-color: #B7C5D9;\n" + @@ -20523,9 +20545,6 @@ ":root.futaba #header-bar a, :root.futaba #notifications a {\n" + " color: #800000;\n" + "}\n" + -":root.futaba.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.futaba #fourchanx-settings fieldset, :root.futaba .section-main div::before {\n" + " border-color: #D9BFB7;\n" + @@ -20597,9 +20616,6 @@ ":root.burichan #header-bar a, :root.burichan #header-bar #notifications a {\n" + " color: #34345C;\n" + "}\n" + -":root.burichan.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.burichan #fourchanx-settings fieldset, :root.burichan .section-main div::before {\n" + " border-color: #B7C5D9;\n" + @@ -20667,9 +20683,6 @@ ":root.tomorrow #header-bar a, :root.tomorrow #notifications a {\n" + " color: #81A2BE;\n" + "}\n" + -":root.tomorrow.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(95,137,172,0.4);\n" + -"}\n" + "/* Settings */\n" + ":root.tomorrow #fourchanx-settings fieldset, :root.tomorrow .section-main div::before {\n" + " border-color: #111;\n" + @@ -20820,9 +20833,6 @@ ":root.photon #header-bar a, :root.photon #notifications a {\n" + " color: #FF6600;\n" + "}\n" + -":root.photon.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,51,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.photon #fourchanx-settings fieldset, :root.photon .section-main div::before {\n" + " border-color: #CCC;\n" + @@ -20906,9 +20916,6 @@ ":root.spooky #board-list a, :root.spooky #shortcuts a {\n" + " color: #FE9600;\n" + "}\n" + -":root.spooky.fixed #custom-board-list .current:hover {\n" + -" border-bottom-color: rgba(255,0,0,0.2);\n" + -"}\n" + "/* Settings */\n" + ":root.spooky #fourchanx-settings fieldset, :root.spooky .section-main div::before {\n" + " border-color: #707070;\n" + @@ -21007,7 +21014,7 @@ cssWWW: "#captcha-cnt {\n" + " height: auto;\n" + "}", - features: [['Polyfill', Polyfill], ['Captcha Replacement', 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], ['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], ['Oekaki Links', QR.oekaki], ['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], ['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]] + features: [['Polyfill', Polyfill], ['Captcha Replacement', 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], ['Oekaki Links', QR.oekaki], ['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], ['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]] }; Main.init(); diff --git a/builds/4chan-X.zip b/builds/4chan-X.zip index aaf43a033..0802657f4 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 305e0da35..279ff7acc 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 9be907400..0e276532e 100644 --- a/builds/updates.xml +++ b/builds/updates.xml @@ -1,7 +1,7 @@ - + diff --git a/version.json b/version.json index 0570761d6..f78f323ed 100644 --- a/version.json +++ b/version.json @@ -1,4 +1,4 @@ { - "version": "1.11.14.12", - "date": "2015-11-01T00:02:41.314Z" + "version": "1.11.15.0", + "date": "2015-11-01T21:27:18.269Z" }