diff --git a/CHANGELOG.md b/CHANGELOG.md
index 359178d93..dfbb02ded 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,15 @@
+### v1.8.9.7
+*2014-08-13*
+
+**ccd0**
+- Relabel the former email field as `Options` (unless `Show Name and Subject` is checked).
+
+### v1.8.9.6
+*2014-08-12*
+
+**ccd0**
+- 4chan update: Indicate death of threads with delayed pruning on /a/ and /v/.
+
### v1.8.9.5
*2014-08-12*
diff --git a/LICENSE b/LICENSE
index 4f8c1674a..6ead92c75 100755
--- a/LICENSE
+++ b/LICENSE
@@ -1,5 +1,5 @@
/*
-* 4chan X - Version 1.8.9.5
+* 4chan X - Version 1.8.9.7
*
* Licensed under the MIT license.
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
diff --git a/builds/4chan-X-beta.crx b/builds/4chan-X-beta.crx
index 667e77854..33b326424 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 b13936f7e..0471ed847 100644
--- a/builds/4chan-X-beta.meta.js
+++ b/builds/4chan-X-beta.meta.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 4chan X
-// @version 1.8.9.5
+// @version 1.8.9.7
// @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 d9287a532..1c1e4f806 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
-// @version 1.8.9.5
+// @version 1.8.9.7
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@@ -24,7 +24,7 @@
// ==/UserScript==
/*
-* 4chan X - Version 1.8.9.5
+* 4chan X - Version 1.8.9.7
*
* Licensed under the MIT license.
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
@@ -222,7 +222,7 @@
'Remember Subject': [false, 'Remember the subject field, instead of resetting after posting.'],
'Remember QR Size': [false, 'Remember the size of the Quick reply.'],
'Remember Spoiler': [false, 'Remember the spoiler state, instead of resetting after posting.'],
- 'Show Name and Subject': [false, 'Always show name and subject fields in the QR even when 4chan doesn\'t use them.'],
+ 'Show Name and Subject': [false, 'Show the classic name, email, and subject fields in the QR, even when 4chan doesn\'t use them all.'],
'Hide Original Post Form': [true, 'Hide the normal post form.'],
'Cooldown': [true, 'Indicate the remaining time before posting again.'],
'Cooldown Prediction': [true, 'Decrease the cooldown time by taking into account upload speed. Disable it if it\'s inaccurate for you.'],
@@ -313,7 +313,7 @@
},
boardnav: "[ toggle-all ]\na-replace\nc-replace\ng-replace\nk-replace\nv-replace\nvg-replace\nvr-replace\nck-replace\nco-replace\nfit-replace\njp-replace\nmu-replace\nsp-replace\ntv-replace\nvp-replace\n[external-text:\"FAQ\",\"https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions\"]",
QR: {
- 'QR.personas': "#email:\"sage\";boards:jp;always"
+ 'QR.personas': "#options:\"sage\";boards:jp;always"
},
time: '%m/%d/%y(%a)%H:%M:%S',
backlink: '>>%id',
@@ -380,7 +380,7 @@
doc = d.documentElement;
g = {
- VERSION: '1.8.9.5',
+ VERSION: '1.8.9.7',
NAMESPACE: '4chan X.',
NAME: '4chan X',
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
@@ -6418,7 +6418,7 @@
var dialog, elm, event, i, items, name, node, nodes, prop, rules, save, setNode, _, _i, _len, _ref, _ref1, _ref2;
QR.nodes = nodes = {
el: dialog = UI.dialog('qr', 'top:0;right:0;', {
- innerHTML: "
"
+ innerHTML: "
No selected file
"
})
};
setNode = function(name, query) {
@@ -6469,6 +6469,7 @@
if (Conf['Show Name and Subject']) {
$.addClass(QR.nodes.name, 'force-show');
$.addClass(QR.nodes.sub, 'force-show');
+ QR.nodes.email.placeholder = 'E-mail';
}
QR.forcedAnon = !!$('.postForm input[name=name][type=hidden]');
if (QR.forcedAnon) {
@@ -7193,7 +7194,7 @@
if (item[0] === '#') {
return;
}
- if (!(match = item.match(/(name|email|subject|password):"(.*)"/i))) {
+ if (!(match = item.match(/(name|options|email|subject|password):"(.*)"/i))) {
return;
}
_ref = match, match = _ref[0], type = _ref[1], val = _ref[2];
@@ -7206,6 +7207,9 @@
QR.persona.pwd = val;
return;
}
+ if (type === 'options') {
+ type = 'email';
+ }
if (type === 'subject') {
type = 'sub';
}
@@ -9995,7 +9999,11 @@
$.on(window, 'online offline', ThreadUpdater.cb.online);
$.on(d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost);
$.on(d, 'visibilitychange', ThreadUpdater.cb.visibility);
- return ThreadUpdater.cb.online();
+ if (g.DEAD) {
+ return ThreadUpdater.set('status', 'Archived', 'warning');
+ } else {
+ return ThreadUpdater.cb.online();
+ }
},
/*
@@ -10005,6 +10013,9 @@
beep: 'data:audio/wav;base64,UklGRjQDAABXQVZFZm10IBAAAAABAAEAgD4AAIA+AAABAAgAc21wbDwAAABBAAADAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkYXRhzAIAAGMms8em0tleMV4zIpLVo8nhfSlcPR102Ki+5JspVEkdVtKzs+K1NEhUIT7DwKrcy0g6WygsrM2k1NpiLl0zIY/WpMrjgCdbPhxw2Kq+5Z4qUkkdU9K1s+K5NkVTITzBwqnczko3WikrqM+l1NxlLF0zIIvXpsnjgydZPhxs2ay95aIrUEkdUdC3suK8N0NUIjq+xKrcz002WioppdGm091pK1w0IIjYp8jkhydXPxxq2K295aUrTkoeTs65suK+OUFUIzi7xqrb0VA0WSoootKm0t5tKlo1H4TYqMfkiydWQBxm16+85actTEseS8y7seHAPD9TIza5yKra01QyWSson9On0d5wKVk2H4DYqcfkjidUQB1j1rG75KsvSkseScu8seDCPz1TJDW2yara1FYxWSwnm9Sn0N9zKVg2H33ZqsXkkihSQR1g1bK65K0wSEsfR8i+seDEQTxUJTOzy6rY1VowWC0mmNWoz993KVc3H3rYq8TklSlRQh1d1LS647AyR0wgRMbAsN/GRDpTJTKwzKrX1l4vVy4lldWpzt97KVY4IXbUr8LZljVPRCxhw7W3z6ZISkw1VK+4sMWvXEhSPk6buay9sm5JVkZNiLWqtrJ+TldNTnquqbCwilZXU1BwpKirrpNgWFhTaZmnpquZbFlbVmWOpaOonHZcXlljhaGhpZ1+YWBdYn2cn6GdhmdhYGN3lp2enIttY2Jjco+bnJuOdGZlZXCImJqakHpoZ2Zug5WYmZJ/bGlobX6RlpeSg3BqaW16jZSVkoZ0bGtteImSk5KIeG5tbnaFkJKRinxxbm91gY2QkIt/c3BwdH6Kj4+LgnZxcXR8iI2OjIR5c3J0e4WLjYuFe3VzdHmCioyLhn52dHR5gIiKioeAeHV1eH+GiYqHgXp2dnh9hIiJh4J8eHd4fIKHiIeDfXl4eHyBhoeHhH96eHmA',
cb: {
online: function() {
+ if (g.DEAD) {
+ return;
+ }
if (ThreadUpdater.online = navigator.onLine) {
ThreadUpdater.outdateCount = 0;
ThreadUpdater.setInterval();
@@ -10070,20 +10081,19 @@
req = ThreadUpdater.req;
switch (req.status) {
case 200:
- g.DEAD = false;
+ g.DEAD = !!+req.response.posts[0].archived;
ThreadUpdater.parse(req.response.posts);
- ThreadUpdater.setInterval();
+ if (g.DEAD) {
+ ThreadUpdater.set('status', 'Archived', 'warning');
+ ThreadUpdater.kill();
+ } else {
+ ThreadUpdater.setInterval();
+ }
break;
case 404:
g.DEAD = true;
- ThreadUpdater.set('timer', null);
ThreadUpdater.set('status', '404', 'warning');
- clearTimeout(ThreadUpdater.timeoutID);
- ThreadUpdater.thread.kill();
- $.event('ThreadUpdate', {
- 404: true,
- threadID: ThreadUpdater.thread.fullID
- });
+ ThreadUpdater.kill();
break;
default:
ThreadUpdater.outdateCount++;
@@ -10096,6 +10106,15 @@
}
}
},
+ kill: function() {
+ ThreadUpdater.set('timer', null);
+ clearTimeout(ThreadUpdater.timeoutID);
+ ThreadUpdater.thread.kill();
+ return $.event('ThreadUpdate', {
+ 404: true,
+ threadID: ThreadUpdater.thread.fullID
+ });
+ },
setInterval: function() {
var cur, i, j, limit;
i = ThreadUpdater.interval + 1;
@@ -12742,7 +12761,7 @@
className: 'dialog'
});
$.extend(dialog, {
- innerHTML: "
"
+ innerHTML: "
"
});
$.on($('.export', Settings.dialog), 'click', Settings["export"]);
$.on($('.import', Settings.dialog), 'click', Settings["import"]);
@@ -13083,7 +13102,7 @@
advanced: function(section) {
var archBoards, boardID, boardOptions, boardSelect, boards, customCSS, event, files, i, input, inputs, interval, item, items, name, o, row, rows, software, ta, table, warning, withCredentials, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _len6, _m, _n, _o, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6;
$.extend(section, {
- innerHTML: "Archiver 404 Redirect is disabled.
Thread redirection Post fetching File redirection
Custom Board Navigation
New lines will be converted into spaces. In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
Board link: g
Title link: g-title
Board link (Replace with title when on that board): g-replace
Full text link: g-full
Custom text link: g-text:\"Install Gentoo\"
Index-only link: g-index
Catalog-only link: g-catalog
External link: external-text:\"Google\",\"http://www.google.com\"
Combinations are possible: g-index-text:\"Technology Index\"
Full board list toggle: toggle-all
[ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"] will give you[ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy] if you are on /g/.
Time Formatting is disabled. :
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
Hour: %k, %H, %l, %I, %p, %P
Minute: %M
Second: %S
Literal %: %%
Quote Backlinks formatting is disabled. :
File Info Formatting is disabled. :
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
Spoiler indicator: %p
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
Resolution: %r (Displays 'PDF' for PDF files)
Literal %: %%
Quick Reply Personas One item per line. Items will be added in the relevant input's auto-completion list. Password items will always be used, since there is no password input. Lines starting with a # will be ignored.
You can use these settings with each item, separate them with semicolons:Possible items are: name, email, subject and password. Wrap values of items with quotes, like this: email:\"sage\". Force values as defaults with the always keyword, for example: email:\"sage\";always. Select specific boards for an item, separated with commas, for example: email:\"sage\";boards:jp;always. Unread Favicon is disabled. ferongr xat- 4chanJS Mayhem Original Metro Emoji is disabled. Sage Icon:
4chan SS appchan Position: Before After
Thread Updater is disabled. Interval:
Custom CSSApply CSS "
+ innerHTML: "Archiver 404 Redirect is disabled.
Thread redirection Post fetching File redirection
Custom Board Navigation
New lines will be converted into spaces. In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
Board link: g
Title link: g-title
Board link (Replace with title when on that board): g-replace
Full text link: g-full
Custom text link: g-text:\"Install Gentoo\"
Index-only link: g-index
Catalog-only link: g-catalog
External link: external-text:\"Google\",\"http://www.google.com\"
Combinations are possible: g-index-text:\"Technology Index\"
Full board list toggle: toggle-all
[ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"] will give you[ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy] if you are on /g/.
Time Formatting is disabled. :
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
Hour: %k, %H, %l, %I, %p, %P
Minute: %M
Second: %S
Literal %: %%
Quote Backlinks formatting is disabled. :
File Info Formatting is disabled. :
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
Spoiler indicator: %p
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
Resolution: %r (Displays 'PDF' for PDF files)
Literal %: %%
Quick Reply Personas One item per line. Items will be added in the relevant input's auto-completion list. Password items will always be used, since there is no password input. Lines starting with a # will be ignored.
You can use these settings with each item, separate them with semicolons:Possible items are: name, options (or equivalently email), subject and password. Wrap values of items with quotes, like this: options:\"sage\". Force values as defaults with the always keyword, for example: options:\"sage\";always. Select specific boards for an item, separated with commas, for example: options:\"sage\";boards:jp;always. Unread Favicon is disabled. ferongr xat- 4chanJS Mayhem Original Metro Emoji is disabled. Sage Icon:
4chan SS appchan Position: Before After
Thread Updater is disabled. Interval:
Custom CSSApply CSS "
});
_ref = $$('.warning', section);
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
@@ -13549,18 +13568,19 @@
}
},
initThread: function() {
- var board, err, errors, postRoot, posts, thread, threadRoot, threads, _i, _j, _len, _len1, _ref, _ref1;
+ var board, err, errors, postRoot, posts, thread, threadRoot, threads, _i, _j, _len, _len1, _ref, _ref1, _ref2;
+ g.DEAD = !!((_ref = $('.closed')) != null ? _ref.textContent.match(/Thread archived/) : void 0);
if (board = $('.board')) {
threads = [];
posts = [];
- _ref = $$('.board > .thread', board);
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- threadRoot = _ref[_i];
+ _ref1 = $$('.board > .thread', board);
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+ threadRoot = _ref1[_i];
thread = new Thread(+threadRoot.id.slice(1), g.BOARD);
threads.push(thread);
- _ref1 = $$('.thread > .postContainer', threadRoot);
- for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
- postRoot = _ref1[_j];
+ _ref2 = $$('.thread > .postContainer', threadRoot);
+ for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
+ postRoot = _ref2[_j];
try {
posts.push(new Post(postRoot, thread, g.BOARD));
} catch (_error) {
diff --git a/builds/4chan-X-noupdate.crx b/builds/4chan-X-noupdate.crx
index b0f06132a..ebccc846e 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 52cf6f725..321e89f85 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.8.9.5
+// @version 1.8.9.7
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@@ -23,7 +23,7 @@
// ==/UserScript==
/*
-* 4chan X - Version 1.8.9.5
+* 4chan X - Version 1.8.9.7
*
* Licensed under the MIT license.
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
@@ -221,7 +221,7 @@
'Remember Subject': [false, 'Remember the subject field, instead of resetting after posting.'],
'Remember QR Size': [false, 'Remember the size of the Quick reply.'],
'Remember Spoiler': [false, 'Remember the spoiler state, instead of resetting after posting.'],
- 'Show Name and Subject': [false, 'Always show name and subject fields in the QR even when 4chan doesn\'t use them.'],
+ 'Show Name and Subject': [false, 'Show the classic name, email, and subject fields in the QR, even when 4chan doesn\'t use them all.'],
'Hide Original Post Form': [true, 'Hide the normal post form.'],
'Cooldown': [true, 'Indicate the remaining time before posting again.'],
'Cooldown Prediction': [true, 'Decrease the cooldown time by taking into account upload speed. Disable it if it\'s inaccurate for you.'],
@@ -312,7 +312,7 @@
},
boardnav: "[ toggle-all ]\na-replace\nc-replace\ng-replace\nk-replace\nv-replace\nvg-replace\nvr-replace\nck-replace\nco-replace\nfit-replace\njp-replace\nmu-replace\nsp-replace\ntv-replace\nvp-replace\n[external-text:\"FAQ\",\"https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions\"]",
QR: {
- 'QR.personas': "#email:\"sage\";boards:jp;always"
+ 'QR.personas': "#options:\"sage\";boards:jp;always"
},
time: '%m/%d/%y(%a)%H:%M:%S',
backlink: '>>%id',
@@ -379,7 +379,7 @@
doc = d.documentElement;
g = {
- VERSION: '1.8.9.5',
+ VERSION: '1.8.9.7',
NAMESPACE: '4chan X.',
NAME: '4chan X',
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
@@ -6417,7 +6417,7 @@
var dialog, elm, event, i, items, name, node, nodes, prop, rules, save, setNode, _, _i, _len, _ref, _ref1, _ref2;
QR.nodes = nodes = {
el: dialog = UI.dialog('qr', 'top:0;right:0;', {
- innerHTML: "
No selected file
"
+ innerHTML: "
No selected file
"
})
};
setNode = function(name, query) {
@@ -6468,6 +6468,7 @@
if (Conf['Show Name and Subject']) {
$.addClass(QR.nodes.name, 'force-show');
$.addClass(QR.nodes.sub, 'force-show');
+ QR.nodes.email.placeholder = 'E-mail';
}
QR.forcedAnon = !!$('.postForm input[name=name][type=hidden]');
if (QR.forcedAnon) {
@@ -7192,7 +7193,7 @@
if (item[0] === '#') {
return;
}
- if (!(match = item.match(/(name|email|subject|password):"(.*)"/i))) {
+ if (!(match = item.match(/(name|options|email|subject|password):"(.*)"/i))) {
return;
}
_ref = match, match = _ref[0], type = _ref[1], val = _ref[2];
@@ -7205,6 +7206,9 @@
QR.persona.pwd = val;
return;
}
+ if (type === 'options') {
+ type = 'email';
+ }
if (type === 'subject') {
type = 'sub';
}
@@ -9994,7 +9998,11 @@
$.on(window, 'online offline', ThreadUpdater.cb.online);
$.on(d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost);
$.on(d, 'visibilitychange', ThreadUpdater.cb.visibility);
- return ThreadUpdater.cb.online();
+ if (g.DEAD) {
+ return ThreadUpdater.set('status', 'Archived', 'warning');
+ } else {
+ return ThreadUpdater.cb.online();
+ }
},
/*
@@ -10004,6 +10012,9 @@
beep: 'data:audio/wav;base64,UklGRjQDAABXQVZFZm10IBAAAAABAAEAgD4AAIA+AAABAAgAc21wbDwAAABBAAADAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkYXRhzAIAAGMms8em0tleMV4zIpLVo8nhfSlcPR102Ki+5JspVEkdVtKzs+K1NEhUIT7DwKrcy0g6WygsrM2k1NpiLl0zIY/WpMrjgCdbPhxw2Kq+5Z4qUkkdU9K1s+K5NkVTITzBwqnczko3WikrqM+l1NxlLF0zIIvXpsnjgydZPhxs2ay95aIrUEkdUdC3suK8N0NUIjq+xKrcz002WioppdGm091pK1w0IIjYp8jkhydXPxxq2K295aUrTkoeTs65suK+OUFUIzi7xqrb0VA0WSoootKm0t5tKlo1H4TYqMfkiydWQBxm16+85actTEseS8y7seHAPD9TIza5yKra01QyWSson9On0d5wKVk2H4DYqcfkjidUQB1j1rG75KsvSkseScu8seDCPz1TJDW2yara1FYxWSwnm9Sn0N9zKVg2H33ZqsXkkihSQR1g1bK65K0wSEsfR8i+seDEQTxUJTOzy6rY1VowWC0mmNWoz993KVc3H3rYq8TklSlRQh1d1LS647AyR0wgRMbAsN/GRDpTJTKwzKrX1l4vVy4lldWpzt97KVY4IXbUr8LZljVPRCxhw7W3z6ZISkw1VK+4sMWvXEhSPk6buay9sm5JVkZNiLWqtrJ+TldNTnquqbCwilZXU1BwpKirrpNgWFhTaZmnpquZbFlbVmWOpaOonHZcXlljhaGhpZ1+YWBdYn2cn6GdhmdhYGN3lp2enIttY2Jjco+bnJuOdGZlZXCImJqakHpoZ2Zug5WYmZJ/bGlobX6RlpeSg3BqaW16jZSVkoZ0bGtteImSk5KIeG5tbnaFkJKRinxxbm91gY2QkIt/c3BwdH6Kj4+LgnZxcXR8iI2OjIR5c3J0e4WLjYuFe3VzdHmCioyLhn52dHR5gIiKioeAeHV1eH+GiYqHgXp2dnh9hIiJh4J8eHd4fIKHiIeDfXl4eHyBhoeHhH96eHmA',
cb: {
online: function() {
+ if (g.DEAD) {
+ return;
+ }
if (ThreadUpdater.online = navigator.onLine) {
ThreadUpdater.outdateCount = 0;
ThreadUpdater.setInterval();
@@ -10069,20 +10080,19 @@
req = ThreadUpdater.req;
switch (req.status) {
case 200:
- g.DEAD = false;
+ g.DEAD = !!+req.response.posts[0].archived;
ThreadUpdater.parse(req.response.posts);
- ThreadUpdater.setInterval();
+ if (g.DEAD) {
+ ThreadUpdater.set('status', 'Archived', 'warning');
+ ThreadUpdater.kill();
+ } else {
+ ThreadUpdater.setInterval();
+ }
break;
case 404:
g.DEAD = true;
- ThreadUpdater.set('timer', null);
ThreadUpdater.set('status', '404', 'warning');
- clearTimeout(ThreadUpdater.timeoutID);
- ThreadUpdater.thread.kill();
- $.event('ThreadUpdate', {
- 404: true,
- threadID: ThreadUpdater.thread.fullID
- });
+ ThreadUpdater.kill();
break;
default:
ThreadUpdater.outdateCount++;
@@ -10095,6 +10105,15 @@
}
}
},
+ kill: function() {
+ ThreadUpdater.set('timer', null);
+ clearTimeout(ThreadUpdater.timeoutID);
+ ThreadUpdater.thread.kill();
+ return $.event('ThreadUpdate', {
+ 404: true,
+ threadID: ThreadUpdater.thread.fullID
+ });
+ },
setInterval: function() {
var cur, i, j, limit;
i = ThreadUpdater.interval + 1;
@@ -12741,7 +12760,7 @@
className: 'dialog'
});
$.extend(dialog, {
- innerHTML: "
"
+ innerHTML: "
"
});
$.on($('.export', Settings.dialog), 'click', Settings["export"]);
$.on($('.import', Settings.dialog), 'click', Settings["import"]);
@@ -13082,7 +13101,7 @@
advanced: function(section) {
var archBoards, boardID, boardOptions, boardSelect, boards, customCSS, event, files, i, input, inputs, interval, item, items, name, o, row, rows, software, ta, table, warning, withCredentials, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _len6, _m, _n, _o, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6;
$.extend(section, {
- innerHTML: "Archiver 404 Redirect is disabled.
Thread redirection Post fetching File redirection
Custom Board Navigation
New lines will be converted into spaces. In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
Board link: g
Title link: g-title
Board link (Replace with title when on that board): g-replace
Full text link: g-full
Custom text link: g-text:\"Install Gentoo\"
Index-only link: g-index
Catalog-only link: g-catalog
External link: external-text:\"Google\",\"http://www.google.com\"
Combinations are possible: g-index-text:\"Technology Index\"
Full board list toggle: toggle-all
[ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"] will give you[ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy] if you are on /g/.
Time Formatting is disabled. :
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
Hour: %k, %H, %l, %I, %p, %P
Minute: %M
Second: %S
Literal %: %%
Quote Backlinks formatting is disabled. :
File Info Formatting is disabled. :
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
Spoiler indicator: %p
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
Resolution: %r (Displays 'PDF' for PDF files)
Literal %: %%
Quick Reply Personas One item per line. Items will be added in the relevant input's auto-completion list. Password items will always be used, since there is no password input. Lines starting with a # will be ignored.
You can use these settings with each item, separate them with semicolons:Possible items are: name, email, subject and password. Wrap values of items with quotes, like this: email:\"sage\". Force values as defaults with the always keyword, for example: email:\"sage\";always. Select specific boards for an item, separated with commas, for example: email:\"sage\";boards:jp;always. Unread Favicon is disabled. ferongr xat- 4chanJS Mayhem Original Metro Emoji is disabled. Sage Icon:
4chan SS appchan Position: Before After
Thread Updater is disabled. Interval:
Custom CSSApply CSS "
+ innerHTML: "Archiver 404 Redirect is disabled.
Thread redirection Post fetching File redirection
Custom Board Navigation
New lines will be converted into spaces. In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
Board link: g
Title link: g-title
Board link (Replace with title when on that board): g-replace
Full text link: g-full
Custom text link: g-text:\"Install Gentoo\"
Index-only link: g-index
Catalog-only link: g-catalog
External link: external-text:\"Google\",\"http://www.google.com\"
Combinations are possible: g-index-text:\"Technology Index\"
Full board list toggle: toggle-all
[ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"] will give you[ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy] if you are on /g/.
Time Formatting is disabled. :
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
Hour: %k, %H, %l, %I, %p, %P
Minute: %M
Second: %S
Literal %: %%
Quote Backlinks formatting is disabled. :
File Info Formatting is disabled. :
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
Spoiler indicator: %p
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
Resolution: %r (Displays 'PDF' for PDF files)
Literal %: %%
Quick Reply Personas One item per line. Items will be added in the relevant input's auto-completion list. Password items will always be used, since there is no password input. Lines starting with a # will be ignored.
You can use these settings with each item, separate them with semicolons:Possible items are: name, options (or equivalently email), subject and password. Wrap values of items with quotes, like this: options:\"sage\". Force values as defaults with the always keyword, for example: options:\"sage\";always. Select specific boards for an item, separated with commas, for example: options:\"sage\";boards:jp;always. Unread Favicon is disabled. ferongr xat- 4chanJS Mayhem Original Metro Emoji is disabled. Sage Icon:
4chan SS appchan Position: Before After
Thread Updater is disabled. Interval:
Custom CSSApply CSS "
});
_ref = $$('.warning', section);
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
@@ -13548,18 +13567,19 @@
}
},
initThread: function() {
- var board, err, errors, postRoot, posts, thread, threadRoot, threads, _i, _j, _len, _len1, _ref, _ref1;
+ var board, err, errors, postRoot, posts, thread, threadRoot, threads, _i, _j, _len, _len1, _ref, _ref1, _ref2;
+ g.DEAD = !!((_ref = $('.closed')) != null ? _ref.textContent.match(/Thread archived/) : void 0);
if (board = $('.board')) {
threads = [];
posts = [];
- _ref = $$('.board > .thread', board);
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- threadRoot = _ref[_i];
+ _ref1 = $$('.board > .thread', board);
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+ threadRoot = _ref1[_i];
thread = new Thread(+threadRoot.id.slice(1), g.BOARD);
threads.push(thread);
- _ref1 = $$('.thread > .postContainer', threadRoot);
- for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
- postRoot = _ref1[_j];
+ _ref2 = $$('.thread > .postContainer', threadRoot);
+ for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
+ postRoot = _ref2[_j];
try {
posts.push(new Post(postRoot, thread, g.BOARD));
} catch (_error) {
diff --git a/builds/4chan-X.crx b/builds/4chan-X.crx
index ff1c21d40..cb2820d4b 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 7a6a028d8..bc91c4ea3 100644
--- a/builds/4chan-X.meta.js
+++ b/builds/4chan-X.meta.js
@@ -1,6 +1,6 @@
// ==UserScript==
// @name 4chan X
-// @version 1.8.9.5
+// @version 1.8.9.7
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js
index 8d75a1ed5..826687164 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.8.9.5
+// @version 1.8.9.7
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@@ -24,7 +24,7 @@
// ==/UserScript==
/*
-* 4chan X - Version 1.8.9.5
+* 4chan X - Version 1.8.9.7
*
* Licensed under the MIT license.
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
@@ -222,7 +222,7 @@
'Remember Subject': [false, 'Remember the subject field, instead of resetting after posting.'],
'Remember QR Size': [false, 'Remember the size of the Quick reply.'],
'Remember Spoiler': [false, 'Remember the spoiler state, instead of resetting after posting.'],
- 'Show Name and Subject': [false, 'Always show name and subject fields in the QR even when 4chan doesn\'t use them.'],
+ 'Show Name and Subject': [false, 'Show the classic name, email, and subject fields in the QR, even when 4chan doesn\'t use them all.'],
'Hide Original Post Form': [true, 'Hide the normal post form.'],
'Cooldown': [true, 'Indicate the remaining time before posting again.'],
'Cooldown Prediction': [true, 'Decrease the cooldown time by taking into account upload speed. Disable it if it\'s inaccurate for you.'],
@@ -313,7 +313,7 @@
},
boardnav: "[ toggle-all ]\na-replace\nc-replace\ng-replace\nk-replace\nv-replace\nvg-replace\nvr-replace\nck-replace\nco-replace\nfit-replace\njp-replace\nmu-replace\nsp-replace\ntv-replace\nvp-replace\n[external-text:\"FAQ\",\"https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions\"]",
QR: {
- 'QR.personas': "#email:\"sage\";boards:jp;always"
+ 'QR.personas': "#options:\"sage\";boards:jp;always"
},
time: '%m/%d/%y(%a)%H:%M:%S',
backlink: '>>%id',
@@ -380,7 +380,7 @@
doc = d.documentElement;
g = {
- VERSION: '1.8.9.5',
+ VERSION: '1.8.9.7',
NAMESPACE: '4chan X.',
NAME: '4chan X',
FAQ: 'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions',
@@ -6418,7 +6418,7 @@
var dialog, elm, event, i, items, name, node, nodes, prop, rules, save, setNode, _, _i, _len, _ref, _ref1, _ref2;
QR.nodes = nodes = {
el: dialog = UI.dialog('qr', 'top:0;right:0;', {
- innerHTML: "
No selected file
"
+ innerHTML: "
No selected file
"
})
};
setNode = function(name, query) {
@@ -6469,6 +6469,7 @@
if (Conf['Show Name and Subject']) {
$.addClass(QR.nodes.name, 'force-show');
$.addClass(QR.nodes.sub, 'force-show');
+ QR.nodes.email.placeholder = 'E-mail';
}
QR.forcedAnon = !!$('.postForm input[name=name][type=hidden]');
if (QR.forcedAnon) {
@@ -7193,7 +7194,7 @@
if (item[0] === '#') {
return;
}
- if (!(match = item.match(/(name|email|subject|password):"(.*)"/i))) {
+ if (!(match = item.match(/(name|options|email|subject|password):"(.*)"/i))) {
return;
}
_ref = match, match = _ref[0], type = _ref[1], val = _ref[2];
@@ -7206,6 +7207,9 @@
QR.persona.pwd = val;
return;
}
+ if (type === 'options') {
+ type = 'email';
+ }
if (type === 'subject') {
type = 'sub';
}
@@ -9995,7 +9999,11 @@
$.on(window, 'online offline', ThreadUpdater.cb.online);
$.on(d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost);
$.on(d, 'visibilitychange', ThreadUpdater.cb.visibility);
- return ThreadUpdater.cb.online();
+ if (g.DEAD) {
+ return ThreadUpdater.set('status', 'Archived', 'warning');
+ } else {
+ return ThreadUpdater.cb.online();
+ }
},
/*
@@ -10005,6 +10013,9 @@
beep: 'data:audio/wav;base64,UklGRjQDAABXQVZFZm10IBAAAAABAAEAgD4AAIA+AAABAAgAc21wbDwAAABBAAADAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkYXRhzAIAAGMms8em0tleMV4zIpLVo8nhfSlcPR102Ki+5JspVEkdVtKzs+K1NEhUIT7DwKrcy0g6WygsrM2k1NpiLl0zIY/WpMrjgCdbPhxw2Kq+5Z4qUkkdU9K1s+K5NkVTITzBwqnczko3WikrqM+l1NxlLF0zIIvXpsnjgydZPhxs2ay95aIrUEkdUdC3suK8N0NUIjq+xKrcz002WioppdGm091pK1w0IIjYp8jkhydXPxxq2K295aUrTkoeTs65suK+OUFUIzi7xqrb0VA0WSoootKm0t5tKlo1H4TYqMfkiydWQBxm16+85actTEseS8y7seHAPD9TIza5yKra01QyWSson9On0d5wKVk2H4DYqcfkjidUQB1j1rG75KsvSkseScu8seDCPz1TJDW2yara1FYxWSwnm9Sn0N9zKVg2H33ZqsXkkihSQR1g1bK65K0wSEsfR8i+seDEQTxUJTOzy6rY1VowWC0mmNWoz993KVc3H3rYq8TklSlRQh1d1LS647AyR0wgRMbAsN/GRDpTJTKwzKrX1l4vVy4lldWpzt97KVY4IXbUr8LZljVPRCxhw7W3z6ZISkw1VK+4sMWvXEhSPk6buay9sm5JVkZNiLWqtrJ+TldNTnquqbCwilZXU1BwpKirrpNgWFhTaZmnpquZbFlbVmWOpaOonHZcXlljhaGhpZ1+YWBdYn2cn6GdhmdhYGN3lp2enIttY2Jjco+bnJuOdGZlZXCImJqakHpoZ2Zug5WYmZJ/bGlobX6RlpeSg3BqaW16jZSVkoZ0bGtteImSk5KIeG5tbnaFkJKRinxxbm91gY2QkIt/c3BwdH6Kj4+LgnZxcXR8iI2OjIR5c3J0e4WLjYuFe3VzdHmCioyLhn52dHR5gIiKioeAeHV1eH+GiYqHgXp2dnh9hIiJh4J8eHd4fIKHiIeDfXl4eHyBhoeHhH96eHmA',
cb: {
online: function() {
+ if (g.DEAD) {
+ return;
+ }
if (ThreadUpdater.online = navigator.onLine) {
ThreadUpdater.outdateCount = 0;
ThreadUpdater.setInterval();
@@ -10070,20 +10081,19 @@
req = ThreadUpdater.req;
switch (req.status) {
case 200:
- g.DEAD = false;
+ g.DEAD = !!+req.response.posts[0].archived;
ThreadUpdater.parse(req.response.posts);
- ThreadUpdater.setInterval();
+ if (g.DEAD) {
+ ThreadUpdater.set('status', 'Archived', 'warning');
+ ThreadUpdater.kill();
+ } else {
+ ThreadUpdater.setInterval();
+ }
break;
case 404:
g.DEAD = true;
- ThreadUpdater.set('timer', null);
ThreadUpdater.set('status', '404', 'warning');
- clearTimeout(ThreadUpdater.timeoutID);
- ThreadUpdater.thread.kill();
- $.event('ThreadUpdate', {
- 404: true,
- threadID: ThreadUpdater.thread.fullID
- });
+ ThreadUpdater.kill();
break;
default:
ThreadUpdater.outdateCount++;
@@ -10096,6 +10106,15 @@
}
}
},
+ kill: function() {
+ ThreadUpdater.set('timer', null);
+ clearTimeout(ThreadUpdater.timeoutID);
+ ThreadUpdater.thread.kill();
+ return $.event('ThreadUpdate', {
+ 404: true,
+ threadID: ThreadUpdater.thread.fullID
+ });
+ },
setInterval: function() {
var cur, i, j, limit;
i = ThreadUpdater.interval + 1;
@@ -12742,7 +12761,7 @@
className: 'dialog'
});
$.extend(dialog, {
- innerHTML: "
"
+ innerHTML: "
"
});
$.on($('.export', Settings.dialog), 'click', Settings["export"]);
$.on($('.import', Settings.dialog), 'click', Settings["import"]);
@@ -13083,7 +13102,7 @@
advanced: function(section) {
var archBoards, boardID, boardOptions, boardSelect, boards, customCSS, event, files, i, input, inputs, interval, item, items, name, o, row, rows, software, ta, table, warning, withCredentials, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _len6, _m, _n, _o, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6;
$.extend(section, {
- innerHTML: "Archiver 404 Redirect is disabled.
Thread redirection Post fetching File redirection
Custom Board Navigation
New lines will be converted into spaces. In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
Board link: g
Title link: g-title
Board link (Replace with title when on that board): g-replace
Full text link: g-full
Custom text link: g-text:\"Install Gentoo\"
Index-only link: g-index
Catalog-only link: g-catalog
External link: external-text:\"Google\",\"http://www.google.com\"
Combinations are possible: g-index-text:\"Technology Index\"
Full board list toggle: toggle-all
[ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"] will give you[ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy] if you are on /g/.
Time Formatting is disabled. :
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
Hour: %k, %H, %l, %I, %p, %P
Minute: %M
Second: %S
Literal %: %%
Quote Backlinks formatting is disabled. :
File Info Formatting is disabled. :
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
Spoiler indicator: %p
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
Resolution: %r (Displays 'PDF' for PDF files)
Literal %: %%
Quick Reply Personas One item per line. Items will be added in the relevant input's auto-completion list. Password items will always be used, since there is no password input. Lines starting with a # will be ignored.
You can use these settings with each item, separate them with semicolons:Possible items are: name, email, subject and password. Wrap values of items with quotes, like this: email:\"sage\". Force values as defaults with the always keyword, for example: email:\"sage\";always. Select specific boards for an item, separated with commas, for example: email:\"sage\";boards:jp;always. Unread Favicon is disabled. ferongr xat- 4chanJS Mayhem Original Metro Emoji is disabled. Sage Icon:
4chan SS appchan Position: Before After
Thread Updater is disabled. Interval:
Custom CSSApply CSS "
+ innerHTML: "Archiver 404 Redirect is disabled.
Thread redirection Post fetching File redirection
Custom Board Navigation
New lines will be converted into spaces. In the following examples for /g/, g can be changed to a different board ID (a, b, etc...), the current board (current), or the Twitter link (@).
Board link: g
Title link: g-title
Board link (Replace with title when on that board): g-replace
Full text link: g-full
Custom text link: g-text:\"Install Gentoo\"
Index-only link: g-index
Catalog-only link: g-catalog
External link: external-text:\"Google\",\"http://www.google.com\"
Combinations are possible: g-index-text:\"Technology Index\"
Full board list toggle: toggle-all
[ toggle-all ] [current-title] [g-title / a-title / jp-title] [x / wsg / h] [t-text:\"Piracy\"] will give you[ + ] [Technology] [Technology / Anime & Manga / Otaku Culture] [x / wsg / h] [Piracy] if you are on /g/.
Time Formatting is disabled. :
Day: %a, %A, %d, %e
Month: %m, %b, %B
Year: %y, %Y
Hour: %k, %H, %l, %I, %p, %P
Minute: %M
Second: %S
Literal %: %%
Quote Backlinks formatting is disabled. :
File Info Formatting is disabled. :
Link: %l (truncated), %L (untruncated), %T (Unix timestamp)
Original file name: %n (truncated), %N (untruncated), %t (Unix timestamp)
Spoiler indicator: %p
Size: %B (Bytes), %K (KB), %M (MB), %s (4chan default)
Resolution: %r (Displays 'PDF' for PDF files)
Literal %: %%
Quick Reply Personas One item per line. Items will be added in the relevant input's auto-completion list. Password items will always be used, since there is no password input. Lines starting with a # will be ignored.
You can use these settings with each item, separate them with semicolons:Possible items are: name, options (or equivalently email), subject and password. Wrap values of items with quotes, like this: options:\"sage\". Force values as defaults with the always keyword, for example: options:\"sage\";always. Select specific boards for an item, separated with commas, for example: options:\"sage\";boards:jp;always. Unread Favicon is disabled. ferongr xat- 4chanJS Mayhem Original Metro Emoji is disabled. Sage Icon:
4chan SS appchan Position: Before After
Thread Updater is disabled. Interval:
Custom CSSApply CSS "
});
_ref = $$('.warning', section);
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
@@ -13549,18 +13568,19 @@
}
},
initThread: function() {
- var board, err, errors, postRoot, posts, thread, threadRoot, threads, _i, _j, _len, _len1, _ref, _ref1;
+ var board, err, errors, postRoot, posts, thread, threadRoot, threads, _i, _j, _len, _len1, _ref, _ref1, _ref2;
+ g.DEAD = !!((_ref = $('.closed')) != null ? _ref.textContent.match(/Thread archived/) : void 0);
if (board = $('.board')) {
threads = [];
posts = [];
- _ref = $$('.board > .thread', board);
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- threadRoot = _ref[_i];
+ _ref1 = $$('.board > .thread', board);
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+ threadRoot = _ref1[_i];
thread = new Thread(+threadRoot.id.slice(1), g.BOARD);
threads.push(thread);
- _ref1 = $$('.thread > .postContainer', threadRoot);
- for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
- postRoot = _ref1[_j];
+ _ref2 = $$('.thread > .postContainer', threadRoot);
+ for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
+ postRoot = _ref2[_j];
try {
posts.push(new Post(postRoot, thread, g.BOARD));
} catch (_error) {
diff --git a/builds/4chan-X.zip b/builds/4chan-X.zip
index d86812d0d..dd5bf1579 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 65e0f09a1..581f8d89b 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 773c802b0..d22a6e479 100644
--- a/builds/updates.xml
+++ b/builds/updates.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/package.json b/package.json
index 33788be44..8b4d8c5cf 100755
--- a/package.json
+++ b/package.json
@@ -3,7 +3,7 @@
"description": "Cross-browser userscript for maximum lurking on 4chan.",
"meta": {
"name": "4chan X",
- "version": "1.8.9.5",
+ "version": "1.8.9.7",
"repo": "https://github.com/ccd0/4chan-x/",
"page": "https://github.com/ccd0/4chan-x",
"downloads": "https://ccd0.github.io/4chan-x/builds/",
diff --git a/src/General/Config.coffee b/src/General/Config.coffee
index 7881bc9e6..60e87a974 100755
--- a/src/General/Config.coffee
+++ b/src/General/Config.coffee
@@ -329,7 +329,7 @@ Config =
]
'Show Name and Subject': [
false
- 'Always show name and subject fields in the QR even when 4chan doesn\'t use them.'
+ 'Show the classic name, email, and subject fields in the QR, even when 4chan doesn\'t use them all.'
]
'Hide Original Post Form': [
true
@@ -601,7 +601,7 @@ vp-replace
QR:
'QR.personas': """
- #email:"sage";boards:jp;always
+ #options:"sage";boards:jp;always
"""
time: '%m/%d/%y(%a)%H:%M:%S'
diff --git a/src/General/Main.coffee b/src/General/Main.coffee
index 396ab0033..6c32cabb0 100755
--- a/src/General/Main.coffee
+++ b/src/General/Main.coffee
@@ -159,6 +159,8 @@ Main =
new Notice 'warning', 'Cookies need to be enabled on 4chan for <%= meta.name %> to operate properly.', 30
initThread: ->
+ g.DEAD = !!$('.closed')?.textContent.match(/Thread archived/)
+
if board = $ '.board'
threads = []
posts = []
diff --git a/src/General/html/Features/QuickReply.html b/src/General/html/Features/QuickReply.html
index 1a49438a7..4ec950149 100755
--- a/src/General/html/Features/QuickReply.html
+++ b/src/General/html/Features/QuickReply.html
@@ -11,7 +11,7 @@
-
+
diff --git a/src/General/html/Settings/Advanced.html b/src/General/html/Settings/Advanced.html
index 18e5c2ccf..9075d1344 100755
--- a/src/General/html/Settings/Advanced.html
+++ b/src/General/html/Settings/Advanced.html
@@ -75,10 +75,10 @@
Lines starting with a
# will be ignored.
You can use these settings with each item, separate them with semicolons:
- Possible items are: name, email, subject and password.
- Wrap values of items with quotes, like this: email:"sage".
- Force values as defaults with the always keyword, for example: email:"sage";always.
- Select specific boards for an item, separated with commas, for example: email:"sage";boards:jp;always.
+ Possible items are: name, options (or equivalently email), subject and password.
+ Wrap values of items with quotes, like this: options:"sage".
+ Force values as defaults with the always keyword, for example: options:"sage";always.
+ Select specific boards for an item, separated with commas, for example: options:"sage";boards:jp;always.
diff --git a/src/Monitoring/ThreadUpdater.coffee b/src/Monitoring/ThreadUpdater.coffee
index 52bcee0db..8e02ce74a 100755
--- a/src/Monitoring/ThreadUpdater.coffee
+++ b/src/Monitoring/ThreadUpdater.coffee
@@ -74,7 +74,10 @@ ThreadUpdater =
$.on d, 'QRPostSuccessful', ThreadUpdater.cb.checkpost
$.on d, 'visibilitychange', ThreadUpdater.cb.visibility
- ThreadUpdater.cb.online()
+ if g.DEAD
+ ThreadUpdater.set 'status', 'Archived', 'warning'
+ else
+ ThreadUpdater.cb.online()
###
http://freesound.org/people/pierrecartoons1979/sounds/90112/
@@ -84,6 +87,7 @@ ThreadUpdater =
cb:
online: ->
+ return if g.DEAD
if ThreadUpdater.online = navigator.onLine
ThreadUpdater.outdateCount = 0
ThreadUpdater.setInterval()
@@ -127,18 +131,17 @@ ThreadUpdater =
{req} = ThreadUpdater
switch req.status
when 200
- g.DEAD = false
+ g.DEAD = !!+req.response.posts[0].archived
ThreadUpdater.parse req.response.posts
- ThreadUpdater.setInterval()
+ if g.DEAD
+ ThreadUpdater.set 'status', 'Archived', 'warning'
+ ThreadUpdater.kill()
+ else
+ ThreadUpdater.setInterval()
when 404
g.DEAD = true
- ThreadUpdater.set 'timer', null
ThreadUpdater.set 'status', '404', 'warning'
- clearTimeout ThreadUpdater.timeoutID
- ThreadUpdater.thread.kill()
- $.event 'ThreadUpdate',
- 404: true
- threadID: ThreadUpdater.thread.fullID
+ ThreadUpdater.kill()
else
ThreadUpdater.outdateCount++
ThreadUpdater.setInterval()
@@ -151,6 +154,14 @@ ThreadUpdater =
if ThreadUpdater.postID
ThreadUpdater.cb.checkpost()
+ kill: ->
+ ThreadUpdater.set 'timer', null
+ clearTimeout ThreadUpdater.timeoutID
+ ThreadUpdater.thread.kill()
+ $.event 'ThreadUpdate',
+ 404: true
+ threadID: ThreadUpdater.thread.fullID
+
setInterval: ->
i = ThreadUpdater.interval + 1
diff --git a/src/Posting/QR.coffee b/src/Posting/QR.coffee
index aa77597b8..712ac76d1 100644
--- a/src/Posting/QR.coffee
+++ b/src/Posting/QR.coffee
@@ -472,6 +472,7 @@ QR =
if Conf['Show Name and Subject']
$.addClass QR.nodes.name, 'force-show'
$.addClass QR.nodes.sub, 'force-show'
+ QR.nodes.email.placeholder = 'E-mail'
QR.forcedAnon = !!$ '.postForm input[name=name][type=hidden]'
if QR.forcedAnon
diff --git a/src/Posting/QR.persona.coffee b/src/Posting/QR.persona.coffee
index 31de73322..cc382318f 100644
--- a/src/Posting/QR.persona.coffee
+++ b/src/Posting/QR.persona.coffee
@@ -16,7 +16,7 @@ QR.persona =
parseItem: (item, types) ->
return if item[0] is '#'
- return unless match = item.match /(name|email|subject|password):"(.*)"/i
+ return unless match = item.match /(name|options|email|subject|password):"(.*)"/i
[match, type, val] = match
# Don't mix up item settings with val.
@@ -30,7 +30,8 @@ QR.persona =
QR.persona.pwd = val
return
- type = 'sub' if type is 'subject'
+ type = 'email' if type is 'options'
+ type = 'sub' if type is 'subject'
if /always/i.test item
QR.persona.always[type] = val