conf{ig} -> Conf{ig}
This commit is contained in:
parent
3ae36e2492
commit
8cb14a9af2
274
4chan_x.user.js
274
4chan_x.user.js
@ -73,9 +73,9 @@
|
||||
*/
|
||||
|
||||
(function() {
|
||||
var $, $$, Anonymize, AutoGif, DAY, ExpandComment, ExpandThread, Favicon, FileInfo, Filter, GetTitle, HOUR, ImageExpand, ImageHover, Keybinds, MINUTE, Main, NAMESPACE, Nav, Options, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, Quotify, Redirect, ReplyHiding, ReportButton, RevealSpoilers, SECOND, Sauce, StrikethroughQuotes, ThreadHiding, ThreadStats, Threading, Time, TitlePost, Unread, Updater, VERSION, Watcher, conf, config, d, engine, flatten, g, log, ui, _base;
|
||||
var $, $$, Anonymize, AutoGif, Conf, Config, DAY, ExpandComment, ExpandThread, Favicon, FileInfo, Filter, GetTitle, HOUR, ImageExpand, ImageHover, Keybinds, MINUTE, Main, NAMESPACE, Nav, Options, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, Quotify, Redirect, ReplyHiding, ReportButton, RevealSpoilers, SECOND, Sauce, StrikethroughQuotes, ThreadHiding, ThreadStats, Threading, Time, TitlePost, Unread, Updater, VERSION, Watcher, d, engine, flatten, g, log, ui, _base;
|
||||
|
||||
config = {
|
||||
Config = {
|
||||
main: {
|
||||
Enhancing: {
|
||||
'404 Redirect': [true, 'Redirect dead threads and images'],
|
||||
@ -194,21 +194,21 @@
|
||||
|
||||
log = typeof (_base = console.log).bind === "function" ? _base.bind(console) : void 0;
|
||||
|
||||
conf = {};
|
||||
Conf = {};
|
||||
|
||||
(flatten = function(parent, obj) {
|
||||
var key, val;
|
||||
if (obj instanceof Array) {
|
||||
conf[parent] = obj[0];
|
||||
Conf[parent] = obj[0];
|
||||
} else if (typeof obj === 'object') {
|
||||
for (key in obj) {
|
||||
val = obj[key];
|
||||
flatten(key, val);
|
||||
}
|
||||
} else {
|
||||
conf[parent] = obj;
|
||||
Conf[parent] = obj;
|
||||
}
|
||||
})(null, config);
|
||||
})(null, Config);
|
||||
|
||||
NAMESPACE = '4chan_x.';
|
||||
|
||||
@ -384,11 +384,11 @@
|
||||
cb: {
|
||||
checked: function() {
|
||||
$.set(this.name, this.checked);
|
||||
return conf[this.name] = this.checked;
|
||||
return Conf[this.name] = this.checked;
|
||||
},
|
||||
value: function() {
|
||||
$.set(this.name, this.value.trim());
|
||||
return conf[this.name] = this.value;
|
||||
return Conf[this.name] = this.value;
|
||||
}
|
||||
},
|
||||
addStyle: function(css) {
|
||||
@ -544,9 +544,9 @@
|
||||
filters: {},
|
||||
init: function() {
|
||||
var boards, filter, hl, key, op, regexp, top, _i, _len, _ref, _ref2, _ref3, _ref4, _ref5;
|
||||
for (key in config.filter) {
|
||||
for (key in Config.filter) {
|
||||
this.filters[key] = [];
|
||||
_ref = conf[key].split('\n');
|
||||
_ref = Conf[key].split('\n');
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
filter = _ref[_i];
|
||||
if (filter[0] === '#') continue;
|
||||
@ -710,7 +710,7 @@
|
||||
quote = _ref[_i];
|
||||
if ((el = $.id(quote.hash.slice(1))) && el.parentNode.parentNode.parentNode.hidden) {
|
||||
$.addClass(quote, 'filtered');
|
||||
if (conf['Recursive Filtering']) ReplyHiding.hide(post.root);
|
||||
if (Conf['Recursive Filtering']) ReplyHiding.hide(post.root);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -759,11 +759,11 @@
|
||||
quotes: quotes,
|
||||
backlinks: []
|
||||
};
|
||||
if (conf['Resurrect Quotes']) Quotify.node(post);
|
||||
if (conf['Quote Preview']) QuotePreview.node(post);
|
||||
if (conf['Quote Inline']) QuoteInline.node(post);
|
||||
if (conf['Indicate OP quote']) QuoteOP.node(post);
|
||||
if (conf['Indicate Cross-thread Quotes']) QuoteCT.node(post);
|
||||
if (Conf['Resurrect Quotes']) Quotify.node(post);
|
||||
if (Conf['Quote Preview']) QuotePreview.node(post);
|
||||
if (Conf['Quote Inline']) QuoteInline.node(post);
|
||||
if (Conf['Indicate OP quote']) QuoteOP.node(post);
|
||||
if (Conf['Indicate Cross-thread Quotes']) QuoteCT.node(post);
|
||||
return $.replace(a.parentNode.parentNode, node.lastChild);
|
||||
}
|
||||
};
|
||||
@ -920,7 +920,7 @@
|
||||
var div, name, trip, uid, _ref, _ref2;
|
||||
if (table.hidden) return;
|
||||
table.hidden = true;
|
||||
if (!conf['Show Stubs']) return;
|
||||
if (!Conf['Show Stubs']) return;
|
||||
name = $('.commentpostername', table).textContent;
|
||||
uid = ((_ref = $('.posteruid', table)) != null ? _ref.textContent : void 0) || '';
|
||||
trip = ((_ref2 = $('.postertrip', table)) != null ? _ref2.textContent : void 0) || '';
|
||||
@ -950,26 +950,26 @@
|
||||
}
|
||||
thread = Nav.getThread();
|
||||
switch (key) {
|
||||
case conf.openQR:
|
||||
case Conf.openQR:
|
||||
Keybinds.qr(thread, true);
|
||||
break;
|
||||
case conf.openEmptyQR:
|
||||
case Conf.openEmptyQR:
|
||||
Keybinds.qr(thread);
|
||||
break;
|
||||
case conf.openOptions:
|
||||
case Conf.openOptions:
|
||||
if (!$.id('overlay')) Options.dialog();
|
||||
break;
|
||||
case conf.close:
|
||||
case Conf.close:
|
||||
if (o = $.id('overlay')) {
|
||||
Options.close.call(o);
|
||||
} else if (QR.el) {
|
||||
QR.close();
|
||||
}
|
||||
break;
|
||||
case conf.submit:
|
||||
case Conf.submit:
|
||||
if (QR.el && !QR.status()) QR.submit();
|
||||
break;
|
||||
case conf.spoiler:
|
||||
case Conf.spoiler:
|
||||
ta = e.target;
|
||||
if (ta.nodeName !== 'TEXTAREA') return;
|
||||
value = ta.value;
|
||||
@ -979,55 +979,55 @@
|
||||
range = 9 + selEnd;
|
||||
ta.setSelectionRange(range, range);
|
||||
break;
|
||||
case conf.watch:
|
||||
case Conf.watch:
|
||||
Watcher.toggle(thread);
|
||||
break;
|
||||
case conf.update:
|
||||
case Conf.update:
|
||||
Updater.update();
|
||||
break;
|
||||
case conf.unreadCountTo0:
|
||||
case Conf.unreadCountTo0:
|
||||
Unread.replies = [];
|
||||
Unread.update();
|
||||
break;
|
||||
case conf.expandImage:
|
||||
case Conf.expandImage:
|
||||
Keybinds.img(thread);
|
||||
break;
|
||||
case conf.expandAllImages:
|
||||
case Conf.expandAllImages:
|
||||
Keybinds.img(thread, true);
|
||||
break;
|
||||
case conf.zero:
|
||||
case Conf.zero:
|
||||
window.location = "/" + g.BOARD + "/0#0";
|
||||
break;
|
||||
case conf.nextPage:
|
||||
case Conf.nextPage:
|
||||
if ((_ref = $('input[value=Next]')) != null) _ref.click();
|
||||
break;
|
||||
case conf.previousPage:
|
||||
case Conf.previousPage:
|
||||
if ((_ref2 = $('input[value=Previous]')) != null) _ref2.click();
|
||||
break;
|
||||
case conf.nextThread:
|
||||
case Conf.nextThread:
|
||||
if (g.REPLY) return;
|
||||
Nav.scroll(+1);
|
||||
break;
|
||||
case conf.previousThread:
|
||||
case Conf.previousThread:
|
||||
if (g.REPLY) return;
|
||||
Nav.scroll(-1);
|
||||
break;
|
||||
case conf.expandThread:
|
||||
case Conf.expandThread:
|
||||
ExpandThread.toggle(thread);
|
||||
break;
|
||||
case conf.openThread:
|
||||
case Conf.openThread:
|
||||
Keybinds.open(thread);
|
||||
break;
|
||||
case conf.openThreadTab:
|
||||
case Conf.openThreadTab:
|
||||
Keybinds.open(thread, true);
|
||||
break;
|
||||
case conf.nextReply:
|
||||
case Conf.nextReply:
|
||||
Keybinds.hl(+1, thread);
|
||||
break;
|
||||
case conf.previousReply:
|
||||
case Conf.previousReply:
|
||||
Keybinds.hl(-1, thread);
|
||||
break;
|
||||
case conf.hide:
|
||||
case Conf.hide:
|
||||
if (/\bthread\b/.test(thread.className)) ThreadHiding.toggle(thread);
|
||||
break;
|
||||
default:
|
||||
@ -1241,7 +1241,7 @@
|
||||
},
|
||||
asyncInit: function() {
|
||||
var form, iframe, link, loadChecking, script;
|
||||
if (conf['Hide Original Post Form']) {
|
||||
if (Conf['Hide Original Post Form']) {
|
||||
link = $.el('h1', {
|
||||
innerHTML: "<a href=javascript:;>" + (g.REPLY ? 'Quick Reply' : 'New Thread') + "</a>"
|
||||
});
|
||||
@ -1285,9 +1285,9 @@
|
||||
});
|
||||
$.add(d.head, script);
|
||||
$.rm(script);
|
||||
if (conf['Persistent QR']) {
|
||||
if (Conf['Persistent QR']) {
|
||||
QR.dialog();
|
||||
if (conf['Auto Hide QR']) QR.hide();
|
||||
if (Conf['Auto Hide QR']) QR.hide();
|
||||
}
|
||||
$.on(d, 'dragover', QR.dragOver);
|
||||
$.on(d, 'drop', QR.dropFile);
|
||||
@ -1321,7 +1321,7 @@
|
||||
QR.cooldown.auto = false;
|
||||
QR.status();
|
||||
QR.resetFileInput();
|
||||
if (!conf['Remember Spoiler'] && (spoiler = $.id('spoiler')).checked) {
|
||||
if (!Conf['Remember Spoiler'] && (spoiler = $.id('spoiler')).checked) {
|
||||
spoiler.click();
|
||||
}
|
||||
return QR.cleanError();
|
||||
@ -1374,12 +1374,12 @@
|
||||
}
|
||||
if (!QR.el) return;
|
||||
input = QR.status.input;
|
||||
input.value = QR.cooldown.auto && conf['Cooldown'] ? value ? "Auto " + value : 'Auto' : value || 'Submit';
|
||||
input.value = QR.cooldown.auto && Conf['Cooldown'] ? value ? "Auto " + value : 'Auto' : value || 'Submit';
|
||||
return input.disabled = disabled || false;
|
||||
},
|
||||
cooldown: {
|
||||
init: function() {
|
||||
if (!conf['Cooldown']) return;
|
||||
if (!Conf['Cooldown']) return;
|
||||
QR.cooldown.start($.get("/" + g.BOARD + "/cooldown", 0));
|
||||
return $.sync("/" + g.BOARD + "/cooldown", QR.cooldown.start);
|
||||
},
|
||||
@ -1389,7 +1389,7 @@
|
||||
return QR.cooldown.count(seconds);
|
||||
},
|
||||
set: function(seconds) {
|
||||
if (!conf['Cooldown']) return;
|
||||
if (!Conf['Cooldown']) return;
|
||||
QR.cooldown.count(seconds);
|
||||
return $.set("/" + g.BOARD + "/cooldown", Date.now() + seconds * SECOND);
|
||||
},
|
||||
@ -1491,8 +1491,8 @@
|
||||
persona = $.get('QR.persona', {});
|
||||
this.name = prev ? prev.name : persona.name || null;
|
||||
this.email = prev && !/^sage$/.test(prev.email) ? prev.email : persona.email || null;
|
||||
this.sub = prev && conf['Remember Subject'] ? prev.sub : conf['Remember Subject'] ? persona.sub : null;
|
||||
this.spoiler = prev && conf['Remember Spoiler'] ? prev.spoiler : false;
|
||||
this.sub = prev && Conf['Remember Subject'] ? prev.sub : Conf['Remember Subject'] ? persona.sub : null;
|
||||
this.spoiler = prev && Conf['Remember Spoiler'] ? prev.spoiler : false;
|
||||
this.com = null;
|
||||
this.el = $.el('a', {
|
||||
className: 'preview',
|
||||
@ -1746,7 +1746,7 @@
|
||||
<label id=spoilerLabel><input type=checkbox id=spoiler> Spoiler Image</label>\
|
||||
<div class=warning></div>\
|
||||
</form>');
|
||||
if (conf['Remember QR size'] && engine === 'gecko') {
|
||||
if (Conf['Remember QR size'] && engine === 'gecko') {
|
||||
$.on(ta = $('textarea', QR.el), 'mouseup', function() {
|
||||
return $.set('QR.size', this.style.cssText);
|
||||
});
|
||||
@ -1880,8 +1880,8 @@
|
||||
QR.cleanError();
|
||||
threadID = g.THREAD_ID || $('select', QR.el).value;
|
||||
QR.cooldown.auto = QR.replies.length > 1;
|
||||
if (conf['Auto Hide QR'] && !QR.cooldown.auto) QR.hide();
|
||||
if (conf['Thread Watcher'] && conf['Auto Watch Reply'] && threadID !== 'new') {
|
||||
if (Conf['Auto Hide QR'] && !QR.cooldown.auto) QR.hide();
|
||||
if (Conf['Thread Watcher'] && Conf['Auto Watch Reply'] && threadID !== 'new') {
|
||||
Watcher.watch(threadID);
|
||||
}
|
||||
post = {
|
||||
@ -1957,31 +1957,31 @@
|
||||
persona = {
|
||||
name: reply.name,
|
||||
email: /^sage$/.test(reply.email) ? persona.email : reply.email,
|
||||
sub: conf['Remember Subject'] ? reply.sub : null
|
||||
sub: Conf['Remember Subject'] ? reply.sub : null
|
||||
};
|
||||
$.set('QR.persona', persona);
|
||||
_ref = b.lastChild.textContent.match(/thread:(\d+),no:(\d+)/), _ = _ref[0], thread = _ref[1], postNumber = _ref[2];
|
||||
if (thread === '0') {
|
||||
if (conf['Thread Watcher'] && conf['Auto Watch']) {
|
||||
if (Conf['Thread Watcher'] && Conf['Auto Watch']) {
|
||||
$.set('autoWatch', postNumber);
|
||||
}
|
||||
location.pathname = "/" + g.BOARD + "/res/" + postNumber;
|
||||
} else {
|
||||
QR.cooldown.auto = QR.replies.length > 1;
|
||||
QR.cooldown.set(/sage/i.test(reply.email) ? 60 : 30);
|
||||
if (conf['Open Reply in New Tab'] && !g.REPLY && !QR.cooldown.auto) {
|
||||
if (Conf['Open Reply in New Tab'] && !g.REPLY && !QR.cooldown.auto) {
|
||||
$.open("//boards.4chan.org/" + g.BOARD + "/res/" + thread + "#" + postNumber);
|
||||
}
|
||||
}
|
||||
if (conf['Persistent QR'] || QR.cooldown.auto) {
|
||||
if (Conf['Persistent QR'] || QR.cooldown.auto) {
|
||||
reply.rm();
|
||||
} else {
|
||||
QR.close();
|
||||
}
|
||||
if (g.REPLY && (conf['Unread Count'] || conf['Unread Favicon'])) {
|
||||
if (g.REPLY && (Conf['Unread Count'] || Conf['Unread Favicon'])) {
|
||||
Unread.foresee.push(postNumber);
|
||||
}
|
||||
if (g.REPLY && conf['Thread Updater'] && conf['Auto Update This']) {
|
||||
if (g.REPLY && Conf['Thread Updater'] && Conf['Auto Update This']) {
|
||||
Updater.update();
|
||||
}
|
||||
QR.status();
|
||||
@ -2247,7 +2247,7 @@
|
||||
</div>\
|
||||
</div>'
|
||||
});
|
||||
_ref = config.main;
|
||||
_ref = Config.main;
|
||||
for (key in _ref) {
|
||||
obj = _ref[key];
|
||||
ul = $.el('ul', {
|
||||
@ -2255,7 +2255,7 @@
|
||||
});
|
||||
for (key in obj) {
|
||||
arr = obj[key];
|
||||
checked = conf[key] ? 'checked' : '';
|
||||
checked = Conf[key] ? 'checked' : '';
|
||||
description = arr[1];
|
||||
li = $.el('li', {
|
||||
innerHTML: "<label><input type=checkbox name=\"" + key + "\" " + checked + ">" + key + "</label><span class=description>: " + description + "</span>"
|
||||
@ -2275,13 +2275,13 @@
|
||||
_ref2 = $$('textarea', dialog);
|
||||
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
||||
ta = _ref2[_i];
|
||||
ta.textContent = conf[ta.name];
|
||||
ta.textContent = Conf[ta.name];
|
||||
$.on(ta, 'change', $.cb.value);
|
||||
}
|
||||
(back = $('[name=backlink]', dialog)).value = conf['backlink'];
|
||||
(time = $('[name=time]', dialog)).value = conf['time'];
|
||||
(fileInfoR = $('[name=fileInfoR]', dialog)).value = conf['fileInfoR'];
|
||||
(fileInfoT = $('[name=fileInfoT]', dialog)).value = conf['fileInfoT'];
|
||||
(back = $('[name=backlink]', dialog)).value = Conf['backlink'];
|
||||
(time = $('[name=time]', dialog)).value = Conf['time'];
|
||||
(fileInfoR = $('[name=fileInfoR]', dialog)).value = Conf['fileInfoR'];
|
||||
(fileInfoT = $('[name=fileInfoT]', dialog)).value = Conf['fileInfoT'];
|
||||
$.on(back, 'keyup', $.cb.value);
|
||||
$.on(back, 'keyup', Options.backlink);
|
||||
$.on(time, 'keyup', $.cb.value);
|
||||
@ -2291,17 +2291,17 @@
|
||||
$.on(fileInfoT, 'keyup', $.cb.value);
|
||||
$.on(fileInfoT, 'keyup', Options.fileInfo);
|
||||
favicon = $('select', dialog);
|
||||
favicon.value = conf['favicon'];
|
||||
favicon.value = Conf['favicon'];
|
||||
$.on(favicon, 'change', $.cb.value);
|
||||
$.on(favicon, 'change', Options.favicon);
|
||||
_ref3 = config.hotkeys;
|
||||
_ref3 = Config.hotkeys;
|
||||
for (key in _ref3) {
|
||||
arr = _ref3[key];
|
||||
tr = $.el('tr', {
|
||||
innerHTML: "<td>" + arr[1] + "</td><td><input name=" + key + "></td>"
|
||||
});
|
||||
input = $('input', tr);
|
||||
input.value = conf[key];
|
||||
input.value = Conf[key];
|
||||
$.on(input, 'keydown', Options.keybind);
|
||||
$.add($('#keybinds_tab + div tbody', dialog), tr);
|
||||
}
|
||||
@ -2310,7 +2310,7 @@
|
||||
for (_j = 0, _len2 = _ref4.length; _j < _len2; _j++) {
|
||||
indicator = _ref4[_j];
|
||||
key = indicator.firstChild.textContent;
|
||||
indicator.hidden = conf[key];
|
||||
indicator.hidden = Conf[key];
|
||||
indicators[key] = indicator;
|
||||
$.on($("[name='" + key + "']", dialog), 'click', function() {
|
||||
return indicators[this.name].hidden = this.checked;
|
||||
@ -2357,7 +2357,7 @@
|
||||
return $.id('timePreview').textContent = Time.funk(Time);
|
||||
},
|
||||
backlink: function() {
|
||||
return $.id('backlinkPreview').textContent = conf['backlink'].replace(/%id/, '123456789');
|
||||
return $.id('backlinkPreview').textContent = Conf['backlink'].replace(/%id/, '123456789');
|
||||
},
|
||||
fileInfo: function() {
|
||||
var type;
|
||||
@ -2454,7 +2454,7 @@
|
||||
},
|
||||
hide: function(thread) {
|
||||
var a, div, name, num, op, span, text, trip, uid, _ref, _ref2;
|
||||
if (!conf['Show Stubs']) {
|
||||
if (!Conf['Show Stubs']) {
|
||||
thread.hidden = true;
|
||||
thread.nextSibling.hidden = true;
|
||||
return;
|
||||
@ -2491,15 +2491,15 @@
|
||||
Updater = {
|
||||
init: function() {
|
||||
var checkbox, checked, dialog, html, input, name, title, _i, _len, _ref;
|
||||
html = "<div class=move><span id=count></span> <span id=timer>-" + conf['Interval'] + "</span></div>";
|
||||
checkbox = config.updater.checkbox;
|
||||
html = "<div class=move><span id=count></span> <span id=timer>-" + Conf['Interval'] + "</span></div>";
|
||||
checkbox = Config.updater.checkbox;
|
||||
for (name in checkbox) {
|
||||
title = checkbox[name][1];
|
||||
checked = conf[name] ? 'checked' : '';
|
||||
checked = Conf[name] ? 'checked' : '';
|
||||
html += "<div><label title='" + title + "'>" + name + "<input name='" + name + "' type=checkbox " + checked + "></label></div>";
|
||||
}
|
||||
checked = conf['Auto Update'] ? 'checked' : '';
|
||||
html += " <div><label title='Controls whether *this* thread automatically updates or not'>Auto Update This<input name='Auto Update This' type=checkbox " + checked + "></label></div> <div><label>Interval (s)<input name=Interval value=" + conf['Interval'] + " type=text></label></div> <div><input value='Update Now' type=button></div>";
|
||||
checked = Conf['Auto Update'] ? 'checked' : '';
|
||||
html += " <div><label title='Controls whether *this* thread automatically updates or not'>Auto Update This<input name='Auto Update This' type=checkbox " + checked + "></label></div> <div><label>Interval (s)<input name=Interval value=" + Conf['Interval'] + " type=text></label></div> <div><input value='Update Now' type=button></div>";
|
||||
dialog = ui.dialog('updater', 'bottom: 0; right: 0;', html);
|
||||
this.count = $('#count', dialog);
|
||||
this.timer = $('#timer', dialog);
|
||||
@ -2519,11 +2519,11 @@
|
||||
} else if (input.name === 'Auto Update This') {
|
||||
$.on(input, 'click', this.cb.autoUpdate);
|
||||
this.cb.autoUpdate.call(input);
|
||||
conf[input.name] = input.checked;
|
||||
Conf[input.name] = input.checked;
|
||||
}
|
||||
} else if (input.name === 'Interval') {
|
||||
$.on(input, 'change', function() {
|
||||
return conf['Interval'] = this.value = parseInt(this.value, 10) || conf['Interval'];
|
||||
return Conf['Interval'] = this.value = parseInt(this.value, 10) || Conf['Interval'];
|
||||
});
|
||||
$.on(input, 'change', $.cb.value);
|
||||
} else if (input.type === 'button') {
|
||||
@ -2536,7 +2536,7 @@
|
||||
},
|
||||
cb: {
|
||||
verbose: function() {
|
||||
if (conf['Verbose']) {
|
||||
if (Conf['Verbose']) {
|
||||
Updater.count.textContent = '+0';
|
||||
return Updater.timer.hidden = false;
|
||||
} else {
|
||||
@ -2569,7 +2569,7 @@
|
||||
Updater.count.className = 'warning';
|
||||
clearTimeout(Updater.timeoutID);
|
||||
g.dead = true;
|
||||
if (conf['Unread Count']) {
|
||||
if (Conf['Unread Count']) {
|
||||
Unread.title = Unread.title.match(/^.+-/)[0] + ' 404';
|
||||
} else {
|
||||
d.title = d.title.match(/^.+-/)[0] + ' 404';
|
||||
@ -2582,7 +2582,7 @@
|
||||
return;
|
||||
}
|
||||
Updater.retryCoef = 10;
|
||||
Updater.timer.textContent = '-' + conf['Interval'];
|
||||
Updater.timer.textContent = '-' + Conf['Interval'];
|
||||
/*
|
||||
Status Code 304: Not modified
|
||||
By sending the `If-Modified-Since` header we get a proper status code, and no response.
|
||||
@ -2590,7 +2590,7 @@
|
||||
and won't load images and scripts when parsing the response.
|
||||
*/
|
||||
if (this.status === 304) {
|
||||
if (conf['Verbose']) {
|
||||
if (Conf['Verbose']) {
|
||||
Updater.count.textContent = '+0';
|
||||
Updater.count.className = null;
|
||||
}
|
||||
@ -2608,8 +2608,8 @@
|
||||
nodes.push(reply.parentNode.parentNode.parentNode);
|
||||
}
|
||||
newPosts = nodes.length;
|
||||
scroll = conf['Scrolling'] && Updater.scrollBG() && newPosts && Updater.br.previousElementSibling.getBoundingClientRect().bottom - d.body.clientHeight < 25;
|
||||
if (conf['Verbose']) {
|
||||
scroll = Conf['Scrolling'] && Updater.scrollBG() && newPosts && Updater.br.previousElementSibling.getBoundingClientRect().bottom - d.body.clientHeight < 25;
|
||||
if (Conf['Verbose']) {
|
||||
Updater.count.textContent = "+" + newPosts;
|
||||
Updater.count.className = newPosts ? 'new' : null;
|
||||
}
|
||||
@ -2770,7 +2770,7 @@
|
||||
var link, _i, _len, _ref;
|
||||
if (g.BOARD === 'f') return;
|
||||
this.links = [];
|
||||
_ref = conf['sauces'].split('\n');
|
||||
_ref = Conf['sauces'].split('\n');
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
link = _ref[_i];
|
||||
if (link[0] === '#') continue;
|
||||
@ -2865,7 +2865,7 @@
|
||||
},
|
||||
foo: function() {
|
||||
var code;
|
||||
code = conf['time'].replace(/%([A-Za-z])/g, function(s, c) {
|
||||
code = Conf['time'].replace(/%([A-Za-z])/g, function(s, c) {
|
||||
if (c in Time.formatters) {
|
||||
return "' + Time.formatters." + c + "() + '";
|
||||
} else {
|
||||
@ -2967,7 +2967,7 @@
|
||||
var code, format, funks, i, param;
|
||||
funks = [];
|
||||
for (i = 0; i <= 1; i++) {
|
||||
format = i ? conf['fileInfoT'] : conf['fileInfoR'];
|
||||
format = i ? Conf['fileInfoT'] : Conf['fileInfoR'];
|
||||
param = i ? /%([BKlMrs])/g : /%([BKlLMnNrs])/g;
|
||||
code = format.replace(param, function(s, c) {
|
||||
if (c in FileInfo.formatters) {
|
||||
@ -3064,7 +3064,7 @@
|
||||
QuoteBacklink = {
|
||||
init: function() {
|
||||
var format;
|
||||
format = conf['backlink'].replace(/%id/g, "' + id + '");
|
||||
format = Conf['backlink'].replace(/%id/g, "' + id + '");
|
||||
this.funk = Function('id', "return '" + format + "'");
|
||||
return g.callbacks.push(this.node);
|
||||
},
|
||||
@ -3083,12 +3083,12 @@
|
||||
textContent: QuoteBacklink.funk(post.id)
|
||||
});
|
||||
for (qid in quotes) {
|
||||
if (!(el = $.id(qid)) || el.className === 'op' && !conf['OP Backlinks']) {
|
||||
if (!(el = $.id(qid)) || el.className === 'op' && !Conf['OP Backlinks']) {
|
||||
continue;
|
||||
}
|
||||
link = a.cloneNode(true);
|
||||
if (conf['Quote Preview']) $.on(link, 'mouseover', QuotePreview.mouseover);
|
||||
if (conf['Quote Inline']) {
|
||||
if (Conf['Quote Preview']) $.on(link, 'mouseover', QuotePreview.mouseover);
|
||||
if (Conf['Quote Inline']) {
|
||||
$.on(link, 'click', QuoteInline.toggle);
|
||||
} else {
|
||||
link.setAttribute('onclick', "replyhl('" + post.id + "');");
|
||||
@ -3152,7 +3152,7 @@
|
||||
}
|
||||
if (/\bbacklink\b/.test(q.className)) {
|
||||
$.after(q.parentNode, inline);
|
||||
if (conf['Forward Hiding']) {
|
||||
if (Conf['Forward Hiding']) {
|
||||
table = $.x('ancestor::table', el);
|
||||
$.addClass(table, 'forwarded');
|
||||
++table.title || (table.title = 1);
|
||||
@ -3178,7 +3178,7 @@
|
||||
var inlined, table, _i, _len, _ref;
|
||||
table = $.x("following::*[@id='i" + id + "']", q);
|
||||
$.rm(table);
|
||||
if (!conf['Forward Hiding']) return;
|
||||
if (!Conf['Forward Hiding']) return;
|
||||
_ref = $$('.backlink.inlined', table);
|
||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||||
inlined = _ref[_i];
|
||||
@ -3253,7 +3253,7 @@
|
||||
id = this.hash.slice(1);
|
||||
if (el = $.id(id)) {
|
||||
qp.innerHTML = el.innerHTML;
|
||||
if (conf['Quote Highlighting']) $.addClass(el, 'qphl');
|
||||
if (Conf['Quote Highlighting']) $.addClass(el, 'qphl');
|
||||
if (/\bbacklink\b/.test(this.className)) {
|
||||
replyID = $.x('preceding-sibling::input', this.parentNode).name;
|
||||
_ref = $$('.quotelink', qp);
|
||||
@ -3298,9 +3298,9 @@
|
||||
filesize: $('.filesize', qp),
|
||||
img: $('img[md5]', qp)
|
||||
};
|
||||
if (conf['Image Auto-Gif']) AutoGif.node(post);
|
||||
if (conf['Time Formatting']) Time.node(post);
|
||||
if (conf['File Info Formatting']) return FileInfo.node(post);
|
||||
if (Conf['Image Auto-Gif']) AutoGif.node(post);
|
||||
if (Conf['Time Formatting']) Time.node(post);
|
||||
if (Conf['File Info Formatting']) return FileInfo.node(post);
|
||||
}
|
||||
};
|
||||
|
||||
@ -3486,8 +3486,8 @@
|
||||
var count;
|
||||
if (!g.REPLY) return;
|
||||
count = this.replies.length;
|
||||
if (conf['Unread Count']) this.setTitle(count);
|
||||
if (!(conf['Unread Favicon'] && (count < 2 || forceUpdate))) return;
|
||||
if (Conf['Unread Count']) this.setTitle(count);
|
||||
if (!(Conf['Unread Favicon'] && (count < 2 || forceUpdate))) return;
|
||||
Favicon.el.href = g.dead ? count ? Favicon.unreadDead : Favicon.dead : count ? Favicon.unread : Favicon["default"];
|
||||
return $.add(d.head, Favicon.el);
|
||||
}
|
||||
@ -3504,7 +3504,7 @@
|
||||
return this["switch"]();
|
||||
},
|
||||
"switch": function() {
|
||||
switch (conf['favicon']) {
|
||||
switch (Conf['favicon']) {
|
||||
case 'ferongr':
|
||||
this.unreadDead = 'data:unreadDead;base64,R0lGODlhEAAQAOMHAOgLAnMFAL8AAOgLAukMA/+AgP+rq////////////////////////////////////yH5BAEKAAcALAAAAAAQABAAAARZ8MhJ6xwDWIBv+AM1fEEIBIVRlNKYrtpIECuGzuwpCLg974EYiXUYkUItjGbC6VQ4omXFiKROA6qSy0A8nAo9GS3YCswIWnOvLAi0be23Z1QtdSUaqXcviQAAOw==';
|
||||
this.unreadSFW = 'data:unreadSFW;base64,R0lGODlhEAAQAOMHAADX8QBwfgC2zADX8QDY8nnl8qLp8v///////////////////////////////////yH5BAEKAAcALAAAAAAQABAAAARZ8MhJ6xwDWIBv+AM1fEEIBIVRlNKYrtpIECuGzuwpCLg974EYiXUYkUItjGbC6VQ4omXFiKROA6qSy0A8nAo9GS3YCswIWnOvLAi0be23Z1QtdSUaqXcviQAAOw==';
|
||||
@ -3539,7 +3539,7 @@
|
||||
},
|
||||
image: function(href) {
|
||||
href = href.split('/');
|
||||
if (!conf['404 Redirect']) return;
|
||||
if (!Conf['404 Redirect']) return;
|
||||
switch (href[3]) {
|
||||
case 'a':
|
||||
case 'jp':
|
||||
@ -3554,7 +3554,7 @@
|
||||
if (board == null) board = g.BOARD;
|
||||
if (id == null) id = g.THREAD_ID;
|
||||
if (mode == null) mode = 'thread';
|
||||
if (!(conf['404 Redirect'] || mode === 'post')) return;
|
||||
if (!(Conf['404 Redirect'] || mode === 'post')) return;
|
||||
switch (g.BOARD) {
|
||||
case 'a':
|
||||
case 'jp':
|
||||
@ -3683,7 +3683,7 @@
|
||||
ImageExpand.on = this.checked;
|
||||
if (ImageExpand.on) {
|
||||
thumbs = $$('img[md5]');
|
||||
if (conf['Expand From Current']) {
|
||||
if (Conf['Expand From Current']) {
|
||||
for (i = 0, _len = thumbs.length; i < _len; i++) {
|
||||
thumb = thumbs[i];
|
||||
if (thumb.getBoundingClientRect().top > 0) break;
|
||||
@ -3813,9 +3813,9 @@
|
||||
} else {
|
||||
g.PAGENUM = parseInt(temp) || 0;
|
||||
}
|
||||
for (key in conf) {
|
||||
val = conf[key];
|
||||
conf[key] = $.get(key, val);
|
||||
for (key in Conf) {
|
||||
val = Conf[key];
|
||||
Conf[key] = $.get(key, val);
|
||||
}
|
||||
$.on(window, 'message', Main.message);
|
||||
switch (location.hostname) {
|
||||
@ -3851,12 +3851,12 @@
|
||||
return;
|
||||
}
|
||||
$.ready(Options.init);
|
||||
if (conf['Quick Reply'] && conf['Hide Original Post Form'] && g.BOARD !== 'f') {
|
||||
if (Conf['Quick Reply'] && Conf['Hide Original Post Form'] && g.BOARD !== 'f') {
|
||||
Main.css += 'form[name=post] { display: none; }';
|
||||
}
|
||||
Main.addStyle();
|
||||
now = Date.now();
|
||||
if (conf['Check for Updates'] && $.get('lastUpdate', 0) < now - 6 * HOUR) {
|
||||
if (Conf['Check for Updates'] && $.get('lastUpdate', 0) < now - 6 * HOUR) {
|
||||
$.ready(function() {
|
||||
return $.add(d.head, $.el('script', {
|
||||
src: 'https://raw.github.com/mayhemydg/4chan-x/master/latest.js'
|
||||
@ -3881,23 +3881,23 @@
|
||||
$.set("hiddenThreads/" + g.BOARD + "/", hiddenThreads);
|
||||
$.set("hiddenReplies/" + g.BOARD + "/", g.hiddenReplies);
|
||||
}
|
||||
if (conf['Filter']) Filter.init();
|
||||
if (conf['Reply Hiding']) ReplyHiding.init();
|
||||
if (conf['Filter'] || conf['Reply Hiding']) StrikethroughQuotes.init();
|
||||
if (conf['Anonymize']) Anonymize.init();
|
||||
if (conf['Time Formatting']) Time.init();
|
||||
if (conf['File Info Formatting']) FileInfo.init();
|
||||
if (conf['Sauce']) Sauce.init();
|
||||
if (conf['Reveal Spoilers']) RevealSpoilers.init();
|
||||
if (conf['Image Auto-Gif']) AutoGif.init();
|
||||
if (conf['Image Hover']) ImageHover.init();
|
||||
if (conf['Report Button']) ReportButton.init();
|
||||
if (conf['Resurrect Quotes']) Quotify.init();
|
||||
if (conf['Quote Inline']) QuoteInline.init();
|
||||
if (conf['Quote Preview']) QuotePreview.init();
|
||||
if (conf['Quote Backlinks']) QuoteBacklink.init();
|
||||
if (conf['Indicate OP quote']) QuoteOP.init();
|
||||
if (conf['Indicate Cross-thread Quotes']) QuoteCT.init();
|
||||
if (Conf['Filter']) Filter.init();
|
||||
if (Conf['Reply Hiding']) ReplyHiding.init();
|
||||
if (Conf['Filter'] || Conf['Reply Hiding']) StrikethroughQuotes.init();
|
||||
if (Conf['Anonymize']) Anonymize.init();
|
||||
if (Conf['Time Formatting']) Time.init();
|
||||
if (Conf['File Info Formatting']) FileInfo.init();
|
||||
if (Conf['Sauce']) Sauce.init();
|
||||
if (Conf['Reveal Spoilers']) RevealSpoilers.init();
|
||||
if (Conf['Image Auto-Gif']) AutoGif.init();
|
||||
if (Conf['Image Hover']) ImageHover.init();
|
||||
if (Conf['Report Button']) ReportButton.init();
|
||||
if (Conf['Resurrect Quotes']) Quotify.init();
|
||||
if (Conf['Quote Inline']) QuoteInline.init();
|
||||
if (Conf['Quote Preview']) QuotePreview.init();
|
||||
if (Conf['Quote Backlinks']) QuoteBacklink.init();
|
||||
if (Conf['Indicate OP quote']) QuoteOP.init();
|
||||
if (Conf['Indicate Cross-thread Quotes']) QuoteCT.init();
|
||||
return $.ready(Main.ready);
|
||||
},
|
||||
ready: function() {
|
||||
@ -3917,49 +3917,49 @@
|
||||
form = $('form[name=delform]');
|
||||
Threading.thread(form.firstElementChild);
|
||||
Favicon.init();
|
||||
if (conf['Quick Reply']) QR.init();
|
||||
if (conf['Image Expansion']) ImageExpand.init();
|
||||
if (conf['Thread Watcher']) {
|
||||
if (Conf['Quick Reply']) QR.init();
|
||||
if (Conf['Image Expansion']) ImageExpand.init();
|
||||
if (Conf['Thread Watcher']) {
|
||||
setTimeout(function() {
|
||||
return Watcher.init();
|
||||
});
|
||||
}
|
||||
if (conf['Keybinds']) {
|
||||
if (Conf['Keybinds']) {
|
||||
setTimeout(function() {
|
||||
return Keybinds.init();
|
||||
});
|
||||
}
|
||||
if (g.REPLY) {
|
||||
if (conf['Thread Updater']) {
|
||||
if (Conf['Thread Updater']) {
|
||||
setTimeout(function() {
|
||||
return Updater.init();
|
||||
});
|
||||
}
|
||||
if (conf['Thread Stats']) ThreadStats.init();
|
||||
if (conf['Reply Navigation']) {
|
||||
if (Conf['Thread Stats']) ThreadStats.init();
|
||||
if (Conf['Reply Navigation']) {
|
||||
setTimeout(function() {
|
||||
return Nav.init();
|
||||
});
|
||||
}
|
||||
if (conf['Post in Title']) TitlePost.init();
|
||||
if (conf['Unread Count'] || conf['Unread Favicon']) Unread.init();
|
||||
if (Conf['Post in Title']) TitlePost.init();
|
||||
if (Conf['Unread Count'] || Conf['Unread Favicon']) Unread.init();
|
||||
} else {
|
||||
if (conf['Thread Hiding']) {
|
||||
if (Conf['Thread Hiding']) {
|
||||
setTimeout(function() {
|
||||
return ThreadHiding.init();
|
||||
});
|
||||
}
|
||||
if (conf['Thread Expansion']) {
|
||||
if (Conf['Thread Expansion']) {
|
||||
setTimeout(function() {
|
||||
return ExpandThread.init();
|
||||
});
|
||||
}
|
||||
if (conf['Comment Expansion']) {
|
||||
if (Conf['Comment Expansion']) {
|
||||
setTimeout(function() {
|
||||
return ExpandComment.init();
|
||||
});
|
||||
}
|
||||
if (conf['Index Navigation']) {
|
||||
if (Conf['Index Navigation']) {
|
||||
setTimeout(function() {
|
||||
return Nav.init();
|
||||
});
|
||||
|
||||
270
script.coffee
270
script.coffee
@ -1,4 +1,4 @@
|
||||
config =
|
||||
Config =
|
||||
main:
|
||||
Enhancing:
|
||||
'404 Redirect': [true, 'Redirect dead threads and images']
|
||||
@ -159,17 +159,17 @@ config =
|
||||
log = console.log.bind? console
|
||||
|
||||
# flatten the config
|
||||
conf = {}
|
||||
Conf = {}
|
||||
(flatten = (parent, obj) ->
|
||||
if obj instanceof Array
|
||||
conf[parent] = obj[0]
|
||||
Conf[parent] = obj[0]
|
||||
else if typeof obj is 'object'
|
||||
for key, val of obj
|
||||
flatten key, val
|
||||
else # string or number
|
||||
conf[parent] = obj
|
||||
Conf[parent] = obj
|
||||
return
|
||||
) null, config
|
||||
) null, Config
|
||||
|
||||
NAMESPACE = '4chan_x.'
|
||||
VERSION = '2.29.1'
|
||||
@ -312,10 +312,10 @@ $.extend $,
|
||||
cb:
|
||||
checked: ->
|
||||
$.set @name, @checked
|
||||
conf[@name] = @checked
|
||||
Conf[@name] = @checked
|
||||
value: ->
|
||||
$.set @name, @value.trim()
|
||||
conf[@name] = @value
|
||||
Conf[@name] = @value
|
||||
addStyle: (css) ->
|
||||
style = $.el 'style',
|
||||
textContent: css
|
||||
@ -456,9 +456,9 @@ $$ = (selector, root=d.body) ->
|
||||
Filter =
|
||||
filters: {}
|
||||
init: ->
|
||||
for key of config.filter
|
||||
for key of Config.filter
|
||||
@filters[key] = []
|
||||
for filter in conf[key].split '\n'
|
||||
for filter in Conf[key].split '\n'
|
||||
continue if filter[0] is '#'
|
||||
|
||||
unless regexp = filter.match /\/(.+)\/(\w*)/
|
||||
@ -618,7 +618,7 @@ StrikethroughQuotes =
|
||||
for quote in post.quotes
|
||||
if (el = $.id quote.hash[1..]) and el.parentNode.parentNode.parentNode.hidden
|
||||
$.addClass quote, 'filtered'
|
||||
ReplyHiding.hide post.root if conf['Recursive Filtering']
|
||||
ReplyHiding.hide post.root if Conf['Recursive Filtering']
|
||||
return
|
||||
|
||||
ExpandComment =
|
||||
@ -655,15 +655,15 @@ ExpandComment =
|
||||
threadId: threadID
|
||||
quotes: quotes
|
||||
backlinks: []
|
||||
if conf['Resurrect Quotes']
|
||||
if Conf['Resurrect Quotes']
|
||||
Quotify.node post
|
||||
if conf['Quote Preview']
|
||||
if Conf['Quote Preview']
|
||||
QuotePreview.node post
|
||||
if conf['Quote Inline']
|
||||
if Conf['Quote Inline']
|
||||
QuoteInline.node post
|
||||
if conf['Indicate OP quote']
|
||||
if Conf['Indicate OP quote']
|
||||
QuoteOP.node post
|
||||
if conf['Indicate Cross-thread Quotes']
|
||||
if Conf['Indicate Cross-thread Quotes']
|
||||
QuoteCT.node post
|
||||
$.replace a.parentNode.parentNode, node.lastChild
|
||||
|
||||
@ -781,7 +781,7 @@ ReplyHiding =
|
||||
|
||||
table.hidden = true
|
||||
|
||||
return unless conf['Show Stubs']
|
||||
return unless Conf['Show Stubs']
|
||||
|
||||
name = $('.commentpostername', table).textContent
|
||||
uid = $('.posteruid', table)?.textContent or ''
|
||||
@ -806,20 +806,20 @@ Keybinds =
|
||||
thread = Nav.getThread()
|
||||
switch key
|
||||
# QR & Options
|
||||
when conf.openQR
|
||||
when Conf.openQR
|
||||
Keybinds.qr thread, true
|
||||
when conf.openEmptyQR
|
||||
when Conf.openEmptyQR
|
||||
Keybinds.qr thread
|
||||
when conf.openOptions
|
||||
when Conf.openOptions
|
||||
Options.dialog() unless $.id 'overlay'
|
||||
when conf.close
|
||||
when Conf.close
|
||||
if o = $.id 'overlay'
|
||||
Options.close.call o
|
||||
else if QR.el
|
||||
QR.close()
|
||||
when conf.submit
|
||||
when Conf.submit
|
||||
QR.submit() if QR.el and !QR.status()
|
||||
when conf.spoiler
|
||||
when Conf.spoiler
|
||||
ta = e.target
|
||||
return if ta.nodeName isnt 'TEXTAREA'
|
||||
|
||||
@ -836,44 +836,44 @@ Keybinds =
|
||||
# Move the caret to the end of the selection.
|
||||
ta.setSelectionRange range, range
|
||||
# Thread related
|
||||
when conf.watch
|
||||
when Conf.watch
|
||||
Watcher.toggle thread
|
||||
when conf.update
|
||||
when Conf.update
|
||||
Updater.update()
|
||||
when conf.unreadCountTo0
|
||||
when Conf.unreadCountTo0
|
||||
Unread.replies = []
|
||||
Unread.update()
|
||||
# Images
|
||||
when conf.expandImage
|
||||
when Conf.expandImage
|
||||
Keybinds.img thread
|
||||
when conf.expandAllImages
|
||||
when Conf.expandAllImages
|
||||
Keybinds.img thread, true
|
||||
# Board Navigation
|
||||
when conf.zero
|
||||
when Conf.zero
|
||||
window.location = "/#{g.BOARD}/0#0"
|
||||
when conf.nextPage
|
||||
when Conf.nextPage
|
||||
$('input[value=Next]')?.click()
|
||||
when conf.previousPage
|
||||
when Conf.previousPage
|
||||
$('input[value=Previous]')?.click()
|
||||
# Thread Navigation
|
||||
when conf.nextThread
|
||||
when Conf.nextThread
|
||||
return if g.REPLY
|
||||
Nav.scroll +1
|
||||
when conf.previousThread
|
||||
when Conf.previousThread
|
||||
return if g.REPLY
|
||||
Nav.scroll -1
|
||||
when conf.expandThread
|
||||
when Conf.expandThread
|
||||
ExpandThread.toggle thread
|
||||
when conf.openThread
|
||||
when Conf.openThread
|
||||
Keybinds.open thread
|
||||
when conf.openThreadTab
|
||||
when Conf.openThreadTab
|
||||
Keybinds.open thread, true
|
||||
# Reply Navigation
|
||||
when conf.nextReply
|
||||
when Conf.nextReply
|
||||
Keybinds.hl +1, thread
|
||||
when conf.previousReply
|
||||
when Conf.previousReply
|
||||
Keybinds.hl -1, thread
|
||||
when conf.hide
|
||||
when Conf.hide
|
||||
ThreadHiding.toggle thread if /\bthread\b/.test thread.className
|
||||
else
|
||||
return
|
||||
@ -1021,7 +1021,7 @@ QR =
|
||||
setTimeout @asyncInit
|
||||
|
||||
asyncInit: ->
|
||||
if conf['Hide Original Post Form']
|
||||
if Conf['Hide Original Post Form']
|
||||
link = $.el 'h1', innerHTML: "<a href=javascript:;>#{if g.REPLY then 'Quick Reply' else 'New Thread'}</a>"
|
||||
$.on $('a', link), 'click', ->
|
||||
QR.open()
|
||||
@ -1051,9 +1051,9 @@ QR =
|
||||
$.add d.head, script
|
||||
$.rm script
|
||||
|
||||
if conf['Persistent QR']
|
||||
if Conf['Persistent QR']
|
||||
QR.dialog()
|
||||
QR.hide() if conf['Auto Hide QR']
|
||||
QR.hide() if Conf['Auto Hide QR']
|
||||
$.on d, 'dragover', QR.dragOver
|
||||
$.on d, 'drop', QR.dropFile
|
||||
$.on d, 'dragstart', QR.drag
|
||||
@ -1078,7 +1078,7 @@ QR =
|
||||
QR.cooldown.auto = false
|
||||
QR.status()
|
||||
QR.resetFileInput()
|
||||
if not conf['Remember Spoiler'] and (spoiler = $.id 'spoiler').checked
|
||||
if not Conf['Remember Spoiler'] and (spoiler = $.id 'spoiler').checked
|
||||
spoiler.click()
|
||||
QR.cleanError()
|
||||
hide: ->
|
||||
@ -1123,7 +1123,7 @@ QR =
|
||||
return unless QR.el
|
||||
{input} = QR.status
|
||||
input.value =
|
||||
if QR.cooldown.auto and conf['Cooldown']
|
||||
if QR.cooldown.auto and Conf['Cooldown']
|
||||
if value then "Auto #{value}" else 'Auto'
|
||||
else
|
||||
value or 'Submit'
|
||||
@ -1131,14 +1131,14 @@ QR =
|
||||
|
||||
cooldown:
|
||||
init: ->
|
||||
return unless conf['Cooldown']
|
||||
return unless Conf['Cooldown']
|
||||
QR.cooldown.start $.get "/#{g.BOARD}/cooldown", 0
|
||||
$.sync "/#{g.BOARD}/cooldown", QR.cooldown.start
|
||||
start: (timeout) ->
|
||||
seconds = Math.floor (timeout - Date.now()) / 1000
|
||||
QR.cooldown.count seconds
|
||||
set: (seconds) ->
|
||||
return unless conf['Cooldown']
|
||||
return unless Conf['Cooldown']
|
||||
QR.cooldown.count seconds
|
||||
$.set "/#{g.BOARD}/cooldown", Date.now() + seconds*SECOND
|
||||
count: (seconds) ->
|
||||
@ -1234,8 +1234,8 @@ QR =
|
||||
persona = $.get 'QR.persona', {}
|
||||
@name = if prev then prev.name else persona.name or null
|
||||
@email = if prev and !/^sage$/.test prev.email then prev.email else persona.email or null
|
||||
@sub = if prev and conf['Remember Subject'] then prev.sub else if conf['Remember Subject'] then persona.sub else null
|
||||
@spoiler = if prev and conf['Remember Spoiler'] then prev.spoiler else false
|
||||
@sub = if prev and Conf['Remember Subject'] then prev.sub else if Conf['Remember Subject'] then persona.sub else null
|
||||
@spoiler = if prev and Conf['Remember Spoiler'] then prev.spoiler else false
|
||||
@com = null
|
||||
|
||||
@el = $.el 'a',
|
||||
@ -1438,7 +1438,7 @@ QR =
|
||||
<div class=warning></div>
|
||||
</form>'
|
||||
|
||||
if conf['Remember QR size'] and engine is 'gecko'
|
||||
if Conf['Remember QR size'] and engine is 'gecko'
|
||||
$.on ta = $('textarea', QR.el), 'mouseup', ->
|
||||
$.set 'QR.size', @style.cssText
|
||||
ta.style.cssText = $.get 'QR.size', ''
|
||||
@ -1557,9 +1557,9 @@ QR =
|
||||
|
||||
# Enable auto-posting if we have stuff to post, disable it otherwise.
|
||||
QR.cooldown.auto = QR.replies.length > 1
|
||||
if conf['Auto Hide QR'] and not QR.cooldown.auto
|
||||
if Conf['Auto Hide QR'] and not QR.cooldown.auto
|
||||
QR.hide()
|
||||
if conf['Thread Watcher'] and conf['Auto Watch Reply'] and threadID isnt 'new'
|
||||
if Conf['Thread Watcher'] and Conf['Auto Watch Reply'] and threadID isnt 'new'
|
||||
Watcher.watch threadID
|
||||
|
||||
post =
|
||||
@ -1634,12 +1634,12 @@ QR =
|
||||
persona =
|
||||
name: reply.name
|
||||
email: if /^sage$/.test reply.email then persona.email else reply.email
|
||||
sub: if conf['Remember Subject'] then reply.sub else null
|
||||
sub: if Conf['Remember Subject'] then reply.sub else null
|
||||
$.set 'QR.persona', persona
|
||||
|
||||
[_, thread, postNumber] = b.lastChild.textContent.match /thread:(\d+),no:(\d+)/
|
||||
if thread is '0' # new thread
|
||||
if conf['Thread Watcher'] and conf['Auto Watch']
|
||||
if Conf['Thread Watcher'] and Conf['Auto Watch']
|
||||
$.set 'autoWatch', postNumber
|
||||
# auto-noko
|
||||
location.pathname = "/#{g.BOARD}/res/#{postNumber}"
|
||||
@ -1647,17 +1647,17 @@ QR =
|
||||
# Enable auto-posting if we have stuff to post, disable it otherwise.
|
||||
QR.cooldown.auto = QR.replies.length > 1
|
||||
QR.cooldown.set if /sage/i.test reply.email then 60 else 30
|
||||
if conf['Open Reply in New Tab'] && !g.REPLY && !QR.cooldown.auto
|
||||
if Conf['Open Reply in New Tab'] && !g.REPLY && !QR.cooldown.auto
|
||||
$.open "//boards.4chan.org/#{g.BOARD}/res/#{thread}##{postNumber}"
|
||||
|
||||
if conf['Persistent QR'] or QR.cooldown.auto
|
||||
if Conf['Persistent QR'] or QR.cooldown.auto
|
||||
reply.rm()
|
||||
else
|
||||
QR.close()
|
||||
|
||||
if g.REPLY and (conf['Unread Count'] or conf['Unread Favicon'])
|
||||
if g.REPLY and (Conf['Unread Count'] or Conf['Unread Favicon'])
|
||||
Unread.foresee.push postNumber
|
||||
if g.REPLY and conf['Thread Updater'] and conf['Auto Update This']
|
||||
if g.REPLY and Conf['Thread Updater'] and Conf['Auto Update This']
|
||||
Updater.update()
|
||||
|
||||
QR.status()
|
||||
@ -1892,11 +1892,11 @@ Options =
|
||||
</div>'
|
||||
|
||||
#main
|
||||
for key, obj of config.main
|
||||
for key, obj of Config.main
|
||||
ul = $.el 'ul',
|
||||
textContent: key
|
||||
for key, arr of obj
|
||||
checked = if conf[key] then 'checked' else ''
|
||||
checked = if Conf[key] then 'checked' else ''
|
||||
description = arr[1]
|
||||
li = $.el 'li',
|
||||
innerHTML: "<label><input type=checkbox name=\"#{key}\" #{checked}>#{key}</label><span class=description>: #{description}</span>"
|
||||
@ -1913,14 +1913,14 @@ Options =
|
||||
|
||||
#filter & sauce
|
||||
for ta in $$ 'textarea', dialog
|
||||
ta.textContent = conf[ta.name]
|
||||
ta.textContent = Conf[ta.name]
|
||||
$.on ta, 'change', $.cb.value
|
||||
|
||||
#rice
|
||||
(back = $ '[name=backlink]', dialog).value = conf['backlink']
|
||||
(time = $ '[name=time]', dialog).value = conf['time']
|
||||
(fileInfoR = $ '[name=fileInfoR]', dialog).value = conf['fileInfoR']
|
||||
(fileInfoT = $ '[name=fileInfoT]', dialog).value = conf['fileInfoT']
|
||||
(back = $ '[name=backlink]', dialog).value = Conf['backlink']
|
||||
(time = $ '[name=time]', dialog).value = Conf['time']
|
||||
(fileInfoR = $ '[name=fileInfoR]', dialog).value = Conf['fileInfoR']
|
||||
(fileInfoT = $ '[name=fileInfoT]', dialog).value = Conf['fileInfoT']
|
||||
$.on back, 'keyup', $.cb.value
|
||||
$.on back, 'keyup', Options.backlink
|
||||
$.on time, 'keyup', $.cb.value
|
||||
@ -1930,16 +1930,16 @@ Options =
|
||||
$.on fileInfoT, 'keyup', $.cb.value
|
||||
$.on fileInfoT, 'keyup', Options.fileInfo
|
||||
favicon = $ 'select', dialog
|
||||
favicon.value = conf['favicon']
|
||||
favicon.value = Conf['favicon']
|
||||
$.on favicon, 'change', $.cb.value
|
||||
$.on favicon, 'change', Options.favicon
|
||||
|
||||
#keybinds
|
||||
for key, arr of config.hotkeys
|
||||
for key, arr of Config.hotkeys
|
||||
tr = $.el 'tr',
|
||||
innerHTML: "<td>#{arr[1]}</td><td><input name=#{key}></td>"
|
||||
input = $ 'input', tr
|
||||
input.value = conf[key]
|
||||
input.value = Conf[key]
|
||||
$.on input, 'keydown', Options.keybind
|
||||
$.add $('#keybinds_tab + div tbody', dialog), tr
|
||||
|
||||
@ -1947,7 +1947,7 @@ Options =
|
||||
indicators = {}
|
||||
for indicator in $$ '.warning', dialog
|
||||
key = indicator.firstChild.textContent
|
||||
indicator.hidden = conf[key]
|
||||
indicator.hidden = Conf[key]
|
||||
indicators[key] = indicator
|
||||
$.on $("[name='#{key}']", dialog), 'click', ->
|
||||
indicators[@name].hidden = @checked
|
||||
@ -1988,7 +1988,7 @@ Options =
|
||||
Time.date = new Date()
|
||||
$.id('timePreview').textContent = Time.funk Time
|
||||
backlink: ->
|
||||
$.id('backlinkPreview').textContent = conf['backlink'].replace /%id/, '123456789'
|
||||
$.id('backlinkPreview').textContent = Conf['backlink'].replace /%id/, '123456789'
|
||||
fileInfo: ->
|
||||
type = if @name is 'fileInfoR' then 0 else 1
|
||||
FileInfo.data =
|
||||
@ -2069,7 +2069,7 @@ ThreadHiding =
|
||||
$.set "hiddenThreads/#{g.BOARD}/", hiddenThreads
|
||||
|
||||
hide: (thread) ->
|
||||
unless conf['Show Stubs']
|
||||
unless Conf['Show Stubs']
|
||||
thread.hidden = true
|
||||
thread.nextSibling.hidden = true
|
||||
return
|
||||
@ -2104,17 +2104,17 @@ ThreadHiding =
|
||||
|
||||
Updater =
|
||||
init: ->
|
||||
html = "<div class=move><span id=count></span> <span id=timer>-#{conf['Interval']}</span></div>"
|
||||
{checkbox} = config.updater
|
||||
html = "<div class=move><span id=count></span> <span id=timer>-#{Conf['Interval']}</span></div>"
|
||||
{checkbox} = Config.updater
|
||||
for name of checkbox
|
||||
title = checkbox[name][1]
|
||||
checked = if conf[name] then 'checked' else ''
|
||||
checked = if Conf[name] then 'checked' else ''
|
||||
html += "<div><label title='#{title}'>#{name}<input name='#{name}' type=checkbox #{checked}></label></div>"
|
||||
|
||||
checked = if conf['Auto Update'] then 'checked' else ''
|
||||
checked = if Conf['Auto Update'] then 'checked' else ''
|
||||
html += "
|
||||
<div><label title='Controls whether *this* thread automatically updates or not'>Auto Update This<input name='Auto Update This' type=checkbox #{checked}></label></div>
|
||||
<div><label>Interval (s)<input name=Interval value=#{conf['Interval']} type=text></label></div>
|
||||
<div><label>Interval (s)<input name=Interval value=#{Conf['Interval']} type=text></label></div>
|
||||
<div><input value='Update Now' type=button></div>"
|
||||
|
||||
dialog = ui.dialog 'updater', 'bottom: 0; right: 0;', html
|
||||
@ -2136,9 +2136,9 @@ Updater =
|
||||
$.on input, 'click', @cb.autoUpdate
|
||||
@cb.autoUpdate.call input
|
||||
# Required for the QR's update after posting.
|
||||
conf[input.name] = input.checked
|
||||
Conf[input.name] = input.checked
|
||||
else if input.name is 'Interval'
|
||||
$.on input, 'change', -> conf['Interval'] = @value = parseInt(@value, 10) or conf['Interval']
|
||||
$.on input, 'change', -> Conf['Interval'] = @value = parseInt(@value, 10) or Conf['Interval']
|
||||
$.on input, 'change', $.cb.value
|
||||
else if input.type is 'button'
|
||||
$.on input, 'click', @update
|
||||
@ -2150,7 +2150,7 @@ Updater =
|
||||
|
||||
cb:
|
||||
verbose: ->
|
||||
if conf['Verbose']
|
||||
if Conf['Verbose']
|
||||
Updater.count.textContent = '+0'
|
||||
Updater.timer.hidden = false
|
||||
else
|
||||
@ -2176,7 +2176,7 @@ Updater =
|
||||
Updater.count.className = 'warning'
|
||||
clearTimeout Updater.timeoutID
|
||||
g.dead = true
|
||||
if conf['Unread Count']
|
||||
if Conf['Unread Count']
|
||||
Unread.title = Unread.title.match(/^.+-/)[0] + ' 404'
|
||||
else
|
||||
d.title = d.title.match(/^.+-/)[0] + ' 404'
|
||||
@ -2186,7 +2186,7 @@ Updater =
|
||||
return
|
||||
|
||||
Updater.retryCoef = 10
|
||||
Updater.timer.textContent = '-' + conf['Interval']
|
||||
Updater.timer.textContent = '-' + Conf['Interval']
|
||||
|
||||
###
|
||||
Status Code 304: Not modified
|
||||
@ -2195,7 +2195,7 @@ Updater =
|
||||
and won't load images and scripts when parsing the response.
|
||||
###
|
||||
if @status is 304
|
||||
if conf['Verbose']
|
||||
if Conf['Verbose']
|
||||
Updater.count.textContent = '+0'
|
||||
Updater.count.className = null
|
||||
return
|
||||
@ -2211,9 +2211,9 @@ Updater =
|
||||
nodes.push reply.parentNode.parentNode.parentNode #table
|
||||
|
||||
newPosts = nodes.length
|
||||
scroll = conf['Scrolling'] && Updater.scrollBG() && newPosts &&
|
||||
scroll = Conf['Scrolling'] && Updater.scrollBG() && newPosts &&
|
||||
Updater.br.previousElementSibling.getBoundingClientRect().bottom - d.body.clientHeight < 25
|
||||
if conf['Verbose']
|
||||
if Conf['Verbose']
|
||||
Updater.count.textContent = "+#{newPosts}"
|
||||
Updater.count.className = if newPosts then 'new' else null
|
||||
|
||||
@ -2344,7 +2344,7 @@ Sauce =
|
||||
init: ->
|
||||
return if g.BOARD is 'f'
|
||||
@links = []
|
||||
for link in conf['sauces'].split '\n'
|
||||
for link in Conf['sauces'].split '\n'
|
||||
continue if link[0] is '#'
|
||||
@links.push @createSauceLink link
|
||||
return unless @links.length
|
||||
@ -2422,7 +2422,7 @@ Time =
|
||||
textContent: ' ' + Time.funk(Time) + ' '
|
||||
$.replace node, time
|
||||
foo: ->
|
||||
code = conf['time'].replace /%([A-Za-z])/g, (s, c) ->
|
||||
code = Conf['time'].replace /%([A-Za-z])/g, (s, c) ->
|
||||
if c of Time.formatters
|
||||
"' + Time.formatters.#{c}() + '"
|
||||
else
|
||||
@ -2496,7 +2496,7 @@ FileInfo =
|
||||
setFormats: ->
|
||||
funks = []
|
||||
for i in [0..1]
|
||||
format = if i then conf['fileInfoT'] else conf['fileInfoR']
|
||||
format = if i then Conf['fileInfoT'] else Conf['fileInfoR']
|
||||
param = if i then /%([BKlMrs])/g else /%([BKlLMnNrs])/g
|
||||
code = format.replace param, (s, c) ->
|
||||
if c of FileInfo.formatters
|
||||
@ -2553,7 +2553,7 @@ TitlePost =
|
||||
|
||||
QuoteBacklink =
|
||||
init: ->
|
||||
format = conf['backlink'].replace /%id/g, "' + id + '"
|
||||
format = Conf['backlink'].replace /%id/g, "' + id + '"
|
||||
@funk = Function 'id', "return '#{format}'"
|
||||
g.callbacks.push @node
|
||||
node: (post) ->
|
||||
@ -2570,11 +2570,11 @@ QuoteBacklink =
|
||||
textContent: QuoteBacklink.funk post.id
|
||||
for qid of quotes
|
||||
# Don't backlink the OP.
|
||||
continue if !(el = $.id qid) or el.className is 'op' and !conf['OP Backlinks']
|
||||
continue if !(el = $.id qid) or el.className is 'op' and !Conf['OP Backlinks']
|
||||
link = a.cloneNode true
|
||||
if conf['Quote Preview']
|
||||
if Conf['Quote Preview']
|
||||
$.on link, 'mouseover', QuotePreview.mouseover
|
||||
if conf['Quote Inline']
|
||||
if Conf['Quote Inline']
|
||||
$.on link, 'click', QuoteInline.toggle
|
||||
else
|
||||
link.setAttribute 'onclick', "replyhl('#{post.id}');"
|
||||
@ -2618,7 +2618,7 @@ QuoteInline =
|
||||
Unread.update()
|
||||
if /\bbacklink\b/.test q.className
|
||||
$.after q.parentNode, inline
|
||||
if conf['Forward Hiding']
|
||||
if Conf['Forward Hiding']
|
||||
table = $.x 'ancestor::table', el
|
||||
$.addClass table, 'forwarded'
|
||||
# Will only unhide if there's no inlined backlinks of it anymore.
|
||||
@ -2639,7 +2639,7 @@ QuoteInline =
|
||||
#select the corresponding table or loading td
|
||||
table = $.x "following::*[@id='i#{id}']", q
|
||||
$.rm table
|
||||
return unless conf['Forward Hiding']
|
||||
return unless Conf['Forward Hiding']
|
||||
for inlined in $$ '.backlink.inlined', table
|
||||
table = $.x 'ancestor::table', $.id inlined.hash[1..]
|
||||
$.removeClass table, 'forwarded' unless --table.title
|
||||
@ -2698,7 +2698,7 @@ QuotePreview =
|
||||
id = @hash[1..]
|
||||
if el = $.id id
|
||||
qp.innerHTML = el.innerHTML
|
||||
$.addClass el, 'qphl' if conf['Quote Highlighting']
|
||||
$.addClass el, 'qphl' if Conf['Quote Highlighting']
|
||||
if /\bbacklink\b/.test @className
|
||||
replyID = $.x('preceding-sibling::input', @parentNode).name
|
||||
for quote in $$ '.quotelink', qp
|
||||
@ -2739,11 +2739,11 @@ QuotePreview =
|
||||
root: qp
|
||||
filesize: $ '.filesize', qp
|
||||
img: $ 'img[md5]', qp
|
||||
if conf['Image Auto-Gif']
|
||||
if Conf['Image Auto-Gif']
|
||||
AutoGif.node post
|
||||
if conf['Time Formatting']
|
||||
if Conf['Time Formatting']
|
||||
Time.node post
|
||||
if conf['File Info Formatting']
|
||||
if Conf['File Info Formatting']
|
||||
FileInfo.node post
|
||||
|
||||
QuoteOP =
|
||||
@ -2915,10 +2915,10 @@ Unread =
|
||||
|
||||
count = @replies.length
|
||||
|
||||
if conf['Unread Count']
|
||||
if Conf['Unread Count']
|
||||
@setTitle count
|
||||
|
||||
unless conf['Unread Favicon'] and (count < 2 or forceUpdate)
|
||||
unless Conf['Unread Favicon'] and (count < 2 or forceUpdate)
|
||||
return
|
||||
|
||||
Favicon.el.href =
|
||||
@ -2948,7 +2948,7 @@ Favicon =
|
||||
@switch()
|
||||
|
||||
switch: ->
|
||||
switch conf['favicon']
|
||||
switch Conf['favicon']
|
||||
when 'ferongr'
|
||||
@unreadDead = 'data:unreadDead;base64,R0lGODlhEAAQAOMHAOgLAnMFAL8AAOgLAukMA/+AgP+rq////////////////////////////////////yH5BAEKAAcALAAAAAAQABAAAARZ8MhJ6xwDWIBv+AM1fEEIBIVRlNKYrtpIECuGzuwpCLg974EYiXUYkUItjGbC6VQ4omXFiKROA6qSy0A8nAo9GS3YCswIWnOvLAi0be23Z1QtdSUaqXcviQAAOw=='
|
||||
@unreadSFW = 'data:unreadSFW;base64,R0lGODlhEAAQAOMHAADX8QBwfgC2zADX8QDY8nnl8qLp8v///////////////////////////////////yH5BAEKAAcALAAAAAAQABAAAARZ8MhJ6xwDWIBv+AM1fEEIBIVRlNKYrtpIECuGzuwpCLg974EYiXUYkUItjGbC6VQ4omXFiKROA6qSy0A8nAo9GS3YCswIWnOvLAi0be23Z1QtdSUaqXcviQAAOw=='
|
||||
@ -2981,12 +2981,12 @@ Redirect =
|
||||
image: (href) ->
|
||||
href = href.split '/'
|
||||
# Do not use g.BOARD, the image url can originate from a cross-quote.
|
||||
return unless conf['404 Redirect']
|
||||
return unless Conf['404 Redirect']
|
||||
switch href[3]
|
||||
when 'a', 'jp', 'm', 'tg', 'u', 'vg'
|
||||
"http://archive.foolz.us/#{href[3]}/full_image/#{href[5]}"
|
||||
thread: (board=g.BOARD, id=g.THREAD_ID, mode='thread') ->
|
||||
return unless conf['404 Redirect'] or mode is 'post'
|
||||
return unless Conf['404 Redirect'] or mode is 'post'
|
||||
switch g.BOARD
|
||||
when 'a', 'jp', 'm', 'tg', 'tv', 'u', 'v', 'vg'
|
||||
"http://archive.foolz.us/#{board}/thread/#{id}/"
|
||||
@ -3061,7 +3061,7 @@ ImageExpand =
|
||||
ImageExpand.on = @checked
|
||||
if ImageExpand.on #expand
|
||||
thumbs = $$ 'img[md5]'
|
||||
if conf['Expand From Current']
|
||||
if Conf['Expand From Current']
|
||||
for thumb, i in thumbs
|
||||
if thumb.getBoundingClientRect().top > 0
|
||||
break
|
||||
@ -3168,8 +3168,8 @@ Main =
|
||||
g.PAGENUM = parseInt(temp) or 0
|
||||
|
||||
#load values from localStorage
|
||||
for key, val of conf
|
||||
conf[key] = $.get key, val
|
||||
for key, val of Conf
|
||||
Conf[key] = $.get key, val
|
||||
|
||||
$.on window, 'message', Main.message
|
||||
|
||||
@ -3192,13 +3192,13 @@ Main =
|
||||
|
||||
$.ready Options.init
|
||||
|
||||
if conf['Quick Reply'] and conf['Hide Original Post Form'] and g.BOARD isnt 'f'
|
||||
if Conf['Quick Reply'] and Conf['Hide Original Post Form'] and g.BOARD isnt 'f'
|
||||
Main.css += 'form[name=post] { display: none; }'
|
||||
|
||||
Main.addStyle()
|
||||
|
||||
now = Date.now()
|
||||
if conf['Check for Updates'] and $.get('lastUpdate', 0) < now - 6*HOUR
|
||||
if Conf['Check for Updates'] and $.get('lastUpdate', 0) < now - 6*HOUR
|
||||
$.ready -> $.add d.head, $.el 'script', src: 'https://raw.github.com/mayhemydg/4chan-x/master/latest.js'
|
||||
$.set 'lastUpdate', now
|
||||
|
||||
@ -3222,55 +3222,55 @@ Main =
|
||||
|
||||
|
||||
#major features
|
||||
if conf['Filter']
|
||||
if Conf['Filter']
|
||||
Filter.init()
|
||||
|
||||
if conf['Reply Hiding']
|
||||
if Conf['Reply Hiding']
|
||||
ReplyHiding.init()
|
||||
|
||||
if conf['Filter'] or conf['Reply Hiding']
|
||||
if Conf['Filter'] or Conf['Reply Hiding']
|
||||
StrikethroughQuotes.init()
|
||||
|
||||
if conf['Anonymize']
|
||||
if Conf['Anonymize']
|
||||
Anonymize.init()
|
||||
|
||||
if conf['Time Formatting']
|
||||
if Conf['Time Formatting']
|
||||
Time.init()
|
||||
|
||||
if conf['File Info Formatting']
|
||||
if Conf['File Info Formatting']
|
||||
FileInfo.init()
|
||||
|
||||
if conf['Sauce']
|
||||
if Conf['Sauce']
|
||||
Sauce.init()
|
||||
|
||||
if conf['Reveal Spoilers']
|
||||
if Conf['Reveal Spoilers']
|
||||
RevealSpoilers.init()
|
||||
|
||||
if conf['Image Auto-Gif']
|
||||
if Conf['Image Auto-Gif']
|
||||
AutoGif.init()
|
||||
|
||||
if conf['Image Hover']
|
||||
if Conf['Image Hover']
|
||||
ImageHover.init()
|
||||
|
||||
if conf['Report Button']
|
||||
if Conf['Report Button']
|
||||
ReportButton.init()
|
||||
|
||||
if conf['Resurrect Quotes']
|
||||
if Conf['Resurrect Quotes']
|
||||
Quotify.init()
|
||||
|
||||
if conf['Quote Inline']
|
||||
if Conf['Quote Inline']
|
||||
QuoteInline.init()
|
||||
|
||||
if conf['Quote Preview']
|
||||
if Conf['Quote Preview']
|
||||
QuotePreview.init()
|
||||
|
||||
if conf['Quote Backlinks']
|
||||
if Conf['Quote Backlinks']
|
||||
QuoteBacklink.init()
|
||||
|
||||
if conf['Indicate OP quote']
|
||||
if Conf['Indicate OP quote']
|
||||
QuoteOP.init()
|
||||
|
||||
if conf['Indicate Cross-thread Quotes']
|
||||
if Conf['Indicate Cross-thread Quotes']
|
||||
QuoteCT.init()
|
||||
|
||||
$.ready Main.ready
|
||||
@ -3290,45 +3290,45 @@ Main =
|
||||
Favicon.init()
|
||||
|
||||
# Major features.
|
||||
if conf['Quick Reply']
|
||||
if Conf['Quick Reply']
|
||||
QR.init()
|
||||
|
||||
if conf['Image Expansion']
|
||||
if Conf['Image Expansion']
|
||||
ImageExpand.init()
|
||||
|
||||
if conf['Thread Watcher']
|
||||
if Conf['Thread Watcher']
|
||||
setTimeout -> Watcher.init()
|
||||
|
||||
if conf['Keybinds']
|
||||
if Conf['Keybinds']
|
||||
setTimeout -> Keybinds.init()
|
||||
|
||||
if g.REPLY
|
||||
if conf['Thread Updater']
|
||||
if Conf['Thread Updater']
|
||||
setTimeout -> Updater.init()
|
||||
|
||||
if conf['Thread Stats']
|
||||
if Conf['Thread Stats']
|
||||
ThreadStats.init()
|
||||
|
||||
if conf['Reply Navigation']
|
||||
if Conf['Reply Navigation']
|
||||
setTimeout -> Nav.init()
|
||||
|
||||
if conf['Post in Title']
|
||||
if Conf['Post in Title']
|
||||
TitlePost.init()
|
||||
|
||||
if conf['Unread Count'] or conf['Unread Favicon']
|
||||
if Conf['Unread Count'] or Conf['Unread Favicon']
|
||||
Unread.init()
|
||||
|
||||
else #not reply
|
||||
if conf['Thread Hiding']
|
||||
if Conf['Thread Hiding']
|
||||
setTimeout -> ThreadHiding.init()
|
||||
|
||||
if conf['Thread Expansion']
|
||||
if Conf['Thread Expansion']
|
||||
setTimeout -> ExpandThread.init()
|
||||
|
||||
if conf['Comment Expansion']
|
||||
if Conf['Comment Expansion']
|
||||
setTimeout -> ExpandComment.init()
|
||||
|
||||
if conf['Index Navigation']
|
||||
if Conf['Index Navigation']
|
||||
setTimeout -> Nav.init()
|
||||
|
||||
nodes = []
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user