Merge branch 'master' into index

This commit is contained in:
ccd0 2015-07-19 22:36:47 -07:00
commit 2ba6e4f9c3
16 changed files with 100 additions and 54 deletions

View File

@ -2,6 +2,13 @@
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). 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.6
**v1.11.6.0** *(2015-07-19)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.6.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.6.0/builds/4chan-X-noupdate.crx "Chromium version")]
- Based on v1.11.5.2.
- Implement 404 Redirect for `sys.4chan.org/board/imgboard.php?res=` URLs.
- Index navigation bugfixes.
### v1.11.5 ### v1.11.5
**v1.11.5.2** *(2015-07-15)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.5.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.5.2/builds/4chan-X-noupdate.crx "Chromium version")] **v1.11.5.2** *(2015-07-15)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.5.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.5.2/builds/4chan-X-noupdate.crx "Chromium version")]

View File

@ -20,8 +20,8 @@ Install [Greasemonkey](https://addons.mozilla.org/en-US/firefox/addon/greasemonk
4chan X is available as a Chrome extension. The Chrome extension has the additional feature of being able to sync your settings and data with other devices via Chrome Sync. 4chan X is available as a Chrome extension. The Chrome extension has the additional feature of being able to sync your settings and data with other devices via Chrome Sync.
- **Chromium**, **Chrome**, and **Vivaldi** users can **[install 4chan X from the Chrome store](https://chrome.google.com/webstore/detail/4chan-x/ohnjgmpcibpbafdlkimncjhflgedgpam)**. - **Chromium**, **Chrome**, and **Vivaldi** users can **[install 4chan X from the Chrome store](https://chrome.google.com/webstore/detail/4chan-x/ohnjgmpcibpbafdlkimncjhflgedgpam)**.
- **Chromium** users can alternately **[download 4chan X from Github](https://ccd0.github.io/4chan-x/builds/4chan-X.crx)**, then drag it to your `chrome://extensions` page. This will also work for Chrome dev/canary, and Chrome on platforms other than Windows.
- **Opera** users can click to **[download 4chan X from Github](https://ccd0.github.io/4chan-x/builds/4chan-X.crx)**, then follow the prompts to activate it in your extension manager. Note: This version does not work with Opera 12; try [loadletter's fork](https://github.com/loadletter/4chan-x) instead. - **Opera** users can click to **[download 4chan X from Github](https://ccd0.github.io/4chan-x/builds/4chan-X.crx)**, then follow the prompts to activate it in your extension manager. Note: This version does not work with Opera 12; try [loadletter's fork](https://github.com/loadletter/4chan-x) instead.
- You can alternately **[download 4chan X from Github](https://ccd0.github.io/4chan-x/builds/4chan-X.crx)**, then drag it to your `chrome://extensions` page. This will not work for the stable or beta versions of Chrome on Windows, which block extensions not from the Chrome store.
You can also use the [userscript version of 4chan X](https://ccd0.github.io/4chan-x/builds/4chan-X.user.js) with [Tampermonkey](https://tampermonkey.net/). You can also use the [userscript version of 4chan X](https://ccd0.github.io/4chan-x/builds/4chan-X.user.js) with [Tampermonkey](https://tampermonkey.net/).

Binary file not shown.

View File

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

View File

@ -1,7 +1,7 @@
// Generated by CoffeeScript // Generated by CoffeeScript
// ==UserScript== // ==UserScript==
// @name 4chan X beta // @name 4chan X beta
// @version 1.11.5.2 // @version 1.11.6.0
// @minGMVer 1.14 // @minGMVer 1.14
// @minFFVer 26 // @minFFVer 26
// @namespace 4chan-X // @namespace 4chan-X
@ -411,7 +411,7 @@
doc = d.documentElement; doc = d.documentElement;
g = { g = {
VERSION: '1.11.5.2', VERSION: '1.11.6.0',
NAMESPACE: '4chan X.', NAMESPACE: '4chan X.',
boards: {} boards: {}
}; };
@ -3407,7 +3407,6 @@
var mode, page, ref, ref1, search, state; var mode, page, ref, ref1, search, state;
if (e != null ? e.state : void 0) { if (e != null ? e.state : void 0) {
ref = e.state, search = ref.search, mode = ref.mode; ref = e.state, search = ref.search, mode = ref.mode;
page = Index.getCurrentPage();
state = {}; state = {};
if (Index.search !== search) { if (Index.search !== search) {
state.search = Index.search = search; state.search = Index.search = search;
@ -3416,6 +3415,7 @@
state.mode = mode; state.mode = mode;
Index.saveMode(mode); Index.saveMode(mode);
} }
page = Index.getCurrentPage();
if (Index.currentPage !== page) { if (Index.currentPage !== page) {
state.page = Index.currentPage = page; state.page = Index.currentPage = page;
} }
@ -3974,6 +3974,7 @@
Index.pushState({ Index.pushState({
page: page page: page
}); });
Index.setPage();
} }
} }
nodes = Index.buildSinglePage(Index.getCurrentPage()); nodes = Index.buildSinglePage(Index.getCurrentPage());
@ -14362,9 +14363,14 @@
securityCheck: function(URL) { securityCheck: function(URL) {
return /^https:\/\//.test(URL) || location.protocol === 'http:' || Conf['Except Archives from Encryption']; return /^https:\/\//.test(URL) || location.protocol === 'http:' || Conf['Except Archives from Encryption'];
}, },
navigate: function(URL, alternative) { navigate: function(dest, data, alternative) {
if (URL && (Redirect.securityCheck(URL) || confirm("Redirect to " + URL + "?\n\nYour connection will not be encrypted."))) { var url;
return location.replace(URL); if (!Redirect.data) {
Redirect.init();
}
url = Redirect.to(dest, data);
if (url && (Redirect.securityCheck(url) || confirm("Redirect to " + url + "?\n\nYour connection will not be encrypted."))) {
return location.replace(url);
} else if (alternative) { } else if (alternative) {
return location.replace(alternative); return location.replace(alternative);
} }
@ -17065,7 +17071,7 @@
}); });
}, },
initFeatures: function() { initFeatures: function() {
var err, feature, k, len1, name, pathname, ref, ref1, ref2; var err, feature, k, len1, match, name, pathname, ref, ref1, ref2;
if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org' || ref === 'www.4chan.org') { if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org' || ref === 'www.4chan.org') {
$.globalEval('document.documentElement.classList.add("js-enabled");'); $.globalEval('document.documentElement.classList.add("js-enabled");');
} }
@ -17080,20 +17086,29 @@
if (g.VIEW === 'post') { if (g.VIEW === 'post') {
PostSuccessful.init(); PostSuccessful.init();
} }
if (Conf['404 Redirect'] && /\/imgboard\.php$/.test(location.pathname) && (match = location.search.match(/\bres=(\d+)/))) {
$.ready(function() {
var ref1;
if (((ref1 = $.id('errmsg')) != null ? ref1.textContent : void 0) === 'Error: Specified thread does not exist.') {
return Redirect.navigate('thread', {
boardID: g.BOARD.ID,
postID: +match[1]
});
}
});
}
return; return;
case 'i.4cdn.org': case 'i.4cdn.org':
$.asap((function() { $.asap((function() {
return d.readyState !== 'loading'; return d.readyState !== 'loading';
}), function() { }), function() {
var URL, pathname, ref1, video; var pathname, ref1, video;
if (Conf['404 Redirect'] && ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found')) { if (Conf['404 Redirect'] && ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found')) {
Redirect.init();
pathname = location.pathname.split('/'); pathname = location.pathname.split('/');
URL = Redirect.to('file', { return Redirect.navigate('file', {
boardID: g.BOARD.ID, boardID: g.BOARD.ID,
filename: pathname[pathname.length - 1] filename: pathname[pathname.length - 1]
}); });
return Redirect.navigate(URL);
} else if (video = $('video')) { } else if (video = $('video')) {
if (Conf['Volume in New Tab']) { if (Conf['Volume in New Tab']) {
Volume.setup(video); Volume.setup(video);
@ -17196,14 +17211,12 @@
if ((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') { if ((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') {
if (g.VIEW === 'thread') { if (g.VIEW === 'thread') {
ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() { ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() {
var href;
if (Conf['404 Redirect']) { if (Conf['404 Redirect']) {
href = Redirect.to('thread', { return Redirect.navigate('thread', {
boardID: g.BOARD.ID, boardID: g.BOARD.ID,
threadID: g.THREADID, threadID: g.THREADID,
postID: +location.hash.match(/\d+/) postID: +location.hash.match(/\d+/)
}); }, "/" + g.BOARD + "/");
return Redirect.navigate(href, "/" + g.BOARD + "/");
} }
}); });
} }

Binary file not shown.

View File

@ -1,7 +1,7 @@
// Generated by CoffeeScript // Generated by CoffeeScript
// ==UserScript== // ==UserScript==
// @name 4chan X // @name 4chan X
// @version 1.11.5.2 // @version 1.11.6.0
// @minGMVer 1.14 // @minGMVer 1.14
// @minFFVer 26 // @minFFVer 26
// @namespace 4chan-X // @namespace 4chan-X
@ -410,7 +410,7 @@
doc = d.documentElement; doc = d.documentElement;
g = { g = {
VERSION: '1.11.5.2', VERSION: '1.11.6.0',
NAMESPACE: '4chan X.', NAMESPACE: '4chan X.',
boards: {} boards: {}
}; };
@ -3406,7 +3406,6 @@
var mode, page, ref, ref1, search, state; var mode, page, ref, ref1, search, state;
if (e != null ? e.state : void 0) { if (e != null ? e.state : void 0) {
ref = e.state, search = ref.search, mode = ref.mode; ref = e.state, search = ref.search, mode = ref.mode;
page = Index.getCurrentPage();
state = {}; state = {};
if (Index.search !== search) { if (Index.search !== search) {
state.search = Index.search = search; state.search = Index.search = search;
@ -3415,6 +3414,7 @@
state.mode = mode; state.mode = mode;
Index.saveMode(mode); Index.saveMode(mode);
} }
page = Index.getCurrentPage();
if (Index.currentPage !== page) { if (Index.currentPage !== page) {
state.page = Index.currentPage = page; state.page = Index.currentPage = page;
} }
@ -3973,6 +3973,7 @@
Index.pushState({ Index.pushState({
page: page page: page
}); });
Index.setPage();
} }
} }
nodes = Index.buildSinglePage(Index.getCurrentPage()); nodes = Index.buildSinglePage(Index.getCurrentPage());
@ -14361,9 +14362,14 @@
securityCheck: function(URL) { securityCheck: function(URL) {
return /^https:\/\//.test(URL) || location.protocol === 'http:' || Conf['Except Archives from Encryption']; return /^https:\/\//.test(URL) || location.protocol === 'http:' || Conf['Except Archives from Encryption'];
}, },
navigate: function(URL, alternative) { navigate: function(dest, data, alternative) {
if (URL && (Redirect.securityCheck(URL) || confirm("Redirect to " + URL + "?\n\nYour connection will not be encrypted."))) { var url;
return location.replace(URL); if (!Redirect.data) {
Redirect.init();
}
url = Redirect.to(dest, data);
if (url && (Redirect.securityCheck(url) || confirm("Redirect to " + url + "?\n\nYour connection will not be encrypted."))) {
return location.replace(url);
} else if (alternative) { } else if (alternative) {
return location.replace(alternative); return location.replace(alternative);
} }
@ -17064,7 +17070,7 @@
}); });
}, },
initFeatures: function() { initFeatures: function() {
var err, feature, k, len1, name, pathname, ref, ref1, ref2; var err, feature, k, len1, match, name, pathname, ref, ref1, ref2;
if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org' || ref === 'www.4chan.org') { if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org' || ref === 'www.4chan.org') {
$.globalEval('document.documentElement.classList.add("js-enabled");'); $.globalEval('document.documentElement.classList.add("js-enabled");');
} }
@ -17079,20 +17085,29 @@
if (g.VIEW === 'post') { if (g.VIEW === 'post') {
PostSuccessful.init(); PostSuccessful.init();
} }
if (Conf['404 Redirect'] && /\/imgboard\.php$/.test(location.pathname) && (match = location.search.match(/\bres=(\d+)/))) {
$.ready(function() {
var ref1;
if (((ref1 = $.id('errmsg')) != null ? ref1.textContent : void 0) === 'Error: Specified thread does not exist.') {
return Redirect.navigate('thread', {
boardID: g.BOARD.ID,
postID: +match[1]
});
}
});
}
return; return;
case 'i.4cdn.org': case 'i.4cdn.org':
$.asap((function() { $.asap((function() {
return d.readyState !== 'loading'; return d.readyState !== 'loading';
}), function() { }), function() {
var URL, pathname, ref1, video; var pathname, ref1, video;
if (Conf['404 Redirect'] && ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found')) { if (Conf['404 Redirect'] && ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found')) {
Redirect.init();
pathname = location.pathname.split('/'); pathname = location.pathname.split('/');
URL = Redirect.to('file', { return Redirect.navigate('file', {
boardID: g.BOARD.ID, boardID: g.BOARD.ID,
filename: pathname[pathname.length - 1] filename: pathname[pathname.length - 1]
}); });
return Redirect.navigate(URL);
} else if (video = $('video')) { } else if (video = $('video')) {
if (Conf['Volume in New Tab']) { if (Conf['Volume in New Tab']) {
Volume.setup(video); Volume.setup(video);
@ -17195,14 +17210,12 @@
if ((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') { if ((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') {
if (g.VIEW === 'thread') { if (g.VIEW === 'thread') {
ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() { ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() {
var href;
if (Conf['404 Redirect']) { if (Conf['404 Redirect']) {
href = Redirect.to('thread', { return Redirect.navigate('thread', {
boardID: g.BOARD.ID, boardID: g.BOARD.ID,
threadID: g.THREADID, threadID: g.THREADID,
postID: +location.hash.match(/\d+/) postID: +location.hash.match(/\d+/)
}); }, "/" + g.BOARD + "/");
return Redirect.navigate(href, "/" + g.BOARD + "/");
} }
}); });
} }

Binary file not shown.

View File

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

View File

@ -1,7 +1,7 @@
// Generated by CoffeeScript // Generated by CoffeeScript
// ==UserScript== // ==UserScript==
// @name 4chan X // @name 4chan X
// @version 1.11.5.2 // @version 1.11.6.0
// @minGMVer 1.14 // @minGMVer 1.14
// @minFFVer 26 // @minFFVer 26
// @namespace 4chan-X // @namespace 4chan-X
@ -411,7 +411,7 @@
doc = d.documentElement; doc = d.documentElement;
g = { g = {
VERSION: '1.11.5.2', VERSION: '1.11.6.0',
NAMESPACE: '4chan X.', NAMESPACE: '4chan X.',
boards: {} boards: {}
}; };
@ -3407,7 +3407,6 @@
var mode, page, ref, ref1, search, state; var mode, page, ref, ref1, search, state;
if (e != null ? e.state : void 0) { if (e != null ? e.state : void 0) {
ref = e.state, search = ref.search, mode = ref.mode; ref = e.state, search = ref.search, mode = ref.mode;
page = Index.getCurrentPage();
state = {}; state = {};
if (Index.search !== search) { if (Index.search !== search) {
state.search = Index.search = search; state.search = Index.search = search;
@ -3416,6 +3415,7 @@
state.mode = mode; state.mode = mode;
Index.saveMode(mode); Index.saveMode(mode);
} }
page = Index.getCurrentPage();
if (Index.currentPage !== page) { if (Index.currentPage !== page) {
state.page = Index.currentPage = page; state.page = Index.currentPage = page;
} }
@ -3974,6 +3974,7 @@
Index.pushState({ Index.pushState({
page: page page: page
}); });
Index.setPage();
} }
} }
nodes = Index.buildSinglePage(Index.getCurrentPage()); nodes = Index.buildSinglePage(Index.getCurrentPage());
@ -14362,9 +14363,14 @@
securityCheck: function(URL) { securityCheck: function(URL) {
return /^https:\/\//.test(URL) || location.protocol === 'http:' || Conf['Except Archives from Encryption']; return /^https:\/\//.test(URL) || location.protocol === 'http:' || Conf['Except Archives from Encryption'];
}, },
navigate: function(URL, alternative) { navigate: function(dest, data, alternative) {
if (URL && (Redirect.securityCheck(URL) || confirm("Redirect to " + URL + "?\n\nYour connection will not be encrypted."))) { var url;
return location.replace(URL); if (!Redirect.data) {
Redirect.init();
}
url = Redirect.to(dest, data);
if (url && (Redirect.securityCheck(url) || confirm("Redirect to " + url + "?\n\nYour connection will not be encrypted."))) {
return location.replace(url);
} else if (alternative) { } else if (alternative) {
return location.replace(alternative); return location.replace(alternative);
} }
@ -17065,7 +17071,7 @@
}); });
}, },
initFeatures: function() { initFeatures: function() {
var err, feature, k, len1, name, pathname, ref, ref1, ref2; var err, feature, k, len1, match, name, pathname, ref, ref1, ref2;
if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org' || ref === 'www.4chan.org') { if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org' || ref === 'www.4chan.org') {
$.globalEval('document.documentElement.classList.add("js-enabled");'); $.globalEval('document.documentElement.classList.add("js-enabled");');
} }
@ -17080,20 +17086,29 @@
if (g.VIEW === 'post') { if (g.VIEW === 'post') {
PostSuccessful.init(); PostSuccessful.init();
} }
if (Conf['404 Redirect'] && /\/imgboard\.php$/.test(location.pathname) && (match = location.search.match(/\bres=(\d+)/))) {
$.ready(function() {
var ref1;
if (((ref1 = $.id('errmsg')) != null ? ref1.textContent : void 0) === 'Error: Specified thread does not exist.') {
return Redirect.navigate('thread', {
boardID: g.BOARD.ID,
postID: +match[1]
});
}
});
}
return; return;
case 'i.4cdn.org': case 'i.4cdn.org':
$.asap((function() { $.asap((function() {
return d.readyState !== 'loading'; return d.readyState !== 'loading';
}), function() { }), function() {
var URL, pathname, ref1, video; var pathname, ref1, video;
if (Conf['404 Redirect'] && ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found')) { if (Conf['404 Redirect'] && ((ref1 = d.title) === '4chan - Temporarily Offline' || ref1 === '4chan - 404 Not Found')) {
Redirect.init();
pathname = location.pathname.split('/'); pathname = location.pathname.split('/');
URL = Redirect.to('file', { return Redirect.navigate('file', {
boardID: g.BOARD.ID, boardID: g.BOARD.ID,
filename: pathname[pathname.length - 1] filename: pathname[pathname.length - 1]
}); });
return Redirect.navigate(URL);
} else if (video = $('video')) { } else if (video = $('video')) {
if (Conf['Volume in New Tab']) { if (Conf['Volume in New Tab']) {
Volume.setup(video); Volume.setup(video);
@ -17196,14 +17211,12 @@
if ((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') { if ((ref = d.title) === '4chan - Temporarily Offline' || ref === '4chan - 404 Not Found') {
if (g.VIEW === 'thread') { if (g.VIEW === 'thread') {
ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() { ThreadWatcher.set404(g.BOARD.ID, g.THREADID, function() {
var href;
if (Conf['404 Redirect']) { if (Conf['404 Redirect']) {
href = Redirect.to('thread', { return Redirect.navigate('thread', {
boardID: g.BOARD.ID, boardID: g.BOARD.ID,
threadID: g.THREADID, threadID: g.THREADID,
postID: +location.hash.match(/\d+/) postID: +location.hash.match(/\d+/)
}); }, "/" + g.BOARD + "/");
return Redirect.navigate(href, "/" + g.BOARD + "/");
} }
}); });
} }

Binary file not shown.

View File

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

View File

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

View File

@ -33,8 +33,8 @@ Previously developed by <a href="https://github.com/aeosynth/4chan-x">aeosynth</
<p>4chan X is available as a Chrome extension. The Chrome extension has the additional feature of being able to sync your settings and data with other devices via Chrome Sync.</p> <p>4chan X is available as a Chrome extension. The Chrome extension has the additional feature of being able to sync your settings and data with other devices via Chrome Sync.</p>
<ul> <ul>
<li><strong>Chromium</strong>, <strong>Chrome</strong>, and <strong>Vivaldi</strong> users can <strong><a href="https://chrome.google.com/webstore/detail/4chan-x/ohnjgmpcibpbafdlkimncjhflgedgpam">install 4chan X from the Chrome store</a></strong>.</li> <li><strong>Chromium</strong>, <strong>Chrome</strong>, and <strong>Vivaldi</strong> users can <strong><a href="https://chrome.google.com/webstore/detail/4chan-x/ohnjgmpcibpbafdlkimncjhflgedgpam">install 4chan X from the Chrome store</a></strong>.</li>
<li><strong>Chromium</strong> users can alternately <strong><a href="https://ccd0.github.io/4chan-x/builds/4chan-X.crx">download 4chan X from Github</a></strong>, then drag it to your <code>chrome://extensions</code> page. This will also work for Chrome dev/canary, and Chrome on platforms other than Windows.</li>
<li><strong>Opera</strong> users can click to <strong><a href="https://ccd0.github.io/4chan-x/builds/4chan-X.crx">download 4chan X from Github</a></strong>, then follow the prompts to activate it in your extension manager. Note: This version does not work with Opera 12; try <a href="https://github.com/loadletter/4chan-x">loadletter&#39;s fork</a> instead.</li> <li><strong>Opera</strong> users can click to <strong><a href="https://ccd0.github.io/4chan-x/builds/4chan-X.crx">download 4chan X from Github</a></strong>, then follow the prompts to activate it in your extension manager. Note: This version does not work with Opera 12; try <a href="https://github.com/loadletter/4chan-x">loadletter&#39;s fork</a> instead.</li>
<li>You can alternately <strong><a href="https://ccd0.github.io/4chan-x/builds/4chan-X.crx">download 4chan X from Github</a></strong>, then drag it to your <code>chrome://extensions</code> page. This will not work for the stable or beta versions of Chrome on Windows, which block extensions not from the Chrome store.</li>
</ul> </ul>
<p>You can also use the <a href="https://ccd0.github.io/4chan-x/builds/4chan-X.user.js">userscript version of 4chan X</a> with <a href="https://tampermonkey.net/">Tampermonkey</a>.</p> <p>You can also use the <a href="https://ccd0.github.io/4chan-x/builds/4chan-X.user.js">userscript version of 4chan X</a> with <a href="https://tampermonkey.net/">Tampermonkey</a>.</p>
</div><input hidden type="checkbox" id="safari-hide"><div><label for="safari-hide"><h3 id="safari">Safari</h3></label> </div><input hidden type="checkbox" id="safari-hide"><div><label for="safari-hide"><h3 id="safari">Safari</h3></label>

View File

@ -3,8 +3,8 @@
"description": "Cross-browser userscript for maximum lurking on 4chan.", "description": "Cross-browser userscript for maximum lurking on 4chan.",
"meta": { "meta": {
"name": "4chan X", "name": "4chan X",
"version": "1.11.5.2", "version": "1.11.6.0",
"date": "2015-07-15T21:17:03.431Z", "date": "2015-07-20T02:05:39.061Z",
"repo": "https://github.com/ccd0/4chan-x/", "repo": "https://github.com/ccd0/4chan-x/",
"page": "https://github.com/ccd0/4chan-x", "page": "https://github.com/ccd0/4chan-x",
"downloads": "https://ccd0.github.io/4chan-x/builds/", "downloads": "https://ccd0.github.io/4chan-x/builds/",

View File

@ -75,7 +75,7 @@ Main =
when 'sys.4chan.org' when 'sys.4chan.org'
Report.init() Report.init()
PostSuccessful.init() if g.VIEW is 'post' PostSuccessful.init() if g.VIEW is 'post'
if /\/imgboard\.php$/.test(location.pathname) and (match = location.search.match /\bres=(\d+)/) if Conf['404 Redirect'] and /\/imgboard\.php$/.test(location.pathname) and (match = location.search.match /\bres=(\d+)/)
$.ready -> $.ready ->
if $.id('errmsg')?.textContent is 'Error: Specified thread does not exist.' if $.id('errmsg')?.textContent is 'Error: Specified thread does not exist.'
Redirect.navigate 'thread', Redirect.navigate 'thread',