diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2d5a71d0b..2421dd5af 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,18 @@
**MayhemYDG**:
- **New feature**: `Show Dice Roll` (with @carboncopy)
- Shows dice that were entered into the email field on /tg/.
+- **Thread Watcher** improvements:
+ - It is now possible to open all watched threads via the `Open all threads` button in the Thread Watcher's menu.
+ - Added the `Current Board` setting to switch between showing watched threads from the current board or all boards, disabled by default.
+ - About dead (404'd) threads:
+ - Dead threads will be typographically indicated with a strikethrough.
+ - Dead threads will directly link to the corresponding archive when available.
+ - A button to prune all 404'd threads from the list is now available.
+ - Added the `Auto Prune` setting to automatically prune 404'd threads, disabled by default.
+ - The current thread is now highlighted in the list of watched threads.
+ - Watching the current thread can be done in the Header's menu too.
+- Removed the `Check for Updates` setting:
+ - Your browser/userscript manager should handle updates itself automatically.
- Fix impossibility to create new threads when in dead threads.
- Fix flag filtering on /sp/ and /int/.
- Update archives. (with @woxxy and @proplex)
diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js
index 5564ab3d3..3552fecd1 100644
--- a/builds/4chan-X.user.js
+++ b/builds/4chan-X.user.js
@@ -134,7 +134,6 @@
'Index Navigation': [false, 'Add buttons to navigate between threads.'],
'Reply Navigation': [false, 'Add buttons to navigate to top / bottom of thread.'],
'Show Dice Roll': [true, 'Show dice that were entered into the email field.'],
- 'Check for Updates': [true, 'Check for updated versions of 4chan X.'],
'Show Updated Notifications': [true, 'Show notifications when 4chan X is successfully updated.'],
'Emoji': [false, 'Adds icons next to names for different emails'],
'Color User IDs': [false, 'Assign unique colors to user IDs on boards that use them'],
@@ -188,9 +187,7 @@
'Page Count in Stats': [false, 'Display the page count in the thread stats as well.'],
'Updater and Stats in Header': [true, 'Places the thread updater and thread stats in the header instead of floating them.'],
'Thread Watcher': [true, 'Bookmark threads.'],
- 'Toggleable Thread Watcher': [true, 'Adds a shortcut for the thread watcher, hides the watcher by default, and makes it scroll with the page.'],
- 'Auto Watch': [true, 'Automatically watch threads you start.'],
- 'Auto Watch Reply': [false, 'Automatically watch threads you reply to.']
+ 'Toggleable Thread Watcher': [true, 'Adds a shortcut for the thread watcher, hides the watcher by default, and makes it scroll with the page.']
},
'Posting': {
'Quick Reply': [true, 'All-in-one form to reply, create threads, automate dumping and more.'],
@@ -231,6 +228,12 @@
'Expand from here': [false, 'Expand all images only from current position to thread end.'],
'Advance on contract': [false, 'Advance to next post when contracting an expanded image.']
},
+ threadWatcher: {
+ 'Current Board': [false, 'Only show watched threads from the current board.'],
+ 'Auto Watch': [true, 'Automatically watch threads you start.'],
+ 'Auto Watch Reply': [false, 'Automatically watch threads you reply to.'],
+ 'Auto Prune': [false, 'Automatically prune 404\'d threads.']
+ },
filter: {
name: "# Filter any namefags:\n#/^(?!Anonymous$)/",
uniqueID: "# Filter a specific ID:\n#/Txhvk1Tl/",
@@ -423,26 +426,32 @@
}
};
- $.ajax = function(url, options, extra) {
- var form, headers, key, r, sync, type, upCallbacks, val;
+ $.ajax = (function() {
+ var lastModified;
- if (extra == null) {
- extra = {};
- }
- type = extra.type, headers = extra.headers, upCallbacks = extra.upCallbacks, form = extra.form, sync = extra.sync;
- r = new XMLHttpRequest();
- r.overrideMimeType('text/html');
- type || (type = form && 'post' || 'get');
- r.open(type, url, !sync);
- for (key in headers) {
- val = headers[key];
- r.setRequestHeader(key, val);
- }
- $.extend(r, options);
- $.extend(r.upload, upCallbacks);
- r.send(form);
- return r;
- };
+ lastModified = {};
+ return function(url, options, extra) {
+ var form, r, sync, type, upCallbacks, whenModified;
+
+ if (extra == null) {
+ extra = {};
+ }
+ type = extra.type, whenModified = extra.whenModified, upCallbacks = extra.upCallbacks, form = extra.form, sync = extra.sync;
+ r = new XMLHttpRequest();
+ type || (type = form && 'post' || 'get');
+ r.open(type, url, !sync);
+ if (whenModified) {
+ r.setRequestHeader('If-Modified-Since', lastModified[url] || '0');
+ $.on(r, 'load', function() {
+ return lastModified[url] = r.getResponseHeader('Last-Modified');
+ });
+ }
+ $.extend(r, options);
+ $.extend(r.upload, upCallbacks);
+ r.send(form);
+ return r;
+ };
+ })();
$.cache = (function() {
var reqs;
@@ -1198,17 +1207,19 @@
})(Post);
- DataBoards = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts'];
+ DataBoards = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts', 'watchedThreads'];
DataBoard = (function() {
- function DataBoard(key, sync) {
+ function DataBoard(key, sync, dontClean) {
var init,
_this = this;
this.key = key;
this.data = Conf[key];
$.sync(key, this.onSync.bind(this));
- this.clean();
+ if (!dontClean) {
+ this.clean();
+ }
if (!sync) {
return;
}
@@ -1219,6 +1230,10 @@
$.on(d, '4chanXInitFinished', init);
}
+ DataBoard.prototype.save = function() {
+ return $.set(this.key, this.data);
+ };
+
DataBoard.prototype["delete"] = function(_arg) {
var boardID, postID, threadID;
@@ -1237,7 +1252,7 @@
} else {
delete this.data.boards[boardID];
}
- return $.set(this.key, this.data);
+ return this.save();
};
DataBoard.prototype.deleteIfEmpty = function(_arg) {
@@ -1267,7 +1282,7 @@
} else {
this.data.boards[boardID] = val;
}
- return $.set(this.key, this.data);
+ return this.save();
};
DataBoard.prototype.get = function(_arg) {
@@ -1311,7 +1326,7 @@
this.ajaxClean(boardID);
}
}
- return $.set(this.key, this.data);
+ return this.save();
};
DataBoard.prototype.ajaxClean = function(boardID) {
@@ -1341,7 +1356,7 @@
boardID: boardID
});
}
- return $.set(_this.key, _this.data);
+ return _this.save();
});
};
@@ -1402,8 +1417,26 @@
Polyfill = {
init: function() {
+ Polyfill.toBlob();
return Polyfill.visibility();
},
+ toBlob: function() {
+ var _base;
+
+ return (_base = HTMLCanvasElement.prototype).toBlob || (_base.toBlob = function(cb) {
+ var data, i, l, ui8a, _i;
+
+ data = atob(this.toDataURL().slice(22));
+ l = data.length;
+ ui8a = new Uint8Array(l);
+ for (i = _i = 0; 0 <= l ? _i < l : _i > l; i = 0 <= l ? ++_i : --_i) {
+ ui8a[i] = data.charCodeAt(i);
+ }
+ return cb(new Blob([ui8a], {
+ type: 'image/png'
+ }));
+ });
+ },
visibility: function() {
if (!('webkitHidden' in document)) {
return;
@@ -1822,7 +1855,7 @@
date: data.now,
dateUTC: data.time,
comment: data.com,
- capReps: data.capcode_replies,
+ capcodeReplies: data.capcode_replies,
isSticky: !!data.sticky,
isClosed: !!data.closed
};
@@ -1850,9 +1883,9 @@
@license: https://github.com/4chan/4chan-JS/blob/master/LICENSE
*/
- var a, array, boardID, capReps, capcode, capcodeClass, capcodeReplies, capcodeStart, capcodeType, closed, comment, container, date, dateUTC, email, emailEnd, emailStart, ext, file, fileDims, fileHTML, fileInfo, fileSize, fileThumb, filename, flag, flagCode, flagName, generateCapcodeReplies, href, imgSrc, isClosed, isOP, isSticky, name, postID, quote, shortFilename, spoilerRange, staticPath, sticky, subject, threadID, tripcode, uniqueID, userID, _i, _len, _ref;
+ var a, boardID, capcode, capcodeClass, capcodeReplies, capcodeStart, closed, comment, container, date, dateUTC, email, emailEnd, emailStart, ext, file, fileDims, fileHTML, fileInfo, fileSize, fileThumb, filename, flag, flagCode, flagName, href, imgSrc, isClosed, isOP, isSticky, name, postID, quote, shortFilename, spoilerRange, staticPath, sticky, subject, threadID, tripcode, uniqueID, userID, _i, _len, _ref;
- postID = o.postID, threadID = o.threadID, boardID = o.boardID, name = o.name, capcode = o.capcode, tripcode = o.tripcode, uniqueID = o.uniqueID, email = o.email, subject = o.subject, flagCode = o.flagCode, flagName = o.flagName, date = o.date, dateUTC = o.dateUTC, isSticky = o.isSticky, isClosed = o.isClosed, comment = o.comment, capReps = o.capReps, file = o.file;
+ postID = o.postID, threadID = o.threadID, boardID = o.boardID, name = o.name, capcode = o.capcode, tripcode = o.tripcode, uniqueID = o.uniqueID, email = o.email, subject = o.subject, flagCode = o.flagCode, flagName = o.flagName, date = o.date, dateUTC = o.dateUTC, isSticky = o.isSticky, isClosed = o.isClosed, comment = o.comment, capcodeReplies = o.capcodeReplies, file = o.file;
isOP = postID === threadID;
staticPath = '//static.4chan.org/image/';
if (email) {
@@ -1926,32 +1959,10 @@
tripcode = tripcode ? " " + tripcode + " " : '';
sticky = isSticky ? " " : '';
closed = isClosed ? " " : '';
- capcodeReplies = '';
- if (capReps) {
- generateCapcodeReplies = function(capcodeType, array) {
- return "" + ((function() {
- switch (capcodeType) {
- case 'admin':
- return 'Administrator';
- case 'mod':
- return 'Moderator';
- case 'developer':
- return 'Developer';
- }
- })()) + " Repl" + (array.length > 1 ? 'ies' : 'y') + ": " + (array.map(function(ID) {
- return ">>" + ID + " ";
- }).join(' ')) + " ";
- };
- for (capcodeType in capReps) {
- array = capReps[capcodeType];
- capcodeReplies += generateCapcodeReplies(capcodeType, array);
- }
- capcodeReplies = "" + capcodeReplies + " ";
- }
container = $.el('div', {
id: "pc" + postID,
className: "postContainer " + (isOP ? 'op' : 'reply') + "Container",
- innerHTML: "" + (isOP ? '' : "
>>
") + "" + (name || '') + " " + (tripcode + capcodeStart + capcode + userID + flag + sticky + closed) + " " + subject + "" + date + "No. " + postID + " " + (isOP ? fileHTML : '') + "
" + subject + "
" + emailStart + "" + (name || '') + " " + (tripcode + capcodeStart + emailEnd + capcode + userID + flag + sticky + closed) + " " + " " + "
" + date + " " + " " + "
No. " + postID + " " + (isOP ? '' : fileHTML) + "
" + (comment || '') + capcodeReplies + " " + " " + "
"
+ innerHTML: "" + (isOP ? '' : ">>
") + "" + (name || '') + " " + (tripcode + capcodeStart + capcode + userID + flag + sticky + closed) + " " + subject + "" + date + "No. " + postID + " " + (isOP ? fileHTML : '') + "
" + subject + "
" + emailStart + "" + (name || '') + " " + (tripcode + capcodeStart + emailEnd + capcode + userID + flag + sticky + closed) + " " + " " + "
" + date + " " + " " + "
No. " + postID + " " + (isOP ? '' : fileHTML) + "
" + (comment || '') + " " + " " + "
"
});
_ref = $$('.quotelink', container);
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
@@ -1962,7 +1973,47 @@
}
quote.href = "/" + boardID + "/res/" + href;
}
+ Build.capcodeReplies({
+ boardID: boardID,
+ threadID: threadID,
+ root: container,
+ capcodeReplies: capcodeReplies
+ });
return container;
+ },
+ capcodeReplies: function(_arg) {
+ var array, boardID, bq, capcodeReplies, capcodeType, generateCapcodeReplies, html, root, threadID;
+
+ boardID = _arg.boardID, threadID = _arg.threadID, bq = _arg.bq, root = _arg.root, capcodeReplies = _arg.capcodeReplies;
+ if (!capcodeReplies) {
+ return;
+ }
+ generateCapcodeReplies = function(capcodeType, array) {
+ return "" + ((function() {
+ switch (capcodeType) {
+ case 'admin':
+ return 'Administrator';
+ case 'mod':
+ return 'Moderator';
+ case 'developer':
+ return 'Developer';
+ }
+ })()) + " Repl" + (array.length > 1 ? 'ies' : 'y') + ": " + (array.map(function(ID) {
+ return ">>" + ID + " ";
+ }).join(' ')) + " ";
+ };
+ html = [];
+ for (capcodeType in capcodeReplies) {
+ array = capcodeReplies[capcodeType];
+ html.push(generateCapcodeReplies(capcodeType, array));
+ }
+ bq || (bq = $('blockquote', root));
+ return $.add(bq, [
+ $.el('br'), $.el('br'), $.el('span', {
+ className: 'capcodeReplies',
+ innerHTML: html.join('')
+ })
+ ]);
}
};
@@ -4375,7 +4426,7 @@
if (g.VIEW === 'catalog' || !Conf['Linkify']) {
return;
}
- this.regString = Conf['Allow False Positives'] ? /(\b([-a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]|[-a-z0-9]+\.[a-z]|[\d]+\.[\d]+\.[\d]+\.[\d]+\/|[a-z]{3,}:[a-z0-9?]|[^\s@]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi : /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi;
+ this.regString = Conf['Allow False Positives'] ? /([-a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]|[-a-z0-9]+\.[a-z]|[\d]+\.[\d]+\.[\d]+\.[\d]+\/|[a-z]{3,}:[a-z0-9?]|[^\s@]+@[a-z0-9.-]+\.[a-z0-9])/i : /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1})/i;
if (Conf['Comment Expansion']) {
ExpandComment.callbacks.push(this.node);
}
@@ -4388,7 +4439,7 @@
});
},
node: function() {
- var data, el, i, items, links, node, range, snapshot, _i, _len, _ref;
+ var data, el, end, endNode, i, index, items, lIndex, length, link, links, node, range, result, saved, snapshot, space, test, text, _i, _len, _ref;
if (this.isClone) {
if (Conf['Embedding']) {
@@ -4403,16 +4454,49 @@
}
return;
}
+ test = /[^\s'"]+/g;
+ space = /[\s'"]/;
snapshot = $.X('.//br|.//text()', this.nodes.comment);
i = 0;
while (node = snapshot.snapshotItem(i++)) {
- if (node.parentElement.nodeName === "A") {
+ links = [];
+ data = node.data;
+ if (node.parentElement.nodeName === "A" || !data) {
continue;
}
- links = [];
- if (Linkify.regString.test(node.data)) {
- Linkify.regString.lastIndex = 0;
- Linkify.gatherLinks(snapshot, this, node, links, i);
+ while (result = test.exec(data)) {
+ index = result.index;
+ endNode = node;
+ if ((length = index + result[0].length) === data.length) {
+ while ((saved = snapshot.snapshotItem(i++))) {
+ if (saved.nodeName === 'BR') {
+ break;
+ }
+ endNode = saved;
+ length = saved.data.length;
+ if (end = space.exec(saved.data)) {
+ length = end.index;
+ i--;
+ break;
+ }
+ }
+ if (length === endNode.data.length) {
+ test.lastIndex = 0;
+ }
+ range = Linkify.makeRange(node, endNode, index, length);
+ if (link = Linkify.regString.exec(text = range.toString())) {
+ if (lIndex = link.index) {
+ range.setStart(node, lIndex + index);
+ }
+ links.push([range, text]);
+ }
+ break;
+ } else {
+ if (link = Linkify.regString.exec(result[0])) {
+ range = Linkify.makeRange(node, node, link.index, link.length);
+ links.push([range, link]);
+ }
+ }
}
_ref = links.reverse();
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
@@ -4436,60 +4520,25 @@
}
}
},
- gatherLinks: function(snapshot, post, node, links, i) {
- var data, index, len, len2, link, match, range;
+ makeRange: function(startNode, endNode, startOffset, endOffset) {
+ var range;
- data = node.data;
- len = data.length;
- while ((match = Linkify.regString.exec(data))) {
- index = match.index;
- link = match[0];
- len2 = index + link.length;
- if (len === len2) {
- break;
- }
- range = document.createRange();
- range.setStart(node, index);
- range.setEnd(node, len2);
- links.push(range);
- }
- Linkify.regString.lastIndex = 0;
- if (match) {
- links.push(Linkify.seek(snapshot, post, node, links, match, i));
- }
- },
- seek: function(snapshot, post, node, links, match, i) {
- var data, index, link, next, range, result;
-
- link = match[0];
range = document.createRange();
- range.setStart(node, match.index);
- while ((next = snapshot.snapshotItem(i++)) && next.nodeName !== 'BR') {
- node = next;
- data = node.data;
- if (result = /[\s'"]/.exec(data)) {
- index = result.index;
- range.setEnd(node, index);
- Linkify.regString.lastIndex = index;
- Linkify.gatherLinks(snapshot, post, node, links, i);
- return range;
- }
- }
- if (range.collapsed) {
- range.setEnd(node, node.data.length);
- }
+ range.setStart(startNode, startOffset);
+ range.setEnd(endNode, endOffset);
return range;
},
- makeLink: function(range) {
- var a, link;
+ makeLink: function(_arg) {
+ var a, range, text;
- link = range.toString();
- link = link.contains(':') ? link : (link.contains('@') ? 'mailto:' : 'http://') + link;
+ range = _arg[0], text = _arg[1];
+ text;
+ text = text.contains(':') ? text : (text.contains('@') ? 'mailto:' : 'http://') + text;
a = $.el('a', {
className: 'linkify',
rel: 'nofollow noreferrer',
target: '_blank',
- href: link
+ href: text
});
$.add(a, range.extractContents());
range.insertNode(a);
@@ -5609,7 +5658,7 @@
img = $.el('img');
img.onload = function() {
- var applyBlob, cv, data, height, i, l, s, ui8a, width, _i;
+ var cv, height, s, width;
s = 90 * 2;
if (_this.file.type === 'image/gif') {
@@ -5633,23 +5682,10 @@
cv.width = img.width = width;
cv.getContext('2d').drawImage(img, 0, 0, width, height);
URL.revokeObjectURL(fileURL);
- applyBlob = function(blob) {
+ return cv.toBlob(function(blob) {
_this.URL = URL.createObjectURL(blob);
return _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")";
- };
- if (cv.toBlob) {
- cv.toBlob(applyBlob);
- return;
- }
- data = atob(cv.toDataURL().split(',')[1]);
- l = data.length;
- ui8a = new Uint8Array(l);
- for (i = _i = 0; 0 <= l ? _i < l : _i > l; i = 0 <= l ? ++_i : --_i) {
- ui8a[i] = data.charCodeAt(i);
- }
- return applyBlob(new Blob([ui8a], {
- type: 'image/png'
- }));
+ });
};
fileURL = URL.createObjectURL(this.file);
return img.src = fileURL;
@@ -6502,7 +6538,7 @@
},
menu: {
init: function() {
- var conf, createSubEntry, el, key, subEntries, _ref;
+ var conf, createSubEntry, el, name, subEntries, _ref;
if (g.VIEW === 'catalog' || !Conf['Image Expansion']) {
return;
@@ -6514,9 +6550,9 @@
createSubEntry = ImageExpand.menu.createSubEntry;
subEntries = [];
_ref = Config.imageExpansion;
- for (key in _ref) {
- conf = _ref[key];
- subEntries.push(createSubEntry(key, conf));
+ for (name in _ref) {
+ conf = _ref[name];
+ subEntries.push(createSubEntry(name, conf[1]));
}
return $.event('AddMenuEntry', {
type: 'header',
@@ -6525,22 +6561,20 @@
subEntries: subEntries
});
},
- createSubEntry: function(type, config) {
+ createSubEntry: function(name, desc) {
var input, label;
label = $.el('label', {
- innerHTML: " " + type
+ innerHTML: " " + name,
+ title: desc
});
input = label.firstElementChild;
- if (type === 'Fit width' || type === 'Fit height') {
+ if (name === 'Fit width' || name === 'Fit height') {
$.on(input, 'change', ImageExpand.cb.setFitness);
}
- if (config) {
- label.title = config[1];
- input.checked = Conf[type];
- $.event('change', null, input);
- $.on(input, 'change', $.cb.checked);
- }
+ input.checked = Conf[name];
+ $.event('change', null, input);
+ $.on(input, 'change', $.cb.checked);
return {
el: label
};
@@ -7217,7 +7251,6 @@
this.postCountEl = $('#post-count', sc);
this.fileCountEl = $('#file-count', sc);
this.pageCountEl = $('#page-count', sc);
- this.lastModified = '0';
return Thread.prototype.callbacks.push({
name: 'Thread Stats',
cb: this.node
@@ -7272,19 +7305,13 @@
return $.ajax("//api.4chan.org/" + ThreadStats.thread.board + "/threads.json", {
onload: ThreadStats.onThreadsLoad
}, {
- headers: {
- 'If-Modified-Since': ThreadStats.lastModified
- }
+ whenModified: true
});
},
onThreadsLoad: function() {
var page, pages, thread, _i, _j, _len, _len1, _ref;
- if (!Conf["Page Count in Stats"]) {
- return;
- }
- ThreadStats.lastModified = this.getResponseHeader('Last-Modified');
- if (this.status !== 200) {
+ if (!(Conf["Page Count in Stats"] && this.status === 200)) {
return;
}
pages = JSON.parse(this.response);
@@ -7379,7 +7406,6 @@
ThreadUpdater.root = this.OP.nodes.root.parentNode;
ThreadUpdater.lastPost = +ThreadUpdater.root.lastElementChild.id.match(/\d+/)[0];
ThreadUpdater.outdateCount = 0;
- ThreadUpdater.lastModified = '0';
ThreadUpdater.cb.interval.call($.el('input', {
value: Conf['Interval']
}));
@@ -7474,10 +7500,7 @@
case 200:
g.DEAD = false;
ThreadUpdater.parse(JSON.parse(req.response).posts);
- ThreadUpdater.lastModified = req.getResponseHeader('Last-Modified');
- if (Conf['Auto Update']) {
- ThreadUpdater.set('timer', ThreadUpdater.getInterval());
- }
+ ThreadUpdater.set('timer', ThreadUpdater.getInterval());
break;
case 404:
g.DEAD = true;
@@ -7491,16 +7514,8 @@
});
break;
default:
- if (Conf['Auto Update']) {
- ThreadUpdater.outdateCount++;
- ThreadUpdater.set('timer', ThreadUpdater.getInterval());
- }
- /*
- Status Code 304: Not modified
- By sending the `If-Modified-Since` header we get a proper status code, and no response.
- This saves bandwidth for both the user and the servers and avoid unnecessary computation.
- */
-
+ ThreadUpdater.outdateCount++;
+ ThreadUpdater.set('timer', ThreadUpdater.getInterval());
_ref = req.status === 304 ? [null, null] : ["" + req.statusText + " (" + req.status + ")", 'warning'], text = _ref[0], klass = _ref[1];
ThreadUpdater.set('status', text, klass);
}
@@ -7573,9 +7588,7 @@
return ThreadUpdater.req = $.ajax(url, {
onloadend: ThreadUpdater.cb.load
}, {
- headers: {
- 'If-Modified-Since': ThreadUpdater.lastModified
- }
+ whenModified: true
});
},
updateThreadStatus: function(title, OP) {
@@ -7713,7 +7726,7 @@
ThreadWatcher = {
init: function() {
- var sc;
+ var now, sc;
if (!Conf['Thread Watcher']) {
return;
@@ -7724,21 +7737,47 @@
href: 'javascript:;',
className: 'disabled'
});
- this.dialog = UI.dialog('watcher', 'top: 50px; left: 0px;', '');
+ this.db = new DataBoard('watchedThreads', this.refresh, true);
+ this.dialog = UI.dialog('thread-watcher', 'top: 50px; left: 0px;', "
");
+ this.status = $('#watcher-status', this.dialog);
+ this.list = this.dialog.lastElementChild;
$.on(d, 'QRPostSuccessful', this.cb.post);
- $.sync('WatchedThreads', this.refresh);
+ if (g.VIEW === 'thread') {
+ $.on(d, 'ThreadUpdate', this.cb.threadUpdate);
+ }
$.on(sc, 'click', this.toggleWatcher);
$.on($('.move>.close', ThreadWatcher.dialog), 'click', this.toggleWatcher);
+ $.on(d, '4chanXInitFinished', this.ready);
if (Conf['Toggleable Thread Watcher']) {
Header.addShortcut(sc);
$.addClass(doc, 'fixed-watcher');
}
- $.ready(function() {
- ThreadWatcher.refresh();
- $.add(d.body, ThreadWatcher.dialog);
- if (Conf['Toggleable Thread Watcher']) {
- return ThreadWatcher.dialog.hidden = true;
+ now = Date.now();
+ if ((this.db.data.lastChecked || 0) < now - 2 * $.HOUR) {
+ this.db.data.lastChecked = now;
+ ThreadWatcher.fetchAllStatus();
+ this.db.save();
+ }
+ $.get('WatchedThreads', null, function(_arg) {
+ var WatchedThreads, boardID, data, threadID, threads, _ref;
+
+ WatchedThreads = _arg.WatchedThreads;
+ if (!WatchedThreads) {
+ return;
}
+ _ref = ThreadWatcher.convert(WatchedThreads);
+ for (boardID in _ref) {
+ threads = _ref[boardID];
+ for (threadID in threads) {
+ data = threads[threadID];
+ ThreadWatcher.db.set({
+ boardID: boardID,
+ threadID: threadID,
+ val: data
+ });
+ }
+ }
+ return $["delete"]('WatchedThreads');
});
return Thread.prototype.callbacks.push({
name: 'Thread Watcher',
@@ -7746,80 +7785,91 @@
});
},
node: function() {
- var favicon,
- _this = this;
+ var toggler;
- favicon = $.el('a', {
- className: 'watch-thread-link',
- href: 'javascript:;'
+ toggler = $.el('img', {
+ className: 'watcher-toggler'
});
- $.on(favicon, 'click', ThreadWatcher.cb.toggle);
- $.before($('input', this.OP.nodes.post), favicon);
- if (g.VIEW !== 'thread') {
+ $.on(toggler, 'click', ThreadWatcher.cb.toggle);
+ return $.before($('input', this.OP.nodes.post), toggler);
+ },
+ ready: function() {
+ $.off(d, '4chanXInitFinished', ThreadWatcher.ready);
+ if (!Main.isThisPageLegit()) {
return;
}
- return $.get('AutoWatch', 0, function(item) {
- if (item['AutoWatch'] !== _this.ID) {
+ ThreadWatcher.refresh();
+ $.add(d.body, ThreadWatcher.dialog);
+ if (Conf['Toggleable Thread Watcher']) {
+ ThreadWatcher.dialog.hidden = true;
+ }
+ if (!Conf['Auto Watch']) {
+ return;
+ }
+ return $.get('AutoWatch', 0, function(_arg) {
+ var AutoWatch, thread;
+
+ AutoWatch = _arg.AutoWatch;
+ if (!(thread = g.BOARD.threads[AutoWatch])) {
return;
}
- ThreadWatcher.watch(_this);
+ ThreadWatcher.add(thread);
return $["delete"]('AutoWatch');
});
},
- refresh: function(watched) {
- var ID, board, div, favicon, id, link, nodes, props, thread, x, _ref, _ref1;
-
- if (!watched) {
- $.get('WatchedThreads', {}, function(item) {
- return ThreadWatcher.refresh(item['WatchedThreads']);
- });
- return;
- }
- nodes = [$('.move', ThreadWatcher.dialog)];
- for (board in watched) {
- _ref = watched[board];
- for (id in _ref) {
- props = _ref[id];
- x = $.el('a', {
- textContent: '×',
- className: 'close',
- href: 'javascript:;'
- });
- $.on(x, 'click', ThreadWatcher.cb.x);
- link = $.el('a', props);
- link.title = link.textContent;
- div = $.el('div');
- $.add(div, [x, $.tn(' '), link]);
- nodes.push(div);
- }
- }
- $.rmAll(ThreadWatcher.dialog);
- $.add(ThreadWatcher.dialog, nodes);
- watched = watched[g.BOARD] || {};
- _ref1 = g.BOARD.threads;
- for (ID in _ref1) {
- thread = _ref1[ID];
- favicon = $('.watch-thread-link', thread.OP.nodes.post);
- if (ID in watched) {
- $.addClass(favicon, 'watched');
- } else {
- $.rmClass(favicon, 'watched');
- }
- }
- },
toggleWatcher: function() {
$.toggleClass(ThreadWatcher.shortcut, 'disabled');
return ThreadWatcher.dialog.hidden = !ThreadWatcher.dialog.hidden;
},
cb: {
+ openAll: function() {
+ var a, _i, _len, _ref;
+
+ if ($.hasClass(this, 'disabled')) {
+ return;
+ }
+ _ref = $$('a[title]', ThreadWatcher.list);
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ a = _ref[_i];
+ $.open(a.href);
+ }
+ return $.event('CloseMenu');
+ },
+ checkThreads: function() {
+ if ($.hasClass(this, 'disabled')) {
+ return;
+ }
+ return ThreadWatcher.fetchAllStatus();
+ },
+ pruneDeads: function() {
+ var boardID, data, threadID, _i, _len, _ref, _ref1;
+
+ if ($.hasClass(this, 'disabled')) {
+ return;
+ }
+ _ref = ThreadWatcher.getAll();
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ _ref1 = _ref[_i], boardID = _ref1.boardID, threadID = _ref1.threadID, data = _ref1.data;
+ if (!data.isDead) {
+ continue;
+ }
+ delete ThreadWatcher.db.data.boards[boardID][threadID];
+ ThreadWatcher.db.deleteIfEmpty({
+ boardID: boardID
+ });
+ }
+ ThreadWatcher.db.save();
+ ThreadWatcher.refresh();
+ return $.event('CloseMenu');
+ },
toggle: function() {
return ThreadWatcher.toggle(Get.postFromNode(this).thread);
},
- x: function() {
- var thread;
+ rm: function() {
+ var boardID, threadID, _ref;
- thread = this.nextElementSibling.pathname.split('/');
- return ThreadWatcher.unwatch(thread[1], thread[3]);
+ _ref = this.parentNode.dataset.fullID.split('.'), boardID = _ref[0], threadID = _ref[1];
+ return ThreadWatcher.rm(boardID, +threadID);
},
post: function(e) {
var board, postID, threadID, _ref;
@@ -7830,43 +7880,346 @@
return $.set('AutoWatch', threadID);
}
} else if (Conf['Auto Watch Reply']) {
- return ThreadWatcher.watch(board.threads[threadID]);
+ return ThreadWatcher.add(board.threads[threadID]);
}
+ },
+ threadUpdate: function(e) {
+ var thread;
+
+ thread = e.detail.thread;
+ if (!(e.detail[404] && ThreadWatcher.db.get({
+ boardID: thread.board.ID,
+ threadID: thread.ID
+ }))) {
+ return;
+ }
+ return ThreadWatcher.add(thread);
+ }
+ },
+ fetchCount: {
+ fetched: 0,
+ fetching: 0
+ },
+ fetchAllStatus: function() {
+ var thread, _i, _len, _ref;
+
+ ThreadWatcher.status.textContent = '...';
+ _ref = ThreadWatcher.getAll();
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ thread = _ref[_i];
+ ThreadWatcher.fetchStatus(thread);
+ }
+ },
+ fetchStatus: function(_arg) {
+ var boardID, data, fetchCount, threadID;
+
+ boardID = _arg.boardID, threadID = _arg.threadID, data = _arg.data;
+ if (data.isDead) {
+ return;
+ }
+ fetchCount = ThreadWatcher.fetchCount;
+ fetchCount.fetching++;
+ return $.ajax("//api.4chan.org/" + boardID + "/res/" + threadID + ".json", {
+ onloadend: function() {
+ var status;
+
+ fetchCount.fetched++;
+ if (fetchCount.fetched === fetchCount.fetching) {
+ fetchCount.fetched = 0;
+ fetchCount.fetching = 0;
+ status = '';
+ } else {
+ status = "" + (Math.round(fetchCount.fetched / fetchCount.fetching * 100)) + "%";
+ }
+ ThreadWatcher.status.textContent = status;
+ if (this.status !== 404) {
+ return;
+ }
+ if (Conf['Auto Prune']) {
+ ThreadWatcher.rm(boardID, threadID);
+ } else {
+ data.isDead = true;
+ ThreadWatcher.db.set({
+ boardID: boardID,
+ threadID: threadID,
+ val: data
+ });
+ }
+ return ThreadWatcher.refresh();
+ }
+ }, {
+ type: 'head'
+ });
+ },
+ getAll: function() {
+ var all, boardID, data, threadID, threads, _ref;
+
+ all = [];
+ _ref = ThreadWatcher.db.data.boards;
+ for (boardID in _ref) {
+ threads = _ref[boardID];
+ if (Conf['Current Board'] && boardID !== g.BOARD.ID) {
+ continue;
+ }
+ for (threadID in threads) {
+ data = threads[threadID];
+ all.push({
+ boardID: boardID,
+ threadID: threadID,
+ data: data
+ });
+ }
+ }
+ return all;
+ },
+ makeLine: function(boardID, threadID, data) {
+ var div, fullID, href, link, x;
+
+ x = $.el('a', {
+ textContent: '×',
+ href: 'javascript:;'
+ });
+ $.on(x, 'click', ThreadWatcher.cb.rm);
+ if (data.isDead) {
+ href = Redirect.to('thread', {
+ boardID: boardID,
+ threadID: threadID
+ });
+ }
+ link = $.el('a', {
+ href: href || ("/" + boardID + "/res/" + threadID),
+ textContent: data.excerpt,
+ title: data.excerpt
+ });
+ div = $.el('div');
+ fullID = "" + boardID + "." + threadID;
+ div.dataset.fullID = fullID;
+ if (g.VIEW === 'thread' && fullID === ("" + g.BOARD + "." + g.THREADID)) {
+ $.addClass(div, 'current');
+ }
+ if (data.isDead) {
+ $.addClass(div, 'dead-thread');
+ }
+ $.add(div, [x, $.tn(' '), link]);
+ return div;
+ },
+ refresh: function() {
+ var boardID, data, list, nodes, refresher, thread, threadID, toggler, _i, _j, _len, _len1, _ref, _ref1, _ref2, _ref3;
+
+ nodes = [];
+ _ref = ThreadWatcher.getAll();
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ _ref1 = _ref[_i], boardID = _ref1.boardID, threadID = _ref1.threadID, data = _ref1.data;
+ nodes.push(ThreadWatcher.makeLine(boardID, threadID, data));
+ }
+ list = ThreadWatcher.list;
+ $.rmAll(list);
+ $.add(list, nodes);
+ _ref2 = g.BOARD.threads;
+ for (threadID in _ref2) {
+ thread = _ref2[threadID];
+ toggler = $('.watcher-toggler', thread.OP.nodes.post);
+ toggler.src = ThreadWatcher.db.get({
+ boardID: thread.board.ID,
+ threadID: threadID
+ }) ? Favicon["default"] : Favicon.empty;
+ }
+ _ref3 = ThreadWatcher.menu.refreshers;
+ for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
+ refresher = _ref3[_j];
+ refresher();
}
},
toggle: function(thread) {
- if (!$.hasClass($('.watch-thread-link', thread.OP.nodes.post), 'watched')) {
- return ThreadWatcher.watch(thread);
+ var boardID, threadID;
+
+ boardID = thread.board.ID;
+ threadID = thread.ID;
+ if (ThreadWatcher.db.get({
+ boardID: boardID,
+ threadID: threadID
+ })) {
+ return ThreadWatcher.rm(boardID, threadID);
} else {
- return ThreadWatcher.unwatch(thread.board, thread.ID);
+ return ThreadWatcher.add(thread);
}
},
- unwatch: function(board, threadID) {
- return $.get('WatchedThreads', {}, function(item) {
- var watched;
+ add: function(thread) {
+ var boardID, data, threadID;
- watched = item['WatchedThreads'];
- delete watched[board][threadID];
- if (!Object.keys(watched[board]).length) {
- delete watched[board];
+ data = {};
+ boardID = thread.board.ID;
+ threadID = thread.ID;
+ if (thread.isDead) {
+ if (Conf['Auto Prune'] && ThreadWatcher.db.get({
+ boardID: boardID,
+ threadID: threadID
+ })) {
+ ThreadWatcher.rm(boardID, threadID);
+ return;
}
- ThreadWatcher.refresh(watched);
- return $.set('WatchedThreads', watched);
+ data.isDead = true;
+ }
+ data.excerpt = Get.threadExcerpt(thread);
+ ThreadWatcher.db.set({
+ boardID: boardID,
+ threadID: threadID,
+ val: data
});
+ return ThreadWatcher.refresh();
},
- watch: function(thread) {
- return $.get('WatchedThreads', {}, function(item) {
- var watched, _name;
-
- watched = item['WatchedThreads'];
- watched[_name = thread.board] || (watched[_name] = {});
- watched[thread.board][thread] = {
- href: "/" + thread.board + "/res/" + thread,
- textContent: Get.threadExcerpt(thread)
- };
- ThreadWatcher.refresh(watched);
- return $.set('WatchedThreads', watched);
+ rm: function(boardID, threadID) {
+ ThreadWatcher.db["delete"]({
+ boardID: boardID,
+ threadID: threadID
});
+ return ThreadWatcher.refresh();
+ },
+ convert: function(oldFormat) {
+ var boardID, data, newFormat, threadID, threads;
+
+ newFormat = {};
+ for (boardID in oldFormat) {
+ threads = oldFormat[boardID];
+ for (threadID in threads) {
+ data = threads[threadID];
+ (newFormat[boardID] || (newFormat[boardID] = {}))[threadID] = {
+ excerpt: data.textContent
+ };
+ }
+ }
+ return newFormat;
+ },
+ menu: {
+ refreshers: [],
+ init: function() {
+ var menu;
+
+ if (!Conf['Thread Watcher']) {
+ return;
+ }
+ menu = new UI.Menu('thread watcher');
+ $.on($('.menu-button', ThreadWatcher.dialog), 'click', function(e) {
+ return menu.toggle(e, this, ThreadWatcher);
+ });
+ this.addHeaderMenuEntry();
+ return this.addMenuEntries();
+ },
+ addHeaderMenuEntry: function() {
+ var entryEl;
+
+ if (g.VIEW !== 'thread') {
+ return;
+ }
+ entryEl = $.el('a', {
+ href: 'javascript:;'
+ });
+ $.event('AddMenuEntry', {
+ type: 'header',
+ el: entryEl,
+ order: 60
+ });
+ $.on(entryEl, 'click', function() {
+ return ThreadWatcher.toggle(g.threads["" + g.BOARD + "." + g.THREADID]);
+ });
+ return this.refreshers.push(function() {
+ var addClass, rmClass, text, _ref;
+
+ _ref = $('.current', ThreadWatcher.list) ? ['unwatch-thread', 'watch-thread', 'Unwatch thread'] : ['watch-thread', 'unwatch-thread', 'Watch thread'], addClass = _ref[0], rmClass = _ref[1], text = _ref[2];
+ $.addClass(entryEl, addClass);
+ $.rmClass(entryEl, rmClass);
+ return entryEl.textContent = text;
+ });
+ },
+ addMenuEntries: function() {
+ var cb, conf, entries, entry, name, refresh, subEntries, _i, _len, _ref, _ref1, _results;
+
+ entries = [];
+ entries.push({
+ cb: ThreadWatcher.cb.openAll,
+ entry: {
+ type: 'thread watcher',
+ el: $.el('a', {
+ textContent: 'Open all threads'
+ })
+ },
+ refresh: function() {
+ return (ThreadWatcher.list.firstElementChild ? $.rmClass : $.addClass)(this.el, 'disabled');
+ }
+ });
+ entries.push({
+ cb: ThreadWatcher.cb.checkThreads,
+ entry: {
+ type: 'thread watcher',
+ el: $.el('a', {
+ textContent: 'Check 404\'d threads'
+ })
+ },
+ refresh: function() {
+ return ($('div:not(.dead-thread)', ThreadWatcher.list) ? $.rmClass : $.addClass)(this.el, 'disabled');
+ }
+ });
+ entries.push({
+ cb: ThreadWatcher.cb.pruneDeads,
+ entry: {
+ type: 'thread watcher',
+ el: $.el('a', {
+ textContent: 'Prune 404\'d threads'
+ })
+ },
+ refresh: function() {
+ return ($('.dead-thread', ThreadWatcher.list) ? $.rmClass : $.addClass)(this.el, 'disabled');
+ }
+ });
+ subEntries = [];
+ _ref = Config.threadWatcher;
+ for (name in _ref) {
+ conf = _ref[name];
+ subEntries.push(this.createSubEntry(name, conf[1]));
+ }
+ entries.push({
+ entry: {
+ type: 'thread watcher',
+ el: $.el('span', {
+ textContent: 'Settings'
+ }),
+ subEntries: subEntries
+ }
+ });
+ _results = [];
+ for (_i = 0, _len = entries.length; _i < _len; _i++) {
+ _ref1 = entries[_i], entry = _ref1.entry, cb = _ref1.cb, refresh = _ref1.refresh;
+ if (entry.el.nodeName === 'A') {
+ entry.el.href = 'javascript:;';
+ }
+ if (cb) {
+ $.on(entry.el, 'click', cb);
+ }
+ if (refresh) {
+ this.refreshers.push(refresh.bind(entry));
+ }
+ _results.push($.event('AddMenuEntry', entry));
+ }
+ return _results;
+ },
+ createSubEntry: function(name, desc) {
+ var entry, input;
+
+ entry = {
+ type: 'thread watcher',
+ el: $.el('label', {
+ innerHTML: " " + name,
+ title: desc
+ })
+ };
+ input = entry.el.firstElementChild;
+ input.checked = Conf[name];
+ $.on(input, 'change', $.cb.checked);
+ if (name === 'Current Board') {
+ $.on(input, 'change', ThreadWatcher.refresh);
+ }
+ return entry;
+ }
}
};
@@ -8205,8 +8558,8 @@
http: true,
https: true,
software: 'foolfuuka',
- boards: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv'],
- files: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
+ boards: ['adv', 'asp', 'cm', 'd', 'e', 'i', 'lgbt', 'n', 'o', 'p', 'pol', 's', 's4s', 't', 'trv', 'y'],
+ files: ['cm', 'd', 'e', 'i', 'n', 'o', 'p', 's', 'trv', 'y']
},
'Foolz Beta': {
domain: 'beta.foolz.us',
@@ -8631,11 +8984,8 @@
},
callbacks: [],
cb: function(e) {
- var post;
-
e.preventDefault();
- post = Get.postFromNode(this);
- return ExpandComment.expand(post);
+ return ExpandComment.expand(Get.postFromNode(this));
},
expand: function(post) {
var a;
@@ -8698,6 +9048,12 @@
}
quote.href = "/" + post.board + "/res/" + href;
}
+ Build.capcodeReplies({
+ boardID: post.board.ID,
+ threadID: post.thread.ID,
+ bq: clone,
+ capcodeReplies: postObj.capcode_replies
+ });
post.nodes.shortComment = comment;
$.replace(comment, clone);
post.nodes.comment = post.nodes.longComment = clone;
@@ -9740,7 +10096,8 @@
$.on(d, '4chanXInitFinished', Settings.open);
}
return $.set({
- lastchecked: Date.now(),
+ archives: Conf['archives'],
+ lastarchivecheck: now,
previousversion: g.VERSION
});
});
@@ -9935,7 +10292,6 @@
version: g.VERSION,
date: now
};
- Conf['WatchedThreads'] = {};
for (_i = 0, _len = DataBoards.length; _i < _len; _i++) {
db = DataBoards[_i];
Conf[db] = {
@@ -10070,14 +10426,13 @@
});
}
}
- data.Conf.WatchedThreads = data.WatchedThreads;
- } else if (version[0] === '3') {
- data = Settings.convertSettings(data, {
- 'Reply Hiding': 'Reply Hiding Buttons',
- 'Thread Hiding': 'Thread Hiding Buttons',
- 'Bottom header': 'Bottom Header',
- 'Unread Tab Icon': 'Unread Favicon'
- });
+ data.Conf['WatchedThreads'] = data.WatchedThreads;
+ }
+ if (data.Conf['WatchedThreads']) {
+ data.Conf['watchedThreads'] = {
+ boards: ThreadWatcher.convert(data.Conf['WatchedThreads'])
+ };
+ delete data.Conf['WatchedThreads'];
}
return $.set(data.Conf);
},
@@ -10524,6 +10879,7 @@
'Thread Stats': ThreadStats,
'Thread Updater': ThreadUpdater,
'Thread Watcher': ThreadWatcher,
+ 'Thread Watcher (Menu)': ThreadWatcher.menu,
'Index Navigation': Nav,
'Keybinds': Keybinds,
'Show Dice Roll': Dice
@@ -10621,8 +10977,7 @@
}
Main.callbackNodes(Thread, threads);
Main.callbackNodesDB(Post, posts, function() {
- $.event('4chanXInitFinished');
- return Main.checkUpdate();
+ return $.event('4chanXInitFinished');
});
if (styleSelector = $.id('styleSelector')) {
passLink = $.el('a', {
@@ -10642,8 +10997,7 @@
err = _error;
new Notification('warning', 'Cookies need to be enabled on 4chan for 4chan X to properly function.', 30);
}
- $.event('4chanXInitFinished');
- return Main.checkUpdate();
+ return $.event('4chanXInitFinished');
},
callbackNodes: function(klass, nodes) {
var callback, err, errors, i, len, node, _i, _len, _ref;
@@ -10750,40 +11104,6 @@
obj.callback.isAddon = true;
return Klass.prototype.callbacks.push(obj.callback);
},
- message: function(e) {
- var el, version;
-
- version = e.data.version;
- if (version && version !== g.VERSION) {
- el = $.el('span', {
- innerHTML: "Update: 4chan X v" + version + " is out, get it here ."
- });
- return new Notification('info', el, 120);
- }
- },
- checkUpdate: function() {
- var now;
-
- if (!(Conf['Check for Updates'] && Main.isThisPageLegit())) {
- return;
- }
- now = Date.now();
- return $.get('lastchecked', 0, function(_arg) {
- var lastchecked;
-
- lastchecked = _arg.lastchecked;
- if (lastchecked > now - $.DAY) {
- return;
- }
- return $.ready(function() {
- $.on(window, 'message', Main.message);
- $.set('lastchecked', now);
- return $.add(d.head, $.el('script', {
- src: 'https://github.com/seaweedchan/4chan-x/raw/master/latest.js'
- }));
- });
- });
- },
handleErrors: function(errors) {
var div, error, logs, _i, _len;
@@ -10838,7 +11158,7 @@
}
return Main.thisPageIsLegit;
},
- css: "/* General */\n.dialog {\nbox-shadow: 0 1px 2px rgba(0, 0, 0, .15);\nborder: 1px solid;\ndisplay: block;\npadding: 0;\n}\n.captcha-img,\n.field {\nbackground-color: #FFF;\nborder: 1px solid #CCC;\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\ncolor: #333;\nfont: 13px sans-serif;\noutline: none;\ntransition: color .25s, border-color .25s;\ntransition: color .25s, border-color .25s;\n}\n.field::-moz-placeholder,\n.field:hover::-moz-placeholder {\ncolor: #AAA !important;\nfont-size: 13px !important;\nopacity: 1.0 !important;\n}\n.captch-img:hover,\n.field:hover {\nborder-color: #999;\n}\n.field:hover, .field:focus {\ncolor: #000;\n}\n.field[disabled] {\nbackground-color: #F2F2F2;\ncolor: #888;\n}\n.move {\ncursor: move;\noverflow: hidden;\n}\nlabel, .favicon {\ncursor: pointer;\n}\na[href=\"javascript:;\"] {\ntext-decoration: none;\n}\n.warning {\ncolor: red;\n}\n#boardNavDesktop {\ndisplay: none !important;\n}\na {\noutline: none !important;\n}\n\n/* 4chan style fixes */\n.opContainer, .op {\ndisplay: block !important;\noverflow: visible !important;\n}\n[hidden] {\ndisplay: none !important;\n}\n\n/* fixed, z-index */\n#overlay,\n#fourchanx-settings,\n#qp, #ihover,\n#navlinks, .fixed #header-bar,\n:root.float #updater,\n:root.float #thread-stats,\n#qr {\nposition: fixed;\n}\n#fourchanx-settings {\nz-index: 999;\n}\n#overlay {\nz-index: 900;\n}\n#notifications {\nz-index: 70;\n}\n#qp, #ihover {\nz-index: 60;\n}\n#menu {\nz-index: 50;\n}\n#navlinks, #updater, #thread-stats {\nz-index: 40;\n}\n.fixed #header-bar.autohide {\nz-index: 35;\n}\n#qr {\nz-index: 30;\n}\n#watcher {\nz-index: 8;\n}\n:root.fixed-watcher #watcher {\nz-index: 20;\n}\n.fixed #header-bar {\nz-index: 10;\n}\n/* Header */\n.fixed.top body {\npadding-top: 2em;\n}\n.fixed.bottom body {\npadding-bottom: 2em;\n}\n.fixed #header-bar {\nright: 0;\nleft: 0;\npadding: 3px 4px 4px;\n}\n.fixed.top #header-bar {\ntop: 0;\n}\n.fixed.bottom #header-bar {\nbottom: 0;\n}\n#header-bar {\nborder-width: 0;\ntransition: all .1s .05s ease-in-out;\n}\n:root.centered-links #shortcuts {\nwidth: 300px;\ntext-align: right;\n}\n:root.centered-links #header-bar {\ntext-align: center;\n}\n:root.centered-links #custom-board-list {\nposition: relative;\nleft: 150px;\n}\n.fixed.top #header-bar {\nborder-bottom-width: 1px;\n}\n.fixed.bottom #header-bar {\nbox-shadow: 0 -1px 2px rgba(0, 0, 0, .15);\nborder-top-width: 1px;\n}\n.fixed.bottom #header-bar .menu-button i {\nborder-top: none;\nborder-bottom: 6px solid;\n}\n#board-list {\ntext-align: center;\n}\n.fixed #header-bar.autohide:not(:hover) {\nbox-shadow: none;\ntransition: all .8s .6s cubic-bezier(.55, .055, .675, .19);\n}\n.fixed.top #header-bar.autohide:not(:hover) {\nmargin-bottom: -1em;\n-webkit-transform: translateY(-100%);\ntransform: translateY(-100%);\n}\n.fixed.bottom #header-bar.autohide:not(:hover) {\n-webkit-transform: translateY(100%);\ntransform: translateY(100%);\n}\n#scroll-marker {\nleft: 0;\nright: 0;\nheight: 10px;\nposition: absolute;\n}\n:root:not(.autohide) #scroll-marker {\npointer-events: none;\n}\n#header-bar #scroll-marker {\ndisplay: none;\n}\n.fixed #header-bar #scroll-marker {\ndisplay: block;\n}\n.fixed.top #header-bar #scroll-marker {\ntop: 100%;\n}\n.fixed.bottom #header-bar #scroll-marker {\nbottom: 100%;\n}\n#header-bar a:not(.entry):not(.close) {\ntext-decoration: none;\npadding: 1px;\n}\n#header-bar input {\nmargin: 0;\nvertical-align: bottom;\n}\n#shortcuts:empty {\ndisplay: none;\n}\n.brackets-wrap::before {\ncontent: \"\\00a0[\";\n}\n.brackets-wrap::after {\ncontent: \"]\\00a0\";\n}\n.disabled,\n.expand-all-shortcut {\nopacity: .45;\n}\n#shortcuts {\nfloat: right;\n}\n.shortcut {\nmargin-left: 3px;\n}\n#navbotright,\n#navtopright {\ndisplay: none;\n}\n#toggleMsgBtn {\ndisplay: none !important;\n}\n.current {\nfont-weight: bold;\n}\n/* 4chan X link brackets */\n.fourchanx-link::after {\ncontent: \"]\";\n}\n.fourchanx-link::before {\ncontent: \"[\";\n}\n/* Notifications */\n#notifications {\nposition: fixed;\ntop: 0;\nheight: 0;\ntext-align: center;\nright: 0;\nleft: 0;\ntransition: all .8s .6s cubic-bezier(.55, .055, .675, .19);\n}\n.fixed.top #header-bar #notifications {\nposition: absolute;\ntop: 100%;\n}\n.notification {\ncolor: #FFF;\nfont-weight: 700;\ntext-shadow: 0 1px 2px rgba(0, 0, 0, .5);\nbox-shadow: 0 1px 2px rgba(0, 0, 0, .15);\nborder-radius: 2px;\nmargin: 1px auto;\nwidth: 500px;\nmax-width: 100%;\nposition: relative;\ntransition: all .25s ease-in-out;\n}\n.notification.error {\nbackground-color: hsla(0, 100%, 38%, .9);\n}\n.notification.warning {\nbackground-color: hsla(36, 100%, 38%, .9);\n}\n.notification.info {\nbackground-color: hsla(200, 100%, 38%, .9);\n}\n.notification.success {\nbackground-color: hsla(104, 100%, 38%, .9);\n}\n.notification a {\ncolor: white;\n}\n.notification > .close {\npadding: 6px;\ntop: 0;\nright: 5px;\nposition: absolute;\n}\n.message {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\npadding: 6px 20px;\nmax-height: 200px;\nwidth: 100%;\noverflow: auto;\n}\n\n/* Settings */\n:root.fourchan-x body {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\n}\n#overlay {\nbackground-color: rgba(0, 0, 0, .5);\ntop: 0;\nleft: 0;\nheight: 100%;\nwidth: 100%;\n}\n#fourchanx-settings {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\nbox-shadow: 0 0 15px rgba(0, 0, 0, .15);\nheight: 600px;\nmax-height: 100%;\nwidth: 900px;\nmax-width: 100%;\nmargin: auto;\npadding: 3px;\ntop: 50%;\nleft: 50%;\n-moz-transform: translate(-50%, -50%);\n-webkit-transform: translate(-50%, -50%);\ntransform: translate(-50%, -50%);\n}\n#fourchanx-settings > nav {\npadding: 2px 2px 0;\nheight: 15px;\n}\n#fourchanx-settings > nav a {\ntext-decoration: underline;\n}\n#fourchanx-settings > nav a.close {\ntext-decoration: none;\npadding: 2px;\n}\n.section-container {\noverflow: auto;\nposition: absolute;\ntop: 2.1em;\nright: 5px;\nbottom: 5px;\nleft: 5px;\npadding-right: 5px;\n}\n.sections-list {\npadding: 0 3px;\nfloat: left;\n}\n.credits {\nfloat: right;\n}\n.tab-selected {\nfont-weight: 700;\n}\n.section-sauce ul,\n.section-advanced ul {\nlist-style: none;\nmargin: 0;\n}\n.section-sauce ul {\npadding: 8px;\n}\n.section-advanced ul {\npadding: 0px;\n}\n.section-sauce li,\n.section-advanced li {\npadding-left: 4px;\n}\n.section-main label {\ntext-decoration: underline;\n}\n.section-filter ul {\npadding: 0;\n}\n.section-filter li {\nmargin: 10px 40px;\n}\n.section-filter textarea {\nheight: 500px;\n}\n.section-sauce textarea {\nheight: 350px;\n}\n.section-advanced .field[name=\"boardnav\"] {\nwidth: 100%;\n}\n.section-advanced textarea {\nheight: 150px;\n}\n.section-advanced .archive-cell {\nmin-width: 160px;\ntext-align: center;\n}\n.section-advanced #archive-board-select {\nposition: absolute;\n}\n.section-advanced .note {\nfont-size: 0.8em;\nfont-style: italic;\nmargin-left: 10px;\n}\n.section-advanced .note code {\nfont-style: normal;\nfont-size: 11px;\n}\n.section-keybinds .field {\nfont-family: monospace;\n} \n#fourchanx-settings fieldset {\nborder: 1px solid;\nborder-radius: 3px;\n}\n#fourchanx-settings legend {\nfont-weight: 700;\n}\n#fourchanx-settings textarea {\nfont-family: monospace;\nmin-width: 100%;\nmax-width: 100%;\n}\n#fourchanx-settings code {\ncolor: #000;\nbackground-color: #FFF;\npadding: 0 2px;\n}\n.unscroll {\noverflow: hidden;\n}\n\n/* Announcement Hiding */\n:root.hide-announcement #globalMessage {\ndisplay: none;\n}\na.hide-announcement {\nfloat: left;\n}\n\n/* Unread */\n#unread-line {\nmargin: 0;\nborder-color: rgb(255,0,0);\n}\n\n/* Thread Updater */\n#updater {\nbackground: none;\nborder: none;\nbox-shadow: none;\n}\n#updater > .move {\npadding: 5px 3px 0px;\nmargin-bottom: -3px;\n}\n#updater > div:last-child {\ntext-align: center;\n}\n#updater input[type=number] {\nwidth: 4em;\n}\n:root.float #updater {\npadding: 0px 3px;\n}\n.new {\ncolor: limegreen;\n}\n#update-status.new {\nmargin-right: 5px;\n}\n#update-timer {\ncursor: pointer;\n}\n\n/* Thread Watcher */\n#watcher {\nposition: absolute;\n}\n#watcher {\npadding-bottom: 3px;\noverflow: hidden;\nwhite-space: nowrap;\nmin-width: 120px;\nmax-height: 92%;\noverflow-y: auto;\n}\n:root.fixed-watcher #watcher {\nposition: fixed;\n}\n:root:not(.fixed-watcher) #watcher:not(:hover) {\nmax-height: 210px;\noverflow-y: hidden;\n}\n#watcher > .move {\npadding-top: 3px;\n}\n#watcher > div {\nmax-width: 250px;\noverflow: hidden;\npadding-left: 3px;\npadding-right: 3px;\ntext-overflow: ellipsis;\n}\n#watcher a {\ntext-decoration: none;\n}\n#watcher .move>.close {\nposition: absolute;\nright: 0px;\ntop: 0px;\npadding: 0px 4px;\n}\n.watch-thread-link {\npadding-top: 18px;\nwidth: 18px;\nheight: 0px;\ndisplay: inline-block;\nbackground-repeat: no-repeat;\nopacity: 0.2;\nposition: relative;\ntop: 1px;\n}\n.watch-thread-link.watched {\nopacity: 1;\n}\n\n/* Thread Stats */\n#thread-stats {\nbackground: none;\nborder: none;\nbox-shadow: none;\n}\n:root.float #post-count, :root.float #file-count {\npointer-events: none;\n}\n:root.float #thread-stats {\npadding: 0px 3px;\n}\n\n/* Quote */\n.deadlink {\ntext-decoration: none !important;\n}\n.backlink.deadlink:not(.forwardlink),\n.quotelink.deadlink:not(.forwardlink) {\ntext-decoration: underline !important;\n}\n.inlined {\nopacity: .5;\n}\n#qp input, .forwarded {\ndisplay: none;\n}\n.quotelink.forwardlink,\n.backlink.forwardlink {\ntext-decoration: none;\nborder-bottom: 1px dashed;\n}\n.filtered {\ntext-decoration: underline line-through;\n}\n:root.hide-backlinks .backlink.filtered {\ndisplay: none;\n}\n.inline {\nborder: 1px solid;\ndisplay: table;\nmargin: 2px 0;\n}\n.inline .post {\nborder: 0 !important;\nbackground-color: transparent !important;\ndisplay: table !important;\nmargin: 0 !important;\npadding: 1px 2px !important;\n}\n#qp > .opContainer::after {\ncontent: '';\nclear: both;\ndisplay: table;\n}\n#qp .post {\nborder: none;\nmargin: 0;\npadding: 2px 2px 5px;\n}\n#qp img {\nmax-height: 80vh;\nmax-width: 50vw;\n}\n.qphl {\noutline: 2px solid rgba(216, 94, 49, .7);\n}\n:root.highlight-own .yourPost > .reply,\n:root.highlight-you .quotesYou > .reply {\nborder-left: 2px solid rgba(221,0,0,.5);\n}\n/* Quote Threading */\n.threadContainer {\nmargin-left: 20px;\nborder-left: 1px solid rgba(128,128,128,.3);\n}\n.threadOP {\nclear: both;\n} \n\n/* File */\n.fileText:hover .fntrunc,\n.fileText:not(:hover) .fnfull,\n.expanded-image > .post > .file > .fileThumb > img[data-md5],\n:not(.expanded-image) > .post > .file > .fileThumb > .full-image {\ndisplay: none;\n}\n.expanding {\nopacity: .5;\n}\n:root.fit-height .full-image {\nmax-height: 100vh;\n}\n:root.fit-width .full-image {\nmax-width: 100%;\n}\n:root.gecko.fit-width .full-image {\nwidth: 100%;\n}\n#ihover {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\nmax-height: 100%;\nmax-width: 75%;\npadding-bottom: 16px;\n}\n.fappeTyme .thread > .noFile,\n.fappeTyme .threadContainer > .noFile {\ndisplay: none;\n}\n\n/* Index/Reply Navigation */\n#navlinks {\nfont-size: 16px;\ntop: 25px;\nright: 10px;\n}\n\n/* Filter */\n.opContainer.filter-highlight {\nbox-shadow: inset 5px 0 rgba(255, 0, 0, .5);\n}\n.filter-highlight > .reply {\nbox-shadow: -5px 0 rgba(255, 0, 0, .5);\n}\n\n/* Spoiler text */\n:root.reveal-spoilers s {\ncolor: white !important;\n}\n\n/* Thread & Reply Hiding */\n.hide-thread-button,\n.hide-reply-button {\nfloat: left;\nmargin-right: 2px;\n}\n.stub ~ * {\ndisplay: none !important;\n}\n.stub input {\ndisplay: inline-block;\n}\n\n/* QR */\n:root.hide-original-post-form #postForm,\n:root.hide-original-post-form .postingMode,\n:root.hide-original-post-form #togglePostForm,\n#qr.autohide:not(.has-focus):not(:hover) > form,\n.postingMode ~ #qr select,\n#file-n-submit:not(.has-file) #qr-filerm {\ndisplay: none;\n}\n#qr select,\n#dump-button,\n.remove,\n.captcha-img {\ncursor: pointer;\n}\n#qr {\nz-index: 20;\nposition: fixed;\npadding: 1px;\nborder: 1px solid transparent;\nmin-width: 300px;\nborder-radius: 3px 3px 0 0;\n}\n#qrtab {\nborder-radius: 3px 3px 0 0;\n}\n#qrtab {\nmargin-bottom: 1px;\n}\n#qr .close {\nfloat: right;\npadding: 0 3px;\n}\n#qr .warning {\nmin-height: 1.6em;\nvertical-align: middle;\npadding: 0 1px;\nborder-width: 1px;\nborder-style: solid;\n}\n.qr-link-container {\ntext-align: center;\n}\n.persona {\nwidth: 248px;\nmax-width: 100%;\nmin-width: 100%;\n}\n#dump-button {\nwidth: 10%;\nmargin: 0;\nmargin-right: 4px;\nfont: 13px sans-serif;\npadding: 1px 0px 2px;\nopacity: 0.6;\n}\n.persona .field:not(#dump) {\nwidth: 95px;\nmin-width: 33.3%;\nmax-width: 33.3%;\n}\n#qr textarea.field {\nheight: 14.8em;\nmin-height: 9em;\n}\n#qr.has-captcha textarea.field {\nheight: 9em;\n}\ninput.field.tripped:not(:hover):not(:focus) {\ncolor: transparent !important;\ntext-shadow: none !important;\n}\n#qr textarea {\nresize: both;\n}\n.captcha-img {\nmargin: 0px;\ntext-align: center;\nbackground-image: #fff;\nfont-size: 0px;\nmin-height: 59px;\nmin-width: 302px;\n}\n.captcha-input {\nwidth: 100%;\nmargin: 1px 0 0;\n}\n.captcha-input.error:focus {\nborder-color: rgb(255,0,0) !important;\n}\n.field {\n-moz-box-sizing: border-box;\nmargin: 0px;\npadding: 2px 4px 3px;\n}\n#qr textarea {\nmin-width: 100%;\n}\n#qr [type='submit'] {\nwidth: 25%;\nvertical-align: top;\n}\n:root.webkit #qr [type='submit'] {\nheight: 24px;\n}\n/* Fake File Input */\n#qr-filename,\n.has-file #qr-no-file {\ndisplay: none;\n}\n#qr-no-file,\n.has-file #qr-filename {\ndisplay: inline-block;\npadding: 0px 4px;\nmargin-bottom: 2px;\noverflow: hidden;\ntext-overflow: ellipsis;\nmax-width: 88%;\n}\n#qr-no-file {\ncolor: #AAA;\n}\n#qr-filename-container {\n-moz-box-sizing: border-box;\ndisplay: inline-block;\nposition: relative;\nwidth: 100px;\nmin-width: 74.6%;\nmax-width: 74.6%;\nmargin-right: 0.4%;\nmargin-top: 1px;\noverflow: hidden;\npadding: 2px 1px 0;\nheight: 22px;\n}\n#qr-filename-container:hover {\ncursor: text;\n}\n#qr-extras-container {\nposition: absolute;\nright: 0px;\n}\n#qr-filerm {\nmargin-right: 2px;\nz-index: 2;\n}\n#file-n-submit {\nheight: 23px;\n}\n#qr input[type=file] {\nvisibility: hidden;\nposition: absolute;\n}\n/* Thread Select / Spoiler Label */\n#qr select {\nfloat: right;\n}\n#qr.has-spoiler .has-file #qr-spoiler-label {\nwidth: 6.7%;\nmin-width: 6.7%;\nmax-width: 6.7%;\ndisplay: inline-block;\ntext-align: center;\nvertical-align: top;\n}\n#qr.has-spoiler #file-n-submit:not(.has-file) #qr-spoiler-label {\ndisplay: none;\n}\n#qr.has-spoiler .has-file #qr-filename-container {\nmax-width: 67.9%;\nmin-width: 67.9%;\n}\n#qr-spoiler-label input {\nposition: relative;\ntop: 3px;\n}\n/* Dumping UI */\n.dump #dump-list-container {\ndisplay: block;\n}\n#dump-list-container {\ndisplay: none;\nposition: relative;\noverflow-y: hidden;\nmargin-top: 1px;\n}\n#dump-list {\noverflow-x: auto;\noverflow-y: hidden;\nwhite-space: nowrap;\nwidth: 248px;\nmax-width: 100%;\nmin-width: 100%;\n}\n#dump-list:hover {\noverflow-x: auto;\n}\n.qr-preview {\n-moz-box-sizing: border-box;\ncounter-increment: thumbnails;\ncursor: move;\ndisplay: inline-block;\nheight: 90px;\nwidth: 90px;\npadding: 2px;\nopacity: .5;\noverflow: hidden;\nposition: relative;\ntext-shadow: 0 1px 1px #000;\n-moz-transition: opacity .25s ease-in-out;\nvertical-align: top;\nbackground-size: cover;\n}\n.qr-preview:hover,\n.qr-preview:focus {\nopacity: .9;\n}\n.qr-preview::before {\ncontent: counter(thumbnails);\ncolor: #fff;\nposition: absolute;\ntop: 3px;\nright: 3px;\ntext-shadow: 0 0 3px #000, 0 0 8px #000;\n}\n.qr-preview#selected {\nopacity: 1;\n}\n.qr-preview.drag {\nbox-shadow: 0 0 10px rgba(0,0,0,.5);\n}\n.qr-preview.over {\nborder-color: #fff;\n}\n.qr-preview > span {\ncolor: #fff;\n}\n.remove {\nbackground: none;\ncolor: #e00;\nfont-weight: 700;\npadding: 3px;\n}\na:only-of-type > .remove {\ndisplay: none;\n}\n.remove:hover::after {\ncontent: \" Remove\";\n}\n.qr-preview > label {\nbackground: rgba(0,0,0,.5);\ncolor: #fff;\nright: 0;\nbottom: 0;\nleft: 0;\nposition: absolute;\ntext-align: center;\n}\n.qr-preview > label > input {\nmargin: 0;\n}\n#add-post {\ncursor: pointer;\nfont-size: 2em;\nposition: absolute;\ntop: 50%;\nright: 10px;\n-moz-transform: translateY(-50%);\n}\n.textarea {\nposition: relative;\n}\n:root.webkit .textarea {\nmargin-bottom: -2px;\n}\n#char-count {\ncolor: #000;\nbackground: hsla(0, 0%, 100%, .5);\nfont-size: 8pt;\nposition: absolute;\nbottom: 1px;\nright: 1px;\npointer-events: none;\n}\n\n/* Menu */\n.menu-button {\ndisplay: inline-block;\nposition: relative;\ncursor: pointer;\n}\n.menu-button i {\nborder-top: 6px solid;\nborder-right: 4px solid transparent;\nborder-left: 4px solid transparent;\ndisplay: inline-block;\nmargin: 2px;\nvertical-align: middle;\n}\n#menu {\nposition: fixed;\noutline: none;\n}\n.entry {\nborder-bottom: 1px solid rgba(0,0,0,.25);\ncursor: pointer;\ndisplay: block;\noutline: none;\npadding: 3px 7px;\nposition: relative;\ntext-decoration: none;\nwhite-space: nowrap;\n}\n.left>.entry.has-submenu {\npadding-right: 17px !important;\n}\n.entry:last-child {\nborder-bottom: 0;\n}\n.has-submenu::after {\ncontent: \"\";\nborder-left: .5em solid;\nborder-top: .3em solid transparent;\nborder-bottom: .3em solid transparent;\ndisplay: inline-block;\nmargin: .3em;\nposition: absolute;\nright: 3px;\n}\n.left .has-submenu::after {\nborder-left: 0;\nborder-right: .5em solid;\n}\n.submenu {\ndisplay: none;\nposition: absolute;\nleft: 100%;\ntop: -1px;\n}\n.focused .submenu {\ndisplay: block;\n}\n.imp-exp-result {\nposition: absolute;\ntext-align: center;\nmargin: auto;\nright: 0px;\nleft: 0px;\nwidth: 200px;\n}\n.export, .import {\ncursor: pointer;\ntext-decoration: none !important;\n}\n/* Link Title Favicons */\n.linkify.YouTube {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABIklEQVQoz53LvUrDUBjG8bOoOammSf1IoBSvoCB4JeIqOHgBLt6AIMRBBQelWurQ2kERnMRBsBUcIp5FJSBI5oQsJVkkUHh8W0o5nhaFHvjBgef/Mq+Q46RJBMkI/vE+aOus956tnEswIZe1LV0QyJ5sE2GzgZfVMtRNIdiDpccEssdlB1mW4bvTwdvWJtRdErM7U+8S/FJykCRJX5qm+KpVce8UMNLRLbulz4iSjTAMh6Iowsd5BeNadp3nUF0VlxAEwZBotXC0Usa4ll3meZdA1iguwvf9vpvDA2wvmKgYGtSud8suDB4TyGr2PF49D/vra9jRZ1BVdknMzgwuCGSnZEObwu6sBnVTCHZiaC7BhFx2PKdxUidiAH/4lLo9Mv0DELVs9qsOHXwAAAAASUVORK5CYII=') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.Vimeo {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAASJJREFUOE9jYAAC7ln7/pODQXrBmq333PvPu/YaSRikB6QXbACpmmHqsRoAMll7+20UQ0H8tmuv/pdffPFfZtNNuByGASBFIPDh5x+4IV6HHoDFYGDJgw+YBoBMBUkgA5BtIKduuvvy//svX+FSB+88wTTAc+/t/83bj/0HScLA5BPXwc7lKJ36f+L6XXDxhUfOYxrAPWUnWKFp9UQUm3iWQxSDXAEDSX3zcIcB96wD/x+8eA1XDNKMHAYg20GW4Y0FkCIYAAUqzEBQOIBciRzlWKMxZelOlMCEcVxq+jHSC1YDJPs3YBgA8jey0/F6ARRwsFAHORukmat9NdbUijMpg/wKcrJodDFOzSBXwA3Alh9AToZFI7a8Asu98BxJbnYGAJb5vYLDANzSAAAAAElFTkSuQmCC') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.SoundCloud {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABsklEQVQ4y5WTy2pUQRCGv2rbzDjJeAlIBmOyipGIIJqFEBDElwh4yULGeRFXPoEIBl/AvQ/gC2RnxCAoxijiwks852S6+3dxzslcHJCpTXVX11/Xv0097gLPgVNMJxnQNfX4zsqleWbnpoMf/oa9d988MM9MC/rp+E0a+A0dsVobMNMCOO8B6McRoABJI+A6gJmN3D2A8jgEBCEkSEMBrcrsDAzDWWn3AjgKFaDMmgRqniGFgsaDp1jrLOngDf1XT1D+A1dFc4MKAkkiCVKjjVu7g9+4Rzx4i1u6hjXbuMWr0O5QPNvCu7IaCZwEKQukLGDrm5x8uI0tr6MkiGlkiv7yLfzN+6S5i6QsIMABkEfcxhbWWYMkVAOjxvYAjc3HNHrbKI9VBQBFwF25XQKSBjqIf1YBuAurEMrczgDygD6/x2LCpFLXLUyQ+PoldphhBhYfIX09XU1+Flaukz7uYqs3SHs7cG4BmTsmkBUF9mmXEwa28BNLPaQPLepuNcbGSWQquQC2/Kdcox1FUGkcB0ykck1nA2+wTzMs8stGnP4rbWGw74EuS/GFQWfK7/wF6P4F7fzIAYkdmdEAAAAASUVORK5CYII=') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.audio {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAitJREFUOE9jYCAWKJWwavr0KyXWb/FIbDtUFFyzJx6nVofE2Xo5nXsj0rqPNSR0nVkR2Hjmgmfd+U9Otdf+m5Vf/6+SfeU/R9ChVVgNYDRtlfJuuPA/rPfe/4QpD/6nznj0P27Kw/9unff/69Xf+69c/+C/SO7N/0z+OAxgMmmRCe++/r9i3ev/KWvf/vdY8PK/bt/9/wrNV3/IN5y/IVt1YqNg4pGTTP4HsbuA2bhZ2qvpyn+xjIObxAp3VwqlrgngLFyryVy5nhPmZJHANS2cwYexG8BmVC/pWn3hP4NZlzWuQDJI3dIiFnUUuwEsQAOcq87jNcC7fHeLUtJxHF4AGmBWeAavAWH1+1rUUk7giAWjOknllON4DXAs2NEiG4/DBQxAF/CFHfrPYI4jDFSLuJVjNrUJhB/B7gIGo1pJRt99GAZYJK7wLJ1z7Xzl4vu/7aqv/GRBj0bjqAX2qb0nJ7mXH17C4HcUxQA+hymWtSue/C5a9up/9Ozn/7Vr7v1nRY7GqMb91T3b3v6vWvPmf/S0p/9ZQk+DDLCBRSOz06Jqk+o7/21nvfqvsebDf7kZL/5zBaxphkezd+OFn7HzXvz3Wvjmv9a8N//5Ek//ZTBpVYUrMG2X5wjcdl68+uI/wa5Lr3hSNjczGFeywOVZ/bbcVGp//F9izfv/Ql03f3P4LC/HSEQquYwMFnUCDJ7dzBhyjGZNQpye89M5gpfnMvtNUyE2h4PUAQBovvT7lyNljwAAAABJRU5ErkJggg==') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.LiveLeak {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAydJREFUOE9Nk1tIk2EYx79NyUNqTk0o6KYrnZeChodLDxfeZpCbJk4RXU5Nm7tYRYhiYXbQlaeGutyW2gxtpB1RIyKDEjKwA6Ti2dR5KNDn+fq/S6TBj/f93r3P732e53s/qfnkSdej4GB2SBLbwf+jmB+gUMgOheLg/z7EdCUnO6Ref392SpK8Hyh3I+gBwBo7lUp2xcbyQEoKD6alyQOpqd754/h4FjJXZCRJTl9ftmEzoK5/wdQJxPgkLY2WV1dpc2uLtnZ2eHNnhza3t2nd46GhjAzuValY6jx0iIfS03msoIDuQ9COQCtoUSjohU5HuwgaN5loeXycd3d3aW9vzwvW2K5SkdTi58fvzGb+3tdHFggA3QONEAzn59PvjQ1yqNX0zenkvX0B4ffWaGRraChJd/385JGqKvlzTw/fRqOaIGkEd1DjU52O/3g83BkTw5MOh7yJuUCUM2o0yi2hoSw1IIOhykr+YLNRHYKu4XQvyKA/N5c8yMCCDD7Z7bz26xcJ1rH2rKKCG0UJdRAMlJbyG6uVrkJQjWAB5tSbk0Nr2HwDgvcQiIYur6zQyvo6ucvLueHIEZKuQPBQr+dXra1kRuqXEOwFArtWSytra1QdFUVjNhvPLS3R3OIiLUDUD0F1WBhJJtwDW2Ehu5uaqBICI4IFlRB0QLCEzaboaHrd0cHzCBYsIIuesjK+LAQXkEFrXh676uupGCWcR6AeghLQptGQONUAwfOuLp6Zn6eZuTmaXVig7pISrhI90ENgQbdHhoep32JhFzLpu3WLio8epUYIfs7OUjF6UKJW88XERLqYkEBNej11oG8XhCAvMFAuOn5cNiclsTkhQTbhmpri4lgbEMANWi1DwC/xit3t7bK7rY0Fo4OD3G4wyEURESzloAdnceezlErK8vH5N4KzPj50PTOTfkxP0+THj/RlYoInJyZI8HVqim5qNFwQHk7SucBAPo2PKRMNPLM/4pnFszYkhJsNBu6uqWFHba1sr61lQSveQFZQkFx07BhJmhMnrLn4NLMPH/aSExR0QDbmWhwgyEapwDvXoDxdWBiXnjrV/Bdm2kYUxLwmEgAAAABJRU5ErkJggg==') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.Vocaroo {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAw9JREFUOE9jYMABuMwYmCyTJKUCGlSnFSy02TTzeOyCiQcDViX26qVz2TAyYtWmEMwuoZ3M7V40LcB79pHkc0svpvzY8jD//87nxf+3Pyn8v/ZO8v+VNyP/2mZJumI1QCWSI8232Hjumitlfw5+qPp/9l8TCt76JP//xkdx/wsXWCzjtWFkwTCkbWFe9plPk/+ga4Txz/xt/D/hkN//gMXif21a+NbyWjIwoRiy6GDT5rP/mlFsPfyp5n/NpOj/22+0gMUXXIz/H7hC/L/bFKFbPDZMrHAD5H35OPt2J9zacDv/f3V7xv9FhwrBGubsT/1//Pjx/1GJ/mD+/nfl/1v3Ovy3KRJNQbHdOlXCvOO03/+pm1P/v3v37n90hhtYw9HPtf8Xb2v937cmHswHeWPRxYj/LvkK3igGKARwicTO07118H3V/5kbi/4vPZMJtK3s/6YH2f+Pfq1B8VbjWrdnMu5s4nAD9CNFhKwz5DTUvLl419zKvAcLtG1P84BRl/b/5M/6/6f/NPzf/qzo84yj0Uus0xUU4Zor54bm9+4OfZG02OCuoAMTb9ZkC9ull1Nvrr2Z+XvRpaRfc65H/68F+jl9svEhzyLFWoccWVc+eyTHq/twydjlKRln7jX9bNMkMJnbhoFRL1xCqmKx6/yi2fYXa/c5/e846PV/5fW0/7OPx/yfcjzop34ulxdGGvDuU8mMXaX507lBuiN6ueadmQeT/p/93vf/1O+G//sP5fw/eL3o/5JLif8zVxs+Tlir9S26UyeFQQvJGBE7FvaFZ9LfN+1y+WjbItSb3GmXvXd15v8zroH/HxgE/D+aGPx/18vi/z07PeZNPRKxe/Kh0Ae8toxscCO4zBkYXArk9C1SxJUYjBkYPPIVtbbuTftz3cz//2O9wP/75iSAXdO72/dt2HL5F6YlfBW4MiJYXMiBiW3t7azHBx+V/t89N+H/8a+1//e9K/9attDp5LQjYX8SuvVL8RoAkmxa65299Erq1FnHo0qrl7t4BddriIs4MrM3rfWcFd+pGwVSAwBZ0bKP8yrZPAAAAABJRU5ErkJggg==') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.pastebin {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAtZJREFUOE+NU91LWmEc7sJtQew/2MUY7INg7CLY3W5GMHazyzEQo9UmfYxZTbAiVlgRqLMSZ+XnDC3z2+Y0+8JGakKZTtR0Tl2wtgtLLQh29cz3ZZ3h3Q68vOc95zzP73l+z+/U1f292O09DRxubxOH23P//1bvtQts3dPnry7LZnXJhcUl5Avf8dHtwY+fv2AyW5DOfIXFakMm+w0G4wISyRRm55TQG0y/Wzv6mikJ52Xf9TmVBoFAAD6fDwqFAqFQCJubmzCbzZiensbp6SmkUikikQi0Wi0kEgm6ewVaStDCfXPDandifn6egoaGhrCzswO1Wg2Hw4HBwUGk02kIBAL4/X4IhUJMTk6ii8dfYggy2RwymQzOz88Rj8dRLpexv7+PSqWCYDCIQqGAra0tJBIJrK2t0XdVAjNDEIl+wfj4OEqlEq2wt7dHrchkMmrBYDCAz+fTIjweD7FYrJbgIJOlgLOzM8jlcip1eXmZ2rFarVAqlRCLxcjlchCJRFRljYJYPAG32418Pg+n04lsNouVlRUcHh7C4/FQIOlHNBqlezgcJgQWxkIgGMbExASVNjY2hvX1dVo9mUzS5wREFLhcLrqTcw2B//M2RkdHodPp4PV6oVKpqH+SCom3v7+fNnF4eJiJusbCJ6+PviSyScakiaR5RIHRaKQpmEwmbAdCeD8zB6vdhebHT8SMhcUlC83bbrdTJRsbG3RwiCVCRNJJpDIoVeNNJJJQzKryV+rrmxiCtyNCCmaz2VhdXQWXy6XDpNfrodFoYLXZUTw+pk222Z3lW3ca26rgSwzBwqIZAwMDlITMAVEwNTVFR5fEJpK8Qyp1AJvDVbrTeLenCmxgfiZ22+urCtWHyu7uLp2wVCpFKx0dHaFYLOLk5KT6Y9kgk89kb95ubK0BX7A8a+1qannRLeW0daj/rU51S3tn9dypfvDw0QiLxbpX/Z7FVK7e/AEj4Wf24/2f5AAAAABJRU5ErkJggg==') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.gist {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAk1JREFUeNqUkzuIE1EUhv955MnsbB6r4kYQLUQQFncV3SnCIqJsoWGDYOGjsIiCtY2Kla1sjLBIsFFcXJC1kaSwENQmXUQSRSUSjCQSTCbkbR4z47lXEgtBNwcu3DNzvvO8R8jlcj7LshKmaWqYQERRTAmCcEru9/sJr9er0QF92BJMAVGr1TQ6CeZAc7lcGAwGkyQAxpTLZU0eDoc8crfbRTgcRjAYRCQSYSmi1WpxY7fbjU6ng1gshmaziXg8zhnGIpVKWbquW9ls1mLZsaMoiqWq6lgnBxY55He/328Vi0XOMFZmqVMD4fF4QBAajcY48khY9JE4HA4enTGMFVkaTHmy+ZzD/5NSqYSNB484w1h55ODO3TVu4FXcWDywl24Cmp0e1WBhyuWELAtIf/qKUrWOONmev3Lpt4NRCXq1gplpBS/v3cDc0nGg9h1o1ZkfwO4Atu1B8cM7HLt8k37V/y5B2b4bJxf2Y+7oEbyJrkMvUjki0YYJ03LidfQxAt4dOHdCw5RdGZcgGobBlQtnV/BDr1GfDai7ZiHZZRi9PoY/e5SCCTUwC9gk1GmMh5YWOcNYkR4Sv1y9uAJbYB82N57h4OnDmN7phjQ0qUkWRJuB+TMaPn/5iFfvv+Ha7eucYey4iWw8q6tRJJNJ3Fp7ClUawEkViBTfkCR0YUNTVHD/4Tpm/P4/U2CeKpUKfD4fJDIMhUKEhP45St50XedZyLQY6Xw+v8AUemVb2oNqtYpCocCWKi2TLLfb7ReZTGZ+kmUi7i2VvfxLgAEAZChMriPcl+IAAAAASUVORK5CYII=') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.image {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAs5JREFUOE+lk/tvi1EYx98/xT8gW4REIpGFMEQWl2FiM9ZMZhm2xRAyOsmujFFmdFRHu0tWm87UypxStr69zPauN5e5rHVp3IYhbOvHy+wHEQlxkm+ek+d8nm9OznkeSfrfldmgJC7QyUlTymsJTfuTZ25z4HdWYwyLreYhtpgekGPw0+kKvo1Eo+IXRSIiEhkWZuc9tqnsJD9EqTUopCxjSGTpB0iueczSo1HyW8cpsExQ1DbxI2pt45j9cXpexul4FEd79RnZphAa/SD7WvuFtO6UItbU9LC+YQxNI2w0wwYT5LRAdhOU3oBTIXC9gXP3oUSGgz2vST3gYHejR0jptT1C332f8yrUEYHrz8CgxDnpm6DKCUfc0KnmXa/AEVPPwnDcD0cvetA2uYRk67Ive/lpjO7YBO1PPuF8Df3vwf4cbNE4tqdw7YVq8HYyHx6FvhE1hkMEg8HDUqvFkjT4aIjMqkqyqkswDSrcfBfH+Q561YLAZ/B+BLda6FXlU/cPv0AoEPhuoP1h4Av7Wbh9E/Py15NWWUjeSR3nZDfeN+N0DY9hG/7K1eGP3P0S5/EYRFUF/IOTBrUXHPm9fT6mr1xEwupkZqxbzLyiDJYUZ5NSnkdqdSHpxyrYdFpPgdmAsdfJwPMI/Yr65bf7tZLGGBQ7DNdJWFtIYvoOZmbuZE7OXpIKKli86zAr9p9gTVktWTVnKTI2U95uRWe3U2IJUDbVB5p6hVm5x5m9Vc/cnedZUNzC8lILaQesZBy6hEZ3maKzgvJWFzVWD9XtXvVGQbSWASFtMATVRlJIKbOTWtlJXaeXepuPM1f6MNp9GLt8mLvvYLmp0OhQ2Fwvk6m7xaqDTvY0eYWUVtcnllXfYlGpnfklVuraHHg8HjxuN+6fktUHlWWZPaZeUo/ILK0UKttBcbNbSB9GP0yLxWJJUxoZGUn80zD9C/vXQ/4NHY10h3M1zmQAAAAASUVORK5CYII=') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.InstallGentoo {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAklJREFUOE9jYEAAASBTCorZkcSRmTjVCDLziCwG4hfM3EIvGNm44oC6WNEM4WXi5FsEkmfhFX3BxMmfAJSHW9Qr55Px3aZp3X/btq3/hQydPzKysMcCFbBBDeFj4uBdqBJR/gskb1W34j+PmulLoJwbzBJJoMm7dNO7/ntMP/XfpW/v//SKvk+7tl7fvXfTpx5pCdWVSiHFv1wnHQbLi9sE/Wdk5SwBauaCGQB3gUPb5v+7Lr/8/+fvr/9fv/z+f+Pyr/9bV735l9Wy/79Dx/b/Nk0bsLoAHgbeAVHv/v77/f8f0IB7N7+cu3DuecK54z9+7lzz639e9pK/7HwSWMMA5BJwCJeXtOm/fvVj1fcfv369f//92cN7X6ZcPvf9x6Htv//vXP3r/+T245UEYgpskPTNq08LgN749/PH7/93rv/6f/rw7//nj//4f+bU0zQcUQwWBkdVbGz62y+fv3wHeeXrlz//H9798//qpY//M3KqfzGxc8djiWKwZnBUuWQ2/fr46fv/P39+///x/ff/d69//z97+s7fyMb5/+y7d2GLYriDZikFF/1qXXXj/4Pbv/8/f/jn/5MH316/eP6jVlBAaIt6VO1/jxmn/zv27P7Pp2HxEajLD90ra9Sj6/979O37X73w0n+vqOL/0lJyMVBFq0EGgDSD0oKAlu1/oHg4ugGzVCKqfouYuL1Xj676Iajr8AnJFricGqYc3Bw+Zi6BVUxsXLHAdL6QiYMPFNrwpIxHDsUhgtAMAopKDjQn4pPDF7P45QC4hSmc1eX8WgAAAABJRU5ErkJggg==') center left no-repeat!important;\npadding-left: 18px;\n}\n\n/* General */\n:root.yotsuba .dialog {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.yotsuba .field:focus {\nborder-color: #EA8;\n}\n\n/* Header */\n:root.yotsuba #header-bar, :root.yotsuba #notifications {\nfont-size: 9pt;\ncolor: #B86;\n}\n:root.yotsuba #header-bar a, :root.yotsuba #notifications a {\ncolor: #800000;\n}\n\n/* Settings */\n:root.yotsuba #fourchanx-settings fieldset {\nborder-color: #D9BFB7;\n}\n\n/* Quote */\n:root.yotsuba .backlink.deadlink {\ncolor: #00E !important;\n}\n:root.yotsuba .inline {\nborder-color: #D9BFB7;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.yotsuba #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.yotsuba .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.yotsuba #menu {\ncolor: #800000;\n}\n:root.yotsuba .entry {\nborder-bottom: 1px solid #D9BFB7;\nfont-size: 10pt;\n}\n:root.yotsuba .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* Watcher Favicon */\n:root.yotsuba .watch-thread-link\n{\nbackground-image: url(\"data:image/svg+xml, \");\n}\n\n/* General */\n:root.yotsuba-b .dialog {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.yotsuba-b .field:focus {\nborder-color: #98E;\n}\n\n/* Header */\n:root.yotsuba-b #header-bar, :root.yotsuba-b #notifications {\nfont-size: 9pt;\ncolor: #89A;\n}\n:root.yotsuba-b #header-bar a, :root.yotsuba-b #notifications a {\ncolor: #34345C;\n}\n\n/* Settings */\n:root.yotsuba-b #fourchanx-settings fieldset {\nborder-color: #B7C5D9;\n}\n\n/* Quote */\n:root.yotsuba-b .backlink.deadlink {\ncolor: #34345C !important;\n}\n:root.yotsuba-b .inline {\nborder-color: #B7C5D9;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.yotsuba-b #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.yotsuba-b .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.yotsuba-b #menu {\ncolor: #000;\n}\n:root.yotsuba-b .entry {\nborder-bottom: 1px solid #B7C5D9;\nfont-size: 10pt;\n}\n:root.yotsuba-b .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* Watcher Favicon */\n:root.yotsuba-b .watch-thread-link\n{\nbackground-image: url(\"data:image/svg+xml, \");\n}\n\n/* General */\n:root.futaba .dialog {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.futaba .field:focus {\nborder-color: #EA8;\n}\n\n/* Header */\n:root.futaba #header-bar, :root.futaba #notifications {\nfont-size: 11pt;\ncolor: #B86;\n}\n:root.futaba #header-bar a, :root.futaba #notifications a {\ncolor: #800000;\n}\n\n/* Settings */\n:root.futaba #fourchanx-settings fieldset {\nborder-color: #D9BFB7;\n}\n\n/* Quote */\n:root.futaba .backlink.deadlink {\ncolor: #00E !important;\n}\n:root.futaba .inline {\nborder-color: #D9BFB7;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.futaba #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.futaba .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.futaba #menu {\ncolor: #800000;\n}\n:root.futaba .entry {\nborder-bottom: 1px solid #D9BFB7;\nfont-size: 12pt;\n}\n:root.futaba .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* Watcher Favicon */\n:root.futaba .watch-thread-link\n{\nbackground-image: url(\"data:image/svg+xml, \");\n}\n\n/* General */\n:root.burichan .dialog {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.burichan .field:focus {\nborder-color: #98E;\n}\n\n/* Header */\n:root.burichan #header-bar, :root.burichan #header-bar #notifications {\nfont-size: 11pt;\ncolor: #89A;\n}\n:root.burichan #header-bar a, :root.burichan #header-bar #notifications a {\ncolor: #34345C;\n}\n\n/* Settings */\n:root.burichan #fourchanx-settings fieldset {\nborder-color: #B7C5D9;\n}\n\n/* Quote */\n:root.burichan .backlink.deadlink {\ncolor: #34345C !important;\n}\n:root.burichan .inline {\nborder-color: #B7C5D9;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.burichan #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.burichan .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.burichan #menu {\ncolor: #000000;\n}\n:root.burichan .entry {\nborder-bottom: 1px solid #B7C5D9;\nfont-size: 12pt;\n}\n:root.burichan .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* Watcher Favicon */\n:root.burichan .watch-thread-link\n{\nbackground-image: url(\"data:image/svg+xml, \");\n}\n\n/* General */\n:root.tomorrow .dialog {\nbackground-color: #282A2E;\nborder-color: #111;\n}\n\n/* Header */\n:root.tomorrow #header-bar, :root.tomorrow #notifications {\nfont-size: 9pt;\ncolor: #C5C8C6;\n}\n:root.tomorrow #header-bar a, :root.tomorrow #notifications a {\ncolor: #81A2BE;\n}\n\n/* Settings */\n:root.tomorrow #fourchanx-settings fieldset {\nborder-color: #111;\n}\n\n/* Quote */\n:root.tomorrow .backlink.deadlink {\ncolor: #81A2BE !important;\n}\n:root.tomorrow .inline {\nborder-color: #111;\nbackground-color: rgba(0, 0, 0, .14);\n}\n\n/* QR */\n.tomorrow #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #282A2E;\nborder-color: #111;\n}\n:root.tomorrow .qr-preview {\nbackground-color: rgba(255, 255, 255, .15);\n}\n:root.tomorrow #qr .field {\nbackground-color: rgb(26, 27, 29);\ncolor: rgb(197,200,198);\nborder-color: rgb(40, 41, 42);\n}\n:root.tomorrow #qr .field:focus {\nborder-color: rgb(129, 162, 190) !important;\nbackground-color: rgb(30,32,36);\n}\n\n/* Menu */\n:root.tomorrow #menu {\ncolor: #C5C8C6;\n}\n:root.tomorrow .entry {\nborder-bottom: 1px solid #111;\nfont-size: 10pt;\n}\n:root.tomorrow .focused.entry {\nbackground: rgba(0, 0, 0, .33);\n}\n\n/* Watcher Favicon */\n:root.tomorrow .watch-thread-link\n{\nbackground-image: url(\"data:image/svg+xml, \");\n}\n\n/* General */\n:root.photon .dialog {\nbackground-color: #DDD;\nborder-color: #CCC;\n}\n:root.photon .field:focus {\nborder-color: #EA8;\n}\n\n/* Header */\n:root.photon #header-bar, :root.photon #notifications {\nfont-size: 9pt;\ncolor: #333;\n}\n:root.photon #header-bar a, :root.photon #notifications a {\ncolor: #FF6600;\n}\n\n/* Settings */\n:root.photon #fourchanx-settings fieldset {\nborder-color: #CCC;\n}\n\n/* Quote */\n:root.photon .backlink.deadlink {\ncolor: #F60 !important;\n}\n:root.photon .inline {\nborder-color: #CCC;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.photon #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #DDD;\nborder-color: #CCC;\n}\n:root.photon .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.photon #menu {\ncolor: #333;\n}\n:root.photon .entry {\nborder-bottom: 1px solid #CCC;\nfont-size: 10pt;\n}\n:root.photon .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* Watcher Favicon */\n:root.photon .watch-thread-link\n{\nbackground-image: url(\"data:image/svg+xml, \");\n}\n"
+ css: "/* General */\n.dialog {\nbox-shadow: 0 1px 2px rgba(0, 0, 0, .15);\nborder: 1px solid;\ndisplay: block;\npadding: 0;\n}\n.captcha-img,\n.field {\nbackground-color: #FFF;\nborder: 1px solid #CCC;\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\ncolor: #333;\nfont: 13px sans-serif;\noutline: none;\ntransition: color .25s, border-color .25s;\ntransition: color .25s, border-color .25s;\n}\n.field::-moz-placeholder,\n.field:hover::-moz-placeholder {\ncolor: #AAA !important;\nfont-size: 13px !important;\nopacity: 1.0 !important;\n}\n.captch-img:hover,\n.field:hover {\nborder-color: #999;\n}\n.field:hover, .field:focus {\ncolor: #000;\n}\n.field[disabled] {\nbackground-color: #F2F2F2;\ncolor: #888;\n}\n.move {\ncursor: move;\noverflow: hidden;\n}\nlabel, .favicon {\ncursor: pointer;\n}\na[href=\"javascript:;\"] {\ntext-decoration: none;\n}\n.warning {\ncolor: red;\n}\n#boardNavDesktop {\ndisplay: none !important;\n}\na {\noutline: none !important;\n}\n\n/* 4chan style fixes */\n.opContainer, .op {\ndisplay: block !important;\noverflow: visible !important;\n}\n[hidden] {\ndisplay: none !important;\n}\n\n/* fixed, z-index */\n#overlay,\n#fourchanx-settings,\n#qp, #ihover,\n#navlinks, .fixed #header-bar,\n:root.float #updater,\n:root.float #thread-stats,\n#qr {\nposition: fixed;\n}\n#fourchanx-settings {\nz-index: 999;\n}\n#overlay {\nz-index: 900;\n}\n#notifications {\nz-index: 70;\n}\n#qp, #ihover {\nz-index: 60;\n}\n#menu {\nz-index: 50;\n}\n#navlinks, #updater, #thread-stats {\nz-index: 40;\n}\n.fixed #header-bar.autohide {\nz-index: 35;\n}\n#qr {\nz-index: 30;\n}\n#thread-watcher {\nz-index: 8;\n}\n:root.fixed-watcher #thread-watcher {\nz-index: 20;\n}\n.fixed #header-bar {\nz-index: 10;\n}\n/* Header */\n.fixed.top body {\npadding-top: 2em;\n}\n.fixed.bottom body {\npadding-bottom: 2em;\n}\n.fixed #header-bar {\nright: 0;\nleft: 0;\npadding: 3px 4px 4px;\n}\n.fixed.top #header-bar {\ntop: 0;\n}\n.fixed.bottom #header-bar {\nbottom: 0;\n}\n#header-bar {\nborder-width: 0;\ntransition: all .1s .05s ease-in-out;\n}\n:root.centered-links #shortcuts {\nwidth: 300px;\ntext-align: right;\n}\n:root.centered-links #header-bar {\ntext-align: center;\n}\n:root.centered-links #custom-board-list {\nposition: relative;\nleft: 150px;\n}\n.fixed.top #header-bar {\nborder-bottom-width: 1px;\n}\n.fixed.bottom #header-bar {\nbox-shadow: 0 -1px 2px rgba(0, 0, 0, .15);\nborder-top-width: 1px;\n}\n.fixed.bottom #header-bar .menu-button i {\nborder-top: none;\nborder-bottom: 6px solid;\n}\n#board-list {\ntext-align: center;\n}\n.fixed #header-bar.autohide:not(:hover) {\nbox-shadow: none;\ntransition: all .8s .6s cubic-bezier(.55, .055, .675, .19);\n}\n.fixed.top #header-bar.autohide:not(:hover) {\nmargin-bottom: -1em;\n-webkit-transform: translateY(-100%);\ntransform: translateY(-100%);\n}\n.fixed.bottom #header-bar.autohide:not(:hover) {\n-webkit-transform: translateY(100%);\ntransform: translateY(100%);\n}\n#scroll-marker {\nleft: 0;\nright: 0;\nheight: 10px;\nposition: absolute;\n}\n:root:not(.autohide) #scroll-marker {\npointer-events: none;\n}\n#header-bar #scroll-marker {\ndisplay: none;\n}\n.fixed #header-bar #scroll-marker {\ndisplay: block;\n}\n.fixed.top #header-bar #scroll-marker {\ntop: 100%;\n}\n.fixed.bottom #header-bar #scroll-marker {\nbottom: 100%;\n}\n#header-bar a:not(.entry):not(.close) {\ntext-decoration: none;\npadding: 1px;\n}\n#header-bar input {\nmargin: 0;\nvertical-align: bottom;\n}\n#shortcuts:empty {\ndisplay: none;\n}\n.brackets-wrap::before {\ncontent: \"\\00a0[\";\n}\n.brackets-wrap::after {\ncontent: \"]\\00a0\";\n}\n.disabled,\n.expand-all-shortcut {\nopacity: .45;\n}\n#shortcuts {\nfloat: right;\n}\n.shortcut {\nmargin-left: 3px;\n}\n#navbotright,\n#navtopright {\ndisplay: none;\n}\n#toggleMsgBtn {\ndisplay: none !important;\n}\n.current {\nfont-weight: bold;\n}\n/* 4chan X link brackets */\n.fourchanx-link::after {\ncontent: \"]\";\n}\n.fourchanx-link::before {\ncontent: \"[\";\n}\n/* Notifications */\n#notifications {\nposition: fixed;\ntop: 0;\nheight: 0;\ntext-align: center;\nright: 0;\nleft: 0;\ntransition: all .8s .6s cubic-bezier(.55, .055, .675, .19);\n}\n.fixed.top #header-bar #notifications {\nposition: absolute;\ntop: 100%;\n}\n.notification {\ncolor: #FFF;\nfont-weight: 700;\ntext-shadow: 0 1px 2px rgba(0, 0, 0, .5);\nbox-shadow: 0 1px 2px rgba(0, 0, 0, .15);\nborder-radius: 2px;\nmargin: 1px auto;\nwidth: 500px;\nmax-width: 100%;\nposition: relative;\ntransition: all .25s ease-in-out;\n}\n.notification.error {\nbackground-color: hsla(0, 100%, 38%, .9);\n}\n.notification.warning {\nbackground-color: hsla(36, 100%, 38%, .9);\n}\n.notification.info {\nbackground-color: hsla(200, 100%, 38%, .9);\n}\n.notification.success {\nbackground-color: hsla(104, 100%, 38%, .9);\n}\n.notification a {\ncolor: white;\n}\n.notification > .close {\npadding: 6px;\ntop: 0;\nright: 5px;\nposition: absolute;\n}\n.message {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\npadding: 6px 20px;\nmax-height: 200px;\nwidth: 100%;\noverflow: auto;\n}\n\n/* Settings */\n:root.fourchan-x body {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\n}\n#overlay {\nbackground-color: rgba(0, 0, 0, .5);\ntop: 0;\nleft: 0;\nheight: 100%;\nwidth: 100%;\n}\n#fourchanx-settings {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\nbox-shadow: 0 0 15px rgba(0, 0, 0, .15);\nheight: 600px;\nmax-height: 100%;\nwidth: 900px;\nmax-width: 100%;\nmargin: auto;\npadding: 3px;\ntop: 50%;\nleft: 50%;\n-moz-transform: translate(-50%, -50%);\n-webkit-transform: translate(-50%, -50%);\ntransform: translate(-50%, -50%);\n}\n#fourchanx-settings > nav {\npadding: 2px 2px 0;\nheight: 15px;\n}\n#fourchanx-settings > nav a {\ntext-decoration: underline;\n}\n#fourchanx-settings > nav a.close {\ntext-decoration: none;\npadding: 2px;\n}\n.section-container {\noverflow: auto;\nposition: absolute;\ntop: 2.1em;\nright: 5px;\nbottom: 5px;\nleft: 5px;\npadding-right: 5px;\n}\n.sections-list {\npadding: 0 3px;\nfloat: left;\n}\n.credits {\nfloat: right;\n}\n.tab-selected {\nfont-weight: 700;\n}\n.section-sauce ul,\n.section-advanced ul {\nlist-style: none;\nmargin: 0;\n}\n.section-sauce ul {\npadding: 8px;\n}\n.section-advanced ul {\npadding: 0px;\n}\n.section-sauce li,\n.section-advanced li {\npadding-left: 4px;\n}\n.section-main label {\ntext-decoration: underline;\n}\n.section-filter ul {\npadding: 0;\n}\n.section-filter li {\nmargin: 10px 40px;\n}\n.section-filter textarea {\nheight: 500px;\n}\n.section-sauce textarea {\nheight: 350px;\n}\n.section-advanced .field[name=\"boardnav\"] {\nwidth: 100%;\n}\n.section-advanced textarea {\nheight: 150px;\n}\n.section-advanced .archive-cell {\nmin-width: 160px;\ntext-align: center;\n}\n.section-advanced #archive-board-select {\nposition: absolute;\n}\n.section-advanced .note {\nfont-size: 0.8em;\nfont-style: italic;\nmargin-left: 10px;\n}\n.section-advanced .note code {\nfont-style: normal;\nfont-size: 11px;\n}\n.section-keybinds .field {\nfont-family: monospace;\n} \n#fourchanx-settings fieldset {\nborder: 1px solid;\nborder-radius: 3px;\n}\n#fourchanx-settings legend {\nfont-weight: 700;\n}\n#fourchanx-settings textarea {\nfont-family: monospace;\nmin-width: 100%;\nmax-width: 100%;\n}\n#fourchanx-settings code {\ncolor: #000;\nbackground-color: #FFF;\npadding: 0 2px;\n}\n.unscroll {\noverflow: hidden;\n}\n\n/* Announcement Hiding */\n:root.hide-announcement #globalMessage {\ndisplay: none;\n}\na.hide-announcement {\nfloat: left;\n}\n\n/* Unread */\n#unread-line {\nmargin: 0;\nborder-color: rgb(255,0,0);\n}\n\n/* Thread Updater */\n#updater {\nbackground: none;\nborder: none;\nbox-shadow: none;\n}\n#updater > .move {\npadding: 5px 3px 0px;\nmargin-bottom: -3px;\n}\n#updater > div:last-child {\ntext-align: center;\n}\n#updater input[type=number] {\nwidth: 4em;\n}\n:root.float #updater {\npadding: 0px 3px;\n}\n.new {\ncolor: limegreen;\n}\n#update-status.new {\nmargin-right: 5px;\n}\n#update-timer {\ncursor: pointer;\n}\n\n/* Thread Watcher */\n#thread-watcher {\nposition: absolute;\n}\n#thread-watcher {\npadding-bottom: 3px;\noverflow: hidden;\nwhite-space: nowrap;\nmin-width: 120px;\nmax-height: 92%;\noverflow-y: auto;\n}\n:root.fixed-watcher #thread-watcher {\nposition: fixed;\n}\n:root:not(.fixed-watcher) #thread-watcher:not(:hover) {\nmax-height: 210px;\noverflow-y: hidden;\n}\n#thread-watcher > .move {\npadding-top: 3px;\n}\n#thread-watcher > div {\nmax-width: 250px;\noverflow: hidden;\npadding-left: 3px;\npadding-right: 3px;\ntext-overflow: ellipsis;\n}\n#thread-watcher a {\ntext-decoration: none;\n}\n#thread-watcher .move>.close {\nposition: absolute;\nright: 0px;\ntop: 0px;\npadding: 0px 4px;\n}\n.watch-thread-link {\npadding-top: 18px;\nwidth: 18px;\nheight: 0px;\ndisplay: inline-block;\nbackground-repeat: no-repeat;\nopacity: 0.2;\nposition: relative;\ntop: 1px;\n}\n.watch-thread-link.watched {\nopacity: 1;\n}\n\n/* Thread Stats */\n#thread-stats {\nbackground: none;\nborder: none;\nbox-shadow: none;\n}\n:root.float #post-count, :root.float #file-count {\npointer-events: none;\n}\n:root.float #thread-stats {\npadding: 0px 3px;\n}\n\n/* Quote */\n.deadlink {\ntext-decoration: none !important;\n}\n.backlink.deadlink:not(.forwardlink),\n.quotelink.deadlink:not(.forwardlink) {\ntext-decoration: underline !important;\n}\n.inlined {\nopacity: .5;\n}\n#qp input, .forwarded {\ndisplay: none;\n}\n.quotelink.forwardlink,\n.backlink.forwardlink {\ntext-decoration: none;\nborder-bottom: 1px dashed;\n}\n.filtered {\ntext-decoration: underline line-through;\n}\n:root.hide-backlinks .backlink.filtered {\ndisplay: none;\n}\n.inline {\nborder: 1px solid;\ndisplay: table;\nmargin: 2px 0;\n}\n.inline .post {\nborder: 0 !important;\nbackground-color: transparent !important;\ndisplay: table !important;\nmargin: 0 !important;\npadding: 1px 2px !important;\n}\n#qp > .opContainer::after {\ncontent: '';\nclear: both;\ndisplay: table;\n}\n#qp .post {\nborder: none;\nmargin: 0;\npadding: 2px 2px 5px;\n}\n#qp img {\nmax-height: 80vh;\nmax-width: 50vw;\n}\n.qphl {\noutline: 2px solid rgba(216, 94, 49, .7);\n}\n:root.highlight-own .yourPost > .reply,\n:root.highlight-you .quotesYou > .reply {\nborder-left: 2px solid rgba(221,0,0,.5);\n}\n/* Quote Threading */\n.threadContainer {\nmargin-left: 20px;\nborder-left: 1px solid rgba(128,128,128,.3);\n}\n.threadOP {\nclear: both;\n} \n\n/* File */\n.fileText:hover .fntrunc,\n.fileText:not(:hover) .fnfull,\n.expanded-image > .post > .file > .fileThumb > img[data-md5],\n:not(.expanded-image) > .post > .file > .fileThumb > .full-image {\ndisplay: none;\n}\n.expanding {\nopacity: .5;\n}\n:root.fit-height .full-image {\nmax-height: 100vh;\n}\n:root.fit-width .full-image {\nmax-width: 100%;\n}\n:root.gecko.fit-width .full-image {\nwidth: 100%;\n}\n#ihover {\n-moz-box-sizing: border-box;\nbox-sizing: border-box;\nmax-height: 100%;\nmax-width: 75%;\npadding-bottom: 16px;\n}\n.fappeTyme .thread > .noFile,\n.fappeTyme .threadContainer > .noFile {\ndisplay: none;\n}\n\n/* Index/Reply Navigation */\n#navlinks {\nfont-size: 16px;\ntop: 25px;\nright: 10px;\n}\n\n/* Filter */\n.opContainer.filter-highlight {\nbox-shadow: inset 5px 0 rgba(255, 0, 0, .5);\n}\n.filter-highlight > .reply {\nbox-shadow: -5px 0 rgba(255, 0, 0, .5);\n}\n\n/* Spoiler text */\n:root.reveal-spoilers s {\ncolor: white !important;\n}\n\n/* Thread & Reply Hiding */\n.hide-thread-button,\n.hide-reply-button {\nfloat: left;\nmargin-right: 2px;\n}\n.stub ~ * {\ndisplay: none !important;\n}\n.stub input {\ndisplay: inline-block;\n}\n\n/* QR */\n:root.hide-original-post-form #postForm,\n:root.hide-original-post-form .postingMode,\n:root.hide-original-post-form #togglePostForm,\n#qr.autohide:not(.has-focus):not(:hover) > form,\n.postingMode ~ #qr select,\n#file-n-submit:not(.has-file) #qr-filerm {\ndisplay: none;\n}\n#qr select,\n#dump-button,\n.remove,\n.captcha-img {\ncursor: pointer;\n}\n#qr {\nz-index: 20;\nposition: fixed;\npadding: 1px;\nborder: 1px solid transparent;\nmin-width: 300px;\nborder-radius: 3px 3px 0 0;\n}\n#qrtab {\nborder-radius: 3px 3px 0 0;\n}\n#qrtab {\nmargin-bottom: 1px;\n}\n#qr .close {\nfloat: right;\npadding: 0 3px;\n}\n#qr .warning {\nmin-height: 1.6em;\nvertical-align: middle;\npadding: 0 1px;\nborder-width: 1px;\nborder-style: solid;\n}\n.qr-link-container {\ntext-align: center;\n}\n.persona {\nwidth: 248px;\nmax-width: 100%;\nmin-width: 100%;\n}\n#dump-button {\nwidth: 10%;\nmargin: 0;\nmargin-right: 4px;\nfont: 13px sans-serif;\npadding: 1px 0px 2px;\nopacity: 0.6;\n}\n.persona .field:not(#dump) {\nwidth: 95px;\nmin-width: 33.3%;\nmax-width: 33.3%;\n}\n#qr textarea.field {\nheight: 14.8em;\nmin-height: 9em;\n}\n#qr.has-captcha textarea.field {\nheight: 9em;\n}\ninput.field.tripped:not(:hover):not(:focus) {\ncolor: transparent !important;\ntext-shadow: none !important;\n}\n#qr textarea {\nresize: both;\n}\n.captcha-img {\nmargin: 0px;\ntext-align: center;\nbackground-image: #fff;\nfont-size: 0px;\nmin-height: 59px;\nmin-width: 302px;\n}\n.captcha-input {\nwidth: 100%;\nmargin: 1px 0 0;\n}\n.captcha-input.error:focus {\nborder-color: rgb(255,0,0) !important;\n}\n.field {\n-moz-box-sizing: border-box;\nmargin: 0px;\npadding: 2px 4px 3px;\n}\n#qr textarea {\nmin-width: 100%;\n}\n#qr [type='submit'] {\nwidth: 25%;\nvertical-align: top;\n}\n:root.webkit #qr [type='submit'] {\nheight: 24px;\n}\n/* Fake File Input */\n#qr-filename,\n.has-file #qr-no-file {\ndisplay: none;\n}\n#qr-no-file,\n.has-file #qr-filename {\ndisplay: inline-block;\npadding: 0px 4px;\nmargin-bottom: 2px;\noverflow: hidden;\ntext-overflow: ellipsis;\nmax-width: 88%;\n}\n#qr-no-file {\ncolor: #AAA;\n}\n#qr-filename-container {\n-moz-box-sizing: border-box;\ndisplay: inline-block;\nposition: relative;\nwidth: 100px;\nmin-width: 74.6%;\nmax-width: 74.6%;\nmargin-right: 0.4%;\nmargin-top: 1px;\noverflow: hidden;\npadding: 2px 1px 0;\nheight: 22px;\n}\n#qr-filename-container:hover {\ncursor: text;\n}\n#qr-extras-container {\nposition: absolute;\nright: 0px;\n}\n#qr-filerm {\nmargin-right: 2px;\nz-index: 2;\n}\n#file-n-submit {\nheight: 23px;\n}\n#qr input[type=file] {\nvisibility: hidden;\nposition: absolute;\n}\n/* Thread Select / Spoiler Label */\n#qr select {\nfloat: right;\n}\n#qr.has-spoiler .has-file #qr-spoiler-label {\nwidth: 6.7%;\nmin-width: 6.7%;\nmax-width: 6.7%;\ndisplay: inline-block;\ntext-align: center;\nvertical-align: top;\n}\n#qr.has-spoiler #file-n-submit:not(.has-file) #qr-spoiler-label {\ndisplay: none;\n}\n#qr.has-spoiler .has-file #qr-filename-container {\nmax-width: 67.9%;\nmin-width: 67.9%;\n}\n#qr-spoiler-label input {\nposition: relative;\ntop: 3px;\n}\n/* Dumping UI */\n.dump #dump-list-container {\ndisplay: block;\n}\n#dump-list-container {\ndisplay: none;\nposition: relative;\noverflow-y: hidden;\nmargin-top: 1px;\n}\n#dump-list {\noverflow-x: auto;\noverflow-y: hidden;\nwhite-space: nowrap;\nwidth: 248px;\nmax-width: 100%;\nmin-width: 100%;\n}\n#dump-list:hover {\noverflow-x: auto;\n}\n.qr-preview {\n-moz-box-sizing: border-box;\ncounter-increment: thumbnails;\ncursor: move;\ndisplay: inline-block;\nheight: 90px;\nwidth: 90px;\npadding: 2px;\nopacity: .5;\noverflow: hidden;\nposition: relative;\ntext-shadow: 0 1px 1px #000;\n-moz-transition: opacity .25s ease-in-out;\nvertical-align: top;\nbackground-size: cover;\n}\n.qr-preview:hover,\n.qr-preview:focus {\nopacity: .9;\n}\n.qr-preview::before {\ncontent: counter(thumbnails);\ncolor: #fff;\nposition: absolute;\ntop: 3px;\nright: 3px;\ntext-shadow: 0 0 3px #000, 0 0 8px #000;\n}\n.qr-preview#selected {\nopacity: 1;\n}\n.qr-preview.drag {\nbox-shadow: 0 0 10px rgba(0,0,0,.5);\n}\n.qr-preview.over {\nborder-color: #fff;\n}\n.qr-preview > span {\ncolor: #fff;\n}\n.remove {\nbackground: none;\ncolor: #e00;\nfont-weight: 700;\npadding: 3px;\n}\na:only-of-type > .remove {\ndisplay: none;\n}\n.remove:hover::after {\ncontent: \" Remove\";\n}\n.qr-preview > label {\nbackground: rgba(0,0,0,.5);\ncolor: #fff;\nright: 0;\nbottom: 0;\nleft: 0;\nposition: absolute;\ntext-align: center;\n}\n.qr-preview > label > input {\nmargin: 0;\n}\n#add-post {\ncursor: pointer;\nfont-size: 2em;\nposition: absolute;\ntop: 50%;\nright: 10px;\n-moz-transform: translateY(-50%);\n}\n.textarea {\nposition: relative;\n}\n:root.webkit .textarea {\nmargin-bottom: -2px;\n}\n#char-count {\ncolor: #000;\nbackground: hsla(0, 0%, 100%, .5);\nfont-size: 8pt;\nposition: absolute;\nbottom: 1px;\nright: 1px;\npointer-events: none;\n}\n\n/* Menu */\n.menu-button {\ndisplay: inline-block;\nposition: relative;\ncursor: pointer;\n}\n.menu-button i {\nborder-top: 6px solid;\nborder-right: 4px solid transparent;\nborder-left: 4px solid transparent;\ndisplay: inline-block;\nmargin: 2px;\nvertical-align: middle;\n}\n#menu {\nposition: fixed;\noutline: none;\n}\n.entry {\nborder-bottom: 1px solid rgba(0,0,0,.25);\ncursor: pointer;\ndisplay: block;\noutline: none;\npadding: 3px 7px;\nposition: relative;\ntext-decoration: none;\nwhite-space: nowrap;\n}\n.left>.entry.has-submenu {\npadding-right: 17px !important;\n}\n.entry:last-child {\nborder-bottom: 0;\n}\n.has-submenu::after {\ncontent: \"\";\nborder-left: .5em solid;\nborder-top: .3em solid transparent;\nborder-bottom: .3em solid transparent;\ndisplay: inline-block;\nmargin: .3em;\nposition: absolute;\nright: 3px;\n}\n.left .has-submenu::after {\nborder-left: 0;\nborder-right: .5em solid;\n}\n.submenu {\ndisplay: none;\nposition: absolute;\nleft: 100%;\ntop: -1px;\n}\n.focused .submenu {\ndisplay: block;\n}\n.imp-exp-result {\nposition: absolute;\ntext-align: center;\nmargin: auto;\nright: 0px;\nleft: 0px;\nwidth: 200px;\n}\n.export, .import {\ncursor: pointer;\ntext-decoration: none !important;\n}\n/* Link Title Favicons */\n.linkify.YouTube {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAMCAYAAABr5z2BAAABIklEQVQoz53LvUrDUBjG8bOoOammSf1IoBSvoCB4JeIqOHgBLt6AIMRBBQelWurQ2kERnMRBsBUcIp5FJSBI5oQsJVkkUHh8W0o5nhaFHvjBgef/Mq+Q46RJBMkI/vE+aOus956tnEswIZe1LV0QyJ5sE2GzgZfVMtRNIdiDpccEssdlB1mW4bvTwdvWJtRdErM7U+8S/FJykCRJX5qm+KpVce8UMNLRLbulz4iSjTAMh6Iowsd5BeNadp3nUF0VlxAEwZBotXC0Usa4ll3meZdA1iguwvf9vpvDA2wvmKgYGtSud8suDB4TyGr2PF49D/vra9jRZ1BVdknMzgwuCGSnZEObwu6sBnVTCHZiaC7BhFx2PKdxUidiAH/4lLo9Mv0DELVs9qsOHXwAAAAASUVORK5CYII=') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.Vimeo {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAASJJREFUOE9jYAAC7ln7/pODQXrBmq333PvPu/YaSRikB6QXbACpmmHqsRoAMll7+20UQ0H8tmuv/pdffPFfZtNNuByGASBFIPDh5x+4IV6HHoDFYGDJgw+YBoBMBUkgA5BtIKduuvvy//svX+FSB+88wTTAc+/t/83bj/0HScLA5BPXwc7lKJ36f+L6XXDxhUfOYxrAPWUnWKFp9UQUm3iWQxSDXAEDSX3zcIcB96wD/x+8eA1XDNKMHAYg20GW4Y0FkCIYAAUqzEBQOIBciRzlWKMxZelOlMCEcVxq+jHSC1YDJPs3YBgA8jey0/F6ARRwsFAHORukmat9NdbUijMpg/wKcrJodDFOzSBXwA3Alh9AToZFI7a8Asu98BxJbnYGAJb5vYLDANzSAAAAAElFTkSuQmCC') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.SoundCloud {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABsklEQVQ4y5WTy2pUQRCGv2rbzDjJeAlIBmOyipGIIJqFEBDElwh4yULGeRFXPoEIBl/AvQ/gC2RnxCAoxijiwks852S6+3dxzslcHJCpTXVX11/Xv0097gLPgVNMJxnQNfX4zsqleWbnpoMf/oa9d988MM9MC/rp+E0a+A0dsVobMNMCOO8B6McRoABJI+A6gJmN3D2A8jgEBCEkSEMBrcrsDAzDWWn3AjgKFaDMmgRqniGFgsaDp1jrLOngDf1XT1D+A1dFc4MKAkkiCVKjjVu7g9+4Rzx4i1u6hjXbuMWr0O5QPNvCu7IaCZwEKQukLGDrm5x8uI0tr6MkiGlkiv7yLfzN+6S5i6QsIMABkEfcxhbWWYMkVAOjxvYAjc3HNHrbKI9VBQBFwF25XQKSBjqIf1YBuAurEMrczgDygD6/x2LCpFLXLUyQ+PoldphhBhYfIX09XU1+Flaukz7uYqs3SHs7cG4BmTsmkBUF9mmXEwa28BNLPaQPLepuNcbGSWQquQC2/Kdcox1FUGkcB0ykck1nA2+wTzMs8stGnP4rbWGw74EuS/GFQWfK7/wF6P4F7fzIAYkdmdEAAAAASUVORK5CYII=') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.audio {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAitJREFUOE9jYCAWKJWwavr0KyXWb/FIbDtUFFyzJx6nVofE2Xo5nXsj0rqPNSR0nVkR2Hjmgmfd+U9Otdf+m5Vf/6+SfeU/R9ChVVgNYDRtlfJuuPA/rPfe/4QpD/6nznj0P27Kw/9unff/69Xf+69c/+C/SO7N/0z+OAxgMmmRCe++/r9i3ev/KWvf/vdY8PK/bt/9/wrNV3/IN5y/IVt1YqNg4pGTTP4HsbuA2bhZ2qvpyn+xjIObxAp3VwqlrgngLFyryVy5nhPmZJHANS2cwYexG8BmVC/pWn3hP4NZlzWuQDJI3dIiFnUUuwEsQAOcq87jNcC7fHeLUtJxHF4AGmBWeAavAWH1+1rUUk7giAWjOknllON4DXAs2NEiG4/DBQxAF/CFHfrPYI4jDFSLuJVjNrUJhB/B7gIGo1pJRt99GAZYJK7wLJ1z7Xzl4vu/7aqv/GRBj0bjqAX2qb0nJ7mXH17C4HcUxQA+hymWtSue/C5a9up/9Ozn/7Vr7v1nRY7GqMb91T3b3v6vWvPmf/S0p/9ZQk+DDLCBRSOz06Jqk+o7/21nvfqvsebDf7kZL/5zBaxphkezd+OFn7HzXvz3Wvjmv9a8N//5Ek//ZTBpVYUrMG2X5wjcdl68+uI/wa5Lr3hSNjczGFeywOVZ/bbcVGp//F9izfv/Ql03f3P4LC/HSEQquYwMFnUCDJ7dzBhyjGZNQpye89M5gpfnMvtNUyE2h4PUAQBovvT7lyNljwAAAABJRU5ErkJggg==') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.LiveLeak {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAydJREFUOE9Nk1tIk2EYx79NyUNqTk0o6KYrnZeChodLDxfeZpCbJk4RXU5Nm7tYRYhiYXbQlaeGutyW2gxtpB1RIyKDEjKwA6Ti2dR5KNDn+fq/S6TBj/f93r3P732e53s/qfnkSdej4GB2SBLbwf+jmB+gUMgOheLg/z7EdCUnO6Ref392SpK8Hyh3I+gBwBo7lUp2xcbyQEoKD6alyQOpqd754/h4FjJXZCRJTl9ftmEzoK5/wdQJxPgkLY2WV1dpc2uLtnZ2eHNnhza3t2nd46GhjAzuValY6jx0iIfS03msoIDuQ9COQCtoUSjohU5HuwgaN5loeXycd3d3aW9vzwvW2K5SkdTi58fvzGb+3tdHFggA3QONEAzn59PvjQ1yqNX0zenkvX0B4ffWaGRraChJd/385JGqKvlzTw/fRqOaIGkEd1DjU52O/3g83BkTw5MOh7yJuUCUM2o0yi2hoSw1IIOhykr+YLNRHYKu4XQvyKA/N5c8yMCCDD7Z7bz26xcJ1rH2rKKCG0UJdRAMlJbyG6uVrkJQjWAB5tSbk0Nr2HwDgvcQiIYur6zQyvo6ucvLueHIEZKuQPBQr+dXra1kRuqXEOwFArtWSytra1QdFUVjNhvPLS3R3OIiLUDUD0F1WBhJJtwDW2Ehu5uaqBICI4IFlRB0QLCEzaboaHrd0cHzCBYsIIuesjK+LAQXkEFrXh676uupGCWcR6AeghLQptGQONUAwfOuLp6Zn6eZuTmaXVig7pISrhI90ENgQbdHhoep32JhFzLpu3WLio8epUYIfs7OUjF6UKJW88XERLqYkEBNej11oG8XhCAvMFAuOn5cNiclsTkhQTbhmpri4lgbEMANWi1DwC/xit3t7bK7rY0Fo4OD3G4wyEURESzloAdnceezlErK8vH5N4KzPj50PTOTfkxP0+THj/RlYoInJyZI8HVqim5qNFwQHk7SucBAPo2PKRMNPLM/4pnFszYkhJsNBu6uqWFHba1sr61lQSveQFZQkFx07BhJmhMnrLn4NLMPH/aSExR0QDbmWhwgyEapwDvXoDxdWBiXnjrV/Bdm2kYUxLwmEgAAAABJRU5ErkJggg==') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.Vocaroo {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAw9JREFUOE9jYMABuMwYmCyTJKUCGlSnFSy02TTzeOyCiQcDViX26qVz2TAyYtWmEMwuoZ3M7V40LcB79pHkc0svpvzY8jD//87nxf+3Pyn8v/ZO8v+VNyP/2mZJumI1QCWSI8232Hjumitlfw5+qPp/9l8TCt76JP//xkdx/wsXWCzjtWFkwTCkbWFe9plPk/+ga4Txz/xt/D/hkN//gMXif21a+NbyWjIwoRiy6GDT5rP/mlFsPfyp5n/NpOj/22+0gMUXXIz/H7hC/L/bFKFbPDZMrHAD5H35OPt2J9zacDv/f3V7xv9FhwrBGubsT/1//Pjx/1GJ/mD+/nfl/1v3Ovy3KRJNQbHdOlXCvOO03/+pm1P/v3v37n90hhtYw9HPtf8Xb2v937cmHswHeWPRxYj/LvkK3igGKARwicTO07118H3V/5kbi/4vPZMJtK3s/6YH2f+Pfq1B8VbjWrdnMu5s4nAD9CNFhKwz5DTUvLl419zKvAcLtG1P84BRl/b/5M/6/6f/NPzf/qzo84yj0Uus0xUU4Zor54bm9+4OfZG02OCuoAMTb9ZkC9ull1Nvrr2Z+XvRpaRfc65H/68F+jl9svEhzyLFWoccWVc+eyTHq/twydjlKRln7jX9bNMkMJnbhoFRL1xCqmKx6/yi2fYXa/c5/e846PV/5fW0/7OPx/yfcjzop34ulxdGGvDuU8mMXaX507lBuiN6ueadmQeT/p/93vf/1O+G//sP5fw/eL3o/5JLif8zVxs+Tlir9S26UyeFQQvJGBE7FvaFZ9LfN+1y+WjbItSb3GmXvXd15v8zroH/HxgE/D+aGPx/18vi/z07PeZNPRKxe/Kh0Ae8toxscCO4zBkYXArk9C1SxJUYjBkYPPIVtbbuTftz3cz//2O9wP/75iSAXdO72/dt2HL5F6YlfBW4MiJYXMiBiW3t7azHBx+V/t89N+H/8a+1//e9K/9attDp5LQjYX8SuvVL8RoAkmxa65299Erq1FnHo0qrl7t4BddriIs4MrM3rfWcFd+pGwVSAwBZ0bKP8yrZPAAAAABJRU5ErkJggg==') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.pastebin {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAtZJREFUOE+NU91LWmEc7sJtQew/2MUY7INg7CLY3W5GMHazyzEQo9UmfYxZTbAiVlgRqLMSZ+XnDC3z2+Y0+8JGakKZTtR0Tl2wtgtLLQh29cz3ZZ3h3Q68vOc95zzP73l+z+/U1f292O09DRxubxOH23P//1bvtQts3dPnry7LZnXJhcUl5Avf8dHtwY+fv2AyW5DOfIXFakMm+w0G4wISyRRm55TQG0y/Wzv6mikJ52Xf9TmVBoFAAD6fDwqFAqFQCJubmzCbzZiensbp6SmkUikikQi0Wi0kEgm6ewVaStDCfXPDandifn6egoaGhrCzswO1Wg2Hw4HBwUGk02kIBAL4/X4IhUJMTk6ii8dfYggy2RwymQzOz88Rj8dRLpexv7+PSqWCYDCIQqGAra0tJBIJrK2t0XdVAjNDEIl+wfj4OEqlEq2wt7dHrchkMmrBYDCAz+fTIjweD7FYrJbgIJOlgLOzM8jlcip1eXmZ2rFarVAqlRCLxcjlchCJRFRljYJYPAG32418Pg+n04lsNouVlRUcHh7C4/FQIOlHNBqlezgcJgQWxkIgGMbExASVNjY2hvX1dVo9mUzS5wREFLhcLrqTcw2B//M2RkdHodPp4PV6oVKpqH+SCom3v7+fNnF4eJiJusbCJ6+PviSyScakiaR5RIHRaKQpmEwmbAdCeD8zB6vdhebHT8SMhcUlC83bbrdTJRsbG3RwiCVCRNJJpDIoVeNNJJJQzKryV+rrmxiCtyNCCmaz2VhdXQWXy6XDpNfrodFoYLXZUTw+pk222Z3lW3ca26rgSwzBwqIZAwMDlITMAVEwNTVFR5fEJpK8Qyp1AJvDVbrTeLenCmxgfiZ22+urCtWHyu7uLp2wVCpFKx0dHaFYLOLk5KT6Y9kgk89kb95ubK0BX7A8a+1qannRLeW0daj/rU51S3tn9dypfvDw0QiLxbpX/Z7FVK7e/AEj4Wf24/2f5AAAAABJRU5ErkJggg==') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.gist {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAk1JREFUeNqUkzuIE1EUhv955MnsbB6r4kYQLUQQFncV3SnCIqJsoWGDYOGjsIiCtY2Kla1sjLBIsFFcXJC1kaSwENQmXUQSRSUSjCQSTCbkbR4z47lXEgtBNwcu3DNzvvO8R8jlcj7LshKmaWqYQERRTAmCcEru9/sJr9er0QF92BJMAVGr1TQ6CeZAc7lcGAwGkyQAxpTLZU0eDoc8crfbRTgcRjAYRCQSYSmi1WpxY7fbjU6ng1gshmaziXg8zhnGIpVKWbquW9ls1mLZsaMoiqWq6lgnBxY55He/328Vi0XOMFZmqVMD4fF4QBAajcY48khY9JE4HA4enTGMFVkaTHmy+ZzD/5NSqYSNB484w1h55ODO3TVu4FXcWDywl24Cmp0e1WBhyuWELAtIf/qKUrWOONmev3Lpt4NRCXq1gplpBS/v3cDc0nGg9h1o1ZkfwO4Atu1B8cM7HLt8k37V/y5B2b4bJxf2Y+7oEbyJrkMvUjki0YYJ03LidfQxAt4dOHdCw5RdGZcgGobBlQtnV/BDr1GfDai7ZiHZZRi9PoY/e5SCCTUwC9gk1GmMh5YWOcNYkR4Sv1y9uAJbYB82N57h4OnDmN7phjQ0qUkWRJuB+TMaPn/5iFfvv+Ha7eucYey4iWw8q6tRJJNJ3Fp7ClUawEkViBTfkCR0YUNTVHD/4Tpm/P4/U2CeKpUKfD4fJDIMhUKEhP45St50XedZyLQY6Xw+v8AUemVb2oNqtYpCocCWKi2TLLfb7ReZTGZ+kmUi7i2VvfxLgAEAZChMriPcl+IAAAAASUVORK5CYII=') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.image {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAs5JREFUOE+lk/tvi1EYx98/xT8gW4REIpGFMEQWl2FiM9ZMZhm2xRAyOsmujFFmdFRHu0tWm87UypxStr69zPauN5e5rHVp3IYhbOvHy+wHEQlxkm+ek+d8nm9OznkeSfrfldmgJC7QyUlTymsJTfuTZ25z4HdWYwyLreYhtpgekGPw0+kKvo1Eo+IXRSIiEhkWZuc9tqnsJD9EqTUopCxjSGTpB0iueczSo1HyW8cpsExQ1DbxI2pt45j9cXpexul4FEd79RnZphAa/SD7WvuFtO6UItbU9LC+YQxNI2w0wwYT5LRAdhOU3oBTIXC9gXP3oUSGgz2vST3gYHejR0jptT1C332f8yrUEYHrz8CgxDnpm6DKCUfc0KnmXa/AEVPPwnDcD0cvetA2uYRk67Ive/lpjO7YBO1PPuF8Df3vwf4cbNE4tqdw7YVq8HYyHx6FvhE1hkMEg8HDUqvFkjT4aIjMqkqyqkswDSrcfBfH+Q561YLAZ/B+BLda6FXlU/cPv0AoEPhuoP1h4Av7Wbh9E/Py15NWWUjeSR3nZDfeN+N0DY9hG/7K1eGP3P0S5/EYRFUF/IOTBrUXHPm9fT6mr1xEwupkZqxbzLyiDJYUZ5NSnkdqdSHpxyrYdFpPgdmAsdfJwPMI/Yr65bf7tZLGGBQ7DNdJWFtIYvoOZmbuZE7OXpIKKli86zAr9p9gTVktWTVnKTI2U95uRWe3U2IJUDbVB5p6hVm5x5m9Vc/cnedZUNzC8lILaQesZBy6hEZ3maKzgvJWFzVWD9XtXvVGQbSWASFtMATVRlJIKbOTWtlJXaeXepuPM1f6MNp9GLt8mLvvYLmp0OhQ2Fwvk6m7xaqDTvY0eYWUVtcnllXfYlGpnfklVuraHHg8HjxuN+6fktUHlWWZPaZeUo/ILK0UKttBcbNbSB9GP0yLxWJJUxoZGUn80zD9C/vXQ/4NHY10h3M1zmQAAAAASUVORK5CYII=') center left no-repeat!important;\npadding-left: 18px;\n}\n.linkify.InstallGentoo {\nbackground: transparent url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAklJREFUOE9jYEAAASBTCorZkcSRmTjVCDLziCwG4hfM3EIvGNm44oC6WNEM4WXi5FsEkmfhFX3BxMmfAJSHW9Qr55Px3aZp3X/btq3/hQydPzKysMcCFbBBDeFj4uBdqBJR/gskb1W34j+PmulLoJwbzBJJoMm7dNO7/ntMP/XfpW/v//SKvk+7tl7fvXfTpx5pCdWVSiHFv1wnHQbLi9sE/Wdk5SwBauaCGQB3gUPb5v+7Lr/8/+fvr/9fv/z+f+Pyr/9bV735l9Wy/79Dx/b/Nk0bsLoAHgbeAVHv/v77/f8f0IB7N7+cu3DuecK54z9+7lzz639e9pK/7HwSWMMA5BJwCJeXtOm/fvVj1fcfv369f//92cN7X6ZcPvf9x6Htv//vXP3r/+T245UEYgpskPTNq08LgN749/PH7/93rv/6f/rw7//nj//4f+bU0zQcUQwWBkdVbGz62y+fv3wHeeXrlz//H9798//qpY//M3KqfzGxc8djiWKwZnBUuWQ2/fr46fv/P39+///x/ff/d69//z97+s7fyMb5/+y7d2GLYriDZikFF/1qXXXj/4Pbv/8/f/jn/5MH316/eP6jVlBAaIt6VO1/jxmn/zv27P7Pp2HxEajLD90ra9Sj6/979O37X73w0n+vqOL/0lJyMVBFq0EGgDSD0oKAlu1/oHg4ugGzVCKqfouYuL1Xj676Iajr8AnJFricGqYc3Bw+Zi6BVUxsXLHAdL6QiYMPFNrwpIxHDsUhgtAMAopKDjQn4pPDF7P45QC4hSmc1eX8WgAAAABJRU5ErkJggg==') center left no-repeat!important;\npadding-left: 18px;\n}\n\n/* General */\n:root.yotsuba .dialog {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.yotsuba .field:focus {\nborder-color: #EA8;\n}\n\n/* Header */\n:root.yotsuba #header-bar, :root.yotsuba #notifications {\nfont-size: 9pt;\ncolor: #B86;\n}\n:root.yotsuba #header-bar a, :root.yotsuba #notifications a {\ncolor: #800000;\n}\n\n/* Settings */\n:root.yotsuba #fourchanx-settings fieldset {\nborder-color: #D9BFB7;\n}\n\n/* Quote */\n:root.yotsuba .backlink.deadlink {\ncolor: #00E !important;\n}\n:root.yotsuba .inline {\nborder-color: #D9BFB7;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.yotsuba #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.yotsuba .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.yotsuba #menu {\ncolor: #800000;\n}\n:root.yotsuba .entry {\nborder-bottom: 1px solid #D9BFB7;\nfont-size: 10pt;\n}\n:root.yotsuba .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* Watcher Favicon */\n:root.yotsuba .watch-thread-link\n{\nbackground-image: url(\"data:image/svg+xml, \");\n}\n\n/* General */\n:root.yotsuba-b .dialog {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.yotsuba-b .field:focus {\nborder-color: #98E;\n}\n\n/* Header */\n:root.yotsuba-b #header-bar, :root.yotsuba-b #notifications {\nfont-size: 9pt;\ncolor: #89A;\n}\n:root.yotsuba-b #header-bar a, :root.yotsuba-b #notifications a {\ncolor: #34345C;\n}\n\n/* Settings */\n:root.yotsuba-b #fourchanx-settings fieldset {\nborder-color: #B7C5D9;\n}\n\n/* Quote */\n:root.yotsuba-b .backlink.deadlink {\ncolor: #34345C !important;\n}\n:root.yotsuba-b .inline {\nborder-color: #B7C5D9;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.yotsuba-b #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.yotsuba-b .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.yotsuba-b #menu {\ncolor: #000;\n}\n:root.yotsuba-b .entry {\nborder-bottom: 1px solid #B7C5D9;\nfont-size: 10pt;\n}\n:root.yotsuba-b .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* Watcher Favicon */\n:root.yotsuba-b .watch-thread-link\n{\nbackground-image: url(\"data:image/svg+xml, \");\n}\n\n/* General */\n:root.futaba .dialog {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.futaba .field:focus {\nborder-color: #EA8;\n}\n\n/* Header */\n:root.futaba #header-bar, :root.futaba #notifications {\nfont-size: 11pt;\ncolor: #B86;\n}\n:root.futaba #header-bar a, :root.futaba #notifications a {\ncolor: #800000;\n}\n\n/* Settings */\n:root.futaba #fourchanx-settings fieldset {\nborder-color: #D9BFB7;\n}\n\n/* Quote */\n:root.futaba .backlink.deadlink {\ncolor: #00E !important;\n}\n:root.futaba .inline {\nborder-color: #D9BFB7;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.futaba #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #F0E0D6;\nborder-color: #D9BFB7;\n}\n:root.futaba .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.futaba #menu {\ncolor: #800000;\n}\n:root.futaba .entry {\nborder-bottom: 1px solid #D9BFB7;\nfont-size: 12pt;\n}\n:root.futaba .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* Watcher Favicon */\n:root.futaba .watch-thread-link\n{\nbackground-image: url(\"data:image/svg+xml, \");\n}\n\n/* General */\n:root.burichan .dialog {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.burichan .field:focus {\nborder-color: #98E;\n}\n\n/* Header */\n:root.burichan #header-bar, :root.burichan #header-bar #notifications {\nfont-size: 11pt;\ncolor: #89A;\n}\n:root.burichan #header-bar a, :root.burichan #header-bar #notifications a {\ncolor: #34345C;\n}\n\n/* Settings */\n:root.burichan #fourchanx-settings fieldset {\nborder-color: #B7C5D9;\n}\n\n/* Quote */\n:root.burichan .backlink.deadlink {\ncolor: #34345C !important;\n}\n:root.burichan .inline {\nborder-color: #B7C5D9;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.burichan #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #D6DAF0;\nborder-color: #B7C5D9;\n}\n:root.burichan .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.burichan #menu {\ncolor: #000000;\n}\n:root.burichan .entry {\nborder-bottom: 1px solid #B7C5D9;\nfont-size: 12pt;\n}\n:root.burichan .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* Watcher Favicon */\n:root.burichan .watch-thread-link\n{\nbackground-image: url(\"data:image/svg+xml, \");\n}\n\n/* General */\n:root.tomorrow .dialog {\nbackground-color: #282A2E;\nborder-color: #111;\n}\n\n/* Header */\n:root.tomorrow #header-bar, :root.tomorrow #notifications {\nfont-size: 9pt;\ncolor: #C5C8C6;\n}\n:root.tomorrow #header-bar a, :root.tomorrow #notifications a {\ncolor: #81A2BE;\n}\n\n/* Settings */\n:root.tomorrow #fourchanx-settings fieldset {\nborder-color: #111;\n}\n\n/* Quote */\n:root.tomorrow .backlink.deadlink {\ncolor: #81A2BE !important;\n}\n:root.tomorrow .inline {\nborder-color: #111;\nbackground-color: rgba(0, 0, 0, .14);\n}\n\n/* QR */\n.tomorrow #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #282A2E;\nborder-color: #111;\n}\n:root.tomorrow .qr-preview {\nbackground-color: rgba(255, 255, 255, .15);\n}\n:root.tomorrow #qr .field {\nbackground-color: rgb(26, 27, 29);\ncolor: rgb(197,200,198);\nborder-color: rgb(40, 41, 42);\n}\n:root.tomorrow #qr .field:focus {\nborder-color: rgb(129, 162, 190) !important;\nbackground-color: rgb(30,32,36);\n}\n\n/* Menu */\n:root.tomorrow #menu {\ncolor: #C5C8C6;\n}\n:root.tomorrow .entry {\nborder-bottom: 1px solid #111;\nfont-size: 10pt;\n}\n:root.tomorrow .focused.entry {\nbackground: rgba(0, 0, 0, .33);\n}\n\n/* Watcher Favicon */\n:root.tomorrow .watch-thread-link\n{\nbackground-image: url(\"data:image/svg+xml, \");\n}\n\n/* General */\n:root.photon .dialog {\nbackground-color: #DDD;\nborder-color: #CCC;\n}\n:root.photon .field:focus {\nborder-color: #EA8;\n}\n\n/* Header */\n:root.photon #header-bar, :root.photon #notifications {\nfont-size: 9pt;\ncolor: #333;\n}\n:root.photon #header-bar a, :root.photon #notifications a {\ncolor: #FF6600;\n}\n\n/* Settings */\n:root.photon #fourchanx-settings fieldset {\nborder-color: #CCC;\n}\n\n/* Quote */\n:root.photon .backlink.deadlink {\ncolor: #F60 !important;\n}\n:root.photon .inline {\nborder-color: #CCC;\nbackground-color: rgba(255, 255, 255, .14);\n}\n\n/* QR */\n.photon #dump-list::-webkit-scrollbar-thumb {\nbackground-color: #DDD;\nborder-color: #CCC;\n}\n:root.photon .qr-preview {\nbackground-color: rgba(0, 0, 0, .15);\n}\n\n/* Menu */\n:root.photon #menu {\ncolor: #333;\n}\n:root.photon .entry {\nborder-bottom: 1px solid #CCC;\nfont-size: 10pt;\n}\n:root.photon .focused.entry {\nbackground: rgba(255, 255, 255, .33);\n}\n\n/* Watcher Favicon */\n:root.photon .watch-thread-link\n{\nbackground-image: url(\"data:image/svg+xml, \");\n}\n"
};
Main.init();
diff --git a/builds/appchan-x.user.js b/builds/appchan-x.user.js
index ce9a765c5..c06d60c28 100644
--- a/builds/appchan-x.user.js
+++ b/builds/appchan-x.user.js
@@ -137,7 +137,6 @@
'Index Navigation': [false, 'Add buttons to navigate between threads.'],
'Reply Navigation': [false, 'Add buttons to navigate to top / bottom of thread.'],
'Show Dice Roll': [true, 'Show dice that were entered into the email field.'],
- 'Check for Updates': [true, 'Check for updated versions of appchan x.'],
'Color User IDs': [false, 'Assign unique colors to user IDs on boards that use them'],
'Remove Spoilers': [false, 'Remove all spoilers in text.'],
'Reveal Spoilers': [false, 'Indicate spoilers if Remove Spoilers is enabled, or make the text appear hovered if Remove Spoiler is disabled.']
@@ -188,9 +187,7 @@
'Thread Stats': [true, 'Display reply and image count.'],
'Page Count in Stats': [false, 'Display the page count in the thread stats as well.'],
'Updater and Stats in Header': [true, 'Places the thread updater and thread stats in the header instead of floating them.'],
- 'Thread Watcher': [true, 'Bookmark threads.'],
- 'Auto Watch': [true, 'Automatically watch threads you start.'],
- 'Auto Watch Reply': [false, 'Automatically watch threads you reply to.']
+ 'Thread Watcher': [true, 'Bookmark threads.']
},
'Posting': {
'Header Shortcut': [true, 'Add a shortcut to the header to toggle the QR.'],
@@ -327,6 +324,12 @@
'Sage Highlight Position': ['after', 'Position of Sage Highlighting', ['before', 'after']]
}
},
+ threadWatcher: {
+ 'Current Board': [false, 'Only show watched threads from the current board.'],
+ 'Auto Watch': [true, 'Automatically watch threads you start.'],
+ 'Auto Watch Reply': [false, 'Automatically watch threads you reply to.'],
+ 'Auto Prune': [false, 'Automatically prune 404\'d threads.']
+ },
filter: {
name: "# Filter any namefags:\n#/^(?!Anonymous$)/",
uniqueID: "# Filter a specific ID:\n#/Txhvk1Tl/",
@@ -2777,26 +2780,32 @@
}
};
- $.ajax = function(url, options, extra) {
- var form, headers, key, r, sync, type, upCallbacks, val;
+ $.ajax = (function() {
+ var lastModified;
- if (extra == null) {
- extra = {};
- }
- type = extra.type, headers = extra.headers, upCallbacks = extra.upCallbacks, form = extra.form, sync = extra.sync;
- r = new XMLHttpRequest();
- r.overrideMimeType('text/html');
- type || (type = form && 'post' || 'get');
- r.open(type, url, !sync);
- for (key in headers) {
- val = headers[key];
- r.setRequestHeader(key, val);
- }
- $.extend(r, options);
- $.extend(r.upload, upCallbacks);
- r.send(form);
- return r;
- };
+ lastModified = {};
+ return function(url, options, extra) {
+ var form, r, sync, type, upCallbacks, whenModified;
+
+ if (extra == null) {
+ extra = {};
+ }
+ type = extra.type, whenModified = extra.whenModified, upCallbacks = extra.upCallbacks, form = extra.form, sync = extra.sync;
+ r = new XMLHttpRequest();
+ type || (type = form && 'post' || 'get');
+ r.open(type, url, !sync);
+ if (whenModified) {
+ r.setRequestHeader('If-Modified-Since', lastModified[url] || '0');
+ $.on(r, 'load', function() {
+ return lastModified[url] = r.getResponseHeader('Last-Modified');
+ });
+ }
+ $.extend(r, options);
+ $.extend(r.upload, upCallbacks);
+ r.send(form);
+ return r;
+ };
+ })();
$.cache = (function() {
var reqs;
@@ -3564,17 +3573,19 @@
})(Post);
- DataBoards = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts'];
+ DataBoards = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts', 'watchedThreads'];
DataBoard = (function() {
- function DataBoard(key, sync) {
+ function DataBoard(key, sync, dontClean) {
var init,
_this = this;
this.key = key;
this.data = Conf[key];
$.sync(key, this.onSync.bind(this));
- this.clean();
+ if (!dontClean) {
+ this.clean();
+ }
if (!sync) {
return;
}
@@ -3585,6 +3596,10 @@
$.on(d, '4chanXInitFinished', init);
}
+ DataBoard.prototype.save = function() {
+ return $.set(this.key, this.data);
+ };
+
DataBoard.prototype["delete"] = function(_arg) {
var boardID, postID, threadID;
@@ -3603,7 +3618,7 @@
} else {
delete this.data.boards[boardID];
}
- return $.set(this.key, this.data);
+ return this.save();
};
DataBoard.prototype.deleteIfEmpty = function(_arg) {
@@ -3633,7 +3648,7 @@
} else {
this.data.boards[boardID] = val;
}
- return $.set(this.key, this.data);
+ return this.save();
};
DataBoard.prototype.get = function(_arg) {
@@ -3677,7 +3692,7 @@
this.ajaxClean(boardID);
}
}
- return $.set(this.key, this.data);
+ return this.save();
};
DataBoard.prototype.ajaxClean = function(boardID) {
@@ -3707,7 +3722,7 @@
boardID: boardID
});
}
- return $.set(_this.key, _this.data);
+ return _this.save();
});
};
@@ -3768,8 +3783,26 @@
Polyfill = {
init: function() {
+ Polyfill.toBlob();
return Polyfill.visibility();
},
+ toBlob: function() {
+ var _base;
+
+ return (_base = HTMLCanvasElement.prototype).toBlob || (_base.toBlob = function(cb) {
+ var data, i, l, ui8a, _i;
+
+ data = atob(this.toDataURL().slice(22));
+ l = data.length;
+ ui8a = new Uint8Array(l);
+ for (i = _i = 0; 0 <= l ? _i < l : _i > l; i = 0 <= l ? ++_i : --_i) {
+ ui8a[i] = data.charCodeAt(i);
+ }
+ return cb(new Blob([ui8a], {
+ type: 'image/png'
+ }));
+ });
+ },
visibility: function() {
if (!('webkitHidden' in document)) {
return;
@@ -4127,7 +4160,7 @@
date: data.now,
dateUTC: data.time,
comment: data.com,
- capReps: data.capcode_replies,
+ capcodeReplies: data.capcode_replies,
isSticky: !!data.sticky,
isClosed: !!data.closed
};
@@ -4155,9 +4188,9 @@
@license: https://github.com/4chan/4chan-JS/blob/master/LICENSE
*/
- var a, array, boardID, capReps, capcode, capcodeClass, capcodeReplies, capcodeStart, capcodeType, closed, comment, container, date, dateUTC, email, emailEnd, emailStart, ext, file, fileDims, fileHTML, fileInfo, fileSize, fileThumb, filename, flag, flagCode, flagName, generateCapcodeReplies, href, imgSrc, isClosed, isOP, isSticky, name, postID, quote, shortFilename, spoilerRange, staticPath, sticky, subject, threadID, tripcode, uniqueID, userID, _i, _len, _ref;
+ var a, boardID, capcode, capcodeClass, capcodeReplies, capcodeStart, closed, comment, container, date, dateUTC, email, emailEnd, emailStart, ext, file, fileDims, fileHTML, fileInfo, fileSize, fileThumb, filename, flag, flagCode, flagName, href, imgSrc, isClosed, isOP, isSticky, name, postID, quote, shortFilename, spoilerRange, staticPath, sticky, subject, threadID, tripcode, uniqueID, userID, _i, _len, _ref;
- postID = o.postID, threadID = o.threadID, boardID = o.boardID, name = o.name, capcode = o.capcode, tripcode = o.tripcode, uniqueID = o.uniqueID, email = o.email, subject = o.subject, flagCode = o.flagCode, flagName = o.flagName, date = o.date, dateUTC = o.dateUTC, isSticky = o.isSticky, isClosed = o.isClosed, comment = o.comment, capReps = o.capReps, file = o.file;
+ postID = o.postID, threadID = o.threadID, boardID = o.boardID, name = o.name, capcode = o.capcode, tripcode = o.tripcode, uniqueID = o.uniqueID, email = o.email, subject = o.subject, flagCode = o.flagCode, flagName = o.flagName, date = o.date, dateUTC = o.dateUTC, isSticky = o.isSticky, isClosed = o.isClosed, comment = o.comment, capcodeReplies = o.capcodeReplies, file = o.file;
isOP = postID === threadID;
staticPath = '//static.4chan.org/image/';
if (email) {
@@ -4231,32 +4264,10 @@
tripcode = tripcode ? " " + tripcode + " " : '';
sticky = isSticky ? " " : '';
closed = isClosed ? " " : '';
- capcodeReplies = '';
- if (capReps) {
- generateCapcodeReplies = function(capcodeType, array) {
- return "" + ((function() {
- switch (capcodeType) {
- case 'admin':
- return 'Administrator';
- case 'mod':
- return 'Moderator';
- case 'developer':
- return 'Developer';
- }
- })()) + " Repl" + (array.length > 1 ? 'ies' : 'y') + ": " + (array.map(function(ID) {
- return ">>" + ID + " ";
- }).join(' ')) + " ";
- };
- for (capcodeType in capReps) {
- array = capReps[capcodeType];
- capcodeReplies += generateCapcodeReplies(capcodeType, array);
- }
- capcodeReplies = "" + capcodeReplies + " ";
- }
container = $.el('div', {
id: "pc" + postID,
className: "postContainer " + (isOP ? 'op' : 'reply') + "Container",
- innerHTML: "" + (isOP ? '' : ">>
") + "" + (name || '') + " " + (tripcode + capcodeStart + capcode + userID + flag + sticky + closed) + " " + subject + "" + date + "No. " + postID + " " + (isOP ? fileHTML : '') + "
" + subject + "
" + emailStart + "" + (name || '') + " " + (tripcode + capcodeStart + emailEnd + capcode + userID + flag + sticky + closed) + " " + " " + "
" + date + " " + " " + "
No. " + postID + " " + (isOP ? '' : fileHTML) + "
" + (comment || '') + capcodeReplies + " " + " " + "
"
+ innerHTML: "" + (isOP ? '' : ">>
") + "" + (name || '') + " " + (tripcode + capcodeStart + capcode + userID + flag + sticky + closed) + " " + subject + "" + date + "No. " + postID + " " + (isOP ? fileHTML : '') + "
" + subject + "
" + emailStart + "" + (name || '') + " " + (tripcode + capcodeStart + emailEnd + capcode + userID + flag + sticky + closed) + " " + " " + "
" + date + " " + " " + "
No. " + postID + " " + (isOP ? '' : fileHTML) + "
" + (comment || '') + " " + " " + "
"
});
_ref = $$('.quotelink', container);
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
@@ -4267,7 +4278,47 @@
}
quote.href = "/" + boardID + "/res/" + href;
}
+ Build.capcodeReplies({
+ boardID: boardID,
+ threadID: threadID,
+ root: container,
+ capcodeReplies: capcodeReplies
+ });
return container;
+ },
+ capcodeReplies: function(_arg) {
+ var array, boardID, bq, capcodeReplies, capcodeType, generateCapcodeReplies, html, root, threadID;
+
+ boardID = _arg.boardID, threadID = _arg.threadID, bq = _arg.bq, root = _arg.root, capcodeReplies = _arg.capcodeReplies;
+ if (!capcodeReplies) {
+ return;
+ }
+ generateCapcodeReplies = function(capcodeType, array) {
+ return "" + ((function() {
+ switch (capcodeType) {
+ case 'admin':
+ return 'Administrator';
+ case 'mod':
+ return 'Moderator';
+ case 'developer':
+ return 'Developer';
+ }
+ })()) + " Repl" + (array.length > 1 ? 'ies' : 'y') + ": " + (array.map(function(ID) {
+ return ">>" + ID + " ";
+ }).join(' ')) + " ";
+ };
+ html = [];
+ for (capcodeType in capcodeReplies) {
+ array = capcodeReplies[capcodeType];
+ html.push(generateCapcodeReplies(capcodeType, array));
+ }
+ bq || (bq = $('blockquote', root));
+ return $.add(bq, [
+ $.el('br'), $.el('br'), $.el('span', {
+ className: 'capcodeReplies',
+ innerHTML: html.join('')
+ })
+ ]);
}
};
@@ -6674,7 +6725,7 @@
if (g.VIEW === 'catalog' || !Conf['Linkify']) {
return;
}
- this.regString = Conf['Allow False Positives'] ? /(\b([-a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]|[-a-z0-9]+\.[a-z]|[\d]+\.[\d]+\.[\d]+\.[\d]+\/|[a-z]{3,}:[a-z0-9?]|[^\s@]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi : /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi;
+ this.regString = Conf['Allow False Positives'] ? /([-a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]|[-a-z0-9]+\.[a-z]|[\d]+\.[\d]+\.[\d]+\.[\d]+\/|[a-z]{3,}:[a-z0-9?]|[^\s@]+@[a-z0-9.-]+\.[a-z0-9])/i : /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1})/i;
if (Conf['Comment Expansion']) {
ExpandComment.callbacks.push(this.node);
}
@@ -6687,7 +6738,7 @@
});
},
node: function() {
- var data, el, i, items, links, node, range, snapshot, _i, _len, _ref;
+ var data, el, end, endNode, i, index, items, lIndex, length, link, links, node, range, result, saved, snapshot, space, test, text, _i, _len, _ref;
if (this.isClone) {
if (Conf['Embedding']) {
@@ -6702,16 +6753,49 @@
}
return;
}
+ test = /[^\s'"]+/g;
+ space = /[\s'"]/;
snapshot = $.X('.//br|.//text()', this.nodes.comment);
i = 0;
while (node = snapshot.snapshotItem(i++)) {
- if (node.parentElement.nodeName === "A") {
+ links = [];
+ data = node.data;
+ if (node.parentElement.nodeName === "A" || !data) {
continue;
}
- links = [];
- if (Linkify.regString.test(node.data)) {
- Linkify.regString.lastIndex = 0;
- Linkify.gatherLinks(snapshot, this, node, links, i);
+ while (result = test.exec(data)) {
+ index = result.index;
+ endNode = node;
+ if ((length = index + result[0].length) === data.length) {
+ while ((saved = snapshot.snapshotItem(i++))) {
+ if (saved.nodeName === 'BR') {
+ break;
+ }
+ endNode = saved;
+ length = saved.data.length;
+ if (end = space.exec(saved.data)) {
+ length = end.index;
+ i--;
+ break;
+ }
+ }
+ if (length === endNode.data.length) {
+ test.lastIndex = 0;
+ }
+ range = Linkify.makeRange(node, endNode, index, length);
+ if (link = Linkify.regString.exec(text = range.toString())) {
+ if (lIndex = link.index) {
+ range.setStart(node, lIndex + index);
+ }
+ links.push([range, text]);
+ }
+ break;
+ } else {
+ if (link = Linkify.regString.exec(result[0])) {
+ range = Linkify.makeRange(node, node, link.index, link.length);
+ links.push([range, link]);
+ }
+ }
}
_ref = links.reverse();
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
@@ -6735,60 +6819,25 @@
}
}
},
- gatherLinks: function(snapshot, post, node, links, i) {
- var data, index, len, len2, link, match, range;
+ makeRange: function(startNode, endNode, startOffset, endOffset) {
+ var range;
- data = node.data;
- len = data.length;
- while ((match = Linkify.regString.exec(data))) {
- index = match.index;
- link = match[0];
- len2 = index + link.length;
- if (len === len2) {
- break;
- }
- range = document.createRange();
- range.setStart(node, index);
- range.setEnd(node, len2);
- links.push(range);
- }
- Linkify.regString.lastIndex = 0;
- if (match) {
- links.push(Linkify.seek(snapshot, post, node, links, match, i));
- }
- },
- seek: function(snapshot, post, node, links, match, i) {
- var data, index, link, next, range, result;
-
- link = match[0];
range = document.createRange();
- range.setStart(node, match.index);
- while ((next = snapshot.snapshotItem(i++)) && next.nodeName !== 'BR') {
- node = next;
- data = node.data;
- if (result = /[\s'"]/.exec(data)) {
- index = result.index;
- range.setEnd(node, index);
- Linkify.regString.lastIndex = index;
- Linkify.gatherLinks(snapshot, post, node, links, i);
- return range;
- }
- }
- if (range.collapsed) {
- range.setEnd(node, node.data.length);
- }
+ range.setStart(startNode, startOffset);
+ range.setEnd(endNode, endOffset);
return range;
},
- makeLink: function(range) {
- var a, link;
+ makeLink: function(_arg) {
+ var a, range, text;
- link = range.toString();
- link = link.contains(':') ? link : (link.contains('@') ? 'mailto:' : 'http://') + link;
+ range = _arg[0], text = _arg[1];
+ text;
+ text = text.contains(':') ? text : (text.contains('@') ? 'mailto:' : 'http://') + text;
a = $.el('a', {
className: 'linkify',
rel: 'nofollow noreferrer',
target: '_blank',
- href: link
+ href: text
});
$.add(a, range.extractContents());
range.insertNode(a);
@@ -7900,7 +7949,7 @@
img = $.el('img');
img.onload = function() {
- var applyBlob, cv, data, height, i, l, s, ui8a, width, _i;
+ var cv, height, s, width;
s = 90 * 2;
if (_this.file.type === 'image/gif') {
@@ -7924,23 +7973,10 @@
cv.width = img.width = width;
cv.getContext('2d').drawImage(img, 0, 0, width, height);
URL.revokeObjectURL(fileURL);
- applyBlob = function(blob) {
+ return cv.toBlob(function(blob) {
_this.URL = URL.createObjectURL(blob);
return _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")";
- };
- if (cv.toBlob) {
- cv.toBlob(applyBlob);
- return;
- }
- data = atob(cv.toDataURL().split(',')[1]);
- l = data.length;
- ui8a = new Uint8Array(l);
- for (i = _i = 0; 0 <= l ? _i < l : _i > l; i = 0 <= l ? ++_i : --_i) {
- ui8a[i] = data.charCodeAt(i);
- }
- return applyBlob(new Blob([ui8a], {
- type: 'image/png'
- }));
+ });
};
fileURL = URL.createObjectURL(this.file);
return img.src = fileURL;
@@ -8843,7 +8879,7 @@
},
menu: {
init: function() {
- var conf, createSubEntry, el, key, subEntries, _ref;
+ var conf, createSubEntry, el, name, subEntries, _ref;
if (g.VIEW === 'catalog' || !Conf['Image Expansion']) {
return;
@@ -8855,9 +8891,9 @@
createSubEntry = ImageExpand.menu.createSubEntry;
subEntries = [];
_ref = Config.imageExpansion;
- for (key in _ref) {
- conf = _ref[key];
- subEntries.push(createSubEntry(key, conf));
+ for (name in _ref) {
+ conf = _ref[name];
+ subEntries.push(createSubEntry(name, conf[1]));
}
return $.event('AddMenuEntry', {
type: 'header',
@@ -8866,22 +8902,20 @@
subEntries: subEntries
});
},
- createSubEntry: function(type, config) {
+ createSubEntry: function(name, desc) {
var input, label;
label = $.el('label', {
- innerHTML: " " + type
+ innerHTML: " " + name,
+ title: desc
});
input = label.firstElementChild;
- if (type === 'Fit width' || type === 'Fit height') {
+ if (name === 'Fit width' || name === 'Fit height') {
$.on(input, 'change', ImageExpand.cb.setFitness);
}
- if (config) {
- label.title = config[1];
- input.checked = Conf[type];
- $.event('change', null, input);
- $.on(input, 'change', $.cb.checked);
- }
+ input.checked = Conf[name];
+ $.event('change', null, input);
+ $.on(input, 'change', $.cb.checked);
return {
el: label
};
@@ -9573,7 +9607,6 @@
this.postCountEl = $('#post-count', sc);
this.fileCountEl = $('#file-count', sc);
this.pageCountEl = $('#page-count', sc);
- this.lastModified = '0';
return Thread.prototype.callbacks.push({
name: 'Thread Stats',
cb: this.node
@@ -9628,19 +9661,13 @@
return $.ajax("//api.4chan.org/" + ThreadStats.thread.board + "/threads.json", {
onload: ThreadStats.onThreadsLoad
}, {
- headers: {
- 'If-Modified-Since': ThreadStats.lastModified
- }
+ whenModified: true
});
},
onThreadsLoad: function() {
var page, pages, thread, _i, _j, _len, _len1, _ref;
- if (!Conf["Page Count in Stats"]) {
- return;
- }
- ThreadStats.lastModified = this.getResponseHeader('Last-Modified');
- if (this.status !== 200) {
+ if (!(Conf["Page Count in Stats"] && this.status === 200)) {
return;
}
pages = JSON.parse(this.response);
@@ -9735,7 +9762,6 @@
ThreadUpdater.root = this.OP.nodes.root.parentNode;
ThreadUpdater.lastPost = +ThreadUpdater.root.lastElementChild.id.match(/\d+/)[0];
ThreadUpdater.outdateCount = 0;
- ThreadUpdater.lastModified = '0';
ThreadUpdater.cb.interval.call($.el('input', {
value: Conf['Interval']
}));
@@ -9831,10 +9857,7 @@
case 200:
g.DEAD = false;
ThreadUpdater.parse(JSON.parse(req.response).posts);
- ThreadUpdater.lastModified = req.getResponseHeader('Last-Modified');
- if (Conf['Auto Update']) {
- ThreadUpdater.set('timer', ThreadUpdater.getInterval());
- }
+ ThreadUpdater.set('timer', ThreadUpdater.getInterval());
break;
case 404:
g.DEAD = true;
@@ -9848,16 +9871,8 @@
});
break;
default:
- if (Conf['Auto Update']) {
- ThreadUpdater.outdateCount++;
- ThreadUpdater.set('timer', ThreadUpdater.getInterval());
- }
- /*
- Status Code 304: Not modified
- By sending the `If-Modified-Since` header we get a proper status code, and no response.
- This saves bandwidth for both the user and the servers and avoid unnecessary computation.
- */
-
+ ThreadUpdater.outdateCount++;
+ ThreadUpdater.set('timer', ThreadUpdater.getInterval());
_ref = req.status === 304 ? [null, null] : ["" + req.statusText + " (" + req.status + ")", 'warning'], text = _ref[0], klass = _ref[1];
ThreadUpdater.set('status', text, klass);
}
@@ -9930,9 +9945,7 @@
return ThreadUpdater.req = $.ajax(url, {
onloadend: ThreadUpdater.cb.load
}, {
- headers: {
- 'If-Modified-Since': ThreadUpdater.lastModified
- }
+ whenModified: true
});
},
updateThreadStatus: function(title, OP) {
@@ -10070,15 +10083,46 @@
ThreadWatcher = {
init: function() {
+ var now;
+
if (!Conf['Thread Watcher']) {
return;
}
- this.dialog = UI.dialog('watcher', 'top: 50px; left: 0px;', 'Thread Watcher
');
+ this.db = new DataBoard('watchedThreads', this.refresh, true);
+ this.dialog = UI.dialog('thread-watcher', 'top: 50px; left: 0px;', "Thread Watcher
");
+ this.status = $('#watcher-status', this.dialog);
+ this.list = this.dialog.lastElementChild;
$.on(d, 'QRPostSuccessful', this.cb.post);
- $.sync('WatchedThreads', this.refresh);
- $.ready(function() {
- ThreadWatcher.refresh();
- return $.add(d.body, ThreadWatcher.dialog);
+ if (g.VIEW === 'thread') {
+ $.on(d, 'ThreadUpdate', this.cb.threadUpdate);
+ }
+ $.on(d, '4chanXInitFinished', this.ready);
+ now = Date.now();
+ if ((this.db.data.lastChecked || 0) < now - 2 * $.HOUR) {
+ this.db.data.lastChecked = now;
+ ThreadWatcher.fetchAllStatus();
+ this.db.save();
+ }
+ $.get('WatchedThreads', null, function(_arg) {
+ var WatchedThreads, boardID, data, threadID, threads, _ref;
+
+ WatchedThreads = _arg.WatchedThreads;
+ if (!WatchedThreads) {
+ return;
+ }
+ _ref = ThreadWatcher.convert(WatchedThreads);
+ for (boardID in _ref) {
+ threads = _ref[boardID];
+ for (threadID in threads) {
+ data = threads[threadID];
+ ThreadWatcher.db.set({
+ boardID: boardID,
+ threadID: threadID,
+ val: data
+ });
+ }
+ }
+ return $["delete"]('WatchedThreads');
});
return Thread.prototype.callbacks.push({
name: 'Thread Watcher',
@@ -10086,76 +10130,84 @@
});
},
node: function() {
- var favicon,
- _this = this;
+ var toggler;
- favicon = $.el('a', {
- className: 'watch-thread-link',
- href: 'javascript:;'
+ toggler = $.el('img', {
+ className: 'watcher-toggler'
});
- $.on(favicon, 'click', ThreadWatcher.cb.toggle);
- $.before($('input', this.OP.nodes.post), favicon);
- if (g.VIEW !== 'thread') {
+ $.on(toggler, 'click', ThreadWatcher.cb.toggle);
+ return $.before($('input', this.OP.nodes.post), toggler);
+ },
+ ready: function() {
+ $.off(d, '4chanXInitFinished', ThreadWatcher.ready);
+ if (!Main.isThisPageLegit()) {
return;
}
- return $.get('AutoWatch', 0, function(item) {
- if (item['AutoWatch'] !== _this.ID) {
+ ThreadWatcher.refresh();
+ $.add(d.body, ThreadWatcher.dialog);
+ if (!Conf['Auto Watch']) {
+ return;
+ }
+ return $.get('AutoWatch', 0, function(_arg) {
+ var AutoWatch, thread;
+
+ AutoWatch = _arg.AutoWatch;
+ if (!(thread = g.BOARD.threads[AutoWatch])) {
return;
}
- ThreadWatcher.watch(_this);
+ ThreadWatcher.add(thread);
return $["delete"]('AutoWatch');
});
},
- refresh: function(watched) {
- var ID, board, div, favicon, id, link, nodes, props, thread, x, _ref, _ref1;
-
- if (!watched) {
- $.get('WatchedThreads', {}, function(item) {
- return ThreadWatcher.refresh(item['WatchedThreads']);
- });
- return;
- }
- nodes = [$('.move', ThreadWatcher.dialog)];
- for (board in watched) {
- _ref = watched[board];
- for (id in _ref) {
- props = _ref[id];
- x = $.el('a', {
- textContent: '✖',
- className: 'close',
- href: 'javascript:;'
- });
- $.on(x, 'click', ThreadWatcher.cb.x);
- link = $.el('a', props);
- link.title = link.textContent;
- div = $.el('div');
- $.add(div, [x, $.tn(' '), link]);
- nodes.push(div);
- }
- }
- $.rmAll(ThreadWatcher.dialog);
- $.add(ThreadWatcher.dialog, nodes);
- watched = watched[g.BOARD] || {};
- _ref1 = g.BOARD.threads;
- for (ID in _ref1) {
- thread = _ref1[ID];
- favicon = $('.watch-thread-link', thread.OP.nodes.post);
- if (ID in watched) {
- $.addClass(favicon, 'watched');
- } else {
- $.rmClass(favicon, 'watched');
- }
- }
- },
cb: {
+ openAll: function() {
+ var a, _i, _len, _ref;
+
+ if ($.hasClass(this, 'disabled')) {
+ return;
+ }
+ _ref = $$('a[title]', ThreadWatcher.list);
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ a = _ref[_i];
+ $.open(a.href);
+ }
+ return $.event('CloseMenu');
+ },
+ checkThreads: function() {
+ if ($.hasClass(this, 'disabled')) {
+ return;
+ }
+ return ThreadWatcher.fetchAllStatus();
+ },
+ pruneDeads: function() {
+ var boardID, data, threadID, _i, _len, _ref, _ref1;
+
+ if ($.hasClass(this, 'disabled')) {
+ return;
+ }
+ _ref = ThreadWatcher.getAll();
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ _ref1 = _ref[_i], boardID = _ref1.boardID, threadID = _ref1.threadID, data = _ref1.data;
+ if (!data.isDead) {
+ continue;
+ }
+ delete ThreadWatcher.db.data.boards[boardID][threadID];
+ ThreadWatcher.db.deleteIfEmpty({
+ boardID: boardID
+ });
+ }
+ ThreadWatcher.db.save();
+ ThreadWatcher.refresh();
+ return $.event('CloseMenu');
+ },
toggle: function() {
return ThreadWatcher.toggle(Get.postFromNode(this).thread);
},
- x: function() {
- var thread;
+ rm: function() {
+ var boardID, threadID, _ref;
- thread = this.nextElementSibling.pathname.split('/');
- return ThreadWatcher.unwatch(thread[1], thread[3]);
+ _ref = this.parentNode.dataset.fullID.split('.'), boardID = _ref[0], threadID = _ref[1];
+ return ThreadWatcher.rm(boardID, +threadID);
},
post: function(e) {
var board, postID, threadID, _ref;
@@ -10166,43 +10218,346 @@
return $.set('AutoWatch', threadID);
}
} else if (Conf['Auto Watch Reply']) {
- return ThreadWatcher.watch(board.threads[threadID]);
+ return ThreadWatcher.add(board.threads[threadID]);
}
+ },
+ threadUpdate: function(e) {
+ var thread;
+
+ thread = e.detail.thread;
+ if (!(e.detail[404] && ThreadWatcher.db.get({
+ boardID: thread.board.ID,
+ threadID: thread.ID
+ }))) {
+ return;
+ }
+ return ThreadWatcher.add(thread);
+ }
+ },
+ fetchCount: {
+ fetched: 0,
+ fetching: 0
+ },
+ fetchAllStatus: function() {
+ var thread, _i, _len, _ref;
+
+ ThreadWatcher.status.textContent = '...';
+ _ref = ThreadWatcher.getAll();
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ thread = _ref[_i];
+ ThreadWatcher.fetchStatus(thread);
+ }
+ },
+ fetchStatus: function(_arg) {
+ var boardID, data, fetchCount, threadID;
+
+ boardID = _arg.boardID, threadID = _arg.threadID, data = _arg.data;
+ if (data.isDead) {
+ return;
+ }
+ fetchCount = ThreadWatcher.fetchCount;
+ fetchCount.fetching++;
+ return $.ajax("//api.4chan.org/" + boardID + "/res/" + threadID + ".json", {
+ onloadend: function() {
+ var status;
+
+ fetchCount.fetched++;
+ if (fetchCount.fetched === fetchCount.fetching) {
+ fetchCount.fetched = 0;
+ fetchCount.fetching = 0;
+ status = '';
+ } else {
+ status = "" + (Math.round(fetchCount.fetched / fetchCount.fetching * 100)) + "%";
+ }
+ ThreadWatcher.status.textContent = status;
+ if (this.status !== 404) {
+ return;
+ }
+ if (Conf['Auto Prune']) {
+ ThreadWatcher.rm(boardID, threadID);
+ } else {
+ data.isDead = true;
+ ThreadWatcher.db.set({
+ boardID: boardID,
+ threadID: threadID,
+ val: data
+ });
+ }
+ return ThreadWatcher.refresh();
+ }
+ }, {
+ type: 'head'
+ });
+ },
+ getAll: function() {
+ var all, boardID, data, threadID, threads, _ref;
+
+ all = [];
+ _ref = ThreadWatcher.db.data.boards;
+ for (boardID in _ref) {
+ threads = _ref[boardID];
+ if (Conf['Current Board'] && boardID !== g.BOARD.ID) {
+ continue;
+ }
+ for (threadID in threads) {
+ data = threads[threadID];
+ all.push({
+ boardID: boardID,
+ threadID: threadID,
+ data: data
+ });
+ }
+ }
+ return all;
+ },
+ makeLine: function(boardID, threadID, data) {
+ var div, fullID, href, link, x;
+
+ x = $.el('a', {
+ textContent: '✖',
+ href: 'javascript:;'
+ });
+ $.on(x, 'click', ThreadWatcher.cb.rm);
+ if (data.isDead) {
+ href = Redirect.to('thread', {
+ boardID: boardID,
+ threadID: threadID
+ });
+ }
+ link = $.el('a', {
+ href: href || ("/" + boardID + "/res/" + threadID),
+ textContent: data.excerpt,
+ title: data.excerpt
+ });
+ div = $.el('div');
+ fullID = "" + boardID + "." + threadID;
+ div.dataset.fullID = fullID;
+ if (g.VIEW === 'thread' && fullID === ("" + g.BOARD + "." + g.THREADID)) {
+ $.addClass(div, 'current');
+ }
+ if (data.isDead) {
+ $.addClass(div, 'dead-thread');
+ }
+ $.add(div, [x, $.tn(' '), link]);
+ return div;
+ },
+ refresh: function() {
+ var boardID, data, list, nodes, refresher, thread, threadID, toggler, _i, _j, _len, _len1, _ref, _ref1, _ref2, _ref3;
+
+ nodes = [];
+ _ref = ThreadWatcher.getAll();
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ _ref1 = _ref[_i], boardID = _ref1.boardID, threadID = _ref1.threadID, data = _ref1.data;
+ nodes.push(ThreadWatcher.makeLine(boardID, threadID, data));
+ }
+ list = ThreadWatcher.list;
+ $.rmAll(list);
+ $.add(list, nodes);
+ _ref2 = g.BOARD.threads;
+ for (threadID in _ref2) {
+ thread = _ref2[threadID];
+ toggler = $('.watcher-toggler', thread.OP.nodes.post);
+ toggler.src = ThreadWatcher.db.get({
+ boardID: thread.board.ID,
+ threadID: threadID
+ }) ? Favicon["default"] : Favicon.empty;
+ }
+ _ref3 = ThreadWatcher.menu.refreshers;
+ for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
+ refresher = _ref3[_j];
+ refresher();
}
},
toggle: function(thread) {
- if (!$.hasClass($('.watch-thread-link', thread.OP.nodes.post), 'watched')) {
- return ThreadWatcher.watch(thread);
+ var boardID, threadID;
+
+ boardID = thread.board.ID;
+ threadID = thread.ID;
+ if (ThreadWatcher.db.get({
+ boardID: boardID,
+ threadID: threadID
+ })) {
+ return ThreadWatcher.rm(boardID, threadID);
} else {
- return ThreadWatcher.unwatch(thread.board, thread.ID);
+ return ThreadWatcher.add(thread);
}
},
- unwatch: function(board, threadID) {
- return $.get('WatchedThreads', {}, function(item) {
- var watched;
+ add: function(thread) {
+ var boardID, data, threadID;
- watched = item['WatchedThreads'];
- delete watched[board][threadID];
- if (!Object.keys(watched[board]).length) {
- delete watched[board];
+ data = {};
+ boardID = thread.board.ID;
+ threadID = thread.ID;
+ if (thread.isDead) {
+ if (Conf['Auto Prune'] && ThreadWatcher.db.get({
+ boardID: boardID,
+ threadID: threadID
+ })) {
+ ThreadWatcher.rm(boardID, threadID);
+ return;
}
- ThreadWatcher.refresh(watched);
- return $.set('WatchedThreads', watched);
+ data.isDead = true;
+ }
+ data.excerpt = Get.threadExcerpt(thread);
+ ThreadWatcher.db.set({
+ boardID: boardID,
+ threadID: threadID,
+ val: data
});
+ return ThreadWatcher.refresh();
},
- watch: function(thread) {
- return $.get('WatchedThreads', {}, function(item) {
- var watched, _name;
-
- watched = item['WatchedThreads'];
- watched[_name = thread.board] || (watched[_name] = {});
- watched[thread.board][thread] = {
- href: "/" + thread.board + "/res/" + thread,
- textContent: Get.threadExcerpt(thread)
- };
- ThreadWatcher.refresh(watched);
- return $.set('WatchedThreads', watched);
+ rm: function(boardID, threadID) {
+ ThreadWatcher.db["delete"]({
+ boardID: boardID,
+ threadID: threadID
});
+ return ThreadWatcher.refresh();
+ },
+ convert: function(oldFormat) {
+ var boardID, data, newFormat, threadID, threads;
+
+ newFormat = {};
+ for (boardID in oldFormat) {
+ threads = oldFormat[boardID];
+ for (threadID in threads) {
+ data = threads[threadID];
+ (newFormat[boardID] || (newFormat[boardID] = {}))[threadID] = {
+ excerpt: data.textContent
+ };
+ }
+ }
+ return newFormat;
+ },
+ menu: {
+ refreshers: [],
+ init: function() {
+ var menu;
+
+ if (!Conf['Thread Watcher']) {
+ return;
+ }
+ menu = new UI.Menu('thread watcher');
+ $.on($('.menu-button', ThreadWatcher.dialog), 'click', function(e) {
+ return menu.toggle(e, this, ThreadWatcher);
+ });
+ this.addHeaderMenuEntry();
+ return this.addMenuEntries();
+ },
+ addHeaderMenuEntry: function() {
+ var entryEl;
+
+ if (g.VIEW !== 'thread') {
+ return;
+ }
+ entryEl = $.el('a', {
+ href: 'javascript:;'
+ });
+ $.event('AddMenuEntry', {
+ type: 'header',
+ el: entryEl,
+ order: 60
+ });
+ $.on(entryEl, 'click', function() {
+ return ThreadWatcher.toggle(g.threads["" + g.BOARD + "." + g.THREADID]);
+ });
+ return this.refreshers.push(function() {
+ var addClass, rmClass, text, _ref;
+
+ _ref = $('.current', ThreadWatcher.list) ? ['unwatch-thread', 'watch-thread', 'Unwatch thread'] : ['watch-thread', 'unwatch-thread', 'Watch thread'], addClass = _ref[0], rmClass = _ref[1], text = _ref[2];
+ $.addClass(entryEl, addClass);
+ $.rmClass(entryEl, rmClass);
+ return entryEl.textContent = text;
+ });
+ },
+ addMenuEntries: function() {
+ var cb, conf, entries, entry, name, refresh, subEntries, _i, _len, _ref, _ref1, _results;
+
+ entries = [];
+ entries.push({
+ cb: ThreadWatcher.cb.openAll,
+ entry: {
+ type: 'thread watcher',
+ el: $.el('a', {
+ textContent: 'Open all threads'
+ })
+ },
+ refresh: function() {
+ return (ThreadWatcher.list.firstElementChild ? $.rmClass : $.addClass)(this.el, 'disabled');
+ }
+ });
+ entries.push({
+ cb: ThreadWatcher.cb.checkThreads,
+ entry: {
+ type: 'thread watcher',
+ el: $.el('a', {
+ textContent: 'Check 404\'d threads'
+ })
+ },
+ refresh: function() {
+ return ($('div:not(.dead-thread)', ThreadWatcher.list) ? $.rmClass : $.addClass)(this.el, 'disabled');
+ }
+ });
+ entries.push({
+ cb: ThreadWatcher.cb.pruneDeads,
+ entry: {
+ type: 'thread watcher',
+ el: $.el('a', {
+ textContent: 'Prune 404\'d threads'
+ })
+ },
+ refresh: function() {
+ return ($('.dead-thread', ThreadWatcher.list) ? $.rmClass : $.addClass)(this.el, 'disabled');
+ }
+ });
+ subEntries = [];
+ _ref = Config.threadWatcher;
+ for (name in _ref) {
+ conf = _ref[name];
+ subEntries.push(this.createSubEntry(name, conf[1]));
+ }
+ entries.push({
+ entry: {
+ type: 'thread watcher',
+ el: $.el('span', {
+ textContent: 'Settings'
+ }),
+ subEntries: subEntries
+ }
+ });
+ _results = [];
+ for (_i = 0, _len = entries.length; _i < _len; _i++) {
+ _ref1 = entries[_i], entry = _ref1.entry, cb = _ref1.cb, refresh = _ref1.refresh;
+ if (entry.el.nodeName === 'A') {
+ entry.el.href = 'javascript:;';
+ }
+ if (cb) {
+ $.on(entry.el, 'click', cb);
+ }
+ if (refresh) {
+ this.refreshers.push(refresh.bind(entry));
+ }
+ _results.push($.event('AddMenuEntry', entry));
+ }
+ return _results;
+ },
+ createSubEntry: function(name, desc) {
+ var entry, input;
+
+ entry = {
+ type: 'thread watcher',
+ el: $.el('label', {
+ innerHTML: " " + name,
+ title: desc
+ })
+ };
+ input = entry.el.firstElementChild;
+ input.checked = Conf[name];
+ $.on(input, 'change', $.cb.checked);
+ if (name === 'Current Board') {
+ $.on(input, 'change', ThreadWatcher.refresh);
+ }
+ return entry;
+ }
}
};
@@ -10541,8 +10896,8 @@
http: true,
https: true,
software: 'foolfuuka',
- boards: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv'],
- files: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
+ boards: ['adv', 'asp', 'cm', 'd', 'e', 'i', 'lgbt', 'n', 'o', 'p', 'pol', 's', 's4s', 't', 'trv', 'y'],
+ files: ['cm', 'd', 'e', 'i', 'n', 'o', 'p', 's', 'trv', 'y']
},
'Foolz Beta': {
domain: 'beta.foolz.us',
@@ -11799,7 +12154,7 @@
fg = _arg[0];
return "0 0 0 0 " + fg.r + " 0 0 0 0 " + fg.g + " 0 0 0 0 " + fg.b;
},
- layout: "/* Cleanup */ #absbot, #boardNavDesktop, #delPassword, #delform > hr:last-of-type, #navbotright, #postForm, #search-label, #search-label-bottom, #styleSwitcher, #togglePostForm, .boardBanner > div, .mobile, .next form, .next span, .postingMode, .prev form, .prev span, .riced, .sideArrows, .stylechanger, body > br, body > div[style^=\"text-align\"], body > hr { display: none; } /* Empties */ #qr .warning:empty, #qr-thread-select:empty { display: none; } /* File Name Trunctuate / /p/ exif */ .exif, .fileText:hover .fntrunc, .fileText:not(:hover) .fnfull { display: none; } /* Unnecessary */ #qp input, #qp .rice, .inline .rice { display: none !important; } /* Hidden Content */ .forwarded, .hidden, .hidden_thread ~ div, .hidden_thread ~ a, .replyContainer .stub ~ div, .replyContainer .stub ~ a, .stub + div, .thread > .stub:first-child ~ .postContainer, .thread > .stub:first-child ~ .summary, [hidden] { display: none !important; } /* Hidden UI */ #catalog, #navlinks, #navtopright, #svg_filters, .cataloglink, .navLinks { z-index: 7; position: fixed; top: 100%; left: 100%; } /* Hide last horizontal rule, keep clear functionality. */ .board > hr:last-of-type { visibility: hidden; } /* Fappe Tyme */ .fappeTyme .thread > .noFile, .fappeTyme .threadContainer > .noFile { display: none; } /* Defaults */ a { text-decoration: none; outline: none; } .underline-links a { text-decoration: underline; } body, html { min-height: 100%; -moz-box-sizing: border-box; } body { outline: none; min-height: 100%; } .sidebar-hide body { margin: 0 2px; } .sidebar-minimal body { margin: 0 20px; } .sidebar-normal body { margin: 0 252px } .sidebar-large body { margin: 0 303px; } .sidebar-location-right body { margin-left: 2px; } .sidebar-location-left body { margin-right: 2px; } body.unscroll { overflow: hidden; } .fourchan-ss-sidebar body::before { content: ''; position: fixed; top: 0; bottom: 0; -moz-box-sizing: border-box; display: block; z-index: 0; } .fourchan-ss-sidebar.sidebar-large body::before { width: 306px; } .fourchan-ss-sidebar.sidebar-normal body::before { width: 255px; } .fourchan-ss-sidebar.sidebar-minimal body::before { width: 23px; } .sidebar-location-right body::before { right: 0; } sidebar-location-left body::before { left: 0; } .fourchan-ss-sidebar.sidebar-location-right body { padding-right: 2px; } .fourchan-ss-sidebar.sidebar-location-left body { padding-left: 2px; } hr { clear: both; border: 0; padding: 0; margin: 0 0 1px; } .hide-horizontal-rules hr { visibility: hidden; } th { text-align: left; } .center { text-align: center; } .disabled { opacity: 0.5; } .pointer { cursor: pointer; } /* Symbols */ .drop-marker { vertical-align: middle; display: inline-block; margin: 2px 2px 3px; border-top: .5em solid; border-right: .3em solid transparent; border-left: .3em solid transparent; } .brackets-wrap::before { content: \" [\"; } .brackets-wrap::after { content: \"] \"; } /* Thread / Reply Nav */ #navlinks a { position: fixed; z-index: 12; opacity: 0.5; display: inline-block; border-right: 6px solid transparent; border-left: 6px solid transparent; margin: 1.5px; } #navlinks a:first-of-type { border-bottom: 11px solid rgb(130,130,130); } #navlinks a:last-of-type { border-top: 11px solid rgb(130,130,130); } /* Header */ #header-bar { z-index: 6; border-width: 1px; padding: 0 2px; border-style: solid; } .pagination-sticky-top .pagelist, .pagination-sticky-bottom .pagelist, #header-bar { left: 2px; right: 2px; } .navigation-alignment-center #header-bar { text-align: center; } .navigation-alignment-right #header-bar { text-align: right; } .sidebar-location-left.sidebar-large:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-left #header-bar { left: 303px; } .sidebar-location-left.sidebar-normal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-left #header-bar { left: 252px; } .sidebar-location-left.sidebar-minimal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-left.sidebar-minimal:not(.fourchan-ss-navigation) #header-bar { left: 20px; } .sidebar-location-right.sidebar-large:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-right #header-bar { right: 303px; } .sidebar-location-right.sidebar-normal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-right #header-bar { right: 252px; } .sidebar-location-right.sidebar-minimal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-right.sidebar-minimal:not(.fourchan-ss-navigation) #header-bar { right: 20px; } .fourchan-ss-navigation .pagelist, .fourchan-ss-navigation #header-bar { left: 0; right: 0; border-left: 0; border-right: 0; border-radius: 0 !important; } .hide-navigation-decorations #header-bar { font-size: 0; color: transparent; word-spacing: 2px; } #shortcuts { float: right; } .fixed #header-bar.autohide { z-index: 24; } .fixed #header-bar { position: fixed; } .top #header-bar { top: 0; border-top-width: 0; } .rounded-edges.top #header-bar { border-radius: 0 0 3px 3px; } .fixed.bottom #header-bar { bottom: 0; border-bottom-width: 0; } .rounded-edges.bottom #header-bar { border-radius: 3px 3px 0 0; } .hide #header-bar { position: fixed; top: 110%; bottom: auto; } /* Header Autohide */ .fixed #header-bar.autohide:not(:hover) { box-shadow: none; transition: all .8s .6s cubic-bezier(.55, .055, .675, .19); } .fixed.top #header-bar.autohide:not(:hover) { margin-bottom: -1em; transform: translateY(-100%); } .fixed.bottom #header-bar.autohide:not(:hover) { transform: translateY(100%); } #scroll-marker { left: 0; right: 0; height: 10px; position: absolute; } #header-bar #scroll-marker { display: none; } .fixed #header-bar #scroll-marker { display: block; } .fixed.top header-bar #scroll-marker { top: 100%; } .fixed.bottom #header-bar #scroll-marker { bottom: 100%; } /* Notifications */ #notifications { position: fixed; top: 0; text-align: center; right: 0; left: 0; transition: all .8s .6s cubic-bezier(.55, .055, .675, .19); } .fixed.top #header-bar #notifications { position: absolute; top: 100%; } .notification { font-weight: 700; text-shadow: 0 1px 2px rgba(0, 0, 0, .5); box-shadow: 0 1px 2px rgba(0, 0, 0, .15); border-radius: 2px; margin: 1px auto; width: 500px; max-width: 100%; position: relative; transition: all .25s ease-in-out; } .notification.error { background-color: hsla(0, 100%, 38%, .9); } .notification.warning { background-color: hsla(36, 100%, 38%, .9); } .notification.info { background-color: hsla(200, 100%, 38%, .9); } .notification.success { background-color: hsla(104, 100%, 38%, .9); } .notification, .notification a { color: #fff !important; } .notification > .close { top: 0; padding: 2px; right: 4px; position: absolute; color: #fff; } .message { -moz-box-sizing: border-box; padding: 6px 20px; max-height: 200px; width: 100%; overflow: auto; } /* Updater / Thread Stats */ .float #thread-stats, .float #updater { position: fixed; } #update-status.new::after { content: ', '; } /* Pagination */ .pagelist { border-style: solid; border-width: 1px; z-index: 6; } .pagination-alignment-center .pagelist { text-align: center; } .pagination-alignment-right .pagelist { text-align: right; } .pagination-sticky-top .pagelist { position: fixed; top: 0; border-top-width: 0; } .pagination-sticky-bottom .pagelist { position: fixed; bottom: 0; border-bottom-width: 0; } .pagination-top .pagelist { position: static; border-top-width: 0; } .pagination-bottom .pagelist { position: static; } .pagination-top.rounded-edges .pagelist, .pagination-sticky-top.rounded-edges .pagelist { border-radius: 0 0 3px 3px; } .pagination-bottom.rounded-edges .pagelist, .pagination-sticky-bottom.rounded-edges .pagelist { border-radius: 3px 3px 0 0; } .pagination-hide .pagelist { display: none; } .pagination-on-side .pagelist { position: fixed; padding: 0; top: auto; bottom: 0.5em; margin: 0; background: none transparent !important; border: 0 none !important; text-align: right; } .pagination-on-side.post-form-style-fixed.show-post-form-header .pagelist { bottom: 23.1em; } .pagination-on-side.post-form-style-fixed .pagelist { bottom: 21.6em; } .sidebar-location-left.pagination-on-side .pagelist { transform: rotate(-90deg); transform-origin: bottom left; } .sidebar-location-right.pagination-on-side .pagelist { transform: rotate(90deg); transform-origin: bottom right; } .sidebar-location-right.sidebar-large.pagination-on-side .pagelist { left: auto; right: 301px; } .sidebar-location-left.sidebar-large.pagination-on-side .pagelist { right: auto; left: 301px; } .sidebar-location-right.sidebar-normal.pagination-on-side .pagelist { left: auto; right: 246px; } .sidebar-location-left.sidebar-normal.pagination-on-side .pagelist { right: auto; left: 246px; } .sidebar-location-right.sidebar-minimal.pagination-on-side .pagelist { left: auto; right: 246px; } .sidebar-location-left.sidebar-minimal.pagination-on-side .pagelist { right: auto; left: 18px; } .hide-navigation-decorations .pagelist { font-size: 0; color: transparent; word-spacing: 0; } .pagelist input, .pagelist div { vertical-align: middle; } .hide-navigation-decorations .pages a { margin: 0 1px; } .next, .pages, .prev { display: inline-block; margin: 0 3px; } /* Icons */ .icons-4chan-ss #navtopright .exlinksOptionsLink::after, .icons-4chan-ss #main-menu, .icons-4chan-ss .navLinks > a:first-of-type::after, .icons-4chan-ss #watcher::after, .icons-4chan-ss #globalMessage::after, .icons-4chan-ss #boardNavDesktopFoot::after, .icons-4chan-ss #img-controls, .icons-4chan-ss #catalog::after, .icons-4chan-ss #fappeTyme { background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAACWCAMAAAA2YSLzAAAAPFBMVEVkZGRlZWVjY2NmZmZnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dZxmG7AAAAE3RSTlMFFQ0AJD8eQFRqf5CgssDM4+73gHqZRAAAA0pJREFUSMetVlmy5CgMZDMGxK7737Ulgcu8ejMREzHtD7sShJRaKWV/Psq3iz7QGwTF2BZ01hp3N6yasctZJANiN5ZlItDLtNkQDGNeMLU7EqmCbUwhkhZbwsIuNbyWPX7dIyHOrDYOc8SOiEUJjojN0EsWlCXRrq2qvJCsIjic2OcFrwrOpdmTimqVyWG7ZkrWy97p7z/hACd2FUetBcQDpTN+nuKsGng881L5xOz/VQ88xL/eQkyZT3axp+4dUMwvH0Pnhn6wSyR+8IdR4f43/v8XX1BHjXpjwy5RdEcQ7DiuzlBUsFD+GeIFEy6W0pKXoSZOiUz5tf99nvTDD/1sP9VRPvb/un86lT57SVqwSk8KR+L6kgTOlcZslRQe5WmJRKovETW7Anb+HzxUW4Xgnv11fuuj82aKXHz1Tzztx9v4VA9+/6le26B+3VhTC9RMPIr0qx4zaWNsnFRO0s8FWgEIFIRiVUAIlJGciqMmCwpQWyI/OplXA1RrXG1YI2svTQ3ufhWjNlKFqtXFI7Yg+zAXRcBZ+HygJuVHd0ys35bVn6QojLL5cZeVvPht/mVu/r/8s7GMXsLjv2s71GZhgjnEwsEVXogiSl/pl7LWra0IQgO3poTsieoYd4dhWfJlGWqyQf6sLxWt3/MRa4Im04ixeSdAWnxvqCX6tObVmzpZOPOZvrBNJF8gmGciBChsV+YdRYwnAvNpS4AnYFBm0KA2a35Unh+efxjercaLfV7wW0rtUTNl2j715al/9VtfutF+NZ/+aZSa+py/GCpRyvr17EsVLbRhmN++BBY/ik5/+YPK6bKnf2T8fh7P+uEYn0D3E4L3i6QHmvc3+k+8PN6Mb1w52tje6LbAi+M0FT4YneqVbpVDPnL2Xqx7m3tf9ENXHba9H/a/+X3z/+XfCnOo+Zy/o4SgY5Z6iq0nb+9Mc4JxL5f1qYs+xhTP/uiX/cMe4+hDHAfGnmGe+Ev+G88vnG7Ie20wHiUt/S1Kv+6BCM/9fkEfz73/9HNufQ4ZKdzvnwtS/LXltRcJB/yJ23H/mo89nPFa85Li3XOYu435LwTXKVWwO+cnlWFTB47L/AdfR//KI2bvF8sAb0c/M+1+YE3/oS77B8N+UUVHraV6AAAAAElFTkSuQmCC\"); } .icons-oneechan #navtopright .exlinksOptionsLink::after, .icons-oneechan #main-menu, .icons-oneechan .navLinks > a:first-of-type::after, .icons-oneechan #watcher::after, .icons-oneechan #globalMessage::after, .icons-oneechan #boardNavDesktopFoot::after, .icons-oneechan #img-controls, .icons-oneechan #catalog::after, .icons-oneechan #fappeTyme { background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAACWCAMAAAA2YSLzAAAAPFBMVEVoaGhqampeXl5sbGxsbGxra2tsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGzXmsRLAAAAE3RSTlMAEAYnHBg2QExbcYaWqM++2+z4BMdvAwAAAtVJREFUSMfFVgmu3CAMhYRPAmb3/e9aL5Bl2kptVbXWSOSBsY15NmOMMZs1KnNExC+ezgV4MBtNMIw58+qX2REtQwiifdC6hwlNQBGfUlBzc+KYkP3IxH5hNvicCPXrMfEVi3ts2WrzaiN6jie2OI2GXbBfXiA/XPyexPpEHrHdyDV8YAt6vEYCVpJ3S7rXAZKkkfbnuR8Uk/32xsac6Y01La2ZfyIh1VrX9Rnfu5ygd6/XeQAGFxACkopDb3mkeXug48x5FCKhNzW+1j2t8/5EEwHTIfPm6G3aP37o/w/ir3QZ2V/xY0spdSxWL7MrLU7slmnDSY0UrH6CBJ/wFI3TNGECCDY9G4xmrpDkZvQMJ4q31EzLQuhipr7ag8ueFa+hUQy2d43nnPGg7NopHTUVyYlWpE+lUT4qfhDCnLpzB8oXLLJb4leptD/JblswOaZd0gRkDV0cJi69NNOUaclRpG6S1NPdRVPLjI3VSjWV8+FmaARknTxqfipl0tGR1DXvd0h251Ww/ZlaNQoaX3bqUS+IK6ZX4hysvuQinS+6n9638/6BbK4RLi6R11O8rPS4OnO66KHtw6yK96BWrg5QxDGcVzcoB8cYb/dE1zPO6C+pHxN0Ttw/JtJrx55+oV9Jq+ScF22IfBWDD+sHfTnBmKlpS99hPGSC4SBsi+dP3p0PjVBVedMdO3WoG57cAEbYVNkRHFROIzjYuGjoM7LOaEQKbtQjkuo5hCSMmezaNq3Gl6TE5J3ZLMu26SjpPJZo4h/9FJhT4JQJzjFXD7x54fBgzO9RvDH9Vl5vHIetcGHct1apLh/6gU3c2PYy5rrYh7a1NP29/H/G9xn/d+f7FNVcw9/H/9sf8ymXPnqdDd7Wx3OpzWRJuP8+iMTFe7wZq48Tce7QciNetUzku+pT/t4UHK/iIq2yPR/8y/315M/rWl1A/sM83phVh6+aeZY39OLNN4Y0P2GdHOWPAAAAAElFTkSuQmCC\"); } /* Banner & Board Title */ .boardBanner { line-height: 0; } .faded-4chan-banner .boardBanner { opacity: 0.5; transition: opacity 0.3s ease-in-out .5s; } .faded-4chan-banner .boardBanner:hover { opacity: 1; transition: opacity 0.3s ease-in; } /* From 4chan SS / OneeChan */ .fourchan-banner-reflection .boardBanner::after { background-image: -moz-element(#Banner); bottom: -100%; content: ''; left: 0; mask: url(\"data:image/svg+xml, #mask\"); opacity: 0.3; position: absolute; right: 0; top: 100%; -moz-transform: scaleY(-1); z-index: -1; } .fourchan-banner-at-sidebar-top .boardBanner, .fourchan-banner-at-sidebar-bottom .boardBanner, .fourchan-banner-at-sidebar-bottom .boardBanner { position: fixed; } .fourchan-banner-at-sidebar-top .boardBanner { top: 16px; } .fourchan-banner-at-sidebar-bottom .boardBanner { bottom: 270px; } .fourchan-banner-under-post-form .boardBanner { bottom: 130px; } .board-title-at-sidebar-top.sidebar-location-right #boardTitle, .board-title-at-sidebar-bottom.sidebar-location-right #boardTitle, .board-title-under-post-form.sidebar-location-right #boardTitle, .fourchan-banner-at-sidebar-top.sidebar-location-right .boardBanner, .fourchan-banner-at-sidebar-bottom.sidebar-location-right .boardBanner, .fourchan-banner-under-post-form.sidebar-location-right .boardBanner { right: 2px; } .board-title-at-sidebar-top.sidebar-location-left #boardTitle, .board-title-at-sidebar-bottom.sidebar-location-left #boardTitle, .board-title-under-post-form.sidebar-location-left #boardTitle, .fourchan-banner-at-sidebar-top.sidebar-location-left .boardBanner, .fourchan-banner-at-sidebar-bottom.sidebar-location-left .boardBanner, .fourchan-banner-under-post-form.sidebar-location-left .boardBanner { left: 2px; } .board-title-at-sidebar-top #boardTitle, .board-title-at-sidebar-bottom #boardTitle, .board-title-under-post-form #boardTitle, .fourchan-banner-at-sidebar-top .boardBanner img, .fourchan-banner-at-sidebar-bottom .boardBanner img, .fourchan-banner-under-post-form .boardBanner img { width: 248px; } .board-title-at-sidebar-top.sidebar-large #boardTitle, .board-title-at-sidebar-bottom.sidebar-large #boardTitle, .board-title-under-post-form.sidebar-large #boardTitle, .fourchan-banner-at-sidebar-top.sidebar-large .boardBanner img, .fourchan-banner-at-sidebar-bottom.sidebar-large .boardBanner img, .fourchan-banner-under-post-form.sidebar-large .boardBanner img { width: 299px; } .fourchan-banner-at-top .boardBanner { position: relative; display: table; margin: 12px auto; text-align: center; } :root:not(.board-subtitle) .boardSubtitle, .board-title-hide #boardTitle, .fourchan-banner-hide .boardBanner { display: none; } #boardTitle { text-align: center; z-index: 4; } .board-title-at-sidebar-top #boardTitle, .board-title-at-sidebar-bottom #boardTitle, .board-title-under-post-form #boardTitle { position: fixed; } .board-title-at-sidebar-top.fourchan-banner-at-sidebar-top.sidebar-large #boardTitle { top: 121px; } .board-title-at-sidebar-top.fourchan-banner-at-sidebar-top #boardTitle { top: 104px; } .board-title-at-sidebar-top #boardTitle { top: 40px; } .board-title-at-sidebar-bottom #boardTitle { bottom: 280px; } .board-title-under-post-form #boardTitle { bottom: 140px; } /* Hover UI */ .move { cursor: pointer; } #ihover { position: fixed; max-height: 97%; max-width: 75%; z-index: 22; } #qp { position: fixed; z-index: 22; } #qp .postMessage::after { clear: both; display: block; content: \"\"; } #qp .full-image { max-height: 300px; max-width: 500px; } #menu { position: fixed; outline: none; z-index: 22; } /* Image Expansion */ .fit-width .full-image { max-width: 100%; width: 100%; } .fit-height .full-image { max-height: 95vh; } .images-overlap-post-form .full-image { position: relative; z-index: 21; } /* Delete Buttons */ .hide-delete-ui .deleteform, .hide-delete-ui .post:not(#exlinks-options) .rice { display: none; } .hide-delete-ui .postInfo { padding: 0 0 0 3px; } .deleteform { position: fixed; z-index: 18; width: 0; bottom: 0; right: 0; border-width: 1px 0 0 1px; border-style: solid; font-size: 0; color: transparent; } .deleteform:hover { width: auto; } .deleteform::before { z-index: 18; border-width: 1px 0 0 1px; border-style: solid; content: '✖'; display: block; position: fixed; bottom: 0; right: 0; -moz-box-sizing: border-box; height: 1.6em; width: 1.4em; text-align: center; } .deleteform:hover::before { display: none; } .deleteform input { margin: 0 1px 0 0; } /* Slideout Navigation */ #boardNavDesktopFoot { position: fixed; text-align: center; font-size: 0; color: transparent; overflow: hidden; -moz-box-sizing: border-box; width: 248px; } .sidebar-large #boardNavDesktopFoot { width: 299px; } .sidebar-location-right #boardNavDesktopFoot { right: 2px; } .sidebar-location-left #boardNavDesktopFoot { left: 2px; } #boardNavDesktopFoot:hover { overflow-y: auto; padding: 2px; } #boardNavDesktopFoot:not(:hover) { border-color: transparent; background-color: transparent; height: 0; overflow: hidden; padding: 0; border: 0 none; } .slideout-navigation-compact #boardNavDesktopFoot { word-spacing: 1px; } .slideout-navigation-list #boardNavDesktopFoot a { display: block; } .slideout-navigation-list #boardNavDesktopFoot:hover { max-height: 400px; } .slideout-navigation-list #boardNavDesktopFoot a::after { content: ' - ' attr(title); } .slideout-navigation-list #boardNavDesktopFoot a[href*='//boards.4chan.org/']::after, .slideout-navigation-list #boardNavDesktopFoot a[href*='//rs.4chan.org/']::after { content: '/ - ' attr(title); } .slideout-navigation-list #boardNavDesktopFoot a[href*='//boards.4chan.org/']::before, .slideout-navigation-list #boardNavDesktopFoot a[href*='//rs.4chan.org/']::before { content: '/'; } .slideout-navigation-hide #boardNavDesktopFoot { display: none; } /* Watcher */ #watcher { position: fixed; z-index: 14; padding: 2px; } #watcher { width: 200px; } #watcher:not(:hover) { max-height: 200px; overflow: hidden; } .rounded-edges #watcher { border-radius: 3px; } #watcher > div { max-height: 1.3em; overflow: hidden; } .slideout-watcher #watcher { -moz-box-sizing: border-box; width: 248px; } .slideout-watcher.sidebar-large #boardNavDesktopFoot { width: 299px; } .slideout-watcher.sidebar-location-right #watcher { left: auto !important; right: 2px !important; } .slideout-watcher.sidebar-location-left #watcher { right: auto !important; left: 2px !important; } .slideout-watcher #watcher .move { cursor: default; } .slideout-watcher.underline-links #watcher .move { text-decoration: underline; } .slideout-watcher #watcher > div { overflow: hidden; } .slideout-watcher #watcher:hover { overflow-y: auto; } .slideout-watcher #watcher:not(:hover) { height: 0; overflow: hidden; border: 0 none; padding: 0; } .watch-thread-link { padding-top: 18px; width: 18px; height: 0px; display: inline-block; background-repeat: no-repeat; opacity: 0.2; position: relative; top: 1px; } .watch-thread-link.watched { opacity: 1; } /* Announcements */ #globalMessage { text-align: center; } .rounded-edges #globalMessage { border-radius: 3px; } .announcements-slideout #globalMessage { position: fixed; padding: 2px; width: 248px; } .announcements-slideout.sidebar-location-right #globalMessage { left: auto; right: 2px; } .announcements-slideout.sidebar-location-left #globalMessage { right: auto; left: 2px; } .announcements-slideout.sidebar-large #globalMessage { width: 299px; } .announcements-slideout #globalMessage h3 { margin: 0; } .announcements-slideout #globalMessage:hover { -moz-box-sizing: border-box; overflow-y: auto; } .announcements-slideout #globalMessage:not(:hover) { height: 0; overflow: hidden; padding: 0; border: 0 none; } .announcements-hide #globalMessage { display: none !important; } /* Threads */ #threads, .rounded-edges .board > .thread { border-radius: 4px; } /* Thread Clearfix */ .thread > .threadContainer:last-of-type::after, .thread > .postContainer:last-of-type::after { display: block; content: ' '; clear: both; } /* Posts */ .expanding { opacity: .5; } .fileText:hover .fntrunc, .fileText:not(:hover) .fnfull, .expanded-image > .post > .file > .fileThumb > img[data-md5], .post > .file > .fileThumb > .full-image { display: none; } .expanded-image > .post > .file > .fileThumb > .full-image { display: block; } .thread > .replyContainer:last-of-type .post { margin-bottom: 0; } .menu-button { position: relative; } .stub .menu-button, .post .menu-button, .hide-thread-button, .show-thread-button span, .hide-reply-button, .show-reply-button span { float: right; } .post .menu-button, .hide-thread-button, .hide-reply-button { margin: 0 3px; opacity: 0; transition: opacity .3s ease-out 0s; } .post:hover .hide-reply-button, .post:hover .menu-button, .post:hover .hide-thread-button, .hidden_thread .hide-thread-button, .hidden_thread .menu-button, .inline .hide-reply-button, .inline .menu-button { opacity: 1; } .hidden_thread { text-align: right; } .color-user-ids .posteruid .hand { padding: .1em .3em; border-radius: 1em; font-size: 80%; } .postInfo > span { vertical-align: bottom; } .bolds .subject, .bolds .name { font-weight: 600; } .italics .postertrip { font-style: italic; } .underline-links .replylink { text-decoration: underline; } .fileInfo { padding: 0 3px; } .fileThumb { float: left; margin: 3px 20px; outline: none; } .reply.post { -moz-box-sizing: border-box; display: inline-block; } .fit-width-replies .reply.post { display: block; overflow: hidden; } .fit-width-replies .expanded-image .reply.post, .fit-width-replies .hasInline .reply.post { width: 100%; } .indent-replies #unread-line, .indent-replies .thread > .replyContainer, .indent-replies .threadContainer > .replyContainer { margin-left: 2em; } .expanded-image .reply.post, .hasInline .reply.post { display: inline-block; overflow: visible; clear: both; } .rounded-edges .post { border-radius: 3px; } .spoiler, s { text-decoration: none; } /* Emoji */ a.useremail:last-of-type { vertical-align: top; } /* Reply Clearfix */ .reply.post .postMessage { clear: right; } .op-background .op.post .postMessage::after, .force-reply-break .op.post .postMessage::after { display: block; content: ' '; clear: both; } /* OP */ .favicon { vertical-align: bottom; } .op-background .op.post { -moz-box-sizing: border-box; } /* Summary */ .force-reply-break .summary { clear: both; } /* Inlined */ .inline { margin: 2px 8px 2px 2px; } .post .inline { margin: 2px; } .inline .replyContainer { display: inline-block; } /* Inlined Clearfix */ .inline .postMessage::after { clear: both; display: block; content: \"\"; } /* Quotes */ .inlined { opacity: .5; } .underline-links .quotelink { text-decoration: underline; } .filtered, .quotelink.filtered { text-decoration: line-through !important; } .inline + .hashlink { display: none; } /* Quote Threading */ .threadContainer { padding-left: 2em; border-left: 1px solid; } .indent-replies .threadContainer { margin-left: 2em; padding-left: 0; } .threadOP { clear: both; } /* Backlinks */ .underline-links .forwardlink, .underline-links .backlink { text-decoration: underline; } .backlink.dead { text-decoration: none; } .filtered-backlinks .filtered.backlink { display: none; } .backlinks-position-lower-left .container, .backlinks-position-lower-right .container { max-width: 100%; padding: 0 5px; } .backlinks-position-lower-left .reply.quoted, .backlinks-position-lower-right .reply.quoted { position: relative; padding-bottom: 1.7em; } .backlinks-position-lower-left .inline .reply.quoted, .backlinks-position-lower-right .inline .reply.quoted, .backlinks-position-lower-right #qp .reply.quoted, .backlinks-position-lower-left #qp .reply.quoted { position: static; padding-bottom: 0; } .backlinks-position-lower-right .reply .container, .backlinks-position-lower-left .reply .container { position: absolute; bottom: 0; padding: 0 5px; } .backlinks-position-lower-left .reply .container { left: 0; } .backlinks-position-lower-right .reply .container { right: 0; } .backlinks-position-lower-right .container::before, .backlinks-position-lower-left .reply .container::before { content: 'REPLIES: '; } .container:empty { display: none; } .backlinks-position-lower-left #qp .container, .backlinks-position-lower-left .inline .container, .backlinks-position-lower-right .inline .container, .backlinks-position-lower-right #qp .container { position: static; max-width: 100%; } .backlinks-position-lower-left #qp .container::before, .backlinks-position-lower-left .inline .container::before, .backlinks-position-lower-right #qp .container::before, .backlinks-position-lower-right .inline .container::before { content: ''; } .backlinks-position-lower-right .inline .container { float: none; } /* Fixes text spoilers */ .remove-spoilers.indicate-spoilers .spoiler::before, .remove-spoilers.indicate-spoilers s::before { content: '[spoiler]'; } .remove-spoilers.indicate-spoilers .spoiler::after, .remove-spoilers.indicate-spoilers s::after { content: '[/spoiler]'; } :root:not(.remove-spoilers) .spoiler:not(:hover) *, :root:not(.remove-spoilers) s:not(:hover) * { color: rgb(0,0,0) !important; text-shadow: none !important; } :root:not(.remove-spoilers) spoiler:not(:hover), :root:not(.remove-spoilers) s:not(:hover) { background-color: rgb(0,0,0); color: rgb(0,0,0) !important; text-shadow: none !important; } /* Code */ .prettyprint { -moz-box-sizing: border-box; font-family: monospace; display: inline-block; margin: 0 auto .1em 0; vertical-align: middle; white-space: pre-wrap; border-radius: 2px; overflow-x: auto; padding: 3px; max-width: 100%; } /* Menu */ .entry { border-bottom: 1px solid rgba(0,0,0,.25); cursor: pointer; display: block; outline: none; padding: 3px 1em 3px 7px; position: relative; text-decoration: none; white-space: nowrap; } .entry:last-child { border-bottom: 0; } .has-submenu::after { content: \"\"; border-left: .5em solid; border-top: .3em solid transparent; border-bottom: .3em solid transparent; display: inline-block; margin: .3em; position: absolute; right: 0; } .submenu { display: none; position: absolute; top: -1px; } .focused .submenu { display: block; } /* Stubs */ .fit-width-replies .stub { display: block; text-align: right; clear: both; } /* Element Replacing: */ /* Checkboxes */ .rice { cursor: pointer; width: 9px; height: 9px; margin: 2px 3px 3px; display: inline-block; vertical-align: bottom; } input[type=checkbox]:checked + .rice { position: relative; } input[type=checkbox]:checked + .rice::after { content: \"\"; display: block; width: 4px; height: 10px; border-width: 0 3px 3px 0; border-style: solid; transform: rotate(45deg); position: absolute; left: 2px; bottom: -1px; } .rounded-edges .rice { border-radius: 2px;} } .circle-checkboxes .rice { border-radius: 6px;} } input:checked + .rice { background-attachment: scroll; background-repeat: no-repeat; background-position: bottom right; } /* Selects */ .selectrice { position: relative; cursor: default; overflow: hidden; text-align: left; } #settings .selectrice { display: inline-block; } .selectrice::after { content: \"\"; border-right: .25em solid transparent; border-left: .25em solid transparent; position: absolute; right: .4em; top: .5em; } .selectrice::before { content: \"\"; height: 1.6em; position: absolute; right: 1.3em; top: 0; } /* Select Dropdown */ #selectrice { padding: 0; margin: 0; position: fixed; max-height: 120px; overflow-y: auto; overflow-x: hidden; z-index: 32; } #selectrice:empty { display: none; } /* Post Form Shortcut */ .qr-shortcut.on-page { font-size: 250%; } /* Post Form */ #qr { z-index: 20; position: fixed; background: none; border: none; padding: 1px; min-width: 248px; background: transparent; border: 1px solid transparent; } .sidebar-large #qr { min-width: 299px; } .rounded-edges #qr, .rounded-edges #qrtab { border-radius: 3px 3px 0 0; } .post-form-style-fixed #qr { top: auto !important; } .sidebar-location-left:not(.post-form-style-float) #qr { left: 0 !important; right: auto !important; } .sidebar-location-right:not(.post-form-style-float) #qr { right: 0 !important; left: auto !important; } :root:not(.post-form-style-float) #qr { bottom: 0 !important; } .fourchan-ss-navigation.fixed.bottom:not(.post-form-style-float) #qr, .fourchan-ss-navigation.index.pagination-sticky-bottom:not(.post-form-style-float) #qr { bottom: 1.5em !important; } .post-form-style-slideout #qr { top: auto !important; } .post-form-style-slideout.sidebar-location-left #qr { transform: translateX(-93%); } .post-form-style-slideout.sidebar-location-right #qr { transform: translateX(93%); } .post-form-style-slideout #qr:hover, .post-form-style-slideout #qr.has-focus, .post-form-style-slideout #qr.dump { transform: translate(0); } .post-form-style-tabbed-slideout #qr { top: auto !important; } .post-form-style-tabbed-slideout.sidebar-location-left #qr { transform: translateX(-100%); } .post-form-style-tabbed-slideout.sidebar-location-right #qr { transform: translateX(100%); } .post-form-style-tabbed-slideout #qr:hover, .post-form-style-tabbed-slideout #qr.has-focus, .post-form-style-tabbed-slideout #qr.dump { transform: translateX(0); } .post-form-style-tabbed-slideout #qrtab { position: absolute; top: 0; width: 120px; text-align: center; border-width: 1px 1px 0 1px; cursor: default; } .post-form-style-tabbed-slideout.sidebar-location-left #qrtab { transform: rotate(90deg); transform-origin: bottom right; left: 100%; } .post-form-style-tabbed-slideout.sidebar-location-right #qrtab { transform: rotate(-90deg); transform-origin: bottom right; right: 100%; } .post-form-style-tabbed-slideout #qr:hover #qrtab, .post-form-style-tabbed-slideout #qr.has-focus #qrtab, .post-form-style-tabbed-slideout #qr.dump #qrtab { opacity: 0 !important; } .post-form-style-slideout #qrtab input, .post-form-style-slideout #qrtab .rice, .post-form-style-tabbed-slideout #qrtab input, .post-form-style-tabbed-slideout #qrtab .close, .post-form-style-tabbed-slideout #qrtab .rice, .post-form-style-tabbed-slideout #qrtab span { display: none; } .post-form-style-tabbed-slideout #qrtab .selectrice { text-align: center; } .transparent-post-form #qr { opacity: 0.2; transition: opacity .3s ease-in-out 1s; } .transparent-post-form #qr:hover, .transparent-post-form #qr.has-focus, .transparent-post-form #qr.dump { opacity: 1; transition: opacity .3s linear; } :root:not(.show-post-form-header):not(.post-form-style-float):not(.post-form-style-tabbed-slideout) #qrtab, .post-form-style-float .autohide:not(:hover):not(.has-focus) form, .show-post-form-header.post-form-style-fixed .autohide:not(:hover):not(.has-focus) form { display: none !important; } :root:not(.post-form-style-tabbed-slideout) #qrtab { margin-bottom: 1px; } #qr.autohide:not(:hover):not(.has-focus) #qrtab { margin-bottom: 0; } .post-form-slideout-transitions.post-form-style-slideout #qr, .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr { transition: transform .3s ease-in-out 1s; } .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr.dump, .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr:hover, .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr.has-focus, .post-form-slideout-transitions.post-form-style-slideout #qr.dump, .post-form-slideout-transitions.post-form-style-slideout #qr:hover, .post-form-slideout-transitions.post-form-style-slideout #qr.has-focus { transition: transform .3s linear; } .post-form-slideout-transitions #qrtab { transition: opacity .3s ease-in-out 1s; } .post-form-slideout-transitions #qr:hover #qrtab { transition: opacity .3s linear; } #qr .close { float: right; padding: 0 3px; } #qr .warning { min-height: 1.6em; vertical-align: middle; padding: 0 1px; border-width: 1px; border-style: solid; } .persona { width: 248px; max-width: 100%; min-width: 100%; } .persona input.field { width: 100%; } #qr textarea.field { height: 11.6em; min-height: 6em; } #qr.has-captcha textarea.field { height: 6em; } .compact-post-form-inputs .persona input.field { width: 33%; } .compact-post-form-inputs .persona input.field:first-child { margin: 0; } .compact-post-form-inputs .persona input.field { margin: 0 0 0 0.5%; } .compact-post-form-inputs #qr textarea.field { height: 14.9em; min-height: 9em; } .compact-post-form-inputs #qr.has-captcha textarea.field { height: 9em; } .tripcode-hider .tripped:not(:hover):not(:focus) { color: transparent !important; } .textarea-resize-horizontal #qr textarea { resize: horizontal; } .textarea-resize-vertical #qr textarea { resize: vertical; } .textarea-resize-both #qr textarea { resize: both; } .textarea-resize-none #qr textarea { resize: none; } .captcha-img { margin: 1px 0 0; text-align: center; line-height: 0; } .captcha-img img { width: 246px; } .captcha-img, .captcha-img img { height: 4em; } .captcha-input { width: 100%; margin: 1px 0 0; } .field, .selectrice, button, input:not([type=radio]) { -moz-box-sizing: border-box; height: 1.6em; margin: 1px 0 0; vertical-align: bottom; padding: 0 1px; outline: none; } .selectrice { padding-right: 1.6em; } #qr textarea { min-width: 100%; } #qr [type='submit'] { width: 25%; } [type='file'] { position: absolute; opacity: 0; z-index: -1; } /* Fake File Input */ #qr-filename, #qr-filerm, .has-file #qr-no-file { display: none; } #qr-no-file, .has-file #qr-filename { display: block; } .has-file #qr-filerm { display: inline-block; } #qr-extras-container { position: absolute; right: 0; top: 0; z-index: 2; } #qr-extras-container > label, #qr-extras-container > a { cursor: pointer; margin-right: 3px; } #qr-filename-container { -moz-box-sizing: border-box; display: inline-block; position: relative; width: 100px; min-width: 74.6%; max-width: 74.6%; margin-right: 0.4%; overflow: hidden; padding: 2px 1px 0; } /* Thread Select */ #qr-thread-select, #qr-thread-select .selectrice div { display: inline; } #qr-thread-select .selectrice { cursor: pointer; display: inline-block; width: 120px; border: none; background: none transparent; padding: 0; margin: 0; height: auto; } #qr-thread-select .selectrice::before, #qr-thread-select .selectrice::after { display: none; } /* Dumping UI */ .dump #dump-list-container { display: block; } #dump-list-container { display: none; position: relative; overflow-y: hidden; margin-top: 1px; } #dump-list { overflow-x: auto; overflow-y: hidden; white-space: nowrap; width: 248px; max-width: 100%; min-width: 100%; } #dump-list:hover { overflow-x: auto; } .qr-preview { -moz-box-sizing: border-box; counter-increment: thumbnails; cursor: move; display: inline-block; height: 90px; width: 90px; padding: 2px; opacity: .5; overflow: hidden; position: relative; text-shadow: 0 1px 1px #000; transition: opacity .25s ease-in-out; vertical-align: top; } .qr-preview:hover, .qr-preview:focus { opacity: .9; } .qr-preview::before { content: counter(thumbnails); color: #fff; position: absolute; top: 3px; right: 3px; text-shadow: 0 0 3px #000, 0 0 8px #000; } .qr-preview#selected { opacity: 1; } .qr-preview.drag { box-shadow: 0 0 10px rgba(0,0,0,.5); } .qr-preview.over { border-color: #fff; } .qr-preview > span { color: #fff; } .remove { background: none; color: #e00; font-weight: 700; padding: 3px; } a:only-of-type > .remove { display: none; } .remove:hover::after { content: \" Remove\"; } .qr-preview > label { background: rgba(0,0,0,.5); color: #fff; right: 0; bottom: 0; left: 0; position: absolute; text-align: center; } .qr-preview > label > input { margin: 0; } #add-post { cursor: pointer; font-size: 2em; position: absolute; top: 50%; right: 10px; transform: translateY(-50%); } /* Ads */ .fade-ads .topad img, .fade-ads .middlead img, .fade-ads .bottomad img { opacity: 0.3; transition: opacity .3s linear; } .fade-ads .topad img:hover, .fade-ads .middlead img:hover, .fade-ads .bottomad img:hover { opacity: 1; } .hide-ads .bottomad + hr, .hide-ads .topad, .hide-ads .middlead, .hide-ads .bottomad, .hide-ads .ad-plea { display: none; } .shrink-ads .topad a img, .shrink-ads .middlead a img, .shrink-ads .bottomad a img { width: 500px; height: auto; } /* Mascot Positions */ #mascot { display: none; position: fixed; z-index: -1; bottom: 0; left: 0; right: 0; line-height: 0; cursor: pointer; } .mascot-position-above-post-form.post-form-style-fixed:not(.post-form-decorations) #mascot img { margin-bottom: -2px; } .mascots #mascot { display: block; } .sidebar-location-right.mascot-location-sidebar #mascot, .sidebar-location-left.mascot-location-opposite #mascot { left: auto; } .sidebar-location-left.mascot-location-sidebar #mascot, .sidebar-location-right.mascot-location-opposite #mascot { right: auto; } .sidebar-location-left.mascot-location-sidebar #mascot img, .sidebar-location-right.mascot-location-opposite #mascot img { transform: scaleX(-1); } .fourchan-ss-navigation.bottom.fixed #mascot, .fourchan-ss-navigation.index.pagination-sticky-bottom #mascot { bottom: 1.5em } .mascots-overlap-posts #mascot { z-index: 3; } .mascot-position-middle #mascot { bottom: 50% !important; transform: translateY(50%); } .mascot-position-top #mascot { bottom: auto !important; top: 17px; } .grayscale-mascots #mascot { filter: url('#grayscale'); } .silhouettize-mascots #mascot img { filter: url('#mascot-filter'); } /* Options */ #overlay { position: fixed; z-index: 30; top: 0; right: 0; left: 0; bottom: 0; background: rgba(0,0,0,.5); } #appchanx-settings { width: auto; left: 15%; right: 15%; top: 15%; bottom: 15%; position: fixed; z-index: 31; padding: .3em; } .rounded-edges #appchanx-settings, .rounded-edges #appchanx-settings fieldset, .rounded-edges .mascots-container, .rounded-edges .section-container, .rounded-edges .sections-list > a { border-radius: 3px; } .description { display: none; } #appchanx-settings h3, .section-keybinds, .section-mascots, .section-script, .style { text-align: center; } .section-keybinds table, .section-script fieldset, .section-style fieldset { text-align: left; } .section-keybinds table { margin: auto; } #appchanx-settings fieldset { padding: 5px 0; vertical-align: top; border: 0; margin: 0 3px 6px; display: inline-block; } .single-column-mode #appchanx-settings fieldset { display: block; margin: 0 auto 6px; } #appchanx-settings .section-advanced fieldset { display: block; margin: 0 auto 6px; } .section-advanced .archive-cell { min-width: 200px; } .section-advanced .selectrice { display: inline-block; clear: both; } .section-container { overflow: auto; position: absolute; top: 1.7em; right: 5px; bottom: 5px; left: 5px; padding: 5px; } .sections-list { padding: 0 3px; float: left; } .sections-list > a { cursor: pointer; position: relative; padding: 0 4px; z-index: 1; height: 1.4em; display: inline-block; border-width: 1px 1px 0 1px; border-color: transparent; border-style: solid; } .sections-list > a.tab-selected { border-style: solid; } .credits { float: right; } #appchanx-settings h3 { margin: 0; } .section-script fieldset > div, .section-style fieldset > div, .section-advanced fieldset > div { overflow: visible; padding: 0 5px 0 7px; } #appchanx-settings tr:nth-of-type(2n+1), .section-script fieldset > div:nth-of-type(2n+1), .section-advanced fieldset > div:nth-of-type(2n+1), .section-style fieldset > div:nth-of-type(2n+1), .section-keybinds tr:nth-of-type(2n+1), #selectrice li:nth-of-type(2n+1) { background-color: rgba(0, 0, 0, 0.05); } article li { margin: 10px 0 10px 2em; } #appchanx-settings .option { width: 50%; display: inline-block; vertical-align: bottom; } .option input { width: 100%; } .optionlabel { padding-left: 18px; } .rice + .optionlabel { padding-left: 0; } .section-script fieldset, .styleoption { text-align: left; } .section-style fieldset { width: 370px; } .section-script fieldset { width: 200px; } #mascotcontent, #themecontent, .suboptions { overflow: auto; position: absolute; top: 0; right: 0; bottom: 1.7em; left: 0; } #mascotcontent, #themecontent { padding: 5px; } #themecontent { top: 1.8em; } .mAlign { height: 250px; vertical-align: bottom; display: table-cell; line-height: 0; } #save, .stylesettings { position: absolute; right: 10px; bottom: 0; } .section-style .suboptions { bottom: 0; } .section-container textarea { font-family: monospace; min-height: 150px; resize: vertical; width: 100%; } /* Hover Functionality */ #mouseover { z-index: 33; position: fixed; max-width: 70%; } #mouseover:empty { display: none; } /* Mascot Tab */ #mascot_hide { padding: 3px; position: absolute; top: 2px; right: 18px; } #mascot_hide .rice { float: left; } #mascot_hide > div { height: 0; text-align: right; overflow: hidden; } #mascot_hide:hover > div { height: auto; } #mascot_hide label { width: 100%; display: block; clear: both; text-decoration: none; } .mascots-container { padding: 0; text-align: center; } .mascot, .mascotcontainer { overflow: hidden; } .mascot { position: relative; border: none; margin: 5px; padding: 0; width: 200px; display: inline-block; background-color: transparent; } .mascotcontainer { height: 250px; border: 0; margin: 0; max-height: 250px; cursor: pointer; bottom: 0; border-width: 0 1px 1px; border-style: solid; border-color: transparent; overflow: hidden; } .mascot img { max-width: 200px; } .export-button, .mascotname, #mascot-options { -moz-box-sizing: border-box; padding: 0; width: 100%; } #mascot-options { opacity: 0; transition: opacity .3s linear; } .mascot:hover #mascot-options { opacity: 1; } #mascot-options { position: absolute; bottom: 0; right: 0; left: 0; } .export-button { position: absolute; bottom: 1.7em; right: 0; left: 0; text-align: center; } #mascot-options a { display: inline-block; width: 33%; } #upload { position: absolute; width: 100px; left: 50%; margin-left: -50px; text-align: center; bottom: 0; } #mascots_batch { position: absolute; left: 10px; bottom: 0; } /* Themes Tab */ #themes h1 { position: absolute; right: 300px; bottom: 10px; margin: 0; transition: all .2s ease-in-out; opacity: 0; } #themes .selectedtheme h1 { right: 11px; opacity: 1; } #addthemes { position: absolute; left: 10px; bottom: 0; } .theme { margin: 1em; } /* Theme Editor */ #themeConf { position: fixed; top: 0; bottom: 0; width: 296px; z-index: 10; } .sidebar-location-right #themeConf { right: 2px; left: auto; } .sidebar-location-right #themeConf { left: 2px; right: auto; } #themebar input { width: 30%; } .option .color { width: 10%; border-left: none !important; color: transparent !important; } .option .colorfield { width: 90%; } .themevar textarea { min-width: 100%; max-width: 100%; height: 20em; resize: vertical; } /* Mascot Editor */ #mascotConf { position: fixed; height: 17em; bottom: 0; left: 50%; width: 500px; margin-left: -250px; overflow: auto; z-index: 10; } #mascotConf .option, #mascotConf .optionlabel { -moz-box-sizing: border-box; width: 50%; display: inline-block; vertical-align: middle; } #mascotConf .option input { width: 100%; } #close { position: absolute; left: 10px; bottom: 0; } /* Catalog */ #content .navLinks, #info .navLinks, .btn-wrap { display: block; } .navLinks > .btn-wrap:not(:first-of-type)::before { content: ' - '; } .button { cursor: pointer; } #content .btn-wrap, #info .btn-wrap { display: inline-block; } #post-preview, #quote-preview { position: absolute; z-index: 22; } .rounded-edges #post-preview { border-radius: 3px; } #settings, #threads, #info .navLinks, #content .navLinks { text-align: center; } #threads .thread { vertical-align: top; display: inline-block; word-wrap: break-word; overflow: hidden; margin: 1px; padding: 5px 0 3px; text-align: center; } .extended-small .thread, .small .thread { width: 165px; max-height: 320px; } .small .teaser, .large .teaser { display: none; } .extended-large .thread, .large .thread { width: 270px; max-height: 410px; } .extended-small .thumb, .small .thumb { max-width: 150px; max-height: 150px; } .panel { position: fixed; top: 50% !important; left: 50%; transform: translate(-50%, -50%); padding: 5px; } .icon::after { display: inline-block; float: right; width: 1em; cursor: pointer; } .helpIcon::after { content: '?'; } .closeIcon::after { content: '✖'; } /* Front Page */ #logo { text-align: center; } #doc { -moz-box-sizing: border-box; margin: 10px auto; width: 1006px; padding: 2px; position: relative; } .rounded-edges #doc, .rounded-edges #doc div { border-radius: 3px; } #boards .boxcontent { vertical-align: top; text-align: center; } #filter-container, #options-container { top: 4px; right: 8px; position: absolute; } #filtermenu, #optionsmenu { top: 100% !important; left: auto !important; right: 0 !important; } #boards .column { -moz-box-sizing: border-box; display: inline-block; width: 180px; text-align: left; vertical-align: top; } .bd ul, .boxcontent ul { vertical-align: top; padding: 0; margin: 0; } .right-box .boxcontent ul { padding: 0 10px; } .yuimenuitem, .boxcontent li { list-style-type: none; } .boxbar { position: relative; } #doc h3, .boxbar h2 { margin: 0; } #doc h3 { text-decoration: none !important; } .underline-links #doc h3 { text-decoration: underline !important; } #ft, .box-outer { margin: 2px 0 0; overflow: hidden; } #ft, .boxbar, .boxcontent { padding: 0 8px; } .yui-module { position: absolute; } .yuimenuitem::before { content: \" [ ] \"; font-family: monospace; } .yuimenuitem-checked::before { content: \" [x] \" } .yui-g { overflow: hidden; } .yui-u { display: inline-block; vertical-align: top; width: 499px; float: right; } .yui-u.first { float: left; } #recent-images .boxcontent { text-align: center; } #ft { text-align: center; } #ft ul { padding: 0; } #ft li { list-style-type: none; display: inline-block; width: 100px; } #preview-tooltip-nws, #preview-tooltip-ws, #ft .fill, .clear-bug { display: none; } /* ExLinks */ #exlinks-options-content { padding: 5px; }",
+ layout: "/* Cleanup */ #absbot, #boardNavDesktop, #delPassword, #delform > hr:last-of-type, #navbotright, #postForm, #search-label, #search-label-bottom, #styleSwitcher, #togglePostForm, .boardBanner > div, .mobile, .next form, .next span, .postingMode, .prev form, .prev span, .riced, .sideArrows, .stylechanger, body > br, body > div[style^=\"text-align\"], body > hr { display: none; } /* Empties */ #qr .warning:empty, #qr-thread-select:empty { display: none; } /* File Name Trunctuate / /p/ exif */ .exif, .fileText:hover .fntrunc, .fileText:not(:hover) .fnfull { display: none; } /* Unnecessary */ #qp input, #qp .rice, .inline .rice { display: none !important; } /* Hidden Content */ .forwarded, .hidden, .hidden_thread ~ div, .hidden_thread ~ a, .replyContainer .stub ~ div, .replyContainer .stub ~ a, .stub + div, .thread > .stub:first-child ~ .postContainer, .thread > .stub:first-child ~ .summary, [hidden] { display: none !important; } /* Hidden UI */ #catalog, #navlinks, #navtopright, #svg_filters, .cataloglink, .navLinks { z-index: 7; position: fixed; top: 100%; left: 100%; } /* Hide last horizontal rule, keep clear functionality. */ .board > hr:last-of-type { visibility: hidden; } /* Fappe Tyme */ .fappeTyme .thread > .noFile, .fappeTyme .threadContainer > .noFile { display: none; } /* Defaults */ a { text-decoration: none; outline: none; } .underline-links a { text-decoration: underline; } body, html { min-height: 100%; -moz-box-sizing: border-box; } body { outline: none; min-height: 100%; } .sidebar-hide body { margin: 0 2px; } .sidebar-minimal body { margin: 0 20px; } .sidebar-normal body { margin: 0 252px } .sidebar-large body { margin: 0 303px; } .sidebar-location-right body { margin-left: 2px; } .sidebar-location-left body { margin-right: 2px; } body.unscroll { overflow: hidden; } .fourchan-ss-sidebar body::before { content: ''; position: fixed; top: 0; bottom: 0; -moz-box-sizing: border-box; display: block; z-index: 0; } .fourchan-ss-sidebar.sidebar-large body::before { width: 306px; } .fourchan-ss-sidebar.sidebar-normal body::before { width: 255px; } .fourchan-ss-sidebar.sidebar-minimal body::before { width: 23px; } .sidebar-location-right body::before { right: 0; } sidebar-location-left body::before { left: 0; } .fourchan-ss-sidebar.sidebar-location-right body { padding-right: 2px; } .fourchan-ss-sidebar.sidebar-location-left body { padding-left: 2px; } hr { clear: both; border: 0; padding: 0; margin: 0 0 1px; } .hide-horizontal-rules hr { visibility: hidden; } th { text-align: left; } .center { text-align: center; } .disabled { opacity: 0.5; } .pointer { cursor: pointer; } /* Symbols */ .drop-marker { vertical-align: middle; display: inline-block; margin: 2px 2px 3px; border-top: .5em solid; border-right: .3em solid transparent; border-left: .3em solid transparent; } .brackets-wrap::before { content: \" [\"; } .brackets-wrap::after { content: \"] \"; } /* Thread / Reply Nav */ #navlinks a { position: fixed; z-index: 12; opacity: 0.5; display: inline-block; border-right: 6px solid transparent; border-left: 6px solid transparent; margin: 1.5px; } #navlinks a:first-of-type { border-bottom: 11px solid rgb(130,130,130); } #navlinks a:last-of-type { border-top: 11px solid rgb(130,130,130); } /* Header */ #header-bar { z-index: 6; border-width: 1px; padding: 0 2px; border-style: solid; } .pagination-sticky-top .pagelist, .pagination-sticky-bottom .pagelist, #header-bar { left: 2px; right: 2px; } .navigation-alignment-center #header-bar { text-align: center; } .navigation-alignment-right #header-bar { text-align: right; } .sidebar-location-left.sidebar-large:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-left #header-bar { left: 303px; } .sidebar-location-left.sidebar-normal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-left #header-bar { left: 252px; } .sidebar-location-left.sidebar-minimal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-left.sidebar-minimal:not(.fourchan-ss-navigation) #header-bar { left: 20px; } .sidebar-location-right.sidebar-large:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-right #header-bar { right: 303px; } .sidebar-location-right.sidebar-normal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-right #header-bar { right: 252px; } .sidebar-location-right.sidebar-minimal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-right.sidebar-minimal:not(.fourchan-ss-navigation) #header-bar { right: 20px; } .fourchan-ss-navigation .pagelist, .fourchan-ss-navigation #header-bar { left: 0; right: 0; border-left: 0; border-right: 0; border-radius: 0 !important; } .hide-navigation-decorations #header-bar { font-size: 0; color: transparent; word-spacing: 2px; } #shortcuts { float: right; } .fixed #header-bar.autohide { z-index: 24; } .fixed #header-bar { position: fixed; } .top #header-bar { top: 0; border-top-width: 0; } .rounded-edges.top #header-bar { border-radius: 0 0 3px 3px; } .fixed.bottom #header-bar { bottom: 0; border-bottom-width: 0; } .rounded-edges.bottom #header-bar { border-radius: 3px 3px 0 0; } .hide #header-bar { position: fixed; top: 110%; bottom: auto; } /* Header Autohide */ .fixed #header-bar.autohide:not(:hover) { box-shadow: none; transition: all .8s .6s cubic-bezier(.55, .055, .675, .19); } .fixed.top #header-bar.autohide:not(:hover) { margin-bottom: -1em; transform: translateY(-100%); } .fixed.bottom #header-bar.autohide:not(:hover) { transform: translateY(100%); } #scroll-marker { left: 0; right: 0; height: 10px; position: absolute; } #header-bar #scroll-marker { display: none; } .fixed #header-bar #scroll-marker { display: block; } .fixed.top header-bar #scroll-marker { top: 100%; } .fixed.bottom #header-bar #scroll-marker { bottom: 100%; } /* Notifications */ #notifications { position: fixed; top: 0; text-align: center; right: 0; left: 0; transition: all .8s .6s cubic-bezier(.55, .055, .675, .19); } .fixed.top #header-bar #notifications { position: absolute; top: 100%; } .notification { font-weight: 700; text-shadow: 0 1px 2px rgba(0, 0, 0, .5); box-shadow: 0 1px 2px rgba(0, 0, 0, .15); border-radius: 2px; margin: 1px auto; width: 500px; max-width: 100%; position: relative; transition: all .25s ease-in-out; } .notification.error { background-color: hsla(0, 100%, 38%, .9); } .notification.warning { background-color: hsla(36, 100%, 38%, .9); } .notification.info { background-color: hsla(200, 100%, 38%, .9); } .notification.success { background-color: hsla(104, 100%, 38%, .9); } .notification, .notification a { color: #fff !important; } .notification > .close { top: 0; padding: 2px; right: 4px; position: absolute; color: #fff; } .message { -moz-box-sizing: border-box; padding: 6px 20px; max-height: 200px; width: 100%; overflow: auto; } /* Updater / Thread Stats */ .float #thread-stats, .float #updater { position: fixed; } #update-status.new::after { content: ', '; } /* Pagination */ .pagelist { border-style: solid; border-width: 1px; z-index: 6; } .pagination-alignment-center .pagelist { text-align: center; } .pagination-alignment-right .pagelist { text-align: right; } .pagination-sticky-top .pagelist { position: fixed; top: 0; border-top-width: 0; } .pagination-sticky-bottom .pagelist { position: fixed; bottom: 0; border-bottom-width: 0; } .pagination-top .pagelist { position: static; border-top-width: 0; } .pagination-bottom .pagelist { position: static; } .pagination-top.rounded-edges .pagelist, .pagination-sticky-top.rounded-edges .pagelist { border-radius: 0 0 3px 3px; } .pagination-bottom.rounded-edges .pagelist, .pagination-sticky-bottom.rounded-edges .pagelist { border-radius: 3px 3px 0 0; } .pagination-hide .pagelist { display: none; } .pagination-on-side .pagelist { position: fixed; padding: 0; top: auto; bottom: 0.5em; margin: 0; background: none transparent !important; border: 0 none !important; text-align: right; } .pagination-on-side.post-form-style-fixed.show-post-form-header .pagelist { bottom: 23.1em; } .pagination-on-side.post-form-style-fixed .pagelist { bottom: 21.6em; } .sidebar-location-left.pagination-on-side .pagelist { transform: rotate(-90deg); transform-origin: bottom left; } .sidebar-location-right.pagination-on-side .pagelist { transform: rotate(90deg); transform-origin: bottom right; } .sidebar-location-right.sidebar-large.pagination-on-side .pagelist { left: auto; right: 301px; } .sidebar-location-left.sidebar-large.pagination-on-side .pagelist { right: auto; left: 301px; } .sidebar-location-right.sidebar-normal.pagination-on-side .pagelist { left: auto; right: 246px; } .sidebar-location-left.sidebar-normal.pagination-on-side .pagelist { right: auto; left: 246px; } .sidebar-location-right.sidebar-minimal.pagination-on-side .pagelist { left: auto; right: 246px; } .sidebar-location-left.sidebar-minimal.pagination-on-side .pagelist { right: auto; left: 18px; } .hide-navigation-decorations .pagelist { font-size: 0; color: transparent; word-spacing: 0; } .pagelist input, .pagelist div { vertical-align: middle; } .hide-navigation-decorations .pages a { margin: 0 1px; } .next, .pages, .prev { display: inline-block; margin: 0 3px; } /* Icons */ .icons-4chan-ss #navtopright .exlinksOptionsLink::after, .icons-4chan-ss #main-menu, .icons-4chan-ss .navLinks > a:first-of-type::after, .icons-4chan-ss #thread-watcher::after, .icons-4chan-ss #globalMessage::after, .icons-4chan-ss #boardNavDesktopFoot::after, .icons-4chan-ss #img-controls, .icons-4chan-ss #catalog::after, .icons-4chan-ss #fappeTyme { background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAACWCAMAAAA2YSLzAAAAPFBMVEVkZGRlZWVjY2NmZmZnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dZxmG7AAAAE3RSTlMFFQ0AJD8eQFRqf5CgssDM4+73gHqZRAAAA0pJREFUSMetVlmy5CgMZDMGxK7737Ulgcu8ejMREzHtD7sShJRaKWV/Psq3iz7QGwTF2BZ01hp3N6yasctZJANiN5ZlItDLtNkQDGNeMLU7EqmCbUwhkhZbwsIuNbyWPX7dIyHOrDYOc8SOiEUJjojN0EsWlCXRrq2qvJCsIjic2OcFrwrOpdmTimqVyWG7ZkrWy97p7z/hACd2FUetBcQDpTN+nuKsGng881L5xOz/VQ88xL/eQkyZT3axp+4dUMwvH0Pnhn6wSyR+8IdR4f43/v8XX1BHjXpjwy5RdEcQ7DiuzlBUsFD+GeIFEy6W0pKXoSZOiUz5tf99nvTDD/1sP9VRPvb/un86lT57SVqwSk8KR+L6kgTOlcZslRQe5WmJRKovETW7Anb+HzxUW4Xgnv11fuuj82aKXHz1Tzztx9v4VA9+/6le26B+3VhTC9RMPIr0qx4zaWNsnFRO0s8FWgEIFIRiVUAIlJGciqMmCwpQWyI/OplXA1RrXG1YI2svTQ3ufhWjNlKFqtXFI7Yg+zAXRcBZ+HygJuVHd0ys35bVn6QojLL5cZeVvPht/mVu/r/8s7GMXsLjv2s71GZhgjnEwsEVXogiSl/pl7LWra0IQgO3poTsieoYd4dhWfJlGWqyQf6sLxWt3/MRa4Im04ixeSdAWnxvqCX6tObVmzpZOPOZvrBNJF8gmGciBChsV+YdRYwnAvNpS4AnYFBm0KA2a35Unh+efxjercaLfV7wW0rtUTNl2j715al/9VtfutF+NZ/+aZSa+py/GCpRyvr17EsVLbRhmN++BBY/ik5/+YPK6bKnf2T8fh7P+uEYn0D3E4L3i6QHmvc3+k+8PN6Mb1w52tje6LbAi+M0FT4YneqVbpVDPnL2Xqx7m3tf9ENXHba9H/a/+X3z/+XfCnOo+Zy/o4SgY5Z6iq0nb+9Mc4JxL5f1qYs+xhTP/uiX/cMe4+hDHAfGnmGe+Ev+G88vnG7Ie20wHiUt/S1Kv+6BCM/9fkEfz73/9HNufQ4ZKdzvnwtS/LXltRcJB/yJ23H/mo89nPFa85Li3XOYu435LwTXKVWwO+cnlWFTB47L/AdfR//KI2bvF8sAb0c/M+1+YE3/oS77B8N+UUVHraV6AAAAAElFTkSuQmCC\"); } .icons-oneechan #navtopright .exlinksOptionsLink::after, .icons-oneechan #main-menu, .icons-oneechan .navLinks > a:first-of-type::after, .icons-oneechan #thread-watcher::after, .icons-oneechan #globalMessage::after, .icons-oneechan #boardNavDesktopFoot::after, .icons-oneechan #img-controls, .icons-oneechan #catalog::after, .icons-oneechan #fappeTyme { background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAACWCAMAAAA2YSLzAAAAPFBMVEVoaGhqampeXl5sbGxsbGxra2tsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGzXmsRLAAAAE3RSTlMAEAYnHBg2QExbcYaWqM++2+z4BMdvAwAAAtVJREFUSMfFVgmu3CAMhYRPAmb3/e9aL5Bl2kptVbXWSOSBsY15NmOMMZs1KnNExC+ezgV4MBtNMIw58+qX2REtQwiifdC6hwlNQBGfUlBzc+KYkP3IxH5hNvicCPXrMfEVi3ts2WrzaiN6jie2OI2GXbBfXiA/XPyexPpEHrHdyDV8YAt6vEYCVpJ3S7rXAZKkkfbnuR8Uk/32xsac6Y01La2ZfyIh1VrX9Rnfu5ygd6/XeQAGFxACkopDb3mkeXug48x5FCKhNzW+1j2t8/5EEwHTIfPm6G3aP37o/w/ir3QZ2V/xY0spdSxWL7MrLU7slmnDSY0UrH6CBJ/wFI3TNGECCDY9G4xmrpDkZvQMJ4q31EzLQuhipr7ag8ueFa+hUQy2d43nnPGg7NopHTUVyYlWpE+lUT4qfhDCnLpzB8oXLLJb4leptD/JblswOaZd0gRkDV0cJi69NNOUaclRpG6S1NPdRVPLjI3VSjWV8+FmaARknTxqfipl0tGR1DXvd0h251Ww/ZlaNQoaX3bqUS+IK6ZX4hysvuQinS+6n9638/6BbK4RLi6R11O8rPS4OnO66KHtw6yK96BWrg5QxDGcVzcoB8cYb/dE1zPO6C+pHxN0Ttw/JtJrx55+oV9Jq+ScF22IfBWDD+sHfTnBmKlpS99hPGSC4SBsi+dP3p0PjVBVedMdO3WoG57cAEbYVNkRHFROIzjYuGjoM7LOaEQKbtQjkuo5hCSMmezaNq3Gl6TE5J3ZLMu26SjpPJZo4h/9FJhT4JQJzjFXD7x54fBgzO9RvDH9Vl5vHIetcGHct1apLh/6gU3c2PYy5rrYh7a1NP29/H/G9xn/d+f7FNVcw9/H/9sf8ymXPnqdDd7Wx3OpzWRJuP8+iMTFe7wZq48Tce7QciNetUzku+pT/t4UHK/iIq2yPR/8y/315M/rWl1A/sM83phVh6+aeZY39OLNN4Y0P2GdHOWPAAAAAElFTkSuQmCC\"); } /* Banner & Board Title */ .boardBanner { line-height: 0; } .faded-4chan-banner .boardBanner { opacity: 0.5; transition: opacity 0.3s ease-in-out .5s; } .faded-4chan-banner .boardBanner:hover { opacity: 1; transition: opacity 0.3s ease-in; } /* From 4chan SS / OneeChan */ .fourchan-banner-reflection .boardBanner::after { background-image: -moz-element(#Banner); bottom: -100%; content: ''; left: 0; mask: url(\"data:image/svg+xml, #mask\"); opacity: 0.3; position: absolute; right: 0; top: 100%; -moz-transform: scaleY(-1); z-index: -1; } .fourchan-banner-at-sidebar-top .boardBanner, .fourchan-banner-at-sidebar-bottom .boardBanner, .fourchan-banner-at-sidebar-bottom .boardBanner { position: fixed; } .fourchan-banner-at-sidebar-top .boardBanner { top: 16px; } .fourchan-banner-at-sidebar-bottom .boardBanner { bottom: 270px; } .fourchan-banner-under-post-form .boardBanner { bottom: 130px; } .board-title-at-sidebar-top.sidebar-location-right #boardTitle, .board-title-at-sidebar-bottom.sidebar-location-right #boardTitle, .board-title-under-post-form.sidebar-location-right #boardTitle, .fourchan-banner-at-sidebar-top.sidebar-location-right .boardBanner, .fourchan-banner-at-sidebar-bottom.sidebar-location-right .boardBanner, .fourchan-banner-under-post-form.sidebar-location-right .boardBanner { right: 2px; } .board-title-at-sidebar-top.sidebar-location-left #boardTitle, .board-title-at-sidebar-bottom.sidebar-location-left #boardTitle, .board-title-under-post-form.sidebar-location-left #boardTitle, .fourchan-banner-at-sidebar-top.sidebar-location-left .boardBanner, .fourchan-banner-at-sidebar-bottom.sidebar-location-left .boardBanner, .fourchan-banner-under-post-form.sidebar-location-left .boardBanner { left: 2px; } .board-title-at-sidebar-top #boardTitle, .board-title-at-sidebar-bottom #boardTitle, .board-title-under-post-form #boardTitle, .fourchan-banner-at-sidebar-top .boardBanner img, .fourchan-banner-at-sidebar-bottom .boardBanner img, .fourchan-banner-under-post-form .boardBanner img { width: 248px; } .board-title-at-sidebar-top.sidebar-large #boardTitle, .board-title-at-sidebar-bottom.sidebar-large #boardTitle, .board-title-under-post-form.sidebar-large #boardTitle, .fourchan-banner-at-sidebar-top.sidebar-large .boardBanner img, .fourchan-banner-at-sidebar-bottom.sidebar-large .boardBanner img, .fourchan-banner-under-post-form.sidebar-large .boardBanner img { width: 299px; } .fourchan-banner-at-top .boardBanner { position: relative; display: table; margin: 12px auto; text-align: center; } :root:not(.board-subtitle) .boardSubtitle, .board-title-hide #boardTitle, .fourchan-banner-hide .boardBanner { display: none; } #boardTitle { text-align: center; z-index: 4; } .board-title-at-sidebar-top #boardTitle, .board-title-at-sidebar-bottom #boardTitle, .board-title-under-post-form #boardTitle { position: fixed; } .board-title-at-sidebar-top.fourchan-banner-at-sidebar-top.sidebar-large #boardTitle { top: 121px; } .board-title-at-sidebar-top.fourchan-banner-at-sidebar-top #boardTitle { top: 104px; } .board-title-at-sidebar-top #boardTitle { top: 40px; } .board-title-at-sidebar-bottom #boardTitle { bottom: 280px; } .board-title-under-post-form #boardTitle { bottom: 140px; } /* Hover UI */ .move { cursor: pointer; } #ihover { position: fixed; max-height: 97%; max-width: 75%; z-index: 22; } #qp { position: fixed; z-index: 22; } #qp .postMessage::after { clear: both; display: block; content: \"\"; } #qp .full-image { max-height: 300px; max-width: 500px; } #menu { position: fixed; outline: none; z-index: 22; } /* Image Expansion */ .fit-width .full-image { max-width: 100%; width: 100%; } .fit-height .full-image { max-height: 95vh; } .images-overlap-post-form .full-image { position: relative; z-index: 21; } /* Delete Buttons */ .hide-delete-ui .deleteform, .hide-delete-ui .post:not(#exlinks-options) .rice { display: none; } .hide-delete-ui .postInfo { padding: 0 0 0 3px; } .deleteform { position: fixed; z-index: 18; width: 0; bottom: 0; right: 0; border-width: 1px 0 0 1px; border-style: solid; font-size: 0; color: transparent; } .deleteform:hover { width: auto; } .deleteform::before { z-index: 18; border-width: 1px 0 0 1px; border-style: solid; content: '✖'; display: block; position: fixed; bottom: 0; right: 0; -moz-box-sizing: border-box; height: 1.6em; width: 1.4em; text-align: center; } .deleteform:hover::before { display: none; } .deleteform input { margin: 0 1px 0 0; } /* Slideout Navigation */ #boardNavDesktopFoot { position: fixed; text-align: center; font-size: 0; color: transparent; overflow: hidden; -moz-box-sizing: border-box; width: 248px; } .sidebar-large #boardNavDesktopFoot { width: 299px; } .sidebar-location-right #boardNavDesktopFoot { right: 2px; } .sidebar-location-left #boardNavDesktopFoot { left: 2px; } #boardNavDesktopFoot:hover { overflow-y: auto; padding: 2px; } #boardNavDesktopFoot:not(:hover) { border-color: transparent; background-color: transparent; height: 0; overflow: hidden; padding: 0; border: 0 none; } .slideout-navigation-compact #boardNavDesktopFoot { word-spacing: 1px; } .slideout-navigation-list #boardNavDesktopFoot a { display: block; } .slideout-navigation-list #boardNavDesktopFoot:hover { max-height: 400px; } .slideout-navigation-list #boardNavDesktopFoot a::after { content: ' - ' attr(title); } .slideout-navigation-list #boardNavDesktopFoot a[href*='//boards.4chan.org/']::after, .slideout-navigation-list #boardNavDesktopFoot a[href*='//rs.4chan.org/']::after { content: '/ - ' attr(title); } .slideout-navigation-list #boardNavDesktopFoot a[href*='//boards.4chan.org/']::before, .slideout-navigation-list #boardNavDesktopFoot a[href*='//rs.4chan.org/']::before { content: '/'; } .slideout-navigation-hide #boardNavDesktopFoot { display: none; } /* Watcher */ #thread-watcher { position: fixed; z-index: 14; padding: 2px; } #thread-watcher { width: 200px; } #thread-watcher:not(:hover) { max-height: 200px; overflow: hidden; } .rounded-edges #thread-watcher { border-radius: 3px; } #thread-watcher > div { max-height: 1.3em; overflow: hidden; } .slideout-watcher #thread-watcher { -moz-box-sizing: border-box; width: 248px; } .slideout-watcher.sidebar-large #boardNavDesktopFoot { width: 299px; } .slideout-watcher.sidebar-location-right #thread-watcher { left: auto !important; right: 2px !important; } .slideout-watcher.sidebar-location-left #thread-watcher { right: auto !important; left: 2px !important; } .slideout-watcher #thread-watcher .move { cursor: default; } .slideout-watcher.underline-links #thread-watcher .move { text-decoration: underline; } .slideout-watcher #thread-watcher > div { overflow: hidden; } .slideout-watcher #thread-watcher:hover { overflow-y: auto; } .slideout-watcher #thread-watcher:not(:hover) { height: 0; overflow: hidden; border: 0 none; padding: 0; } .watch-thread-link { padding-top: 18px; width: 18px; height: 0px; display: inline-block; background-repeat: no-repeat; opacity: 0.2; position: relative; top: 1px; } .watch-thread-link.watched { opacity: 1; } /* Announcements */ #globalMessage { text-align: center; } .rounded-edges #globalMessage { border-radius: 3px; } .announcements-slideout #globalMessage { position: fixed; padding: 2px; width: 248px; } .announcements-slideout.sidebar-location-right #globalMessage { left: auto; right: 2px; } .announcements-slideout.sidebar-location-left #globalMessage { right: auto; left: 2px; } .announcements-slideout.sidebar-large #globalMessage { width: 299px; } .announcements-slideout #globalMessage h3 { margin: 0; } .announcements-slideout #globalMessage:hover { -moz-box-sizing: border-box; overflow-y: auto; } .announcements-slideout #globalMessage:not(:hover) { height: 0; overflow: hidden; padding: 0; border: 0 none; } .announcements-hide #globalMessage { display: none !important; } /* Threads */ #threads, .rounded-edges .board > .thread { border-radius: 4px; } /* Thread Clearfix */ .thread > .threadContainer:last-of-type::after, .thread > .postContainer:last-of-type::after { display: block; content: ' '; clear: both; } /* Posts */ .expanding { opacity: .5; } .fileText:hover .fntrunc, .fileText:not(:hover) .fnfull, .expanded-image > .post > .file > .fileThumb > img[data-md5], .post > .file > .fileThumb > .full-image { display: none; } .expanded-image > .post > .file > .fileThumb > .full-image { display: block; } .thread > .replyContainer:last-of-type .post { margin-bottom: 0; } .menu-button { position: relative; } .stub .menu-button, .post .menu-button, .hide-thread-button, .show-thread-button span, .hide-reply-button, .show-reply-button span { float: right; } .post .menu-button, .hide-thread-button, .hide-reply-button { margin: 0 3px; opacity: 0; transition: opacity .3s ease-out 0s; } .post:hover .hide-reply-button, .post:hover .menu-button, .post:hover .hide-thread-button, .hidden_thread .hide-thread-button, .hidden_thread .menu-button, .inline .hide-reply-button, .inline .menu-button { opacity: 1; } .hidden_thread { text-align: right; } .color-user-ids .posteruid .hand { padding: .1em .3em; border-radius: 1em; font-size: 80%; } .postInfo > span { vertical-align: bottom; } .bolds .subject, .bolds .name { font-weight: 600; } .italics .postertrip { font-style: italic; } .underline-links .replylink { text-decoration: underline; } .fileInfo { padding: 0 3px; } .fileThumb { float: left; margin: 3px 20px; outline: none; } .reply.post { -moz-box-sizing: border-box; display: inline-block; } .fit-width-replies .reply.post { display: block; overflow: hidden; } .fit-width-replies .expanded-image .reply.post, .fit-width-replies .hasInline .reply.post { width: 100%; } .indent-replies #unread-line, .indent-replies .thread > .replyContainer, .indent-replies .threadContainer > .replyContainer { margin-left: 2em; } .expanded-image .reply.post, .hasInline .reply.post { display: inline-block; overflow: visible; clear: both; } .rounded-edges .post { border-radius: 3px; } .spoiler, s { text-decoration: none; } /* Emoji */ a.useremail:last-of-type { vertical-align: top; } /* Reply Clearfix */ .reply.post .postMessage { clear: right; } .op-background .op.post .postMessage::after, .force-reply-break .op.post .postMessage::after { display: block; content: ' '; clear: both; } /* OP */ .favicon { vertical-align: bottom; } .op-background .op.post { -moz-box-sizing: border-box; } /* Summary */ .force-reply-break .summary { clear: both; } /* Inlined */ .inline { margin: 2px 8px 2px 2px; } .post .inline { margin: 2px; } .inline .replyContainer { display: inline-block; } /* Inlined Clearfix */ .inline .postMessage::after { clear: both; display: block; content: \"\"; } /* Quotes */ .inlined { opacity: .5; } .underline-links .quotelink { text-decoration: underline; } .filtered, .quotelink.filtered { text-decoration: line-through !important; } .inline + .hashlink { display: none; } /* Quote Threading */ .threadContainer { padding-left: 2em; border-left: 1px solid; } .indent-replies .threadContainer { margin-left: 2em; padding-left: 0; } .threadOP { clear: both; } /* Backlinks */ .underline-links .forwardlink, .underline-links .backlink { text-decoration: underline; } .backlink.dead { text-decoration: none; } .filtered-backlinks .filtered.backlink { display: none; } .backlinks-position-lower-left .container, .backlinks-position-lower-right .container { max-width: 100%; padding: 0 5px; } .backlinks-position-lower-left .reply.quoted, .backlinks-position-lower-right .reply.quoted { position: relative; padding-bottom: 1.7em; } .backlinks-position-lower-left .inline .reply.quoted, .backlinks-position-lower-right .inline .reply.quoted, .backlinks-position-lower-right #qp .reply.quoted, .backlinks-position-lower-left #qp .reply.quoted { position: static; padding-bottom: 0; } .backlinks-position-lower-right .reply .container, .backlinks-position-lower-left .reply .container { position: absolute; bottom: 0; padding: 0 5px; } .backlinks-position-lower-left .reply .container { left: 0; } .backlinks-position-lower-right .reply .container { right: 0; } .backlinks-position-lower-right .container::before, .backlinks-position-lower-left .reply .container::before { content: 'REPLIES: '; } .container:empty { display: none; } .backlinks-position-lower-left #qp .container, .backlinks-position-lower-left .inline .container, .backlinks-position-lower-right .inline .container, .backlinks-position-lower-right #qp .container { position: static; max-width: 100%; } .backlinks-position-lower-left #qp .container::before, .backlinks-position-lower-left .inline .container::before, .backlinks-position-lower-right #qp .container::before, .backlinks-position-lower-right .inline .container::before { content: ''; } .backlinks-position-lower-right .inline .container { float: none; } /* Fixes text spoilers */ .remove-spoilers.indicate-spoilers .spoiler::before, .remove-spoilers.indicate-spoilers s::before { content: '[spoiler]'; } .remove-spoilers.indicate-spoilers .spoiler::after, .remove-spoilers.indicate-spoilers s::after { content: '[/spoiler]'; } :root:not(.remove-spoilers) .spoiler:not(:hover) *, :root:not(.remove-spoilers) s:not(:hover) * { color: rgb(0,0,0) !important; text-shadow: none !important; } :root:not(.remove-spoilers) spoiler:not(:hover), :root:not(.remove-spoilers) s:not(:hover) { background-color: rgb(0,0,0); color: rgb(0,0,0) !important; text-shadow: none !important; } /* Code */ .prettyprint { -moz-box-sizing: border-box; font-family: monospace; display: inline-block; margin: 0 auto .1em 0; vertical-align: middle; white-space: pre-wrap; border-radius: 2px; overflow-x: auto; padding: 3px; max-width: 100%; } /* Menu */ .entry { border-bottom: 1px solid rgba(0,0,0,.25); cursor: pointer; display: block; outline: none; padding: 3px 1em 3px 7px; position: relative; text-decoration: none; white-space: nowrap; } .entry:last-child { border-bottom: 0; } .has-submenu::after { content: \"\"; border-left: .5em solid; border-top: .3em solid transparent; border-bottom: .3em solid transparent; display: inline-block; margin: .3em; position: absolute; right: 0; } .submenu { display: none; position: absolute; top: -1px; } .focused .submenu { display: block; } /* Stubs */ .fit-width-replies .stub { display: block; text-align: right; clear: both; } /* Element Replacing: */ /* Checkboxes */ .rice { cursor: pointer; width: 9px; height: 9px; margin: 2px 3px 3px; display: inline-block; vertical-align: bottom; } input[type=checkbox]:checked + .rice { position: relative; } input[type=checkbox]:checked + .rice::after { content: \"\"; display: block; width: 4px; height: 10px; border-width: 0 3px 3px 0; border-style: solid; transform: rotate(45deg); position: absolute; left: 2px; bottom: -1px; } .rounded-edges .rice { border-radius: 2px;} } .circle-checkboxes .rice { border-radius: 6px;} } input:checked + .rice { background-attachment: scroll; background-repeat: no-repeat; background-position: bottom right; } /* Selects */ .selectrice { position: relative; cursor: default; overflow: hidden; text-align: left; } #settings .selectrice { display: inline-block; } .selectrice::after { content: \"\"; border-right: .25em solid transparent; border-left: .25em solid transparent; position: absolute; right: .4em; top: .5em; } .selectrice::before { content: \"\"; height: 1.6em; position: absolute; right: 1.3em; top: 0; } /* Select Dropdown */ #selectrice { padding: 0; margin: 0; position: fixed; max-height: 120px; overflow-y: auto; overflow-x: hidden; z-index: 32; } #selectrice:empty { display: none; } /* Post Form Shortcut */ .qr-shortcut.on-page { font-size: 250%; } /* Post Form */ #qr { z-index: 20; position: fixed; background: none; border: none; padding: 1px; min-width: 248px; background: transparent; border: 1px solid transparent; } .sidebar-large #qr { min-width: 299px; } .rounded-edges #qr, .rounded-edges #qrtab { border-radius: 3px 3px 0 0; } .post-form-style-fixed #qr { top: auto !important; } .sidebar-location-left:not(.post-form-style-float) #qr { left: 0 !important; right: auto !important; } .sidebar-location-right:not(.post-form-style-float) #qr { right: 0 !important; left: auto !important; } :root:not(.post-form-style-float) #qr { bottom: 0 !important; } .fourchan-ss-navigation.fixed.bottom:not(.post-form-style-float) #qr, .fourchan-ss-navigation.index.pagination-sticky-bottom:not(.post-form-style-float) #qr { bottom: 1.5em !important; } .post-form-style-slideout #qr { top: auto !important; } .post-form-style-slideout.sidebar-location-left #qr { transform: translateX(-93%); } .post-form-style-slideout.sidebar-location-right #qr { transform: translateX(93%); } .post-form-style-slideout #qr:hover, .post-form-style-slideout #qr.has-focus, .post-form-style-slideout #qr.dump { transform: translate(0); } .post-form-style-tabbed-slideout #qr { top: auto !important; } .post-form-style-tabbed-slideout.sidebar-location-left #qr { transform: translateX(-100%); } .post-form-style-tabbed-slideout.sidebar-location-right #qr { transform: translateX(100%); } .post-form-style-tabbed-slideout #qr:hover, .post-form-style-tabbed-slideout #qr.has-focus, .post-form-style-tabbed-slideout #qr.dump { transform: translateX(0); } .post-form-style-tabbed-slideout #qrtab { position: absolute; top: 0; width: 120px; text-align: center; border-width: 1px 1px 0 1px; cursor: default; } .post-form-style-tabbed-slideout.sidebar-location-left #qrtab { transform: rotate(90deg); transform-origin: bottom right; left: 100%; } .post-form-style-tabbed-slideout.sidebar-location-right #qrtab { transform: rotate(-90deg); transform-origin: bottom right; right: 100%; } .post-form-style-tabbed-slideout #qr:hover #qrtab, .post-form-style-tabbed-slideout #qr.has-focus #qrtab, .post-form-style-tabbed-slideout #qr.dump #qrtab { opacity: 0 !important; } .post-form-style-slideout #qrtab input, .post-form-style-slideout #qrtab .rice, .post-form-style-tabbed-slideout #qrtab input, .post-form-style-tabbed-slideout #qrtab .close, .post-form-style-tabbed-slideout #qrtab .rice, .post-form-style-tabbed-slideout #qrtab span { display: none; } .post-form-style-tabbed-slideout #qrtab .selectrice { text-align: center; } .transparent-post-form #qr { opacity: 0.2; transition: opacity .3s ease-in-out 1s; } .transparent-post-form #qr:hover, .transparent-post-form #qr.has-focus, .transparent-post-form #qr.dump { opacity: 1; transition: opacity .3s linear; } :root:not(.show-post-form-header):not(.post-form-style-float):not(.post-form-style-tabbed-slideout) #qrtab, .post-form-style-float .autohide:not(:hover):not(.has-focus) form, .show-post-form-header.post-form-style-fixed .autohide:not(:hover):not(.has-focus) form { display: none !important; } :root:not(.post-form-style-tabbed-slideout) #qrtab { margin-bottom: 1px; } #qr.autohide:not(:hover):not(.has-focus) #qrtab { margin-bottom: 0; } .post-form-slideout-transitions.post-form-style-slideout #qr, .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr { transition: transform .3s ease-in-out 1s; } .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr.dump, .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr:hover, .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr.has-focus, .post-form-slideout-transitions.post-form-style-slideout #qr.dump, .post-form-slideout-transitions.post-form-style-slideout #qr:hover, .post-form-slideout-transitions.post-form-style-slideout #qr.has-focus { transition: transform .3s linear; } .post-form-slideout-transitions #qrtab { transition: opacity .3s ease-in-out 1s; } .post-form-slideout-transitions #qr:hover #qrtab { transition: opacity .3s linear; } #qr .close { float: right; padding: 0 3px; } #qr .warning { min-height: 1.6em; vertical-align: middle; padding: 0 1px; border-width: 1px; border-style: solid; } .persona { width: 248px; max-width: 100%; min-width: 100%; } .persona input.field { width: 100%; } #qr textarea.field { height: 11.6em; min-height: 6em; } #qr.has-captcha textarea.field { height: 6em; } .compact-post-form-inputs .persona input.field { width: 33%; } .compact-post-form-inputs .persona input.field:first-child { margin: 0; } .compact-post-form-inputs .persona input.field { margin: 0 0 0 0.5%; } .compact-post-form-inputs #qr textarea.field { height: 14.9em; min-height: 9em; } .compact-post-form-inputs #qr.has-captcha textarea.field { height: 9em; } .tripcode-hider .tripped:not(:hover):not(:focus) { color: transparent !important; } .textarea-resize-horizontal #qr textarea { resize: horizontal; } .textarea-resize-vertical #qr textarea { resize: vertical; } .textarea-resize-both #qr textarea { resize: both; } .textarea-resize-none #qr textarea { resize: none; } .captcha-img { margin: 1px 0 0; text-align: center; line-height: 0; } .captcha-img img { width: 246px; } .captcha-img, .captcha-img img { height: 4em; } .captcha-input { width: 100%; margin: 1px 0 0; } .field, .selectrice, button, input:not([type=radio]) { -moz-box-sizing: border-box; height: 1.6em; margin: 1px 0 0; vertical-align: bottom; padding: 0 1px; outline: none; } .selectrice { padding-right: 1.6em; } #qr textarea { min-width: 100%; } #qr [type='submit'] { width: 25%; } [type='file'] { position: absolute; opacity: 0; z-index: -1; } /* Fake File Input */ #qr-filename, #qr-filerm, .has-file #qr-no-file { display: none; } #qr-no-file, .has-file #qr-filename { display: block; } .has-file #qr-filerm { display: inline-block; } #qr-extras-container { position: absolute; right: 0; top: 0; z-index: 2; } #qr-extras-container > label, #qr-extras-container > a { cursor: pointer; margin-right: 3px; } #qr-filename-container { -moz-box-sizing: border-box; display: inline-block; position: relative; width: 100px; min-width: 74.6%; max-width: 74.6%; margin-right: 0.4%; overflow: hidden; padding: 2px 1px 0; } /* Thread Select */ #qr-thread-select, #qr-thread-select .selectrice div { display: inline; } #qr-thread-select .selectrice { cursor: pointer; display: inline-block; width: 120px; border: none; background: none transparent; padding: 0; margin: 0; height: auto; } #qr-thread-select .selectrice::before, #qr-thread-select .selectrice::after { display: none; } /* Dumping UI */ .dump #dump-list-container { display: block; } #dump-list-container { display: none; position: relative; overflow-y: hidden; margin-top: 1px; } #dump-list { overflow-x: auto; overflow-y: hidden; white-space: nowrap; width: 248px; max-width: 100%; min-width: 100%; } #dump-list:hover { overflow-x: auto; } .qr-preview { -moz-box-sizing: border-box; counter-increment: thumbnails; cursor: move; display: inline-block; height: 90px; width: 90px; padding: 2px; opacity: .5; overflow: hidden; position: relative; text-shadow: 0 1px 1px #000; transition: opacity .25s ease-in-out; vertical-align: top; } .qr-preview:hover, .qr-preview:focus { opacity: .9; } .qr-preview::before { content: counter(thumbnails); color: #fff; position: absolute; top: 3px; right: 3px; text-shadow: 0 0 3px #000, 0 0 8px #000; } .qr-preview#selected { opacity: 1; } .qr-preview.drag { box-shadow: 0 0 10px rgba(0,0,0,.5); } .qr-preview.over { border-color: #fff; } .qr-preview > span { color: #fff; } .remove { background: none; color: #e00; font-weight: 700; padding: 3px; } a:only-of-type > .remove { display: none; } .remove:hover::after { content: \" Remove\"; } .qr-preview > label { background: rgba(0,0,0,.5); color: #fff; right: 0; bottom: 0; left: 0; position: absolute; text-align: center; } .qr-preview > label > input { margin: 0; } #add-post { cursor: pointer; font-size: 2em; position: absolute; top: 50%; right: 10px; transform: translateY(-50%); } /* Ads */ .fade-ads .topad img, .fade-ads .middlead img, .fade-ads .bottomad img { opacity: 0.3; transition: opacity .3s linear; } .fade-ads .topad img:hover, .fade-ads .middlead img:hover, .fade-ads .bottomad img:hover { opacity: 1; } .hide-ads .bottomad + hr, .hide-ads .topad, .hide-ads .middlead, .hide-ads .bottomad, .hide-ads .ad-plea { display: none; } .shrink-ads .topad a img, .shrink-ads .middlead a img, .shrink-ads .bottomad a img { width: 500px; height: auto; } /* Mascot Positions */ #mascot { display: none; position: fixed; z-index: -1; bottom: 0; left: 0; right: 0; line-height: 0; cursor: pointer; } .mascot-position-above-post-form.post-form-style-fixed:not(.post-form-decorations) #mascot img { margin-bottom: -2px; } .mascots #mascot { display: block; } .sidebar-location-right.mascot-location-sidebar #mascot, .sidebar-location-left.mascot-location-opposite #mascot { left: auto; } .sidebar-location-left.mascot-location-sidebar #mascot, .sidebar-location-right.mascot-location-opposite #mascot { right: auto; } .sidebar-location-left.mascot-location-sidebar #mascot img, .sidebar-location-right.mascot-location-opposite #mascot img { transform: scaleX(-1); } .fourchan-ss-navigation.bottom.fixed #mascot, .fourchan-ss-navigation.index.pagination-sticky-bottom #mascot { bottom: 1.5em } .mascots-overlap-posts #mascot { z-index: 3; } .mascot-position-middle #mascot { bottom: 50% !important; transform: translateY(50%); } .mascot-position-top #mascot { bottom: auto !important; top: 17px; } .grayscale-mascots #mascot { filter: url('#grayscale'); } .silhouettize-mascots #mascot img { filter: url('#mascot-filter'); } /* Options */ #overlay { position: fixed; z-index: 30; top: 0; right: 0; left: 0; bottom: 0; background: rgba(0,0,0,.5); } #appchanx-settings { width: auto; left: 15%; right: 15%; top: 15%; bottom: 15%; position: fixed; z-index: 31; padding: .3em; } .rounded-edges #appchanx-settings, .rounded-edges #appchanx-settings fieldset, .rounded-edges .mascots-container, .rounded-edges .section-container, .rounded-edges .sections-list > a { border-radius: 3px; } .description { display: none; } #appchanx-settings h3, .section-keybinds, .section-mascots, .section-script, .style { text-align: center; } .section-keybinds table, .section-script fieldset, .section-style fieldset { text-align: left; } .section-keybinds table { margin: auto; } #appchanx-settings fieldset { padding: 5px 0; vertical-align: top; border: 0; margin: 0 3px 6px; display: inline-block; } .single-column-mode #appchanx-settings fieldset { display: block; margin: 0 auto 6px; } #appchanx-settings .section-advanced fieldset { display: block; margin: 0 auto 6px; } .section-advanced .archive-cell { min-width: 200px; } .section-advanced .selectrice { display: inline-block; clear: both; } .section-container { overflow: auto; position: absolute; top: 1.7em; right: 5px; bottom: 5px; left: 5px; padding: 5px; } .sections-list { padding: 0 3px; float: left; } .sections-list > a { cursor: pointer; position: relative; padding: 0 4px; z-index: 1; height: 1.4em; display: inline-block; border-width: 1px 1px 0 1px; border-color: transparent; border-style: solid; } .sections-list > a.tab-selected { border-style: solid; } .credits { float: right; } #appchanx-settings h3 { margin: 0; } .section-script fieldset > div, .section-style fieldset > div, .section-advanced fieldset > div { overflow: visible; padding: 0 5px 0 7px; } #appchanx-settings tr:nth-of-type(2n+1), .section-script fieldset > div:nth-of-type(2n+1), .section-advanced fieldset > div:nth-of-type(2n+1), .section-style fieldset > div:nth-of-type(2n+1), .section-keybinds tr:nth-of-type(2n+1), #selectrice li:nth-of-type(2n+1) { background-color: rgba(0, 0, 0, 0.05); } article li { margin: 10px 0 10px 2em; } #appchanx-settings .option { width: 50%; display: inline-block; vertical-align: bottom; } .option input { width: 100%; } .optionlabel { padding-left: 18px; } .rice + .optionlabel { padding-left: 0; } .section-script fieldset, .styleoption { text-align: left; } .section-style fieldset { width: 370px; } .section-script fieldset { width: 200px; } #mascotcontent, #themecontent, .suboptions { overflow: auto; position: absolute; top: 0; right: 0; bottom: 1.7em; left: 0; } #mascotcontent, #themecontent { padding: 5px; } #themecontent { top: 1.8em; } .mAlign { height: 250px; vertical-align: bottom; display: table-cell; line-height: 0; } #save, .stylesettings { position: absolute; right: 10px; bottom: 0; } .section-style .suboptions { bottom: 0; } .section-container textarea { font-family: monospace; min-height: 150px; resize: vertical; width: 100%; } /* Hover Functionality */ #mouseover { z-index: 33; position: fixed; max-width: 70%; } #mouseover:empty { display: none; } /* Mascot Tab */ #mascot_hide { padding: 3px; position: absolute; top: 2px; right: 18px; } #mascot_hide .rice { float: left; } #mascot_hide > div { height: 0; text-align: right; overflow: hidden; } #mascot_hide:hover > div { height: auto; } #mascot_hide label { width: 100%; display: block; clear: both; text-decoration: none; } .mascots-container { padding: 0; text-align: center; } .mascot, .mascotcontainer { overflow: hidden; } .mascot { position: relative; border: none; margin: 5px; padding: 0; width: 200px; display: inline-block; background-color: transparent; } .mascotcontainer { height: 250px; border: 0; margin: 0; max-height: 250px; cursor: pointer; bottom: 0; border-width: 0 1px 1px; border-style: solid; border-color: transparent; overflow: hidden; } .mascot img { max-width: 200px; } .export-button, .mascotname, #mascot-options { -moz-box-sizing: border-box; padding: 0; width: 100%; } #mascot-options { opacity: 0; transition: opacity .3s linear; } .mascot:hover #mascot-options { opacity: 1; } #mascot-options { position: absolute; bottom: 0; right: 0; left: 0; } .export-button { position: absolute; bottom: 1.7em; right: 0; left: 0; text-align: center; } #mascot-options a { display: inline-block; width: 33%; } #upload { position: absolute; width: 100px; left: 50%; margin-left: -50px; text-align: center; bottom: 0; } #mascots_batch { position: absolute; left: 10px; bottom: 0; } /* Themes Tab */ #themes h1 { position: absolute; right: 300px; bottom: 10px; margin: 0; transition: all .2s ease-in-out; opacity: 0; } #themes .selectedtheme h1 { right: 11px; opacity: 1; } #addthemes { position: absolute; left: 10px; bottom: 0; } .theme { margin: 1em; } /* Theme Editor */ #themeConf { position: fixed; top: 0; bottom: 0; width: 296px; z-index: 10; } .sidebar-location-right #themeConf { right: 2px; left: auto; } .sidebar-location-right #themeConf { left: 2px; right: auto; } #themebar input { width: 30%; } .option .color { width: 10%; border-left: none !important; color: transparent !important; } .option .colorfield { width: 90%; } .themevar textarea { min-width: 100%; max-width: 100%; height: 20em; resize: vertical; } /* Mascot Editor */ #mascotConf { position: fixed; height: 17em; bottom: 0; left: 50%; width: 500px; margin-left: -250px; overflow: auto; z-index: 10; } #mascotConf .option, #mascotConf .optionlabel { -moz-box-sizing: border-box; width: 50%; display: inline-block; vertical-align: middle; } #mascotConf .option input { width: 100%; } #close { position: absolute; left: 10px; bottom: 0; } /* Catalog */ #content .navLinks, #info .navLinks, .btn-wrap { display: block; } .navLinks > .btn-wrap:not(:first-of-type)::before { content: ' - '; } .button { cursor: pointer; } #content .btn-wrap, #info .btn-wrap { display: inline-block; } #post-preview, #quote-preview { position: absolute; z-index: 22; } .rounded-edges #post-preview { border-radius: 3px; } #settings, #threads, #info .navLinks, #content .navLinks { text-align: center; } #threads .thread { vertical-align: top; display: inline-block; word-wrap: break-word; overflow: hidden; margin: 1px; padding: 5px 0 3px; text-align: center; } .extended-small .thread, .small .thread { width: 165px; max-height: 320px; } .small .teaser, .large .teaser { display: none; } .extended-large .thread, .large .thread { width: 270px; max-height: 410px; } .extended-small .thumb, .small .thumb { max-width: 150px; max-height: 150px; } .panel { position: fixed; top: 50% !important; left: 50%; transform: translate(-50%, -50%); padding: 5px; } .icon::after { display: inline-block; float: right; width: 1em; cursor: pointer; } .helpIcon::after { content: '?'; } .closeIcon::after { content: '✖'; } /* Front Page */ #logo { text-align: center; } #doc { -moz-box-sizing: border-box; margin: 10px auto; width: 1006px; padding: 2px; position: relative; } .rounded-edges #doc, .rounded-edges #doc div { border-radius: 3px; } #boards .boxcontent { vertical-align: top; text-align: center; } #filter-container, #options-container { top: 4px; right: 8px; position: absolute; } #filtermenu, #optionsmenu { top: 100% !important; left: auto !important; right: 0 !important; } #boards .column { -moz-box-sizing: border-box; display: inline-block; width: 180px; text-align: left; vertical-align: top; } .bd ul, .boxcontent ul { vertical-align: top; padding: 0; margin: 0; } .right-box .boxcontent ul { padding: 0 10px; } .yuimenuitem, .boxcontent li { list-style-type: none; } .boxbar { position: relative; } #doc h3, .boxbar h2 { margin: 0; } #doc h3 { text-decoration: none !important; } .underline-links #doc h3 { text-decoration: underline !important; } #ft, .box-outer { margin: 2px 0 0; overflow: hidden; } #ft, .boxbar, .boxcontent { padding: 0 8px; } .yui-module { position: absolute; } .yuimenuitem::before { content: \" [ ] \"; font-family: monospace; } .yuimenuitem-checked::before { content: \" [x] \" } .yui-g { overflow: hidden; } .yui-u { display: inline-block; vertical-align: top; width: 499px; float: right; } .yui-u.first { float: left; } #recent-images .boxcontent { text-align: center; } #ft { text-align: center; } #ft ul { padding: 0; } #ft li { list-style-type: none; display: inline-block; width: 100px; } #preview-tooltip-nws, #preview-tooltip-ws, #ft .fill, .clear-bug { display: none; } /* ExLinks */ #exlinks-options-content { padding: 5px; }",
dynamic: function() {
var editSpace, sidebarLocation;
@@ -11824,12 +12179,12 @@
replyRGB = "rgb(" + (replybg.shiftRGB(parseInt(Conf['Silhouette Contrast'], 10), true)) + ")";
Style.lightTheme = bgColor.isLight();
Style.svg.innerHTML = " \n \n \n ";
- return (".hide_thread_button span > span, .hide_reply_button span > span { background-color: " + theme["Links"] + "; } #mascot_hide label { border-bottom: 1px solid " + theme["Reply Border"] + "; } #content .thumb { box-shadow: 0 0 5px " + theme["Reply Border"] + "; } .export-button, .mascotname, #mascot-options { background: " + theme["Dialog Background"] + "; border: 1px solid " + theme["Buttons Border"] + "; } .highlight-you .opContainer.quotesYou, .highlight-own .opContainer.yourPost, .opContainer.filter-highlight { box-shadow: inset 5px 0 " + theme["Backlinked Reply Outline"] + "; } .highlight-you .quotesYou > .reply, .highlight-own .yourPost > .reply, .filter-highlight > .reply { box-shadow: -5px 0 " + theme["Backlinked Reply Outline"] + "; } hr { border-bottom: 1px solid " + theme["Reply Border"] + "; } hr#unread-line { border-bottom: 1px solid " + theme["Reply Background"] + "; visibility: visible; } .threadContainer { border-color: " + theme["Reply Border"] + " !important; } html { background: " + (backgroundC || '') + "; background-image: " + (theme["Background Image"] || '') + "; background-repeat: " + (theme["Background Repeat"] || '') + "; background-attachment: " + (theme["Background Attachment"] || '') + "; background-position: " + (theme["Background Position"] || '') + "; } .panel, .section-container, #exlinks-options-content, #themecontent { background: " + backgroundC + "; border: 1px solid " + theme["Reply Border"] + "; } .sections-list > a.tab-selected { background: " + backgroundC + "; border-color: " + theme["Reply Border"] + "; } .captcha-img img { filter: url(\"#captcha-filter\"); } #boardTitle { text-shadow: 1px 1px " + backgroundC + ", -1px -1px " + backgroundC + ", 1px -1px " + backgroundC + ", -1px 1px " + backgroundC + "; } .sidebar-glow #boardTitle { text-shadow: 1px 1px 1px " + backgroundC + ", -1px -1px 1px " + backgroundC + ", 1px -1px 1px " + backgroundC + ", -1px 1px 1px " + backgroundC + ", 0 2px 4px rgba(0,0,0,.6), 0 0 10px rgba(0,0,0,.6); } #exlinks-options, #appchanx-settings, #qrtab, input[type=\"submit\"], input[value=\"Report\"], span[style=\"left: 5px; position: absolute;\"] a { background: " + theme["Buttons Background"] + "; border: 1px solid " + theme["Buttons Border"] + "; } .enabled .mascotcontainer { background: " + theme["Buttons Background"] + "; border-color: " + theme["Buttons Border"] + "; } #dump, #qr-filename-container, #appchanx-settings input, .captcha-img, .dump #dump, .qr-preview, .selectrice, button, input, textarea { background: " + theme["Input Background"] + "; border: 1px solid " + theme["Input Border"] + "; } .has-file #qr-extras-container { background: " + theme["Input Background"] + "; } #dump:hover, #qr-filename-container:hover, .selectrice:hover, #selectrice li:hover, #selectrice li:nth-of-type(2n+1):hover, input:hover, textarea:hover { background: " + theme["Hovered Input Background"] + "; border-color: " + theme["Hovered Input Border"] + "; } .has-file #qr-filename-container:hover #qr-extras-container { background: " + theme["Hovered Input Background"] + "; } #dump:active, #dump:focus, #selectrice li:focus, .selectrice:focus, #qr-filename-container:active, #qr-filename-container:focus, input:focus, textarea:focus, textarea.field:focus { background: " + theme["Focused Input Background"] + "; border-color: " + theme["Focused Input Border"] + "; color: " + theme["Inputs"] + "; } .has-file #qr-filename-container:active #qr-extras-container, .has-file #qr-filename-container:focus #qr-extras-container { background: " + theme["Focused Input Background"] + "; } #ft, #mouseover, #post-preview, #qp .post, #threads > .thread, #xupdater, .box-outer, .reply.post { border-width: 1px; border-style: solid; border-color: " + theme["Reply Border"] + "; background: " + theme["Reply Background"] + "; } .exblock.reply, .reply.post.highlight, .reply.post:target { background: " + theme["Highlighted Reply Background"] + "; border: 1px solid " + theme["Highlighted Reply Border"] + "; } #header-bar, .pagelist { background: " + theme["Navigation Background"] + "; border-color: " + theme["Navigation Border"] + "; } #doc, #threads, .board > .thread { background: " + theme["Thread Wrapper Background"] + "; border: 1px solid " + theme["Thread Wrapper Border"] + "; } #boardNavDesktopFoot, #mascot_hide, #menu, #selectrice, #themeConf, #watcher, #watcher:hover, .announcements-slideout #globalMessage, .dialog, .post-form-style-float #qr, .post-form-decorations #qr, .submenu { background: " + theme["Dialog Background"] + "; border: 1px solid " + theme["Dialog Border"] + "; } #qp.dialog { border: none; } .watch-thread-link { background-image: url(\"data:image/svg+xml, \"); } .deleteform::before, .deleteform, #qr .warning { background: " + theme["Input Background"] + "; border-color: " + theme["Input Border"] + "; } .disabledwarning, .warning { color: " + theme["Warnings"] + "; } #charCount { color: " + (Style.lightTheme ? "rgba(0,0,0,0.7)" : "rgba(255,255,255,0.7)") + "; } .postNum a { color: " + theme["Post Numbers"] + "; } .subject { color: " + theme["Subjects"] + " !important; } .dateTime, .post-ago { color: " + theme["Timestamps"] + " !important; } #fs_status a, #updater #update-status:not(.new)::after, #showQR, .abbr, .boxbar, .boxcontent, .deleteform::before, .pages strong, .pln, .reply, .reply.highlight, .summary, body, button, span[style=\"left: 5px; position: absolute;\"] a, input, textarea { color: " + theme["Text"] + "; } #exlinks-options-content > table, #appchanx-settings fieldset, #selectrice { border-bottom: 1px solid " + theme["Reply Border"] + "; box-shadow: inset " + theme["Shadow Color"] + " 0 0 5px; } .quote + .spoiler:hover, .quote { color: " + theme["Greentext"] + "; } .forwardlink { border-bottom: 1px dashed " + theme["Backlinks"] + "; } .container::before { color: " + theme["Timestamps"] + "; } .quote-shadows #menu, .quote-shadows #post-preview, .quote-shadows #qp .opContainer, .quote-shadows #qp .replyContainer, .quote-shadows .submenu { box-shadow: 5px 5px 5px " + theme['Shadow Color'] + "; } .rice { background: " + theme["Checkbox Background"] + "; border: 1px solid " + theme["Checkbox Border"] + "; } .selectrice::before { border-left: 1px solid " + theme["Input Border"] + "; } .selectrice::after { border-top: .45em solid " + theme["Inputs"] + "; } .bd { background: " + theme["Buttons Background"] + "; border: 1px solid " + theme["Buttons Border"] + "; } .pages a, #header-bar a { color: " + theme["Navigation Links"] + "; } input[type=checkbox]:checked + .rice::after { border-color: " + theme["Inputs"] + "; } #addReply, #dump, .button, .entry, .replylink, a { color: " + theme["Links"] + "; } .backlink { color: " + theme["Backlinks"] + "; } .qiQuote, .quotelink { color: " + theme["Quotelinks"] + "; } #addReply:hover, #dump:hover, .entry:hover, .replylink:hover, .qiQuote:hover, .quotelink:hover, a .name:hover, a .postertrip:hover, a:hover { color: " + theme["Hovered Links"] + "; } #header-bar a:hover, #boardTitle a:hover { color: " + theme["Hovered Navigation Links"] + "; } #boardTitle { color: " + theme["Board Title"] + "; } .name, .post-author { color: " + theme["Names"] + " !important; } .post-tripcode, .postertrip, .trip { color: " + theme["Tripcodes"] + " !important; } a .postertrip, a .name { color: " + theme["Emails"] + "; } .post.reply.qphl, .post.op.qphl { border-color: " + theme["Backlinked Reply Outline"] + "; background: " + theme["Highlighted Reply Background"] + "; } .quote-shadows .inline .post { box-shadow: 5px 5px 5px " + theme['Shadow Color'] + "; } .placeholder, #qr input::placeholder, #qr textarea::placeholder { color: " + (Style.lightTheme ? "rgba(0,0,0,0.3)" : "rgba(255,255,255,0.2)") + " !important; } #qr input:placeholder, #qr textarea:placeholder, .placeholder { color: " + (Style.lightTheme ? "rgba(0,0,0,0.3)" : "rgba(255,255,255,0.2)") + " !important; } #appchanx-settings fieldset, .boxcontent dd, .selectrice ul { border-color: " + (Style.lightTheme ? "rgba(0,0,0,0.1)" : "rgba(255,255,255,0.1)") + "; } #appchanx-settings li, #selectrice li:not(:first-of-type) { border-top: 1px solid " + (Style.lightTheme ? "rgba(0,0,0,0.05)" : "rgba(255,255,255,0.025)") + "; } #navtopright .exlinksOptionsLink::after, #main-menu, .navLinks > a:first-of-type::after, #watcher::after, #globalMessage::after, #boardNavDesktopFoot::after, #img-controls, #catalog::after, #fappeTyme { " + (!Style.lightTheme ? "filter: url(\"#icons-filter\");" : "") + " } .alternate-post-colors #threads > .thread:nth-of-type(2n+1), .alternate-post-colors .replyContainer:nth-of-type(2n+1) .post { background-image: linear-gradient(" + (replybg ? "rgba(" + (replybg.shiftRGB(-4, false)) + ",0.8), rgba(" + (replybg.shiftRGB(-4, false)) + ",0.8)" : Style.lightTheme ? "rgba(0,0,0,0.05), rgba(0,0,0,0.05)" : "rgba(255,255,255,0.02), rgba(255,255,255,0.02)") + "); } .color-reply-headings .boxbar, .color-reply-headings .postInfo { background: " + (replybg ? "rgba(" + (replybg.shiftRGB(-12, false)) + ",0.8)" : "rgba(0,0,0,0.1)") + "; border-bottom: 1px solid " + theme["Reply Border"] + " } .color-file-info .file { background: " + (replybg ? "rgba(" + (replybg.shiftRGB(-8, false)) + ",0.8)" : "rgba(0,0,0,0.1)") + "; border-bottom: 1px solid " + theme["Reply Border"] + " border-top: 1px solid " + theme["Reply Border"] + " } .color-reply.headings.color-file-info { border-top: none; } .op-background .op.post { background: " + theme["Reply Background"] + "; border: 1px solid " + theme["Reply Border"] + "; } .op-background .op.post:target .op-background .op.post.highlight { background: " + theme["Highlighted Reply Background"] + "; border: 1px solid " + theme["Highlighted Reply Border"] + "; } .fourchan-banner-at-sidebar-top.icon-orientation-vertical body::after { background: " + backgroundC + "; } .fourchan-banner-at-sidebar-top.icon-orientation-vertical.fourchan-ss-sidebar body::after, .fourchan-banner-at-sidebar-top.fourchan-ss-sidebar body::before { background: rgba(" + ((background = new Style.color(Style.colorToHex(theme["Reply Background"]))) ? background.shiftRGB(-18) : void 0) + ", 0.8); } .fourchan-ss-sidebar.sidebar-location-right body::before { border-left: 2px solid " + backgroundC + "; box-shadow: inset 1px 0 0 " + theme["Reply Border"] + ", -1px 0 0 " + theme["Reply Border"] + "; } .fourchan-ss-sidebar.sidebar-location-left body::before { border-right: 2px solid " + backgroundC + "; box-shadow: 1px 0 0 " + theme["Reply Border"] + ", inset -1px 0 0 " + theme["Reply Border"] + "; } .sage-highlighting-text.sage-highlight-position-before a.useremail[href*=\"sage\"]:last-of-type::before, .sage-highlighting-text.sage-highlight-position-before a.useremail[href*=\"Sage\"]:last-of-type::before, .sage-highlighting-text.sage-highlight-position-before a.useremail[href*=\"SAGE\"]:last-of-type::before, .sage-highlighting-text.sage-highlight-position-after a.useremail[href*=\"sage\"]:last-of-type::after, .sage-highlighting-text.sage-highlight-position-after a.useremail[href*=\"Sage\"]:last-of-type::after, .sage-highlighting-text.sage-highlight-position-after a.useremail[href*=\"SAGE\"]:last-of-type::after { content: \" (sage) \"; color: " + theme["Sage"] + "; } .quote-shadows #qr { box-shadow: 5px 5px 5px " + theme['Shadow Color'] + "; } " + (theme["Custom CSS"].replace(/\s+/g, ' ').trim())) + ("" + (Style.lightTheme ? " .prettyprint { background-color: #e7e7e7; border: 1px solid #dcdcdc; } .com { color: #dd0000; } .str, .atv { color: #7fa61b; } .pun { color: #61663a; } .tag { color: #117743; } .kwd { color: #5a6F9e; } .typ, .atn { color: #9474bd; } .lit { color: #368c72; } " : " .prettyprint { background-color: rgba(0,0,0,.1); border: 1px solid rgba(0,0,0,0.5); } .tag { color: #96562c; } .pun { color: #5b6f2a; } .com { color: #a34443; } .str, .atv { color: #8ba446; } .kwd { color: #987d3e; } .typ, .atn { color: #897399; } .lit { color: #558773; } "));
+ return (".hide_thread_button span > span, .hide_reply_button span > span { background-color: " + theme["Links"] + "; } #mascot_hide label { border-bottom: 1px solid " + theme["Reply Border"] + "; } #content .thumb { box-shadow: 0 0 5px " + theme["Reply Border"] + "; } .export-button, .mascotname, #mascot-options { background: " + theme["Dialog Background"] + "; border: 1px solid " + theme["Buttons Border"] + "; } .highlight-you .opContainer.quotesYou, .highlight-own .opContainer.yourPost, .opContainer.filter-highlight { box-shadow: inset 5px 0 " + theme["Backlinked Reply Outline"] + "; } .highlight-you .quotesYou > .reply, .highlight-own .yourPost > .reply, .filter-highlight > .reply { box-shadow: -5px 0 " + theme["Backlinked Reply Outline"] + "; } hr { border-bottom: 1px solid " + theme["Reply Border"] + "; } hr#unread-line { border-bottom: 1px solid " + theme["Reply Background"] + "; visibility: visible; } .threadContainer { border-color: " + theme["Reply Border"] + " !important; } html { background: " + (backgroundC || '') + "; background-image: " + (theme["Background Image"] || '') + "; background-repeat: " + (theme["Background Repeat"] || '') + "; background-attachment: " + (theme["Background Attachment"] || '') + "; background-position: " + (theme["Background Position"] || '') + "; } .panel, .section-container, #exlinks-options-content, #themecontent { background: " + backgroundC + "; border: 1px solid " + theme["Reply Border"] + "; } .sections-list > a.tab-selected { background: " + backgroundC + "; border-color: " + theme["Reply Border"] + "; } .captcha-img img { filter: url(\"#captcha-filter\"); } #boardTitle { text-shadow: 1px 1px " + backgroundC + ", -1px -1px " + backgroundC + ", 1px -1px " + backgroundC + ", -1px 1px " + backgroundC + "; } .sidebar-glow #boardTitle { text-shadow: 1px 1px 1px " + backgroundC + ", -1px -1px 1px " + backgroundC + ", 1px -1px 1px " + backgroundC + ", -1px 1px 1px " + backgroundC + ", 0 2px 4px rgba(0,0,0,.6), 0 0 10px rgba(0,0,0,.6); } #exlinks-options, #appchanx-settings, #qrtab, input[type=\"submit\"], input[value=\"Report\"], span[style=\"left: 5px; position: absolute;\"] a { background: " + theme["Buttons Background"] + "; border: 1px solid " + theme["Buttons Border"] + "; } .enabled .mascotcontainer { background: " + theme["Buttons Background"] + "; border-color: " + theme["Buttons Border"] + "; } #dump, #qr-filename-container, #appchanx-settings input, .captcha-img, .dump #dump, .qr-preview, .selectrice, button, input, textarea { background: " + theme["Input Background"] + "; border: 1px solid " + theme["Input Border"] + "; } .has-file #qr-extras-container { background: " + theme["Input Background"] + "; } #dump:hover, #qr-filename-container:hover, .selectrice:hover, #selectrice li:hover, #selectrice li:nth-of-type(2n+1):hover, input:hover, textarea:hover { background: " + theme["Hovered Input Background"] + "; border-color: " + theme["Hovered Input Border"] + "; } .has-file #qr-filename-container:hover #qr-extras-container { background: " + theme["Hovered Input Background"] + "; } #dump:active, #dump:focus, #selectrice li:focus, .selectrice:focus, #qr-filename-container:active, #qr-filename-container:focus, input:focus, textarea:focus, textarea.field:focus { background: " + theme["Focused Input Background"] + "; border-color: " + theme["Focused Input Border"] + "; color: " + theme["Inputs"] + "; } .has-file #qr-filename-container:active #qr-extras-container, .has-file #qr-filename-container:focus #qr-extras-container { background: " + theme["Focused Input Background"] + "; } #ft, #mouseover, #post-preview, #qp .post, #threads > .thread, #xupdater, .box-outer, .reply.post { border-width: 1px; border-style: solid; border-color: " + theme["Reply Border"] + "; background: " + theme["Reply Background"] + "; } .exblock.reply, .reply.post.highlight, .reply.post:target { background: " + theme["Highlighted Reply Background"] + "; border: 1px solid " + theme["Highlighted Reply Border"] + "; } #header-bar, .pagelist { background: " + theme["Navigation Background"] + "; border-color: " + theme["Navigation Border"] + "; } #doc, #threads, .board > .thread { background: " + theme["Thread Wrapper Background"] + "; border: 1px solid " + theme["Thread Wrapper Border"] + "; } #boardNavDesktopFoot, #mascot_hide, #menu, #selectrice, #themeConf, #thread-watcher, #thread-watcher:hover, .announcements-slideout #globalMessage, .dialog, .post-form-style-float #qr, .post-form-decorations #qr, .submenu { background: " + theme["Dialog Background"] + "; border: 1px solid " + theme["Dialog Border"] + "; } #qp.dialog { border: none; } .watch-thread-link { background-image: url(\"data:image/svg+xml, \"); } .deleteform::before, .deleteform, #qr .warning { background: " + theme["Input Background"] + "; border-color: " + theme["Input Border"] + "; } .disabledwarning, .warning { color: " + theme["Warnings"] + "; } #charCount { color: " + (Style.lightTheme ? "rgba(0,0,0,0.7)" : "rgba(255,255,255,0.7)") + "; } .postNum a { color: " + theme["Post Numbers"] + "; } .subject { color: " + theme["Subjects"] + " !important; } .dateTime, .post-ago { color: " + theme["Timestamps"] + " !important; } #fs_status a, #updater #update-status:not(.new)::after, #showQR, .abbr, .boxbar, .boxcontent, .deleteform::before, .pages strong, .pln, .reply, .reply.highlight, .summary, body, button, span[style=\"left: 5px; position: absolute;\"] a, input, textarea { color: " + theme["Text"] + "; } #exlinks-options-content > table, #appchanx-settings fieldset, #selectrice { border-bottom: 1px solid " + theme["Reply Border"] + "; box-shadow: inset " + theme["Shadow Color"] + " 0 0 5px; } .quote + .spoiler:hover, .quote { color: " + theme["Greentext"] + "; } .forwardlink { border-bottom: 1px dashed " + theme["Backlinks"] + "; } .container::before { color: " + theme["Timestamps"] + "; } .quote-shadows #menu, .quote-shadows #post-preview, .quote-shadows #qp .opContainer, .quote-shadows #qp .replyContainer, .quote-shadows .submenu { box-shadow: 5px 5px 5px " + theme['Shadow Color'] + "; } .rice { background: " + theme["Checkbox Background"] + "; border: 1px solid " + theme["Checkbox Border"] + "; } .selectrice::before { border-left: 1px solid " + theme["Input Border"] + "; } .selectrice::after { border-top: .45em solid " + theme["Inputs"] + "; } .bd { background: " + theme["Buttons Background"] + "; border: 1px solid " + theme["Buttons Border"] + "; } .pages a, #header-bar a { color: " + theme["Navigation Links"] + "; } input[type=checkbox]:checked + .rice::after { border-color: " + theme["Inputs"] + "; } #addReply, #dump, .button, .entry, .replylink, a { color: " + theme["Links"] + "; } .backlink { color: " + theme["Backlinks"] + "; } .qiQuote, .quotelink { color: " + theme["Quotelinks"] + "; } #addReply:hover, #dump:hover, .entry:hover, .replylink:hover, .qiQuote:hover, .quotelink:hover, a .name:hover, a .postertrip:hover, a:hover { color: " + theme["Hovered Links"] + "; } #header-bar a:hover, #boardTitle a:hover { color: " + theme["Hovered Navigation Links"] + "; } #boardTitle { color: " + theme["Board Title"] + "; } .name, .post-author { color: " + theme["Names"] + " !important; } .post-tripcode, .postertrip, .trip { color: " + theme["Tripcodes"] + " !important; } a .postertrip, a .name { color: " + theme["Emails"] + "; } .post.reply.qphl, .post.op.qphl { border-color: " + theme["Backlinked Reply Outline"] + "; background: " + theme["Highlighted Reply Background"] + "; } .quote-shadows .inline .post { box-shadow: 5px 5px 5px " + theme['Shadow Color'] + "; } .placeholder, #qr input::placeholder, #qr textarea::placeholder { color: " + (Style.lightTheme ? "rgba(0,0,0,0.3)" : "rgba(255,255,255,0.2)") + " !important; } #qr input:placeholder, #qr textarea:placeholder, .placeholder { color: " + (Style.lightTheme ? "rgba(0,0,0,0.3)" : "rgba(255,255,255,0.2)") + " !important; } #appchanx-settings fieldset, .boxcontent dd, .selectrice ul { border-color: " + (Style.lightTheme ? "rgba(0,0,0,0.1)" : "rgba(255,255,255,0.1)") + "; } #appchanx-settings li, #selectrice li:not(:first-of-type) { border-top: 1px solid " + (Style.lightTheme ? "rgba(0,0,0,0.05)" : "rgba(255,255,255,0.025)") + "; } #navtopright .exlinksOptionsLink::after, #main-menu, .navLinks > a:first-of-type::after, #thread-watcher::after, #globalMessage::after, #boardNavDesktopFoot::after, #img-controls, #catalog::after, #fappeTyme { " + (!Style.lightTheme ? "filter: url(\"#icons-filter\");" : "") + " } .alternate-post-colors #threads > .thread:nth-of-type(2n+1), .alternate-post-colors .replyContainer:nth-of-type(2n+1) .post { background-image: linear-gradient(" + (replybg ? "rgba(" + (replybg.shiftRGB(-4, false)) + ",0.8), rgba(" + (replybg.shiftRGB(-4, false)) + ",0.8)" : Style.lightTheme ? "rgba(0,0,0,0.05), rgba(0,0,0,0.05)" : "rgba(255,255,255,0.02), rgba(255,255,255,0.02)") + "); } .color-reply-headings .boxbar, .color-reply-headings .postInfo { background: " + (replybg ? "rgba(" + (replybg.shiftRGB(-12, false)) + ",0.8)" : "rgba(0,0,0,0.1)") + "; border-bottom: 1px solid " + theme["Reply Border"] + " } .color-file-info .file { background: " + (replybg ? "rgba(" + (replybg.shiftRGB(-8, false)) + ",0.8)" : "rgba(0,0,0,0.1)") + "; border-bottom: 1px solid " + theme["Reply Border"] + " border-top: 1px solid " + theme["Reply Border"] + " } .color-reply.headings.color-file-info { border-top: none; } .op-background .op.post { background: " + theme["Reply Background"] + "; border: 1px solid " + theme["Reply Border"] + "; } .op-background .op.post:target .op-background .op.post.highlight { background: " + theme["Highlighted Reply Background"] + "; border: 1px solid " + theme["Highlighted Reply Border"] + "; } .fourchan-banner-at-sidebar-top.icon-orientation-vertical body::after { background: " + backgroundC + "; } .fourchan-banner-at-sidebar-top.icon-orientation-vertical.fourchan-ss-sidebar body::after, .fourchan-banner-at-sidebar-top.fourchan-ss-sidebar body::before { background: rgba(" + ((background = new Style.color(Style.colorToHex(theme["Reply Background"]))) ? background.shiftRGB(-18) : void 0) + ", 0.8); } .fourchan-ss-sidebar.sidebar-location-right body::before { border-left: 2px solid " + backgroundC + "; box-shadow: inset 1px 0 0 " + theme["Reply Border"] + ", -1px 0 0 " + theme["Reply Border"] + "; } .fourchan-ss-sidebar.sidebar-location-left body::before { border-right: 2px solid " + backgroundC + "; box-shadow: 1px 0 0 " + theme["Reply Border"] + ", inset -1px 0 0 " + theme["Reply Border"] + "; } .sage-highlighting-text.sage-highlight-position-before a.useremail[href*=\"sage\"]:last-of-type::before, .sage-highlighting-text.sage-highlight-position-before a.useremail[href*=\"Sage\"]:last-of-type::before, .sage-highlighting-text.sage-highlight-position-before a.useremail[href*=\"SAGE\"]:last-of-type::before, .sage-highlighting-text.sage-highlight-position-after a.useremail[href*=\"sage\"]:last-of-type::after, .sage-highlighting-text.sage-highlight-position-after a.useremail[href*=\"Sage\"]:last-of-type::after, .sage-highlighting-text.sage-highlight-position-after a.useremail[href*=\"SAGE\"]:last-of-type::after { content: \" (sage) \"; color: " + theme["Sage"] + "; } .quote-shadows #qr { box-shadow: 5px 5px 5px " + theme['Shadow Color'] + "; } " + (theme["Custom CSS"].replace(/\s+/g, ' ').trim())) + ("" + (Style.lightTheme ? " .prettyprint { background-color: #e7e7e7; border: 1px solid #dcdcdc; } .com { color: #dd0000; } .str, .atv { color: #7fa61b; } .pun { color: #61663a; } .tag { color: #117743; } .kwd { color: #5a6F9e; } .typ, .atn { color: #9474bd; } .lit { color: #368c72; } " : " .prettyprint { background-color: rgba(0,0,0,.1); border: 1px solid rgba(0,0,0,0.5); } .tag { color: #96562c; } .pun { color: #5b6f2a; } .com { color: #a34443; } .str, .atv { color: #8ba446; } .kwd { color: #987d3e; } .typ, .atn { color: #897399; } .lit { color: #558773; } "));
},
iconPositions: function() {
var align, aligner, css, i, iconOffset, navlinks, notCatalog, notEither, position, psa, sidebar;
- css = "#navtopright .exlinksOptionsLink::after, #main-menu, body > div.navLinks > a:first-of-type::after, .slideout-watcher #watcher::after, .announcements-slideout #globalMessage::after, #boardNavDesktopFoot::after, #img-controls, #catalog::after, #fappeTyme { z-index: 18; position: fixed; display: block; width: 15px; height: 15px; content: \"\"; opacity: 0.5; } body::after { content: \"\"; display: block; position: fixed; z-index: 5; width: 18px; height: 18px; } .invisible-icons #navtopright .exlinksOptionsLink::after, .invisible-icons #main-menu, .invisible-icons body > div.navLinks > a:first-of-type::after, .invisible-icons.slideout-watcher #watcher::after, .invisible-icons.announcements-slideout #globalMessage::after, .invisible-icons #boardNavDesktopFoot::after, .invisible-icons #img-controls, .invisible-icons #catalog::after, .invisible-icons #fappeTyme { opacity: 0; } #navtopright .exlinksOptionsLink, body > div.navLinks > a:first-of-type, " + (Conf['Slideout Watcher'] ? '#watcher,' : '') + " " + (Conf['Announcements'] === 'slideout' ? '#globalMessage,' : '') + " #boardNavDesktopFoot, #catalog { z-index: 16; } #navtopright .exlinksOptionsLink:hover, body > div.navLinks > a:first-of-type:hover, .slideout-watcher #watcher:hover, .announcements-slideout #globalMessage:hover, #boardNavDesktopFoot:hover, #img-controls, #catalog:hover { z-index: 17; } #main-menu { visibility: visible; background-position: 0 0; cursor: pointer; } body > div.navLinks > a:first-of-type::after { cursor: pointer; background-position: 0 -15px; } .slideout-watcher #watcher::after { background-position: 0 -30px; } .announcements-slideout #globalMessage::after { background-position: 0 -45px; } #boardNavDesktopFoot::after { background-position: 0 -60px; } #img-controls { background-position: 0 -90px; } #navtopright .exlinksOptionsLink::after { background-position: 0 -105px; } #catalog::after { visibility: visible; background-position: 0 -120px; } #fappeTyme { background-position: 0 -135px; } #boardNavDesktopFoot:hover::after, .announcements-slideout #globalMessage:hover::after, #img-controls:hover, #navlinks a:hover, #appchanOptions:hover, #main-menu:hover, #navtopright .exlinksOptionsLink:hover::after, #qr #qrtab, .slideout-watcher #watcher:hover::after, .thumbnail#selected, div.navLinks > a:first-of-type:hover::after, #catalog:hover::after, #fappeTyme:hover { opacity: 1 !important; }";
+ css = "#navtopright .exlinksOptionsLink::after, #main-menu, body > div.navLinks > a:first-of-type::after, .slideout-watcher #thread-watcher::after, .announcements-slideout #globalMessage::after, #boardNavDesktopFoot::after, #img-controls, #catalog::after, #fappeTyme { z-index: 18; position: fixed; display: block; width: 15px; height: 15px; content: \"\"; opacity: 0.5; } body::after { content: \"\"; display: block; position: fixed; z-index: 5; width: 18px; height: 18px; } .invisible-icons #navtopright .exlinksOptionsLink::after, .invisible-icons #main-menu, .invisible-icons body > div.navLinks > a:first-of-type::after, .invisible-icons.slideout-watcher #thread-watcher::after, .invisible-icons.announcements-slideout #globalMessage::after, .invisible-icons #boardNavDesktopFoot::after, .invisible-icons #img-controls, .invisible-icons #catalog::after, .invisible-icons #fappeTyme { opacity: 0; } #navtopright .exlinksOptionsLink, body > div.navLinks > a:first-of-type, " + (Conf['Slideout Watcher'] ? '#thread-watcher,' : '') + " " + (Conf['Announcements'] === 'slideout' ? '#globalMessage,' : '') + " #boardNavDesktopFoot, #catalog { z-index: 16; } #navtopright .exlinksOptionsLink:hover, body > div.navLinks > a:first-of-type:hover, .slideout-watcher #thread-watcher:hover, .announcements-slideout #globalMessage:hover, #boardNavDesktopFoot:hover, #img-controls, #catalog:hover { z-index: 17; } #main-menu { visibility: visible; background-position: 0 0; cursor: pointer; } body > div.navLinks > a:first-of-type::after { cursor: pointer; background-position: 0 -15px; } .slideout-watcher #thread-watcher::after { background-position: 0 -30px; } .announcements-slideout #globalMessage::after { background-position: 0 -45px; } #boardNavDesktopFoot::after { background-position: 0 -60px; } #img-controls { background-position: 0 -90px; } #navtopright .exlinksOptionsLink::after { background-position: 0 -105px; } #catalog::after { visibility: visible; background-position: 0 -120px; } #fappeTyme { background-position: 0 -135px; } #boardNavDesktopFoot:hover::after, .announcements-slideout #globalMessage:hover::after, #img-controls:hover, #navlinks a:hover, #appchanOptions:hover, #main-menu:hover, #navtopright .exlinksOptionsLink:hover::after, #qr #qrtab, .slideout-watcher #thread-watcher:hover::after, .thumbnail#selected, div.navLinks > a:first-of-type:hover::after, #catalog:hover::after, #fappeTyme:hover { opacity: 1 !important; }";
i = 0;
align = Conf['Sidebar Location'];
sidebar = {
@@ -11856,14 +12211,14 @@
if (iconOffset < 0) {
iconOffset = 0;
}
- css += "body::after { " + align + ": " + (position[i] - 1) + "px; } /* Appchan X Options */ #main-menu { " + align + ": " + position[i++] + "px; } /* Slideout Navigation */ #boardNavDesktopFoot::after { " + align + ": " + position[i++] + "px; } /* Global Message */ .announcements-slideout #globalMessage::after { " + align + ": " + position[i++] + "px; } /* Watcher */ .slideout-watcher #watcher::after { " + align + ": " + position[i++] + "px; } /* ExLinks */ #navtopright .exlinksOptionsLink::after { " + align + ": " + position[i++] + "px; } /* Expand Images */ #img-controls { " + align + ": " + position[i++] + "px; } /* 4chan Catalog */ #catalog::after { " + align + ": " + position[i++] + "px; } /* Back */ div.navLinks > a:first-of-type::after { " + align + ": " + position[i++] + "px; } /* Fappe Tyme */ #fappeTyme { " + align + ": " + position[i++] + "px; } /* Thread Navigation Links */ #navlinks a { margin: 2px; top: 1px; } #navlinks a:last-of-type { " + align + ": " + position[i++] + "px; } #navlinks a:first-of-type { " + align + ": " + position[i++] + "px; } body::after { width: " + (position[i] - 2) + "px; top: 0; } #boardNavDesktopFoot::after, #navtopright .exlinksOptionsLink::after, #main-menu, .slideout-watcher #watcher::after, .announcements-slideout #globalMessage::after, #img-controls, #fappeTyme, div.navLinks > a:first-of-type::after, #catalog::after { top: 1px !important; } .slideout-watcher #globalMessage, .slideout-watcher #watcher, #boardNavDesktopFoot { top: 16px !important; } .fourchan-ss-navigation.fixed.top #header-bar, .fourchan-ss-navigation.pagination-top .pagelist, .fourchan-ss-navigation.pagination-sticky-top .pagelist { padding-" + align + ": " + iconOffset + "px; } .fixed.top:not(.fourchan-ss-navigation) #header-bar, .pagination-top:not(.fourchan-ss-navigation) .pagelist, .pagination-sticky-top:not(.fourchan-ss-navigation) .pagelist { margin-" + align + ": " + iconOffset + "px; }";
+ css += "body::after { " + align + ": " + (position[i] - 1) + "px; } /* Appchan X Options */ #main-menu { " + align + ": " + position[i++] + "px; } /* Slideout Navigation */ #boardNavDesktopFoot::after { " + align + ": " + position[i++] + "px; } /* Global Message */ .announcements-slideout #globalMessage::after { " + align + ": " + position[i++] + "px; } /* Watcher */ .slideout-watcher #thread-watcher::after { " + align + ": " + position[i++] + "px; } /* ExLinks */ #navtopright .exlinksOptionsLink::after { " + align + ": " + position[i++] + "px; } /* Expand Images */ #img-controls { " + align + ": " + position[i++] + "px; } /* 4chan Catalog */ #catalog::after { " + align + ": " + position[i++] + "px; } /* Back */ div.navLinks > a:first-of-type::after { " + align + ": " + position[i++] + "px; } /* Fappe Tyme */ #fappeTyme { " + align + ": " + position[i++] + "px; } /* Thread Navigation Links */ #navlinks a { margin: 2px; top: 1px; } #navlinks a:last-of-type { " + align + ": " + position[i++] + "px; } #navlinks a:first-of-type { " + align + ": " + position[i++] + "px; } body::after { width: " + (position[i] - 2) + "px; top: 0; } #boardNavDesktopFoot::after, #navtopright .exlinksOptionsLink::after, #main-menu, .slideout-watcher #thread-watcher::after, .announcements-slideout #globalMessage::after, #img-controls, #fappeTyme, div.navLinks > a:first-of-type::after, #catalog::after { top: 1px !important; } .slideout-watcher #globalMessage, .slideout-watcher #thread-watcher, #boardNavDesktopFoot { top: 16px !important; } .fourchan-ss-navigation.fixed.top #header-bar, .fourchan-ss-navigation.pagination-top .pagelist, .fourchan-ss-navigation.pagination-sticky-top .pagelist { padding-" + align + ": " + iconOffset + "px; } .fixed.top:not(.fourchan-ss-navigation) #header-bar, .pagination-top:not(.fourchan-ss-navigation) .pagelist, .pagination-sticky-top:not(.fourchan-ss-navigation) .pagelist { margin-" + align + ": " + iconOffset + "px; }";
} else {
position = aligner(2, [notEither && Conf['Image Expansion'], true, Conf['Slideout Navigation'] !== 'hide', Conf['Announcements'] === 'slideout' && (psa = $('#globalMessage', d.body)) && !psa.hidden, Conf['Thread Watcher'] && Conf['Slideout Watcher'], $('#navtopright .exlinksOptionsLink', d.body), notEither, g.VIEW === 'thread', notEither && Conf['Fappe Tyme'], navlinks = ((g.VIEW !== 'thread' && Conf['Index Navigation']) || (g.VIEW === 'thread' && Conf['Reply Navigation'])) && notCatalog, navlinks]);
iconOffset = (20 + (g.VIEW === 'thread' && Conf['Updater Position'] === 'top' ? 100 : 0)) - (Conf['4chan SS Navigation'] ? 0 : sidebar + parseInt(Conf[align.charAt(0).toUpperCase() + align.slice(1) + " Thread Padding"], 10));
if (iconOffset < 0) {
iconOffset = 0;
}
- css += "/* Expand Images */ body::after { top: " + (position[i] - 1) + "px; } #img-controls { top: " + position[i++] + "px; } /* Appchan X Options */ #main-menu { top: " + position[i++] + "px; } /* Slideout Navigation */ #boardNavDesktopFoot, #boardNavDesktopFoot::after { top: " + position[i++] + "px; } /* Global Message */ .announcements-slideout #globalMessage, .announcements-slideout #globalMessage::after { top: " + position[i++] + "px; } /* Watcher */ .slideout-watcher #watcher, .slideout-watcher #watcher::after { top: " + position[i++] + "px !important; } /* ExLinks */ #navtopright .exlinksOptionsLink::after { top: " + position[i++] + "px; } /* 4chan Catalog */ #catalog::after { top: " + position[i++] + "px; } /* Back */ div.navLinks > a:first-of-type::after { top: " + position[i++] + "px; } /* Fappe Tyme */ #fappeTyme { top: " + position[i++] + "px; } /* Thread Navigation Links */ #navlinks a:first-of-type { top: " + position[i++] + "px !important; } #navlinks a:last-of-type { top: " + position[i++] + "px !important; } body::after { height: " + (position[i] - 2) + "px; " + align + ": 2px; } #navlinks a, #navtopright .exlinksOptionsLink::after, #main-menu, #boardNavDesktopFoot::after, #globalMessage::after, #img-controls, #fappeTyme, .slideout-watcher #watcher::after, #catalog::after, div.navLinks > a:first-of-type::after { " + align + ": 3px !important; } #boardNavDesktopFoot, #globalMessage, .slideout-watcher #watcher.dialog { -moz-box-sizing: border-box; width: 232px !important; " + align + ": 18px !important; } .sidebar-large #boardNavDesktopFoot, .sidebar-large #globalMessage, .sidebar-large #watcher { width: 288px !important; } .fourchan-ss-navigation.fixed.top #header-bar, .fourchan-ss-navigation.pagination-top .pagelist, .fourchan-ss-navigation.pagination-sticky-top .pagelist { padding-" + align + ": " + iconOffset + "px; } .fixed.top:not(.fourchan-ss-navigation) #header-bar, .pagination-top:not(.fourchan-ss-navigation) .pagelist, .pagination-sticky-top:not(.fourchan-ss-navigation) .pagelist { margin-" + align + ": " + iconOffset + "px; }";
+ css += "/* Expand Images */ body::after { top: " + (position[i] - 1) + "px; } #img-controls { top: " + position[i++] + "px; } /* Appchan X Options */ #main-menu { top: " + position[i++] + "px; } /* Slideout Navigation */ #boardNavDesktopFoot, #boardNavDesktopFoot::after { top: " + position[i++] + "px; } /* Global Message */ .announcements-slideout #globalMessage, .announcements-slideout #globalMessage::after { top: " + position[i++] + "px; } /* Watcher */ .slideout-watcher #thread-watcher, .slideout-watcher #thread-watcher::after { top: " + position[i++] + "px !important; } /* ExLinks */ #navtopright .exlinksOptionsLink::after { top: " + position[i++] + "px; } /* 4chan Catalog */ #catalog::after { top: " + position[i++] + "px; } /* Back */ div.navLinks > a:first-of-type::after { top: " + position[i++] + "px; } /* Fappe Tyme */ #fappeTyme { top: " + position[i++] + "px; } /* Thread Navigation Links */ #navlinks a:first-of-type { top: " + position[i++] + "px !important; } #navlinks a:last-of-type { top: " + position[i++] + "px !important; } body::after { height: " + (position[i] - 2) + "px; " + align + ": 2px; } #navlinks a, #navtopright .exlinksOptionsLink::after, #main-menu, #boardNavDesktopFoot::after, #globalMessage::after, #img-controls, #fappeTyme, .slideout-watcher #thread-watcher::after, #catalog::after, div.navLinks > a:first-of-type::after { " + align + ": 3px !important; } #boardNavDesktopFoot, #globalMessage, .slideout-watcher #thread-watcher.dialog { -moz-box-sizing: border-box; width: 232px !important; " + align + ": 18px !important; } .sidebar-large #boardNavDesktopFoot, .sidebar-large #globalMessage, .sidebar-large #thread-watcher { width: 288px !important; } .fourchan-ss-navigation.fixed.top #header-bar, .fourchan-ss-navigation.pagination-top .pagelist, .fourchan-ss-navigation.pagination-sticky-top .pagelist { padding-" + align + ": " + iconOffset + "px; } .fixed.top:not(.fourchan-ss-navigation) #header-bar, .pagination-top:not(.fourchan-ss-navigation) .pagelist, .pagination-sticky-top:not(.fourchan-ss-navigation) .pagelist { margin-" + align + ": " + iconOffset + "px; }";
}
return Style.icons.textContent = css;
},
@@ -12483,11 +12838,8 @@
},
callbacks: [],
cb: function(e) {
- var post;
-
e.preventDefault();
- post = Get.postFromNode(this);
- return ExpandComment.expand(post);
+ return ExpandComment.expand(Get.postFromNode(this));
},
expand: function(post) {
var a;
@@ -12550,6 +12902,12 @@
}
quote.href = "/" + post.board + "/res/" + href;
}
+ Build.capcodeReplies({
+ boardID: post.board.ID,
+ threadID: post.thread.ID,
+ bq: clone,
+ capcodeReplies: postObj.capcode_replies
+ });
post.nodes.shortComment = comment;
$.replace(comment, clone);
post.nodes.comment = post.nodes.longComment = clone;
@@ -13596,7 +13954,8 @@
$.on(d, '4chanXInitFinished', Settings.open);
}
return $.set({
- lastchecked: Date.now(),
+ archives: Conf['archives'],
+ lastarchivecheck: now,
previousversion: g.VERSION
});
});
@@ -13805,7 +14164,6 @@
version: g.VERSION,
date: now
};
- Conf['WatchedThreads'] = {};
for (_i = 0, _len = DataBoards.length; _i < _len; _i++) {
db = DataBoards[_i];
Conf[db] = {
@@ -13863,9 +14221,12 @@
return reader.readAsText(file);
},
loadSettings: function(data) {
- var version;
-
- version = data.version.split('.');
+ if (data.Conf['WatchedThreads']) {
+ data.Conf['watchedThreads'] = {
+ boards: ThreadWatcher.convert(data.Conf['WatchedThreads'])
+ };
+ delete data.Conf['WatchedThreads'];
+ }
return $.set(data.Conf);
},
convertSettings: function(data, map) {
@@ -14911,6 +15272,7 @@
'Thread Updater': ThreadUpdater,
'Thread Stats': ThreadStats,
'Thread Watcher': ThreadWatcher,
+ 'Thread Watcher (Menu)': ThreadWatcher.menu,
'Index Navigation': Nav,
'Keybinds': Keybinds,
'Show Dice Roll': Dice
@@ -14962,8 +15324,7 @@
}
Main.callbackNodes(Thread, threads);
Main.callbackNodesDB(Post, posts, function() {
- $.event('4chanXInitFinished');
- return Main.checkUpdate();
+ return $.event('4chanXInitFinished');
});
if (styleSelector = $.id('styleSelector')) {
passLink = $.el('a', {
@@ -14983,8 +15344,7 @@
err = _error;
new Notification('warning', 'Cookies need to be enabled on 4chan for appchan x to properly function.', 30);
}
- $.event('4chanXInitFinished');
- return Main.checkUpdate();
+ return $.event('4chanXInitFinished');
},
callbackNodes: function(klass, nodes) {
var callback, err, errors, i, len, node, _i, _len, _ref;
@@ -15091,40 +15451,6 @@
obj.callback.isAddon = true;
return Klass.prototype.callbacks.push(obj.callback);
},
- message: function(e) {
- var el, version;
-
- version = e.data.version;
- if (version && version !== g.VERSION) {
- el = $.el('span', {
- innerHTML: "Update: appchan x v" + version + " is out, get it here ."
- });
- return new Notification('info', el, 120);
- }
- },
- checkUpdate: function() {
- var now;
-
- if (!(Conf['Check for Updates'] && Main.isThisPageLegit())) {
- return;
- }
- now = Date.now();
- return $.get('lastchecked', 0, function(_arg) {
- var lastchecked;
-
- lastchecked = _arg.lastchecked;
- if (lastchecked > now - $.DAY) {
- return;
- }
- return $.ready(function() {
- $.on(window, 'message', Main.message);
- $.set('lastchecked', now);
- return $.add(d.head, $.el('script', {
- src: 'https://github.com/zixaphir/appchan-x/raw/master/latest.js'
- }));
- });
- });
- },
handleErrors: function(errors) {
var div, error, logs, _i, _len;
diff --git a/builds/crx/script.js b/builds/crx/script.js
index 09de71f15..e88277982 100644
--- a/builds/crx/script.js
+++ b/builds/crx/script.js
@@ -171,9 +171,7 @@
'Thread Stats': [true, 'Display reply and image count.'],
'Page Count in Stats': [false, 'Display the page count in the thread stats as well.'],
'Updater and Stats in Header': [true, 'Places the thread updater and thread stats in the header instead of floating them.'],
- 'Thread Watcher': [true, 'Bookmark threads.'],
- 'Auto Watch': [true, 'Automatically watch threads you start.'],
- 'Auto Watch Reply': [false, 'Automatically watch threads you reply to.']
+ 'Thread Watcher': [true, 'Bookmark threads.']
},
'Posting': {
'Header Shortcut': [true, 'Add a shortcut to the header to toggle the QR.'],
@@ -310,6 +308,12 @@
'Sage Highlight Position': ['after', 'Position of Sage Highlighting', ['before', 'after']]
}
},
+ threadWatcher: {
+ 'Current Board': [false, 'Only show watched threads from the current board.'],
+ 'Auto Watch': [true, 'Automatically watch threads you start.'],
+ 'Auto Watch Reply': [false, 'Automatically watch threads you reply to.'],
+ 'Auto Prune': [false, 'Automatically prune 404\'d threads.']
+ },
filter: {
name: "# Filter any namefags:\n#/^(?!Anonymous$)/",
uniqueID: "# Filter a specific ID:\n#/Txhvk1Tl/",
@@ -2760,26 +2764,32 @@
}
};
- $.ajax = function(url, options, extra) {
- var form, headers, key, r, sync, type, upCallbacks, val;
+ $.ajax = (function() {
+ var lastModified;
- if (extra == null) {
- extra = {};
- }
- type = extra.type, headers = extra.headers, upCallbacks = extra.upCallbacks, form = extra.form, sync = extra.sync;
- r = new XMLHttpRequest();
- r.overrideMimeType('text/html');
- type || (type = form && 'post' || 'get');
- r.open(type, url, !sync);
- for (key in headers) {
- val = headers[key];
- r.setRequestHeader(key, val);
- }
- $.extend(r, options);
- $.extend(r.upload, upCallbacks);
- r.send(form);
- return r;
- };
+ lastModified = {};
+ return function(url, options, extra) {
+ var form, r, sync, type, upCallbacks, whenModified;
+
+ if (extra == null) {
+ extra = {};
+ }
+ type = extra.type, whenModified = extra.whenModified, upCallbacks = extra.upCallbacks, form = extra.form, sync = extra.sync;
+ r = new XMLHttpRequest();
+ type || (type = form && 'post' || 'get');
+ r.open(type, url, !sync);
+ if (whenModified) {
+ r.setRequestHeader('If-Modified-Since', lastModified[url] || '0');
+ $.on(r, 'load', function() {
+ return lastModified[url] = r.getResponseHeader('Last-Modified');
+ });
+ }
+ $.extend(r, options);
+ $.extend(r.upload, upCallbacks);
+ r.send(form);
+ return r;
+ };
+ })();
$.cache = (function() {
var reqs;
@@ -3578,17 +3588,19 @@
})(Post);
- DataBoards = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts'];
+ DataBoards = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts', 'watchedThreads'];
DataBoard = (function() {
- function DataBoard(key, sync) {
+ function DataBoard(key, sync, dontClean) {
var init,
_this = this;
this.key = key;
this.data = Conf[key];
$.sync(key, this.onSync.bind(this));
- this.clean();
+ if (!dontClean) {
+ this.clean();
+ }
if (!sync) {
return;
}
@@ -3599,6 +3611,10 @@
$.on(d, '4chanXInitFinished', init);
}
+ DataBoard.prototype.save = function() {
+ return $.set(this.key, this.data);
+ };
+
DataBoard.prototype["delete"] = function(_arg) {
var boardID, postID, threadID;
@@ -3617,7 +3633,7 @@
} else {
delete this.data.boards[boardID];
}
- return $.set(this.key, this.data);
+ return this.save();
};
DataBoard.prototype.deleteIfEmpty = function(_arg) {
@@ -3647,7 +3663,7 @@
} else {
this.data.boards[boardID] = val;
}
- return $.set(this.key, this.data);
+ return this.save();
};
DataBoard.prototype.get = function(_arg) {
@@ -3691,7 +3707,7 @@
this.ajaxClean(boardID);
}
}
- return $.set(this.key, this.data);
+ return this.save();
};
DataBoard.prototype.ajaxClean = function(boardID) {
@@ -3721,7 +3737,7 @@
boardID: boardID
});
}
- return $.set(_this.key, _this.data);
+ return _this.save();
});
};
@@ -3782,8 +3798,26 @@
Polyfill = {
init: function() {
+ Polyfill.toBlob();
return Polyfill.visibility();
},
+ toBlob: function() {
+ var _base;
+
+ return (_base = HTMLCanvasElement.prototype).toBlob || (_base.toBlob = function(cb) {
+ var data, i, l, ui8a, _i;
+
+ data = atob(this.toDataURL().slice(22));
+ l = data.length;
+ ui8a = new Uint8Array(l);
+ for (i = _i = 0; 0 <= l ? _i < l : _i > l; i = 0 <= l ? ++_i : --_i) {
+ ui8a[i] = data.charCodeAt(i);
+ }
+ return cb(new Blob([ui8a], {
+ type: 'image/png'
+ }));
+ });
+ },
visibility: function() {
if (!('webkitHidden' in document)) {
return;
@@ -4141,7 +4175,7 @@
date: data.now,
dateUTC: data.time,
comment: data.com,
- capReps: data.capcode_replies,
+ capcodeReplies: data.capcode_replies,
isSticky: !!data.sticky,
isClosed: !!data.closed
};
@@ -4169,9 +4203,9 @@
@license: https://github.com/4chan/4chan-JS/blob/master/LICENSE
*/
- var a, array, boardID, capReps, capcode, capcodeClass, capcodeReplies, capcodeStart, capcodeType, closed, comment, container, date, dateUTC, email, emailEnd, emailStart, ext, file, fileDims, fileHTML, fileInfo, fileSize, fileThumb, filename, flag, flagCode, flagName, generateCapcodeReplies, href, imgSrc, isClosed, isOP, isSticky, name, postID, quote, shortFilename, spoilerRange, staticPath, sticky, subject, threadID, tripcode, uniqueID, userID, _i, _len, _ref;
+ var a, boardID, capcode, capcodeClass, capcodeReplies, capcodeStart, closed, comment, container, date, dateUTC, email, emailEnd, emailStart, ext, file, fileDims, fileHTML, fileInfo, fileSize, fileThumb, filename, flag, flagCode, flagName, href, imgSrc, isClosed, isOP, isSticky, name, postID, quote, shortFilename, spoilerRange, staticPath, sticky, subject, threadID, tripcode, uniqueID, userID, _i, _len, _ref;
- postID = o.postID, threadID = o.threadID, boardID = o.boardID, name = o.name, capcode = o.capcode, tripcode = o.tripcode, uniqueID = o.uniqueID, email = o.email, subject = o.subject, flagCode = o.flagCode, flagName = o.flagName, date = o.date, dateUTC = o.dateUTC, isSticky = o.isSticky, isClosed = o.isClosed, comment = o.comment, capReps = o.capReps, file = o.file;
+ postID = o.postID, threadID = o.threadID, boardID = o.boardID, name = o.name, capcode = o.capcode, tripcode = o.tripcode, uniqueID = o.uniqueID, email = o.email, subject = o.subject, flagCode = o.flagCode, flagName = o.flagName, date = o.date, dateUTC = o.dateUTC, isSticky = o.isSticky, isClosed = o.isClosed, comment = o.comment, capcodeReplies = o.capcodeReplies, file = o.file;
isOP = postID === threadID;
staticPath = '//static.4chan.org/image/';
if (email) {
@@ -4245,32 +4279,10 @@
tripcode = tripcode ? " " + tripcode + " " : '';
sticky = isSticky ? " " : '';
closed = isClosed ? " " : '';
- capcodeReplies = '';
- if (capReps) {
- generateCapcodeReplies = function(capcodeType, array) {
- return "" + ((function() {
- switch (capcodeType) {
- case 'admin':
- return 'Administrator';
- case 'mod':
- return 'Moderator';
- case 'developer':
- return 'Developer';
- }
- })()) + " Repl" + (array.length > 1 ? 'ies' : 'y') + ": " + (array.map(function(ID) {
- return ">>" + ID + " ";
- }).join(' ')) + " ";
- };
- for (capcodeType in capReps) {
- array = capReps[capcodeType];
- capcodeReplies += generateCapcodeReplies(capcodeType, array);
- }
- capcodeReplies = "" + capcodeReplies + " ";
- }
container = $.el('div', {
id: "pc" + postID,
className: "postContainer " + (isOP ? 'op' : 'reply') + "Container",
- innerHTML: "" + (isOP ? '' : ">>
") + "" + (name || '') + " " + (tripcode + capcodeStart + capcode + userID + flag + sticky + closed) + " " + subject + "" + date + "No. " + postID + " " + (isOP ? fileHTML : '') + "
" + subject + "
" + emailStart + "" + (name || '') + " " + (tripcode + capcodeStart + emailEnd + capcode + userID + flag + sticky + closed) + " " + " " + "
" + date + " " + " " + "
No. " + postID + " " + (isOP ? '' : fileHTML) + "
" + (comment || '') + capcodeReplies + " " + " " + "
"
+ innerHTML: "" + (isOP ? '' : ">>
") + "" + (name || '') + " " + (tripcode + capcodeStart + capcode + userID + flag + sticky + closed) + " " + subject + "" + date + "No. " + postID + " " + (isOP ? fileHTML : '') + "
" + subject + "
" + emailStart + "" + (name || '') + " " + (tripcode + capcodeStart + emailEnd + capcode + userID + flag + sticky + closed) + " " + " " + "
" + date + " " + " " + "
No. " + postID + " " + (isOP ? '' : fileHTML) + "
" + (comment || '') + " " + " " + "
"
});
_ref = $$('.quotelink', container);
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
@@ -4281,7 +4293,47 @@
}
quote.href = "/" + boardID + "/res/" + href;
}
+ Build.capcodeReplies({
+ boardID: boardID,
+ threadID: threadID,
+ root: container,
+ capcodeReplies: capcodeReplies
+ });
return container;
+ },
+ capcodeReplies: function(_arg) {
+ var array, boardID, bq, capcodeReplies, capcodeType, generateCapcodeReplies, html, root, threadID;
+
+ boardID = _arg.boardID, threadID = _arg.threadID, bq = _arg.bq, root = _arg.root, capcodeReplies = _arg.capcodeReplies;
+ if (!capcodeReplies) {
+ return;
+ }
+ generateCapcodeReplies = function(capcodeType, array) {
+ return "" + ((function() {
+ switch (capcodeType) {
+ case 'admin':
+ return 'Administrator';
+ case 'mod':
+ return 'Moderator';
+ case 'developer':
+ return 'Developer';
+ }
+ })()) + " Repl" + (array.length > 1 ? 'ies' : 'y') + ": " + (array.map(function(ID) {
+ return ">>" + ID + " ";
+ }).join(' ')) + " ";
+ };
+ html = [];
+ for (capcodeType in capcodeReplies) {
+ array = capcodeReplies[capcodeType];
+ html.push(generateCapcodeReplies(capcodeType, array));
+ }
+ bq || (bq = $('blockquote', root));
+ return $.add(bq, [
+ $.el('br'), $.el('br'), $.el('span', {
+ className: 'capcodeReplies',
+ innerHTML: html.join('')
+ })
+ ]);
}
};
@@ -6681,7 +6733,7 @@
if (g.VIEW === 'catalog' || !Conf['Linkify']) {
return;
}
- this.regString = Conf['Allow False Positives'] ? /(\b([-a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]|[-a-z0-9]+\.[a-z]|[\d]+\.[\d]+\.[\d]+\.[\d]+\/|[a-z]{3,}:[a-z0-9?]|[^\s@]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi : /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi;
+ this.regString = Conf['Allow False Positives'] ? /([-a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]|[-a-z0-9]+\.[a-z]|[\d]+\.[\d]+\.[\d]+\.[\d]+\/|[a-z]{3,}:[a-z0-9?]|[^\s@]+@[a-z0-9.-]+\.[a-z0-9])/i : /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1})/i;
if (Conf['Comment Expansion']) {
ExpandComment.callbacks.push(this.node);
}
@@ -6694,7 +6746,7 @@
});
},
node: function() {
- var data, el, i, items, links, node, range, snapshot, _i, _len, _ref;
+ var data, el, end, endNode, i, index, items, lIndex, length, link, links, node, range, result, saved, snapshot, space, test, text, _i, _len, _ref;
if (this.isClone) {
if (Conf['Embedding']) {
@@ -6709,16 +6761,49 @@
}
return;
}
+ test = /[^\s'"]+/g;
+ space = /[\s'"]/;
snapshot = $.X('.//br|.//text()', this.nodes.comment);
i = 0;
while (node = snapshot.snapshotItem(i++)) {
- if (node.parentElement.nodeName === "A") {
+ links = [];
+ data = node.data;
+ if (node.parentElement.nodeName === "A" || !data) {
continue;
}
- links = [];
- if (Linkify.regString.test(node.data)) {
- Linkify.regString.lastIndex = 0;
- Linkify.gatherLinks(snapshot, this, node, links, i);
+ while (result = test.exec(data)) {
+ index = result.index;
+ endNode = node;
+ if ((length = index + result[0].length) === data.length) {
+ while ((saved = snapshot.snapshotItem(i++))) {
+ if (saved.nodeName === 'BR') {
+ break;
+ }
+ endNode = saved;
+ length = saved.data.length;
+ if (end = space.exec(saved.data)) {
+ length = end.index;
+ i--;
+ break;
+ }
+ }
+ if (length === endNode.data.length) {
+ test.lastIndex = 0;
+ }
+ range = Linkify.makeRange(node, endNode, index, length);
+ if (link = Linkify.regString.exec(text = range.toString())) {
+ if (lIndex = link.index) {
+ range.setStart(node, lIndex + index);
+ }
+ links.push([range, text]);
+ }
+ break;
+ } else {
+ if (link = Linkify.regString.exec(result[0])) {
+ range = Linkify.makeRange(node, node, link.index, link.length);
+ links.push([range, link]);
+ }
+ }
}
_ref = links.reverse();
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
@@ -6742,60 +6827,25 @@
}
}
},
- gatherLinks: function(snapshot, post, node, links, i) {
- var data, index, len, len2, link, match, range;
+ makeRange: function(startNode, endNode, startOffset, endOffset) {
+ var range;
- data = node.data;
- len = data.length;
- while ((match = Linkify.regString.exec(data))) {
- index = match.index;
- link = match[0];
- len2 = index + link.length;
- if (len === len2) {
- break;
- }
- range = document.createRange();
- range.setStart(node, index);
- range.setEnd(node, len2);
- links.push(range);
- }
- Linkify.regString.lastIndex = 0;
- if (match) {
- links.push(Linkify.seek(snapshot, post, node, links, match, i));
- }
- },
- seek: function(snapshot, post, node, links, match, i) {
- var data, index, link, next, range, result;
-
- link = match[0];
range = document.createRange();
- range.setStart(node, match.index);
- while ((next = snapshot.snapshotItem(i++)) && next.nodeName !== 'BR') {
- node = next;
- data = node.data;
- if (result = /[\s'"]/.exec(data)) {
- index = result.index;
- range.setEnd(node, index);
- Linkify.regString.lastIndex = index;
- Linkify.gatherLinks(snapshot, post, node, links, i);
- return range;
- }
- }
- if (range.collapsed) {
- range.setEnd(node, node.data.length);
- }
+ range.setStart(startNode, startOffset);
+ range.setEnd(endNode, endOffset);
return range;
},
- makeLink: function(range) {
- var a, link;
+ makeLink: function(_arg) {
+ var a, range, text;
- link = range.toString();
- link = link.contains(':') ? link : (link.contains('@') ? 'mailto:' : 'http://') + link;
+ range = _arg[0], text = _arg[1];
+ text;
+ text = text.contains(':') ? text : (text.contains('@') ? 'mailto:' : 'http://') + text;
a = $.el('a', {
className: 'linkify',
rel: 'nofollow noreferrer',
target: '_blank',
- href: link
+ href: text
});
$.add(a, range.extractContents());
range.insertNode(a);
@@ -7902,7 +7952,7 @@
img = $.el('img');
img.onload = function() {
- var applyBlob, cv, data, height, i, l, s, ui8a, width, _i;
+ var cv, height, s, width;
s = 90 * 2;
if (_this.file.type === 'image/gif') {
@@ -7926,23 +7976,10 @@
cv.width = img.width = width;
cv.getContext('2d').drawImage(img, 0, 0, width, height);
URL.revokeObjectURL(fileURL);
- applyBlob = function(blob) {
+ return cv.toBlob(function(blob) {
_this.URL = URL.createObjectURL(blob);
return _this.nodes.el.style.backgroundImage = "url(" + _this.URL + ")";
- };
- if (cv.toBlob) {
- cv.toBlob(applyBlob);
- return;
- }
- data = atob(cv.toDataURL().split(',')[1]);
- l = data.length;
- ui8a = new Uint8Array(l);
- for (i = _i = 0; 0 <= l ? _i < l : _i > l; i = 0 <= l ? ++_i : --_i) {
- ui8a[i] = data.charCodeAt(i);
- }
- return applyBlob(new Blob([ui8a], {
- type: 'image/png'
- }));
+ });
};
fileURL = URL.createObjectURL(this.file);
return img.src = fileURL;
@@ -8826,7 +8863,7 @@
},
menu: {
init: function() {
- var conf, createSubEntry, el, key, subEntries, _ref;
+ var conf, createSubEntry, el, name, subEntries, _ref;
if (g.VIEW === 'catalog' || !Conf['Image Expansion']) {
return;
@@ -8838,9 +8875,9 @@
createSubEntry = ImageExpand.menu.createSubEntry;
subEntries = [];
_ref = Config.imageExpansion;
- for (key in _ref) {
- conf = _ref[key];
- subEntries.push(createSubEntry(key, conf));
+ for (name in _ref) {
+ conf = _ref[name];
+ subEntries.push(createSubEntry(name, conf[1]));
}
return $.event('AddMenuEntry', {
type: 'header',
@@ -8849,22 +8886,20 @@
subEntries: subEntries
});
},
- createSubEntry: function(type, config) {
+ createSubEntry: function(name, desc) {
var input, label;
label = $.el('label', {
- innerHTML: " " + type
+ innerHTML: " " + name,
+ title: desc
});
input = label.firstElementChild;
- if (type === 'Fit width' || type === 'Fit height') {
+ if (name === 'Fit width' || name === 'Fit height') {
$.on(input, 'change', ImageExpand.cb.setFitness);
}
- if (config) {
- label.title = config[1];
- input.checked = Conf[type];
- $.event('change', null, input);
- $.on(input, 'change', $.cb.checked);
- }
+ input.checked = Conf[name];
+ $.event('change', null, input);
+ $.on(input, 'change', $.cb.checked);
return {
el: label
};
@@ -9556,7 +9591,6 @@
this.postCountEl = $('#post-count', sc);
this.fileCountEl = $('#file-count', sc);
this.pageCountEl = $('#page-count', sc);
- this.lastModified = '0';
return Thread.prototype.callbacks.push({
name: 'Thread Stats',
cb: this.node
@@ -9611,19 +9645,13 @@
return $.ajax("//api.4chan.org/" + ThreadStats.thread.board + "/threads.json", {
onload: ThreadStats.onThreadsLoad
}, {
- headers: {
- 'If-Modified-Since': ThreadStats.lastModified
- }
+ whenModified: true
});
},
onThreadsLoad: function() {
var page, pages, thread, _i, _j, _len, _len1, _ref;
- if (!Conf["Page Count in Stats"]) {
- return;
- }
- ThreadStats.lastModified = this.getResponseHeader('Last-Modified');
- if (this.status !== 200) {
+ if (!(Conf["Page Count in Stats"] && this.status === 200)) {
return;
}
pages = JSON.parse(this.response);
@@ -9718,7 +9746,6 @@
ThreadUpdater.root = this.OP.nodes.root.parentNode;
ThreadUpdater.lastPost = +ThreadUpdater.root.lastElementChild.id.match(/\d+/)[0];
ThreadUpdater.outdateCount = 0;
- ThreadUpdater.lastModified = '0';
ThreadUpdater.cb.interval.call($.el('input', {
value: Conf['Interval']
}));
@@ -9814,10 +9841,7 @@
case 200:
g.DEAD = false;
ThreadUpdater.parse(JSON.parse(req.response).posts);
- ThreadUpdater.lastModified = req.getResponseHeader('Last-Modified');
- if (Conf['Auto Update']) {
- ThreadUpdater.set('timer', ThreadUpdater.getInterval());
- }
+ ThreadUpdater.set('timer', ThreadUpdater.getInterval());
break;
case 404:
g.DEAD = true;
@@ -9831,16 +9855,8 @@
});
break;
default:
- if (Conf['Auto Update']) {
- ThreadUpdater.outdateCount++;
- ThreadUpdater.set('timer', ThreadUpdater.getInterval());
- }
- /*
- Status Code 304: Not modified
- By sending the `If-Modified-Since` header we get a proper status code, and no response.
- This saves bandwidth for both the user and the servers and avoid unnecessary computation.
- */
-
+ ThreadUpdater.outdateCount++;
+ ThreadUpdater.set('timer', ThreadUpdater.getInterval());
_ref = req.status === 304 ? [null, null] : ["" + req.statusText + " (" + req.status + ")", 'warning'], text = _ref[0], klass = _ref[1];
ThreadUpdater.set('status', text, klass);
}
@@ -9913,9 +9929,7 @@
return ThreadUpdater.req = $.ajax(url, {
onloadend: ThreadUpdater.cb.load
}, {
- headers: {
- 'If-Modified-Since': ThreadUpdater.lastModified
- }
+ whenModified: true
});
},
updateThreadStatus: function(title, OP) {
@@ -10053,15 +10067,46 @@
ThreadWatcher = {
init: function() {
+ var now;
+
if (!Conf['Thread Watcher']) {
return;
}
- this.dialog = UI.dialog('watcher', 'top: 50px; left: 0px;', 'Thread Watcher
');
+ this.db = new DataBoard('watchedThreads', this.refresh, true);
+ this.dialog = UI.dialog('thread-watcher', 'top: 50px; left: 0px;', "Thread Watcher
");
+ this.status = $('#watcher-status', this.dialog);
+ this.list = this.dialog.lastElementChild;
$.on(d, 'QRPostSuccessful', this.cb.post);
- $.sync('WatchedThreads', this.refresh);
- $.ready(function() {
- ThreadWatcher.refresh();
- return $.add(d.body, ThreadWatcher.dialog);
+ if (g.VIEW === 'thread') {
+ $.on(d, 'ThreadUpdate', this.cb.threadUpdate);
+ }
+ $.on(d, '4chanXInitFinished', this.ready);
+ now = Date.now();
+ if ((this.db.data.lastChecked || 0) < now - 2 * $.HOUR) {
+ this.db.data.lastChecked = now;
+ ThreadWatcher.fetchAllStatus();
+ this.db.save();
+ }
+ $.get('WatchedThreads', null, function(_arg) {
+ var WatchedThreads, boardID, data, threadID, threads, _ref;
+
+ WatchedThreads = _arg.WatchedThreads;
+ if (!WatchedThreads) {
+ return;
+ }
+ _ref = ThreadWatcher.convert(WatchedThreads);
+ for (boardID in _ref) {
+ threads = _ref[boardID];
+ for (threadID in threads) {
+ data = threads[threadID];
+ ThreadWatcher.db.set({
+ boardID: boardID,
+ threadID: threadID,
+ val: data
+ });
+ }
+ }
+ return $["delete"]('WatchedThreads');
});
return Thread.prototype.callbacks.push({
name: 'Thread Watcher',
@@ -10069,76 +10114,84 @@
});
},
node: function() {
- var favicon,
- _this = this;
+ var toggler;
- favicon = $.el('a', {
- className: 'watch-thread-link',
- href: 'javascript:;'
+ toggler = $.el('img', {
+ className: 'watcher-toggler'
});
- $.on(favicon, 'click', ThreadWatcher.cb.toggle);
- $.before($('input', this.OP.nodes.post), favicon);
- if (g.VIEW !== 'thread') {
+ $.on(toggler, 'click', ThreadWatcher.cb.toggle);
+ return $.before($('input', this.OP.nodes.post), toggler);
+ },
+ ready: function() {
+ $.off(d, '4chanXInitFinished', ThreadWatcher.ready);
+ if (!Main.isThisPageLegit()) {
return;
}
- return $.get('AutoWatch', 0, function(item) {
- if (item['AutoWatch'] !== _this.ID) {
+ ThreadWatcher.refresh();
+ $.add(d.body, ThreadWatcher.dialog);
+ if (!Conf['Auto Watch']) {
+ return;
+ }
+ return $.get('AutoWatch', 0, function(_arg) {
+ var AutoWatch, thread;
+
+ AutoWatch = _arg.AutoWatch;
+ if (!(thread = g.BOARD.threads[AutoWatch])) {
return;
}
- ThreadWatcher.watch(_this);
+ ThreadWatcher.add(thread);
return $["delete"]('AutoWatch');
});
},
- refresh: function(watched) {
- var ID, board, div, favicon, id, link, nodes, props, thread, x, _ref, _ref1;
-
- if (!watched) {
- $.get('WatchedThreads', {}, function(item) {
- return ThreadWatcher.refresh(item['WatchedThreads']);
- });
- return;
- }
- nodes = [$('.move', ThreadWatcher.dialog)];
- for (board in watched) {
- _ref = watched[board];
- for (id in _ref) {
- props = _ref[id];
- x = $.el('a', {
- textContent: '✖',
- className: 'close',
- href: 'javascript:;'
- });
- $.on(x, 'click', ThreadWatcher.cb.x);
- link = $.el('a', props);
- link.title = link.textContent;
- div = $.el('div');
- $.add(div, [x, $.tn(' '), link]);
- nodes.push(div);
- }
- }
- $.rmAll(ThreadWatcher.dialog);
- $.add(ThreadWatcher.dialog, nodes);
- watched = watched[g.BOARD] || {};
- _ref1 = g.BOARD.threads;
- for (ID in _ref1) {
- thread = _ref1[ID];
- favicon = $('.watch-thread-link', thread.OP.nodes.post);
- if (ID in watched) {
- $.addClass(favicon, 'watched');
- } else {
- $.rmClass(favicon, 'watched');
- }
- }
- },
cb: {
+ openAll: function() {
+ var a, _i, _len, _ref;
+
+ if ($.hasClass(this, 'disabled')) {
+ return;
+ }
+ _ref = $$('a[title]', ThreadWatcher.list);
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ a = _ref[_i];
+ $.open(a.href);
+ }
+ return $.event('CloseMenu');
+ },
+ checkThreads: function() {
+ if ($.hasClass(this, 'disabled')) {
+ return;
+ }
+ return ThreadWatcher.fetchAllStatus();
+ },
+ pruneDeads: function() {
+ var boardID, data, threadID, _i, _len, _ref, _ref1;
+
+ if ($.hasClass(this, 'disabled')) {
+ return;
+ }
+ _ref = ThreadWatcher.getAll();
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ _ref1 = _ref[_i], boardID = _ref1.boardID, threadID = _ref1.threadID, data = _ref1.data;
+ if (!data.isDead) {
+ continue;
+ }
+ delete ThreadWatcher.db.data.boards[boardID][threadID];
+ ThreadWatcher.db.deleteIfEmpty({
+ boardID: boardID
+ });
+ }
+ ThreadWatcher.db.save();
+ ThreadWatcher.refresh();
+ return $.event('CloseMenu');
+ },
toggle: function() {
return ThreadWatcher.toggle(Get.postFromNode(this).thread);
},
- x: function() {
- var thread;
+ rm: function() {
+ var boardID, threadID, _ref;
- thread = this.nextElementSibling.pathname.split('/');
- return ThreadWatcher.unwatch(thread[1], thread[3]);
+ _ref = this.parentNode.dataset.fullID.split('.'), boardID = _ref[0], threadID = _ref[1];
+ return ThreadWatcher.rm(boardID, +threadID);
},
post: function(e) {
var board, postID, threadID, _ref;
@@ -10149,43 +10202,346 @@
return $.set('AutoWatch', threadID);
}
} else if (Conf['Auto Watch Reply']) {
- return ThreadWatcher.watch(board.threads[threadID]);
+ return ThreadWatcher.add(board.threads[threadID]);
}
+ },
+ threadUpdate: function(e) {
+ var thread;
+
+ thread = e.detail.thread;
+ if (!(e.detail[404] && ThreadWatcher.db.get({
+ boardID: thread.board.ID,
+ threadID: thread.ID
+ }))) {
+ return;
+ }
+ return ThreadWatcher.add(thread);
+ }
+ },
+ fetchCount: {
+ fetched: 0,
+ fetching: 0
+ },
+ fetchAllStatus: function() {
+ var thread, _i, _len, _ref;
+
+ ThreadWatcher.status.textContent = '...';
+ _ref = ThreadWatcher.getAll();
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ thread = _ref[_i];
+ ThreadWatcher.fetchStatus(thread);
+ }
+ },
+ fetchStatus: function(_arg) {
+ var boardID, data, fetchCount, threadID;
+
+ boardID = _arg.boardID, threadID = _arg.threadID, data = _arg.data;
+ if (data.isDead) {
+ return;
+ }
+ fetchCount = ThreadWatcher.fetchCount;
+ fetchCount.fetching++;
+ return $.ajax("//api.4chan.org/" + boardID + "/res/" + threadID + ".json", {
+ onloadend: function() {
+ var status;
+
+ fetchCount.fetched++;
+ if (fetchCount.fetched === fetchCount.fetching) {
+ fetchCount.fetched = 0;
+ fetchCount.fetching = 0;
+ status = '';
+ } else {
+ status = "" + (Math.round(fetchCount.fetched / fetchCount.fetching * 100)) + "%";
+ }
+ ThreadWatcher.status.textContent = status;
+ if (this.status !== 404) {
+ return;
+ }
+ if (Conf['Auto Prune']) {
+ ThreadWatcher.rm(boardID, threadID);
+ } else {
+ data.isDead = true;
+ ThreadWatcher.db.set({
+ boardID: boardID,
+ threadID: threadID,
+ val: data
+ });
+ }
+ return ThreadWatcher.refresh();
+ }
+ }, {
+ type: 'head'
+ });
+ },
+ getAll: function() {
+ var all, boardID, data, threadID, threads, _ref;
+
+ all = [];
+ _ref = ThreadWatcher.db.data.boards;
+ for (boardID in _ref) {
+ threads = _ref[boardID];
+ if (Conf['Current Board'] && boardID !== g.BOARD.ID) {
+ continue;
+ }
+ for (threadID in threads) {
+ data = threads[threadID];
+ all.push({
+ boardID: boardID,
+ threadID: threadID,
+ data: data
+ });
+ }
+ }
+ return all;
+ },
+ makeLine: function(boardID, threadID, data) {
+ var div, fullID, href, link, x;
+
+ x = $.el('a', {
+ textContent: '✖',
+ href: 'javascript:;'
+ });
+ $.on(x, 'click', ThreadWatcher.cb.rm);
+ if (data.isDead) {
+ href = Redirect.to('thread', {
+ boardID: boardID,
+ threadID: threadID
+ });
+ }
+ link = $.el('a', {
+ href: href || ("/" + boardID + "/res/" + threadID),
+ textContent: data.excerpt,
+ title: data.excerpt
+ });
+ div = $.el('div');
+ fullID = "" + boardID + "." + threadID;
+ div.dataset.fullID = fullID;
+ if (g.VIEW === 'thread' && fullID === ("" + g.BOARD + "." + g.THREADID)) {
+ $.addClass(div, 'current');
+ }
+ if (data.isDead) {
+ $.addClass(div, 'dead-thread');
+ }
+ $.add(div, [x, $.tn(' '), link]);
+ return div;
+ },
+ refresh: function() {
+ var boardID, data, list, nodes, refresher, thread, threadID, toggler, _i, _j, _len, _len1, _ref, _ref1, _ref2, _ref3;
+
+ nodes = [];
+ _ref = ThreadWatcher.getAll();
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ _ref1 = _ref[_i], boardID = _ref1.boardID, threadID = _ref1.threadID, data = _ref1.data;
+ nodes.push(ThreadWatcher.makeLine(boardID, threadID, data));
+ }
+ list = ThreadWatcher.list;
+ $.rmAll(list);
+ $.add(list, nodes);
+ _ref2 = g.BOARD.threads;
+ for (threadID in _ref2) {
+ thread = _ref2[threadID];
+ toggler = $('.watcher-toggler', thread.OP.nodes.post);
+ toggler.src = ThreadWatcher.db.get({
+ boardID: thread.board.ID,
+ threadID: threadID
+ }) ? Favicon["default"] : Favicon.empty;
+ }
+ _ref3 = ThreadWatcher.menu.refreshers;
+ for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
+ refresher = _ref3[_j];
+ refresher();
}
},
toggle: function(thread) {
- if (!$.hasClass($('.watch-thread-link', thread.OP.nodes.post), 'watched')) {
- return ThreadWatcher.watch(thread);
+ var boardID, threadID;
+
+ boardID = thread.board.ID;
+ threadID = thread.ID;
+ if (ThreadWatcher.db.get({
+ boardID: boardID,
+ threadID: threadID
+ })) {
+ return ThreadWatcher.rm(boardID, threadID);
} else {
- return ThreadWatcher.unwatch(thread.board, thread.ID);
+ return ThreadWatcher.add(thread);
}
},
- unwatch: function(board, threadID) {
- return $.get('WatchedThreads', {}, function(item) {
- var watched;
+ add: function(thread) {
+ var boardID, data, threadID;
- watched = item['WatchedThreads'];
- delete watched[board][threadID];
- if (!Object.keys(watched[board]).length) {
- delete watched[board];
+ data = {};
+ boardID = thread.board.ID;
+ threadID = thread.ID;
+ if (thread.isDead) {
+ if (Conf['Auto Prune'] && ThreadWatcher.db.get({
+ boardID: boardID,
+ threadID: threadID
+ })) {
+ ThreadWatcher.rm(boardID, threadID);
+ return;
}
- ThreadWatcher.refresh(watched);
- return $.set('WatchedThreads', watched);
+ data.isDead = true;
+ }
+ data.excerpt = Get.threadExcerpt(thread);
+ ThreadWatcher.db.set({
+ boardID: boardID,
+ threadID: threadID,
+ val: data
});
+ return ThreadWatcher.refresh();
},
- watch: function(thread) {
- return $.get('WatchedThreads', {}, function(item) {
- var watched, _name;
-
- watched = item['WatchedThreads'];
- watched[_name = thread.board] || (watched[_name] = {});
- watched[thread.board][thread] = {
- href: "/" + thread.board + "/res/" + thread,
- textContent: Get.threadExcerpt(thread)
- };
- ThreadWatcher.refresh(watched);
- return $.set('WatchedThreads', watched);
+ rm: function(boardID, threadID) {
+ ThreadWatcher.db["delete"]({
+ boardID: boardID,
+ threadID: threadID
});
+ return ThreadWatcher.refresh();
+ },
+ convert: function(oldFormat) {
+ var boardID, data, newFormat, threadID, threads;
+
+ newFormat = {};
+ for (boardID in oldFormat) {
+ threads = oldFormat[boardID];
+ for (threadID in threads) {
+ data = threads[threadID];
+ (newFormat[boardID] || (newFormat[boardID] = {}))[threadID] = {
+ excerpt: data.textContent
+ };
+ }
+ }
+ return newFormat;
+ },
+ menu: {
+ refreshers: [],
+ init: function() {
+ var menu;
+
+ if (!Conf['Thread Watcher']) {
+ return;
+ }
+ menu = new UI.Menu('thread watcher');
+ $.on($('.menu-button', ThreadWatcher.dialog), 'click', function(e) {
+ return menu.toggle(e, this, ThreadWatcher);
+ });
+ this.addHeaderMenuEntry();
+ return this.addMenuEntries();
+ },
+ addHeaderMenuEntry: function() {
+ var entryEl;
+
+ if (g.VIEW !== 'thread') {
+ return;
+ }
+ entryEl = $.el('a', {
+ href: 'javascript:;'
+ });
+ $.event('AddMenuEntry', {
+ type: 'header',
+ el: entryEl,
+ order: 60
+ });
+ $.on(entryEl, 'click', function() {
+ return ThreadWatcher.toggle(g.threads["" + g.BOARD + "." + g.THREADID]);
+ });
+ return this.refreshers.push(function() {
+ var addClass, rmClass, text, _ref;
+
+ _ref = $('.current', ThreadWatcher.list) ? ['unwatch-thread', 'watch-thread', 'Unwatch thread'] : ['watch-thread', 'unwatch-thread', 'Watch thread'], addClass = _ref[0], rmClass = _ref[1], text = _ref[2];
+ $.addClass(entryEl, addClass);
+ $.rmClass(entryEl, rmClass);
+ return entryEl.textContent = text;
+ });
+ },
+ addMenuEntries: function() {
+ var cb, conf, entries, entry, name, refresh, subEntries, _i, _len, _ref, _ref1, _results;
+
+ entries = [];
+ entries.push({
+ cb: ThreadWatcher.cb.openAll,
+ entry: {
+ type: 'thread watcher',
+ el: $.el('a', {
+ textContent: 'Open all threads'
+ })
+ },
+ refresh: function() {
+ return (ThreadWatcher.list.firstElementChild ? $.rmClass : $.addClass)(this.el, 'disabled');
+ }
+ });
+ entries.push({
+ cb: ThreadWatcher.cb.checkThreads,
+ entry: {
+ type: 'thread watcher',
+ el: $.el('a', {
+ textContent: 'Check 404\'d threads'
+ })
+ },
+ refresh: function() {
+ return ($('div:not(.dead-thread)', ThreadWatcher.list) ? $.rmClass : $.addClass)(this.el, 'disabled');
+ }
+ });
+ entries.push({
+ cb: ThreadWatcher.cb.pruneDeads,
+ entry: {
+ type: 'thread watcher',
+ el: $.el('a', {
+ textContent: 'Prune 404\'d threads'
+ })
+ },
+ refresh: function() {
+ return ($('.dead-thread', ThreadWatcher.list) ? $.rmClass : $.addClass)(this.el, 'disabled');
+ }
+ });
+ subEntries = [];
+ _ref = Config.threadWatcher;
+ for (name in _ref) {
+ conf = _ref[name];
+ subEntries.push(this.createSubEntry(name, conf[1]));
+ }
+ entries.push({
+ entry: {
+ type: 'thread watcher',
+ el: $.el('span', {
+ textContent: 'Settings'
+ }),
+ subEntries: subEntries
+ }
+ });
+ _results = [];
+ for (_i = 0, _len = entries.length; _i < _len; _i++) {
+ _ref1 = entries[_i], entry = _ref1.entry, cb = _ref1.cb, refresh = _ref1.refresh;
+ if (entry.el.nodeName === 'A') {
+ entry.el.href = 'javascript:;';
+ }
+ if (cb) {
+ $.on(entry.el, 'click', cb);
+ }
+ if (refresh) {
+ this.refreshers.push(refresh.bind(entry));
+ }
+ _results.push($.event('AddMenuEntry', entry));
+ }
+ return _results;
+ },
+ createSubEntry: function(name, desc) {
+ var entry, input;
+
+ entry = {
+ type: 'thread watcher',
+ el: $.el('label', {
+ innerHTML: " " + name,
+ title: desc
+ })
+ };
+ input = entry.el.firstElementChild;
+ input.checked = Conf[name];
+ $.on(input, 'change', $.cb.checked);
+ if (name === 'Current Board') {
+ $.on(input, 'change', ThreadWatcher.refresh);
+ }
+ return entry;
+ }
}
};
@@ -10529,8 +10885,8 @@
http: true,
https: true,
software: 'foolfuuka',
- boards: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv'],
- files: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
+ boards: ['adv', 'asp', 'cm', 'd', 'e', 'i', 'lgbt', 'n', 'o', 'p', 'pol', 's', 's4s', 't', 'trv', 'y'],
+ files: ['cm', 'd', 'e', 'i', 'n', 'o', 'p', 's', 'trv', 'y']
},
'Foolz Beta': {
domain: 'beta.foolz.us',
@@ -11787,7 +12143,7 @@
fg = _arg[0];
return "0 0 0 0 " + fg.r + " 0 0 0 0 " + fg.g + " 0 0 0 0 " + fg.b;
},
- layout: "/* Cleanup */ #absbot, #boardNavDesktop, #delPassword, #delform > hr:last-of-type, #navbotright, #postForm, #search-label, #search-label-bottom, #styleSwitcher, #togglePostForm, .boardBanner > div, .mobile, .next form, .next span, .postingMode, .prev form, .prev span, .riced, .sideArrows, .stylechanger, body > br, body > div[style^=\"text-align\"], body > hr { display: none; } /* Empties */ #qr .warning:empty, #qr-thread-select:empty { display: none; } /* File Name Trunctuate / /p/ exif */ .exif, .fileText:hover .fntrunc, .fileText:not(:hover) .fnfull { display: none; } /* Unnecessary */ #qp input, #qp .rice, .inline .rice { display: none !important; } /* Hidden Content */ .forwarded, .hidden, .hidden_thread ~ div, .hidden_thread ~ a, .replyContainer .stub ~ div, .replyContainer .stub ~ a, .stub + div, .thread > .stub:first-child ~ .postContainer, .thread > .stub:first-child ~ .summary, [hidden] { display: none !important; } /* Hidden UI */ #catalog, #navlinks, #navtopright, #svg_filters, .cataloglink, .navLinks { z-index: 7; position: fixed; top: 100%; left: 100%; } /* Hide last horizontal rule, keep clear functionality. */ .board > hr:last-of-type { visibility: hidden; } /* Fappe Tyme */ .fappeTyme .thread > .noFile, .fappeTyme .threadContainer > .noFile { display: none; } /* Defaults */ a { text-decoration: none; outline: none; } .underline-links a { text-decoration: underline; } body, html { min-height: 100%; box-sizing: border-box; } body { outline: none; min-height: 100%; } .sidebar-hide body { margin: 0 2px; } .sidebar-minimal body { margin: 0 20px; } .sidebar-normal body { margin: 0 252px } .sidebar-large body { margin: 0 303px; } .sidebar-location-right body { margin-left: 2px; } .sidebar-location-left body { margin-right: 2px; } body.unscroll { overflow: hidden; } .fourchan-ss-sidebar body::before { content: ''; position: fixed; top: 0; bottom: 0; box-sizing: border-box; display: block; z-index: 0; } .fourchan-ss-sidebar.sidebar-large body::before { width: 306px; } .fourchan-ss-sidebar.sidebar-normal body::before { width: 255px; } .fourchan-ss-sidebar.sidebar-minimal body::before { width: 23px; } .sidebar-location-right body::before { right: 0; } sidebar-location-left body::before { left: 0; } .fourchan-ss-sidebar.sidebar-location-right body { padding-right: 2px; } .fourchan-ss-sidebar.sidebar-location-left body { padding-left: 2px; } hr { clear: both; border: 0; padding: 0; margin: 0 0 1px; } .hide-horizontal-rules hr { visibility: hidden; } th { text-align: left; } .center { text-align: center; } .disabled { opacity: 0.5; } .pointer { cursor: pointer; } /* Symbols */ .drop-marker { vertical-align: middle; display: inline-block; margin: 2px 2px 3px; border-top: .5em solid; border-right: .3em solid transparent; border-left: .3em solid transparent; } .brackets-wrap::before { content: \" [\"; } .brackets-wrap::after { content: \"] \"; } /* Thread / Reply Nav */ #navlinks a { position: fixed; z-index: 12; opacity: 0.5; display: inline-block; border-right: 6px solid transparent; border-left: 6px solid transparent; margin: 1.5px; } #navlinks a:first-of-type { border-bottom: 11px solid rgb(130,130,130); } #navlinks a:last-of-type { border-top: 11px solid rgb(130,130,130); } /* Header */ #header-bar { z-index: 6; border-width: 1px; padding: 0 2px; border-style: solid; } .pagination-sticky-top .pagelist, .pagination-sticky-bottom .pagelist, #header-bar { left: 2px; right: 2px; } .navigation-alignment-center #header-bar { text-align: center; } .navigation-alignment-right #header-bar { text-align: right; } .sidebar-location-left.sidebar-large:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-left #header-bar { left: 303px; } .sidebar-location-left.sidebar-normal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-left #header-bar { left: 252px; } .sidebar-location-left.sidebar-minimal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-left.sidebar-minimal:not(.fourchan-ss-navigation) #header-bar { left: 20px; } .sidebar-location-right.sidebar-large:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-right #header-bar { right: 303px; } .sidebar-location-right.sidebar-normal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-right #header-bar { right: 252px; } .sidebar-location-right.sidebar-minimal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-right.sidebar-minimal:not(.fourchan-ss-navigation) #header-bar { right: 20px; } .fourchan-ss-navigation .pagelist, .fourchan-ss-navigation #header-bar { left: 0; right: 0; border-left: 0; border-right: 0; border-radius: 0 !important; } .hide-navigation-decorations #header-bar { font-size: 0; color: transparent; word-spacing: 2px; } #shortcuts { float: right; } .fixed #header-bar.autohide { z-index: 24; } .fixed #header-bar { position: fixed; } .top #header-bar { top: 0; border-top-width: 0; } .rounded-edges.top #header-bar { border-radius: 0 0 3px 3px; } .fixed.bottom #header-bar { bottom: 0; border-bottom-width: 0; } .rounded-edges.bottom #header-bar { border-radius: 3px 3px 0 0; } .hide #header-bar { position: fixed; top: 110%; bottom: auto; } /* Header Autohide */ .fixed #header-bar.autohide:not(:hover) { box-shadow: none; transition: all .8s .6s cubic-bezier(.55, .055, .675, .19); } .fixed.top #header-bar.autohide:not(:hover) { margin-bottom: -1em; -webkit-transform: translateY(-100%); } .fixed.bottom #header-bar.autohide:not(:hover) { -webkit-transform: translateY(100%); } #scroll-marker { left: 0; right: 0; height: 10px; position: absolute; } #header-bar #scroll-marker { display: none; } .fixed #header-bar #scroll-marker { display: block; } .fixed.top header-bar #scroll-marker { top: 100%; } .fixed.bottom #header-bar #scroll-marker { bottom: 100%; } /* Notifications */ #notifications { position: fixed; top: 0; text-align: center; right: 0; left: 0; transition: all .8s .6s cubic-bezier(.55, .055, .675, .19); } .fixed.top #header-bar #notifications { position: absolute; top: 100%; } .notification { font-weight: 700; text-shadow: 0 1px 2px rgba(0, 0, 0, .5); box-shadow: 0 1px 2px rgba(0, 0, 0, .15); border-radius: 2px; margin: 1px auto; width: 500px; max-width: 100%; position: relative; transition: all .25s ease-in-out; } .notification.error { background-color: hsla(0, 100%, 38%, .9); } .notification.warning { background-color: hsla(36, 100%, 38%, .9); } .notification.info { background-color: hsla(200, 100%, 38%, .9); } .notification.success { background-color: hsla(104, 100%, 38%, .9); } .notification, .notification a { color: #fff !important; } .notification > .close { top: 0; padding: 2px; right: 4px; position: absolute; color: #fff; } .message { box-sizing: border-box; padding: 6px 20px; max-height: 200px; width: 100%; overflow: auto; } /* Updater / Thread Stats */ .float #thread-stats, .float #updater { position: fixed; } #update-status.new::after { content: ', '; } /* Pagination */ .pagelist { border-style: solid; border-width: 1px; z-index: 6; } .pagination-alignment-center .pagelist { text-align: center; } .pagination-alignment-right .pagelist { text-align: right; } .pagination-sticky-top .pagelist { position: fixed; top: 0; border-top-width: 0; } .pagination-sticky-bottom .pagelist { position: fixed; bottom: 0; border-bottom-width: 0; } .pagination-top .pagelist { position: static; border-top-width: 0; } .pagination-bottom .pagelist { position: static; } .pagination-top.rounded-edges .pagelist, .pagination-sticky-top.rounded-edges .pagelist { border-radius: 0 0 3px 3px; } .pagination-bottom.rounded-edges .pagelist, .pagination-sticky-bottom.rounded-edges .pagelist { border-radius: 3px 3px 0 0; } .pagination-hide .pagelist { display: none; } .pagination-on-side .pagelist { position: fixed; padding: 0; top: auto; bottom: 0.5em; margin: 0; background: none transparent !important; border: 0 none !important; text-align: right; } .pagination-on-side.post-form-style-fixed.show-post-form-header .pagelist { bottom: 23.1em; } .pagination-on-side.post-form-style-fixed .pagelist { bottom: 21.6em; } .sidebar-location-left.pagination-on-side .pagelist { -webkit-transform: rotate(-90deg); -webkit-transform-origin: bottom left; } .sidebar-location-right.pagination-on-side .pagelist { -webkit-transform: rotate(90deg); -webkit-transform-origin: bottom right; } .sidebar-location-right.sidebar-large.pagination-on-side .pagelist { left: auto; right: 301px; } .sidebar-location-left.sidebar-large.pagination-on-side .pagelist { right: auto; left: 301px; } .sidebar-location-right.sidebar-normal.pagination-on-side .pagelist { left: auto; right: 246px; } .sidebar-location-left.sidebar-normal.pagination-on-side .pagelist { right: auto; left: 246px; } .sidebar-location-right.sidebar-minimal.pagination-on-side .pagelist { left: auto; right: 246px; } .sidebar-location-left.sidebar-minimal.pagination-on-side .pagelist { right: auto; left: 18px; } .hide-navigation-decorations .pagelist { font-size: 0; color: transparent; word-spacing: 0; } .pagelist input, .pagelist div { vertical-align: middle; } .hide-navigation-decorations .pages a { margin: 0 1px; } .next, .pages, .prev { display: inline-block; margin: 0 3px; } /* Icons */ .icons-4chan-ss #navtopright .exlinksOptionsLink::after, .icons-4chan-ss #main-menu, .icons-4chan-ss .navLinks > a:first-of-type::after, .icons-4chan-ss #watcher::after, .icons-4chan-ss #globalMessage::after, .icons-4chan-ss #boardNavDesktopFoot::after, .icons-4chan-ss #img-controls, .icons-4chan-ss #catalog::after, .icons-4chan-ss #fappeTyme { background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAACWCAMAAAA2YSLzAAAAPFBMVEVkZGRlZWVjY2NmZmZnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dZxmG7AAAAE3RSTlMFFQ0AJD8eQFRqf5CgssDM4+73gHqZRAAAA0pJREFUSMetVlmy5CgMZDMGxK7737Ulgcu8ejMREzHtD7sShJRaKWV/Psq3iz7QGwTF2BZ01hp3N6yasctZJANiN5ZlItDLtNkQDGNeMLU7EqmCbUwhkhZbwsIuNbyWPX7dIyHOrDYOc8SOiEUJjojN0EsWlCXRrq2qvJCsIjic2OcFrwrOpdmTimqVyWG7ZkrWy97p7z/hACd2FUetBcQDpTN+nuKsGng881L5xOz/VQ88xL/eQkyZT3axp+4dUMwvH0Pnhn6wSyR+8IdR4f43/v8XX1BHjXpjwy5RdEcQ7DiuzlBUsFD+GeIFEy6W0pKXoSZOiUz5tf99nvTDD/1sP9VRPvb/un86lT57SVqwSk8KR+L6kgTOlcZslRQe5WmJRKovETW7Anb+HzxUW4Xgnv11fuuj82aKXHz1Tzztx9v4VA9+/6le26B+3VhTC9RMPIr0qx4zaWNsnFRO0s8FWgEIFIRiVUAIlJGciqMmCwpQWyI/OplXA1RrXG1YI2svTQ3ufhWjNlKFqtXFI7Yg+zAXRcBZ+HygJuVHd0ys35bVn6QojLL5cZeVvPht/mVu/r/8s7GMXsLjv2s71GZhgjnEwsEVXogiSl/pl7LWra0IQgO3poTsieoYd4dhWfJlGWqyQf6sLxWt3/MRa4Im04ixeSdAWnxvqCX6tObVmzpZOPOZvrBNJF8gmGciBChsV+YdRYwnAvNpS4AnYFBm0KA2a35Unh+efxjercaLfV7wW0rtUTNl2j715al/9VtfutF+NZ/+aZSa+py/GCpRyvr17EsVLbRhmN++BBY/ik5/+YPK6bKnf2T8fh7P+uEYn0D3E4L3i6QHmvc3+k+8PN6Mb1w52tje6LbAi+M0FT4YneqVbpVDPnL2Xqx7m3tf9ENXHba9H/a/+X3z/+XfCnOo+Zy/o4SgY5Z6iq0nb+9Mc4JxL5f1qYs+xhTP/uiX/cMe4+hDHAfGnmGe+Ev+G88vnG7Ie20wHiUt/S1Kv+6BCM/9fkEfz73/9HNufQ4ZKdzvnwtS/LXltRcJB/yJ23H/mo89nPFa85Li3XOYu435LwTXKVWwO+cnlWFTB47L/AdfR//KI2bvF8sAb0c/M+1+YE3/oS77B8N+UUVHraV6AAAAAElFTkSuQmCC\"); } .icons-oneechan #navtopright .exlinksOptionsLink::after, .icons-oneechan #main-menu, .icons-oneechan .navLinks > a:first-of-type::after, .icons-oneechan #watcher::after, .icons-oneechan #globalMessage::after, .icons-oneechan #boardNavDesktopFoot::after, .icons-oneechan #img-controls, .icons-oneechan #catalog::after, .icons-oneechan #fappeTyme { background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAACWCAMAAAA2YSLzAAAAPFBMVEVoaGhqampeXl5sbGxsbGxra2tsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGzXmsRLAAAAE3RSTlMAEAYnHBg2QExbcYaWqM++2+z4BMdvAwAAAtVJREFUSMfFVgmu3CAMhYRPAmb3/e9aL5Bl2kptVbXWSOSBsY15NmOMMZs1KnNExC+ezgV4MBtNMIw58+qX2REtQwiifdC6hwlNQBGfUlBzc+KYkP3IxH5hNvicCPXrMfEVi3ts2WrzaiN6jie2OI2GXbBfXiA/XPyexPpEHrHdyDV8YAt6vEYCVpJ3S7rXAZKkkfbnuR8Uk/32xsac6Y01La2ZfyIh1VrX9Rnfu5ygd6/XeQAGFxACkopDb3mkeXug48x5FCKhNzW+1j2t8/5EEwHTIfPm6G3aP37o/w/ir3QZ2V/xY0spdSxWL7MrLU7slmnDSY0UrH6CBJ/wFI3TNGECCDY9G4xmrpDkZvQMJ4q31EzLQuhipr7ag8ueFa+hUQy2d43nnPGg7NopHTUVyYlWpE+lUT4qfhDCnLpzB8oXLLJb4leptD/JblswOaZd0gRkDV0cJi69NNOUaclRpG6S1NPdRVPLjI3VSjWV8+FmaARknTxqfipl0tGR1DXvd0h251Ww/ZlaNQoaX3bqUS+IK6ZX4hysvuQinS+6n9638/6BbK4RLi6R11O8rPS4OnO66KHtw6yK96BWrg5QxDGcVzcoB8cYb/dE1zPO6C+pHxN0Ttw/JtJrx55+oV9Jq+ScF22IfBWDD+sHfTnBmKlpS99hPGSC4SBsi+dP3p0PjVBVedMdO3WoG57cAEbYVNkRHFROIzjYuGjoM7LOaEQKbtQjkuo5hCSMmezaNq3Gl6TE5J3ZLMu26SjpPJZo4h/9FJhT4JQJzjFXD7x54fBgzO9RvDH9Vl5vHIetcGHct1apLh/6gU3c2PYy5rrYh7a1NP29/H/G9xn/d+f7FNVcw9/H/9sf8ymXPnqdDd7Wx3OpzWRJuP8+iMTFe7wZq48Tce7QciNetUzku+pT/t4UHK/iIq2yPR/8y/315M/rWl1A/sM83phVh6+aeZY39OLNN4Y0P2GdHOWPAAAAAElFTkSuQmCC\"); } /* Banner & Board Title */ .boardBanner { line-height: 0; } .faded-4chan-banner .boardBanner { opacity: 0.5; transition: opacity 0.3s ease-in-out .5s; } .faded-4chan-banner .boardBanner:hover { opacity: 1; transition: opacity 0.3s ease-in; } /* From 4chan SS / OneeChan */ .fourchan-banner-reflection #Banner { -webkit-box-reflect: below 0 -webkit-linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0) 10%, rgba(255,255,255,.5)); } .fourchan-banner-at-sidebar-top .boardBanner, .fourchan-banner-at-sidebar-bottom .boardBanner, .fourchan-banner-at-sidebar-bottom .boardBanner { position: fixed; } .fourchan-banner-at-sidebar-top .boardBanner { top: 16px; } .fourchan-banner-at-sidebar-bottom .boardBanner { bottom: 270px; } .fourchan-banner-under-post-form .boardBanner { bottom: 130px; } .board-title-at-sidebar-top.sidebar-location-right #boardTitle, .board-title-at-sidebar-bottom.sidebar-location-right #boardTitle, .board-title-under-post-form.sidebar-location-right #boardTitle, .fourchan-banner-at-sidebar-top.sidebar-location-right .boardBanner, .fourchan-banner-at-sidebar-bottom.sidebar-location-right .boardBanner, .fourchan-banner-under-post-form.sidebar-location-right .boardBanner { right: 2px; } .board-title-at-sidebar-top.sidebar-location-left #boardTitle, .board-title-at-sidebar-bottom.sidebar-location-left #boardTitle, .board-title-under-post-form.sidebar-location-left #boardTitle, .fourchan-banner-at-sidebar-top.sidebar-location-left .boardBanner, .fourchan-banner-at-sidebar-bottom.sidebar-location-left .boardBanner, .fourchan-banner-under-post-form.sidebar-location-left .boardBanner { left: 2px; } .board-title-at-sidebar-top #boardTitle, .board-title-at-sidebar-bottom #boardTitle, .board-title-under-post-form #boardTitle, .fourchan-banner-at-sidebar-top .boardBanner img, .fourchan-banner-at-sidebar-bottom .boardBanner img, .fourchan-banner-under-post-form .boardBanner img { width: 248px; } .board-title-at-sidebar-top.sidebar-large #boardTitle, .board-title-at-sidebar-bottom.sidebar-large #boardTitle, .board-title-under-post-form.sidebar-large #boardTitle, .fourchan-banner-at-sidebar-top.sidebar-large .boardBanner img, .fourchan-banner-at-sidebar-bottom.sidebar-large .boardBanner img, .fourchan-banner-under-post-form.sidebar-large .boardBanner img { width: 299px; } .fourchan-banner-at-top .boardBanner { position: relative; display: table; margin: 12px auto; text-align: center; } :root:not(.board-subtitle) .boardSubtitle, .board-title-hide #boardTitle, .fourchan-banner-hide .boardBanner { display: none; } #boardTitle { text-align: center; z-index: 4; } .board-title-at-sidebar-top #boardTitle, .board-title-at-sidebar-bottom #boardTitle, .board-title-under-post-form #boardTitle { position: fixed; } .board-title-at-sidebar-top.fourchan-banner-at-sidebar-top.sidebar-large #boardTitle { top: 121px; } .board-title-at-sidebar-top.fourchan-banner-at-sidebar-top #boardTitle { top: 104px; } .board-title-at-sidebar-top #boardTitle { top: 40px; } .board-title-at-sidebar-bottom #boardTitle { bottom: 280px; } .board-title-under-post-form #boardTitle { bottom: 140px; } /* Hover UI */ .move { cursor: pointer; } #ihover { position: fixed; max-height: 97%; max-width: 75%; z-index: 22; } #qp { position: fixed; z-index: 22; } #qp .postMessage::after { clear: both; display: block; content: \"\"; } #qp .full-image { max-height: 300px; max-width: 500px; } #menu { position: fixed; outline: none; z-index: 22; } /* Image Expansion */ .fit-width .full-image { max-width: 100%; width: 100%; } .fit-height .full-image { max-height: 95vh; } .images-overlap-post-form .full-image { position: relative; z-index: 21; } /* Delete Buttons */ .hide-delete-ui .deleteform, .hide-delete-ui .post:not(#exlinks-options) .rice { display: none; } .hide-delete-ui .postInfo { padding: 0 0 0 3px; } .deleteform { position: fixed; z-index: 18; width: 0; bottom: 0; right: 0; border-width: 1px 0 0 1px; border-style: solid; font-size: 0; color: transparent; } .deleteform:hover { width: auto; } .deleteform::before { z-index: 18; border-width: 1px 0 0 1px; border-style: solid; content: '✖'; display: block; position: fixed; bottom: 0; right: 0; box-sizing: border-box; height: 1.6em; width: 1.4em; text-align: center; } .deleteform:hover::before { display: none; } .deleteform input { margin: 0 1px 0 0; } /* Slideout Navigation */ #boardNavDesktopFoot { position: fixed; text-align: center; font-size: 0; color: transparent; overflow: hidden; box-sizing: border-box; width: 248px; } .sidebar-large #boardNavDesktopFoot { width: 299px; } .sidebar-location-right #boardNavDesktopFoot { right: 2px; } .sidebar-location-left #boardNavDesktopFoot { left: 2px; } #boardNavDesktopFoot:hover { overflow-y: auto; padding: 2px; } #boardNavDesktopFoot:not(:hover) { border-color: transparent; background-color: transparent; height: 0; overflow: hidden; padding: 0; border: 0 none; } .slideout-navigation-compact #boardNavDesktopFoot { word-spacing: 1px; } .slideout-navigation-list #boardNavDesktopFoot a { display: block; } .slideout-navigation-list #boardNavDesktopFoot:hover { max-height: 400px; } .slideout-navigation-list #boardNavDesktopFoot a::after { content: ' - ' attr(title); } .slideout-navigation-list #boardNavDesktopFoot a[href*='//boards.4chan.org/']::after, .slideout-navigation-list #boardNavDesktopFoot a[href*='//rs.4chan.org/']::after { content: '/ - ' attr(title); } .slideout-navigation-list #boardNavDesktopFoot a[href*='//boards.4chan.org/']::before, .slideout-navigation-list #boardNavDesktopFoot a[href*='//rs.4chan.org/']::before { content: '/'; } .slideout-navigation-hide #boardNavDesktopFoot { display: none; } /* Watcher */ #watcher { position: fixed; z-index: 14; padding: 2px; } #watcher { width: 200px; } #watcher:not(:hover) { max-height: 200px; overflow: hidden; } .rounded-edges #watcher { border-radius: 3px; } #watcher > div { max-height: 1.3em; overflow: hidden; } .slideout-watcher #watcher { box-sizing: border-box; width: 248px; } .slideout-watcher.sidebar-large #boardNavDesktopFoot { width: 299px; } .slideout-watcher.sidebar-location-right #watcher { left: auto !important; right: 2px !important; } .slideout-watcher.sidebar-location-left #watcher { right: auto !important; left: 2px !important; } .slideout-watcher #watcher .move { cursor: default; } .slideout-watcher.underline-links #watcher .move { text-decoration: underline; } .slideout-watcher #watcher > div { overflow: hidden; } .slideout-watcher #watcher:hover { overflow-y: auto; } .slideout-watcher #watcher:not(:hover) { height: 0; overflow: hidden; border: 0 none; padding: 0; } .watch-thread-link { padding-top: 18px; width: 18px; height: 0px; display: inline-block; background-repeat: no-repeat; opacity: 0.2; position: relative; top: 1px; } .watch-thread-link.watched { opacity: 1; } /* Announcements */ #globalMessage { text-align: center; } .rounded-edges #globalMessage { border-radius: 3px; } .announcements-slideout #globalMessage { position: fixed; padding: 2px; width: 248px; } .announcements-slideout.sidebar-location-right #globalMessage { left: auto; right: 2px; } .announcements-slideout.sidebar-location-left #globalMessage { right: auto; left: 2px; } .announcements-slideout.sidebar-large #globalMessage { width: 299px; } .announcements-slideout #globalMessage h3 { margin: 0; } .announcements-slideout #globalMessage:hover { box-sizing: border-box; overflow-y: auto; } .announcements-slideout #globalMessage:not(:hover) { height: 0; overflow: hidden; padding: 0; border: 0 none; } .announcements-hide #globalMessage { display: none !important; } /* Threads */ #threads, .rounded-edges .board > .thread { border-radius: 4px; } /* Thread Clearfix */ .thread > .threadContainer:last-of-type::after, .thread > .postContainer:last-of-type::after { display: block; content: ' '; clear: both; } /* Posts */ .expanding { opacity: .5; } .fileText:hover .fntrunc, .fileText:not(:hover) .fnfull, .expanded-image > .post > .file > .fileThumb > img[data-md5], .post > .file > .fileThumb > .full-image { display: none; } .expanded-image > .post > .file > .fileThumb > .full-image { display: block; } .thread > .replyContainer:last-of-type .post { margin-bottom: 0; } .menu-button { position: relative; } .stub .menu-button, .post .menu-button, .hide-thread-button, .show-thread-button span, .hide-reply-button, .show-reply-button span { float: right; } .post .menu-button, .hide-thread-button, .hide-reply-button { margin: 0 3px; opacity: 0; transition: opacity .3s ease-out 0s; } .post:hover .hide-reply-button, .post:hover .menu-button, .post:hover .hide-thread-button, .hidden_thread .hide-thread-button, .hidden_thread .menu-button, .inline .hide-reply-button, .inline .menu-button { opacity: 1; } .hidden_thread { text-align: right; } .color-user-ids .posteruid .hand { padding: .1em .3em; border-radius: 1em; font-size: 80%; } .postInfo > span { vertical-align: bottom; } .bolds .subject, .bolds .name { font-weight: 600; } .italics .postertrip { font-style: italic; } .underline-links .replylink { text-decoration: underline; } .fileInfo { padding: 0 3px; } .fileThumb { float: left; margin: 3px 20px; outline: none; } .reply.post { box-sizing: border-box; display: inline-block; } .fit-width-replies .reply.post { display: block; overflow: hidden; } .fit-width-replies .expanded-image .reply.post, .fit-width-replies .hasInline .reply.post { width: 100%; } .indent-replies #unread-line, .indent-replies .thread > .replyContainer, .indent-replies .threadContainer > .replyContainer { margin-left: 2em; } .expanded-image .reply.post, .hasInline .reply.post { display: inline-block; overflow: visible; clear: both; } .rounded-edges .post { border-radius: 3px; } .spoiler, s { text-decoration: none; } /* Emoji */ a.useremail:last-of-type { vertical-align: top; } /* Reply Clearfix */ .reply.post .postMessage { clear: right; } .op-background .op.post .postMessage::after, .force-reply-break .op.post .postMessage::after { display: block; content: ' '; clear: both; } /* OP */ .favicon { vertical-align: bottom; } .op-background .op.post { box-sizing: border-box; } /* Summary */ .force-reply-break .summary { clear: both; } /* Inlined */ .inline { margin: 2px 8px 2px 2px; } .post .inline { margin: 2px; } .inline .replyContainer { display: inline-block; } /* Inlined Clearfix */ .inline .postMessage::after { clear: both; display: block; content: \"\"; } /* Quotes */ .inlined { opacity: .5; } .underline-links .quotelink { text-decoration: underline; } .filtered, .quotelink.filtered { text-decoration: line-through !important; } .inline + .hashlink { display: none; } /* Quote Threading */ .threadContainer { padding-left: 2em; border-left: 1px solid; } .indent-replies .threadContainer { margin-left: 2em; padding-left: 0; } .threadOP { clear: both; } /* Backlinks */ .underline-links .forwardlink, .underline-links .backlink { text-decoration: underline; } .backlink.dead { text-decoration: none; } .filtered-backlinks .filtered.backlink { display: none; } .backlinks-position-lower-left .container, .backlinks-position-lower-right .container { max-width: 100%; padding: 0 5px; } .backlinks-position-lower-left .reply.quoted, .backlinks-position-lower-right .reply.quoted { position: relative; padding-bottom: 1.7em; } .backlinks-position-lower-left .inline .reply.quoted, .backlinks-position-lower-right .inline .reply.quoted, .backlinks-position-lower-right #qp .reply.quoted, .backlinks-position-lower-left #qp .reply.quoted { position: static; padding-bottom: 0; } .backlinks-position-lower-right .reply .container, .backlinks-position-lower-left .reply .container { position: absolute; bottom: 0; padding: 0 5px; } .backlinks-position-lower-left .reply .container { left: 0; } .backlinks-position-lower-right .reply .container { right: 0; } .backlinks-position-lower-right .container::before, .backlinks-position-lower-left .reply .container::before { content: 'REPLIES: '; } .container:empty { display: none; } .backlinks-position-lower-left #qp .container, .backlinks-position-lower-left .inline .container, .backlinks-position-lower-right .inline .container, .backlinks-position-lower-right #qp .container { position: static; max-width: 100%; } .backlinks-position-lower-left #qp .container::before, .backlinks-position-lower-left .inline .container::before, .backlinks-position-lower-right #qp .container::before, .backlinks-position-lower-right .inline .container::before { content: ''; } .backlinks-position-lower-right .inline .container { float: none; } /* Fixes text spoilers */ .remove-spoilers.indicate-spoilers .spoiler::before, .remove-spoilers.indicate-spoilers s::before { content: '[spoiler]'; } .remove-spoilers.indicate-spoilers .spoiler::after, .remove-spoilers.indicate-spoilers s::after { content: '[/spoiler]'; } :root:not(.remove-spoilers) .spoiler:not(:hover) *, :root:not(.remove-spoilers) s:not(:hover) * { color: rgb(0,0,0) !important; text-shadow: none !important; } :root:not(.remove-spoilers) spoiler:not(:hover), :root:not(.remove-spoilers) s:not(:hover) { background-color: rgb(0,0,0); color: rgb(0,0,0) !important; text-shadow: none !important; } /* Code */ .prettyprint { box-sizing: border-box; font-family: monospace; display: inline-block; margin: 0 auto .1em 0; vertical-align: middle; white-space: pre-wrap; border-radius: 2px; overflow-x: auto; padding: 3px; max-width: 100%; } /* Menu */ .entry { border-bottom: 1px solid rgba(0,0,0,.25); cursor: pointer; display: block; outline: none; padding: 3px 1em 3px 7px; position: relative; text-decoration: none; white-space: nowrap; } .entry:last-child { border-bottom: 0; } .has-submenu::after { content: \"\"; border-left: .5em solid; border-top: .3em solid transparent; border-bottom: .3em solid transparent; display: inline-block; margin: .3em; position: absolute; right: 0; } .submenu { display: none; position: absolute; top: -1px; } .focused .submenu { display: block; } /* Stubs */ .fit-width-replies .stub { display: block; text-align: right; clear: both; } /* Element Replacing: */ /* Checkboxes */ .rice { cursor: pointer; width: 9px; height: 9px; margin: 2px 3px 3px; display: inline-block; vertical-align: bottom; } input[type=checkbox]:checked + .rice { position: relative; } input[type=checkbox]:checked + .rice::after { content: \"\"; display: block; width: 4px; height: 10px; border-width: 0 3px 3px 0; border-style: solid; -webkit-transform: rotate(45deg); position: absolute; left: 2px; bottom: -1px; } .rounded-edges .rice { border-radius: 2px;} } .circle-checkboxes .rice { border-radius: 6px;} } input:checked + .rice { background-attachment: scroll; background-repeat: no-repeat; background-position: bottom right; } /* Selects */ .selectrice { position: relative; cursor: default; overflow: hidden; text-align: left; } #settings .selectrice { display: inline-block; } .selectrice::after { content: \"\"; border-right: .25em solid transparent; border-left: .25em solid transparent; position: absolute; right: .4em; top: .5em; } .selectrice::before { content: \"\"; height: 1.6em; position: absolute; right: 1.3em; top: 0; } /* Select Dropdown */ #selectrice { padding: 0; margin: 0; position: fixed; max-height: 120px; overflow-y: auto; overflow-x: hidden; z-index: 32; } #selectrice:empty { display: none; } /* Post Form Shortcut */ .qr-shortcut.on-page { font-size: 250%; } /* Post Form */ #qr { z-index: 20; position: fixed; background: none; border: none; padding: 1px; min-width: 248px; background: transparent; border: 1px solid transparent; } .sidebar-large #qr { min-width: 299px; } .rounded-edges #qr, .rounded-edges #qrtab { border-radius: 3px 3px 0 0; } .post-form-style-fixed #qr { top: auto !important; } .sidebar-location-left:not(.post-form-style-float) #qr { left: 0 !important; right: auto !important; } .sidebar-location-right:not(.post-form-style-float) #qr { right: 0 !important; left: auto !important; } :root:not(.post-form-style-float) #qr { bottom: 0 !important; } .fourchan-ss-navigation.fixed.bottom:not(.post-form-style-float) #qr, .fourchan-ss-navigation.index.pagination-sticky-bottom:not(.post-form-style-float) #qr { bottom: 1.5em !important; } .post-form-style-slideout #qr { top: auto !important; } .post-form-style-slideout.sidebar-location-left #qr { -webkit-transform: translateX(-93%); } .post-form-style-slideout.sidebar-location-right #qr { -webkit-transform: translateX(93%); } .post-form-style-slideout #qr:hover, .post-form-style-slideout #qr.has-focus, .post-form-style-slideout #qr.dump { -webkit-transform: translate(0); } .post-form-style-tabbed-slideout #qr { top: auto !important; } .post-form-style-tabbed-slideout.sidebar-location-left #qr { -webkit-transform: translateX(-100%); } .post-form-style-tabbed-slideout.sidebar-location-right #qr { -webkit-transform: translateX(100%); } .post-form-style-tabbed-slideout #qr:hover, .post-form-style-tabbed-slideout #qr.has-focus, .post-form-style-tabbed-slideout #qr.dump { -webkit-transform: translateX(0); } .post-form-style-tabbed-slideout #qrtab { position: absolute; top: 0; width: 120px; text-align: center; border-width: 1px 1px 0 1px; cursor: default; } .post-form-style-tabbed-slideout.sidebar-location-left #qrtab { -webkit-transform: rotate(90deg); -webkit-transform-origin: bottom right; left: 100%; } .post-form-style-tabbed-slideout.sidebar-location-right #qrtab { -webkit-transform: rotate(-90deg); -webkit-transform-origin: bottom right; right: 100%; } .post-form-style-tabbed-slideout #qr:hover #qrtab, .post-form-style-tabbed-slideout #qr.has-focus #qrtab, .post-form-style-tabbed-slideout #qr.dump #qrtab { opacity: 0 !important; } .post-form-style-slideout #qrtab input, .post-form-style-slideout #qrtab .rice, .post-form-style-tabbed-slideout #qrtab input, .post-form-style-tabbed-slideout #qrtab .close, .post-form-style-tabbed-slideout #qrtab .rice, .post-form-style-tabbed-slideout #qrtab span { display: none; } .post-form-style-tabbed-slideout #qrtab .selectrice { text-align: center; } .transparent-post-form #qr { opacity: 0.2; transition: opacity .3s ease-in-out 1s; } .transparent-post-form #qr:hover, .transparent-post-form #qr.has-focus, .transparent-post-form #qr.dump { opacity: 1; transition: opacity .3s linear; } :root:not(.show-post-form-header):not(.post-form-style-float):not(.post-form-style-tabbed-slideout) #qrtab, .post-form-style-float .autohide:not(:hover):not(.has-focus) form, .show-post-form-header.post-form-style-fixed .autohide:not(:hover):not(.has-focus) form { display: none !important; } :root:not(.post-form-style-tabbed-slideout) #qrtab { margin-bottom: 1px; } #qr.autohide:not(:hover):not(.has-focus) #qrtab { margin-bottom: 0; } .post-form-slideout-transitions.post-form-style-slideout #qr, .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr { transition: -webkit-transform .3s ease-in-out 1s; } .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr.dump, .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr:hover, .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr.has-focus, .post-form-slideout-transitions.post-form-style-slideout #qr.dump, .post-form-slideout-transitions.post-form-style-slideout #qr:hover, .post-form-slideout-transitions.post-form-style-slideout #qr.has-focus { transition: -webkit-transform .3s linear; } .post-form-slideout-transitions #qrtab { transition: opacity .3s ease-in-out 1s; } .post-form-slideout-transitions #qr:hover #qrtab { transition: opacity .3s linear; } #qr .close { float: right; padding: 0 3px; } #qr .warning { min-height: 1.6em; vertical-align: middle; padding: 0 1px; border-width: 1px; border-style: solid; } .persona { width: 248px; max-width: 100%; min-width: 100%; } .persona input.field { width: 100%; } #qr textarea.field { height: 11.6em; min-height: 6em; } #qr.has-captcha textarea.field { height: 6em; } .compact-post-form-inputs .persona input.field { width: 33%; } .compact-post-form-inputs .persona input.field:first-child { margin: 0; } .compact-post-form-inputs .persona input.field { margin: 0 0 0 0.5%; } .compact-post-form-inputs #qr textarea.field { height: 14.9em; min-height: 9em; } .compact-post-form-inputs #qr.has-captcha textarea.field { height: 9em; } .tripcode-hider .tripped:not(:hover):not(:focus) { color: transparent !important; } .textarea-resize-horizontal #qr textarea { resize: horizontal; } .textarea-resize-vertical #qr textarea { resize: vertical; } .textarea-resize-both #qr textarea { resize: both; } .textarea-resize-none #qr textarea { resize: none; } .captcha-img { margin: 1px 0 0; text-align: center; line-height: 0; } .captcha-img img { width: 246px; } .captcha-img, .captcha-img img { height: 4em; } .captcha-input { width: 100%; margin: 1px 0 0; } .field, .selectrice, button, input:not([type=radio]) { box-sizing: border-box; height: 1.6em; margin: 1px 0 0; vertical-align: bottom; padding: 0 1px; outline: none; } .selectrice { padding-right: 1.6em; } #qr textarea { min-width: 100%; } #qr [type='submit'] { width: 25%; } [type='file'] { position: absolute; opacity: 0; z-index: -1; } /* Fake File Input */ #qr-filename, #qr-filerm, .has-file #qr-no-file { display: none; } #qr-no-file, .has-file #qr-filename { display: block; } .has-file #qr-filerm { display: inline-block; } #qr-extras-container { position: absolute; right: 0; top: 0; z-index: 2; } #qr-extras-container > label, #qr-extras-container > a { cursor: pointer; margin-right: 3px; } #qr-filename-container { box-sizing: border-box; display: inline-block; position: relative; width: 100px; min-width: 74.6%; max-width: 74.6%; margin-right: 0.4%; overflow: hidden; padding: 2px 1px 0; } /* Thread Select */ #qr-thread-select, #qr-thread-select .selectrice div { display: inline; } #qr-thread-select .selectrice { cursor: pointer; display: inline-block; width: 120px; border: none; background: none transparent; padding: 0; margin: 0; height: auto; } #qr-thread-select .selectrice::before, #qr-thread-select .selectrice::after { display: none; } /* Dumping UI */ .dump #dump-list-container { display: block; } #dump-list-container { display: none; position: relative; overflow-y: hidden; margin-top: 1px; } #dump-list { overflow-x: auto; overflow-y: hidden; white-space: nowrap; width: 248px; max-width: 100%; min-width: 100%; } #dump-list:hover { overflow-x: auto; } .qr-preview { box-sizing: border-box; counter-increment: thumbnails; cursor: move; display: inline-block; height: 90px; width: 90px; padding: 2px; opacity: .5; overflow: hidden; position: relative; text-shadow: 0 1px 1px #000; transition: opacity .25s ease-in-out; vertical-align: top; } .qr-preview:hover, .qr-preview:focus { opacity: .9; } .qr-preview::before { content: counter(thumbnails); color: #fff; position: absolute; top: 3px; right: 3px; text-shadow: 0 0 3px #000, 0 0 8px #000; } .qr-preview#selected { opacity: 1; } .qr-preview.drag { box-shadow: 0 0 10px rgba(0,0,0,.5); } .qr-preview.over { border-color: #fff; } .qr-preview > span { color: #fff; } .remove { background: none; color: #e00; font-weight: 700; padding: 3px; } a:only-of-type > .remove { display: none; } .remove:hover::after { content: \" Remove\"; } .qr-preview > label { background: rgba(0,0,0,.5); color: #fff; right: 0; bottom: 0; left: 0; position: absolute; text-align: center; } .qr-preview > label > input { margin: 0; } #add-post { cursor: pointer; font-size: 2em; position: absolute; top: 50%; right: 10px; -webkit-transform: translateY(-50%); } /* Ads */ .fade-ads .topad img, .fade-ads .middlead img, .fade-ads .bottomad img { opacity: 0.3; transition: opacity .3s linear; } .fade-ads .topad img:hover, .fade-ads .middlead img:hover, .fade-ads .bottomad img:hover { opacity: 1; } .hide-ads .bottomad + hr, .hide-ads .topad, .hide-ads .middlead, .hide-ads .bottomad, .hide-ads .ad-plea { display: none; } .shrink-ads .topad a img, .shrink-ads .middlead a img, .shrink-ads .bottomad a img { width: 500px; height: auto; } /* Mascot Positions */ #mascot { display: none; position: fixed; z-index: -1; bottom: 0; left: 0; right: 0; line-height: 0; cursor: pointer; } .mascot-position-above-post-form.post-form-style-fixed:not(.post-form-decorations) #mascot img { margin-bottom: -2px; } .mascots #mascot { display: block; } .sidebar-location-right.mascot-location-sidebar #mascot, .sidebar-location-left.mascot-location-opposite #mascot { left: auto; } .sidebar-location-left.mascot-location-sidebar #mascot, .sidebar-location-right.mascot-location-opposite #mascot { right: auto; } .sidebar-location-left.mascot-location-sidebar #mascot img, .sidebar-location-right.mascot-location-opposite #mascot img { -webkit-transform: scaleX(-1); } .fourchan-ss-navigation.bottom.fixed #mascot, .fourchan-ss-navigation.index.pagination-sticky-bottom #mascot { bottom: 1.5em } .mascots-overlap-posts #mascot { z-index: 3; } .mascot-position-middle #mascot { bottom: 50% !important; -webkit-transform: translateY(50%); } .mascot-position-top #mascot { bottom: auto !important; top: 17px; } .grayscale-mascots #mascot { -webkit-filter: url('#grayscale'); } .silhouettize-mascots #mascot img { -webkit-filter: url('#mascot-filter'); } /* Options */ #overlay { position: fixed; z-index: 30; top: 0; right: 0; left: 0; bottom: 0; background: rgba(0,0,0,.5); } #appchanx-settings { width: auto; left: 15%; right: 15%; top: 15%; bottom: 15%; position: fixed; z-index: 31; padding: .3em; } .rounded-edges #appchanx-settings, .rounded-edges #appchanx-settings fieldset, .rounded-edges .mascots-container, .rounded-edges .section-container, .rounded-edges .sections-list > a { border-radius: 3px; } .description { display: none; } #appchanx-settings h3, .section-keybinds, .section-mascots, .section-script, .style { text-align: center; } .section-keybinds table, .section-script fieldset, .section-style fieldset { text-align: left; } .section-keybinds table { margin: auto; } #appchanx-settings fieldset { padding: 5px 0; vertical-align: top; border: 0; margin: 0 3px 6px; display: inline-block; } .single-column-mode #appchanx-settings fieldset { display: block; margin: 0 auto 6px; } #appchanx-settings .section-advanced fieldset { display: block; margin: 0 auto 6px; } .section-advanced .archive-cell { min-width: 200px; } .section-advanced .selectrice { display: inline-block; clear: both; } .section-container { overflow: auto; position: absolute; top: 1.7em; right: 5px; bottom: 5px; left: 5px; padding: 5px; } .sections-list { padding: 0 3px; float: left; } .sections-list > a { cursor: pointer; position: relative; padding: 0 4px; z-index: 1; height: 1.4em; display: inline-block; border-width: 1px 1px 0 1px; border-color: transparent; border-style: solid; } .sections-list > a.tab-selected { border-style: solid; } .credits { float: right; } #appchanx-settings h3 { margin: 0; } .section-script fieldset > div, .section-style fieldset > div, .section-advanced fieldset > div { overflow: visible; padding: 0 5px 0 7px; } #appchanx-settings tr:nth-of-type(2n+1), .section-script fieldset > div:nth-of-type(2n+1), .section-advanced fieldset > div:nth-of-type(2n+1), .section-style fieldset > div:nth-of-type(2n+1), .section-keybinds tr:nth-of-type(2n+1), #selectrice li:nth-of-type(2n+1) { background-color: rgba(0, 0, 0, 0.05); } article li { margin: 10px 0 10px 2em; } #appchanx-settings .option { width: 50%; display: inline-block; vertical-align: bottom; } .option input { width: 100%; } .optionlabel { padding-left: 18px; } .rice + .optionlabel { padding-left: 0; } .section-script fieldset, .styleoption { text-align: left; } .section-style fieldset { width: 370px; } .section-script fieldset { width: 200px; } #mascotcontent, #themecontent, .suboptions { overflow: auto; position: absolute; top: 0; right: 0; bottom: 1.7em; left: 0; } #mascotcontent, #themecontent { padding: 5px; } #themecontent { top: 1.8em; } .mAlign { height: 250px; vertical-align: bottom; display: table-cell; line-height: 0; } #save, .stylesettings { position: absolute; right: 10px; bottom: 0; } .section-style .suboptions { bottom: 0; } .section-container textarea { font-family: monospace; min-height: 150px; resize: vertical; width: 100%; } /* Hover Functionality */ #mouseover { z-index: 33; position: fixed; max-width: 70%; } #mouseover:empty { display: none; } /* Mascot Tab */ #mascot_hide { padding: 3px; position: absolute; top: 2px; right: 18px; } #mascot_hide .rice { float: left; } #mascot_hide > div { height: 0; text-align: right; overflow: hidden; } #mascot_hide:hover > div { height: auto; } #mascot_hide label { width: 100%; display: block; clear: both; text-decoration: none; } .mascots-container { padding: 0; text-align: center; } .mascot, .mascotcontainer { overflow: hidden; } .mascot { position: relative; border: none; margin: 5px; padding: 0; width: 200px; display: inline-block; background-color: transparent; } .mascotcontainer { height: 250px; border: 0; margin: 0; max-height: 250px; cursor: pointer; bottom: 0; border-width: 0 1px 1px; border-style: solid; border-color: transparent; overflow: hidden; } .mascot img { max-width: 200px; } .export-button, .mascotname, #mascot-options { box-sizing: border-box; padding: 0; width: 100%; } #mascot-options { opacity: 0; transition: opacity .3s linear; } .mascot:hover #mascot-options { opacity: 1; } #mascot-options { position: absolute; bottom: 0; right: 0; left: 0; } .export-button { position: absolute; bottom: 1.7em; right: 0; left: 0; text-align: center; } #mascot-options a { display: inline-block; width: 33%; } #upload { position: absolute; width: 100px; left: 50%; margin-left: -50px; text-align: center; bottom: 0; } #mascots_batch { position: absolute; left: 10px; bottom: 0; } /* Themes Tab */ #themes h1 { position: absolute; right: 300px; bottom: 10px; margin: 0; transition: all .2s ease-in-out; opacity: 0; } #themes .selectedtheme h1 { right: 11px; opacity: 1; } #addthemes { position: absolute; left: 10px; bottom: 0; } .theme { margin: 1em; } /* Theme Editor */ #themeConf { position: fixed; top: 0; bottom: 0; width: 296px; z-index: 10; } .sidebar-location-right #themeConf { right: 2px; left: auto; } .sidebar-location-right #themeConf { left: 2px; right: auto; } #themebar input { width: 30%; } .option .color { width: 10%; border-left: none !important; color: transparent !important; } .option .colorfield { width: 90%; } .themevar textarea { min-width: 100%; max-width: 100%; height: 20em; resize: vertical; } /* Mascot Editor */ #mascotConf { position: fixed; height: 17em; bottom: 0; left: 50%; width: 500px; margin-left: -250px; overflow: auto; z-index: 10; } #mascotConf .option, #mascotConf .optionlabel { box-sizing: border-box; width: 50%; display: inline-block; vertical-align: middle; } #mascotConf .option input { width: 100%; } #close { position: absolute; left: 10px; bottom: 0; } /* Catalog */ #content .navLinks, #info .navLinks, .btn-wrap { display: block; } .navLinks > .btn-wrap:not(:first-of-type)::before { content: ' - '; } .button { cursor: pointer; } #content .btn-wrap, #info .btn-wrap { display: inline-block; } #post-preview, #quote-preview { position: absolute; z-index: 22; } .rounded-edges #post-preview { border-radius: 3px; } #settings, #threads, #info .navLinks, #content .navLinks { text-align: center; } #threads .thread { vertical-align: top; display: inline-block; word-wrap: break-word; overflow: hidden; margin: 1px; padding: 5px 0 3px; text-align: center; } .extended-small .thread, .small .thread { width: 165px; max-height: 320px; } .small .teaser, .large .teaser { display: none; } .extended-large .thread, .large .thread { width: 270px; max-height: 410px; } .extended-small .thumb, .small .thumb { max-width: 150px; max-height: 150px; } .panel { position: fixed; top: 50% !important; left: 50%; -webkit-transform: translate(-50%, -50%); padding: 5px; } .icon::after { display: inline-block; float: right; width: 1em; cursor: pointer; } .helpIcon::after { content: '?'; } .closeIcon::after { content: '✖'; } /* Front Page */ #logo { text-align: center; } #doc { box-sizing: border-box; margin: 10px auto; width: 1006px; padding: 2px; position: relative; } .rounded-edges #doc, .rounded-edges #doc div { border-radius: 3px; } #boards .boxcontent { vertical-align: top; text-align: center; } #filter-container, #options-container { top: 4px; right: 8px; position: absolute; } #filtermenu, #optionsmenu { top: 100% !important; left: auto !important; right: 0 !important; } #boards .column { box-sizing: border-box; display: inline-block; width: 180px; text-align: left; vertical-align: top; } .bd ul, .boxcontent ul { vertical-align: top; padding: 0; margin: 0; } .right-box .boxcontent ul { padding: 0 10px; } .yuimenuitem, .boxcontent li { list-style-type: none; } .boxbar { position: relative; } #doc h3, .boxbar h2 { margin: 0; } #doc h3 { text-decoration: none !important; } .underline-links #doc h3 { text-decoration: underline !important; } #ft, .box-outer { margin: 2px 0 0; overflow: hidden; } #ft, .boxbar, .boxcontent { padding: 0 8px; } .yui-module { position: absolute; } .yuimenuitem::before { content: \" [ ] \"; font-family: monospace; } .yuimenuitem-checked::before { content: \" [x] \" } .yui-g { overflow: hidden; } .yui-u { display: inline-block; vertical-align: top; width: 499px; float: right; } .yui-u.first { float: left; } #recent-images .boxcontent { text-align: center; } #ft { text-align: center; } #ft ul { padding: 0; } #ft li { list-style-type: none; display: inline-block; width: 100px; } #preview-tooltip-nws, #preview-tooltip-ws, #ft .fill, .clear-bug { display: none; } /* ExLinks */ #exlinks-options-content { padding: 5px; }",
+ layout: "/* Cleanup */ #absbot, #boardNavDesktop, #delPassword, #delform > hr:last-of-type, #navbotright, #postForm, #search-label, #search-label-bottom, #styleSwitcher, #togglePostForm, .boardBanner > div, .mobile, .next form, .next span, .postingMode, .prev form, .prev span, .riced, .sideArrows, .stylechanger, body > br, body > div[style^=\"text-align\"], body > hr { display: none; } /* Empties */ #qr .warning:empty, #qr-thread-select:empty { display: none; } /* File Name Trunctuate / /p/ exif */ .exif, .fileText:hover .fntrunc, .fileText:not(:hover) .fnfull { display: none; } /* Unnecessary */ #qp input, #qp .rice, .inline .rice { display: none !important; } /* Hidden Content */ .forwarded, .hidden, .hidden_thread ~ div, .hidden_thread ~ a, .replyContainer .stub ~ div, .replyContainer .stub ~ a, .stub + div, .thread > .stub:first-child ~ .postContainer, .thread > .stub:first-child ~ .summary, [hidden] { display: none !important; } /* Hidden UI */ #catalog, #navlinks, #navtopright, #svg_filters, .cataloglink, .navLinks { z-index: 7; position: fixed; top: 100%; left: 100%; } /* Hide last horizontal rule, keep clear functionality. */ .board > hr:last-of-type { visibility: hidden; } /* Fappe Tyme */ .fappeTyme .thread > .noFile, .fappeTyme .threadContainer > .noFile { display: none; } /* Defaults */ a { text-decoration: none; outline: none; } .underline-links a { text-decoration: underline; } body, html { min-height: 100%; box-sizing: border-box; } body { outline: none; min-height: 100%; } .sidebar-hide body { margin: 0 2px; } .sidebar-minimal body { margin: 0 20px; } .sidebar-normal body { margin: 0 252px } .sidebar-large body { margin: 0 303px; } .sidebar-location-right body { margin-left: 2px; } .sidebar-location-left body { margin-right: 2px; } body.unscroll { overflow: hidden; } .fourchan-ss-sidebar body::before { content: ''; position: fixed; top: 0; bottom: 0; box-sizing: border-box; display: block; z-index: 0; } .fourchan-ss-sidebar.sidebar-large body::before { width: 306px; } .fourchan-ss-sidebar.sidebar-normal body::before { width: 255px; } .fourchan-ss-sidebar.sidebar-minimal body::before { width: 23px; } .sidebar-location-right body::before { right: 0; } sidebar-location-left body::before { left: 0; } .fourchan-ss-sidebar.sidebar-location-right body { padding-right: 2px; } .fourchan-ss-sidebar.sidebar-location-left body { padding-left: 2px; } hr { clear: both; border: 0; padding: 0; margin: 0 0 1px; } .hide-horizontal-rules hr { visibility: hidden; } th { text-align: left; } .center { text-align: center; } .disabled { opacity: 0.5; } .pointer { cursor: pointer; } /* Symbols */ .drop-marker { vertical-align: middle; display: inline-block; margin: 2px 2px 3px; border-top: .5em solid; border-right: .3em solid transparent; border-left: .3em solid transparent; } .brackets-wrap::before { content: \" [\"; } .brackets-wrap::after { content: \"] \"; } /* Thread / Reply Nav */ #navlinks a { position: fixed; z-index: 12; opacity: 0.5; display: inline-block; border-right: 6px solid transparent; border-left: 6px solid transparent; margin: 1.5px; } #navlinks a:first-of-type { border-bottom: 11px solid rgb(130,130,130); } #navlinks a:last-of-type { border-top: 11px solid rgb(130,130,130); } /* Header */ #header-bar { z-index: 6; border-width: 1px; padding: 0 2px; border-style: solid; } .pagination-sticky-top .pagelist, .pagination-sticky-bottom .pagelist, #header-bar { left: 2px; right: 2px; } .navigation-alignment-center #header-bar { text-align: center; } .navigation-alignment-right #header-bar { text-align: right; } .sidebar-location-left.sidebar-large:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-left #header-bar { left: 303px; } .sidebar-location-left.sidebar-normal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-left #header-bar { left: 252px; } .sidebar-location-left.sidebar-minimal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-left.sidebar-minimal:not(.fourchan-ss-navigation) #header-bar { left: 20px; } .sidebar-location-right.sidebar-large:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-right #header-bar { right: 303px; } .sidebar-location-right.sidebar-normal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-right #header-bar { right: 252px; } .sidebar-location-right.sidebar-minimal:not(.pagination-on-side):not(.fourchan-ss-navigation) .pagelist, .sidebar-location-right.sidebar-minimal:not(.fourchan-ss-navigation) #header-bar { right: 20px; } .fourchan-ss-navigation .pagelist, .fourchan-ss-navigation #header-bar { left: 0; right: 0; border-left: 0; border-right: 0; border-radius: 0 !important; } .hide-navigation-decorations #header-bar { font-size: 0; color: transparent; word-spacing: 2px; } #shortcuts { float: right; } .fixed #header-bar.autohide { z-index: 24; } .fixed #header-bar { position: fixed; } .top #header-bar { top: 0; border-top-width: 0; } .rounded-edges.top #header-bar { border-radius: 0 0 3px 3px; } .fixed.bottom #header-bar { bottom: 0; border-bottom-width: 0; } .rounded-edges.bottom #header-bar { border-radius: 3px 3px 0 0; } .hide #header-bar { position: fixed; top: 110%; bottom: auto; } /* Header Autohide */ .fixed #header-bar.autohide:not(:hover) { box-shadow: none; transition: all .8s .6s cubic-bezier(.55, .055, .675, .19); } .fixed.top #header-bar.autohide:not(:hover) { margin-bottom: -1em; -webkit-transform: translateY(-100%); } .fixed.bottom #header-bar.autohide:not(:hover) { -webkit-transform: translateY(100%); } #scroll-marker { left: 0; right: 0; height: 10px; position: absolute; } #header-bar #scroll-marker { display: none; } .fixed #header-bar #scroll-marker { display: block; } .fixed.top header-bar #scroll-marker { top: 100%; } .fixed.bottom #header-bar #scroll-marker { bottom: 100%; } /* Notifications */ #notifications { position: fixed; top: 0; text-align: center; right: 0; left: 0; transition: all .8s .6s cubic-bezier(.55, .055, .675, .19); } .fixed.top #header-bar #notifications { position: absolute; top: 100%; } .notification { font-weight: 700; text-shadow: 0 1px 2px rgba(0, 0, 0, .5); box-shadow: 0 1px 2px rgba(0, 0, 0, .15); border-radius: 2px; margin: 1px auto; width: 500px; max-width: 100%; position: relative; transition: all .25s ease-in-out; } .notification.error { background-color: hsla(0, 100%, 38%, .9); } .notification.warning { background-color: hsla(36, 100%, 38%, .9); } .notification.info { background-color: hsla(200, 100%, 38%, .9); } .notification.success { background-color: hsla(104, 100%, 38%, .9); } .notification, .notification a { color: #fff !important; } .notification > .close { top: 0; padding: 2px; right: 4px; position: absolute; color: #fff; } .message { box-sizing: border-box; padding: 6px 20px; max-height: 200px; width: 100%; overflow: auto; } /* Updater / Thread Stats */ .float #thread-stats, .float #updater { position: fixed; } #update-status.new::after { content: ', '; } /* Pagination */ .pagelist { border-style: solid; border-width: 1px; z-index: 6; } .pagination-alignment-center .pagelist { text-align: center; } .pagination-alignment-right .pagelist { text-align: right; } .pagination-sticky-top .pagelist { position: fixed; top: 0; border-top-width: 0; } .pagination-sticky-bottom .pagelist { position: fixed; bottom: 0; border-bottom-width: 0; } .pagination-top .pagelist { position: static; border-top-width: 0; } .pagination-bottom .pagelist { position: static; } .pagination-top.rounded-edges .pagelist, .pagination-sticky-top.rounded-edges .pagelist { border-radius: 0 0 3px 3px; } .pagination-bottom.rounded-edges .pagelist, .pagination-sticky-bottom.rounded-edges .pagelist { border-radius: 3px 3px 0 0; } .pagination-hide .pagelist { display: none; } .pagination-on-side .pagelist { position: fixed; padding: 0; top: auto; bottom: 0.5em; margin: 0; background: none transparent !important; border: 0 none !important; text-align: right; } .pagination-on-side.post-form-style-fixed.show-post-form-header .pagelist { bottom: 23.1em; } .pagination-on-side.post-form-style-fixed .pagelist { bottom: 21.6em; } .sidebar-location-left.pagination-on-side .pagelist { -webkit-transform: rotate(-90deg); -webkit-transform-origin: bottom left; } .sidebar-location-right.pagination-on-side .pagelist { -webkit-transform: rotate(90deg); -webkit-transform-origin: bottom right; } .sidebar-location-right.sidebar-large.pagination-on-side .pagelist { left: auto; right: 301px; } .sidebar-location-left.sidebar-large.pagination-on-side .pagelist { right: auto; left: 301px; } .sidebar-location-right.sidebar-normal.pagination-on-side .pagelist { left: auto; right: 246px; } .sidebar-location-left.sidebar-normal.pagination-on-side .pagelist { right: auto; left: 246px; } .sidebar-location-right.sidebar-minimal.pagination-on-side .pagelist { left: auto; right: 246px; } .sidebar-location-left.sidebar-minimal.pagination-on-side .pagelist { right: auto; left: 18px; } .hide-navigation-decorations .pagelist { font-size: 0; color: transparent; word-spacing: 0; } .pagelist input, .pagelist div { vertical-align: middle; } .hide-navigation-decorations .pages a { margin: 0 1px; } .next, .pages, .prev { display: inline-block; margin: 0 3px; } /* Icons */ .icons-4chan-ss #navtopright .exlinksOptionsLink::after, .icons-4chan-ss #main-menu, .icons-4chan-ss .navLinks > a:first-of-type::after, .icons-4chan-ss #thread-watcher::after, .icons-4chan-ss #globalMessage::after, .icons-4chan-ss #boardNavDesktopFoot::after, .icons-4chan-ss #img-controls, .icons-4chan-ss #catalog::after, .icons-4chan-ss #fappeTyme { background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAACWCAMAAAA2YSLzAAAAPFBMVEVkZGRlZWVjY2NmZmZnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dZxmG7AAAAE3RSTlMFFQ0AJD8eQFRqf5CgssDM4+73gHqZRAAAA0pJREFUSMetVlmy5CgMZDMGxK7737Ulgcu8ejMREzHtD7sShJRaKWV/Psq3iz7QGwTF2BZ01hp3N6yasctZJANiN5ZlItDLtNkQDGNeMLU7EqmCbUwhkhZbwsIuNbyWPX7dIyHOrDYOc8SOiEUJjojN0EsWlCXRrq2qvJCsIjic2OcFrwrOpdmTimqVyWG7ZkrWy97p7z/hACd2FUetBcQDpTN+nuKsGng881L5xOz/VQ88xL/eQkyZT3axp+4dUMwvH0Pnhn6wSyR+8IdR4f43/v8XX1BHjXpjwy5RdEcQ7DiuzlBUsFD+GeIFEy6W0pKXoSZOiUz5tf99nvTDD/1sP9VRPvb/un86lT57SVqwSk8KR+L6kgTOlcZslRQe5WmJRKovETW7Anb+HzxUW4Xgnv11fuuj82aKXHz1Tzztx9v4VA9+/6le26B+3VhTC9RMPIr0qx4zaWNsnFRO0s8FWgEIFIRiVUAIlJGciqMmCwpQWyI/OplXA1RrXG1YI2svTQ3ufhWjNlKFqtXFI7Yg+zAXRcBZ+HygJuVHd0ys35bVn6QojLL5cZeVvPht/mVu/r/8s7GMXsLjv2s71GZhgjnEwsEVXogiSl/pl7LWra0IQgO3poTsieoYd4dhWfJlGWqyQf6sLxWt3/MRa4Im04ixeSdAWnxvqCX6tObVmzpZOPOZvrBNJF8gmGciBChsV+YdRYwnAvNpS4AnYFBm0KA2a35Unh+efxjercaLfV7wW0rtUTNl2j715al/9VtfutF+NZ/+aZSa+py/GCpRyvr17EsVLbRhmN++BBY/ik5/+YPK6bKnf2T8fh7P+uEYn0D3E4L3i6QHmvc3+k+8PN6Mb1w52tje6LbAi+M0FT4YneqVbpVDPnL2Xqx7m3tf9ENXHba9H/a/+X3z/+XfCnOo+Zy/o4SgY5Z6iq0nb+9Mc4JxL5f1qYs+xhTP/uiX/cMe4+hDHAfGnmGe+Ev+G88vnG7Ie20wHiUt/S1Kv+6BCM/9fkEfz73/9HNufQ4ZKdzvnwtS/LXltRcJB/yJ23H/mo89nPFa85Li3XOYu435LwTXKVWwO+cnlWFTB47L/AdfR//KI2bvF8sAb0c/M+1+YE3/oS77B8N+UUVHraV6AAAAAElFTkSuQmCC\"); } .icons-oneechan #navtopright .exlinksOptionsLink::after, .icons-oneechan #main-menu, .icons-oneechan .navLinks > a:first-of-type::after, .icons-oneechan #thread-watcher::after, .icons-oneechan #globalMessage::after, .icons-oneechan #boardNavDesktopFoot::after, .icons-oneechan #img-controls, .icons-oneechan #catalog::after, .icons-oneechan #fappeTyme { background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAACWCAMAAAA2YSLzAAAAPFBMVEVoaGhqampeXl5sbGxsbGxra2tsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGzXmsRLAAAAE3RSTlMAEAYnHBg2QExbcYaWqM++2+z4BMdvAwAAAtVJREFUSMfFVgmu3CAMhYRPAmb3/e9aL5Bl2kptVbXWSOSBsY15NmOMMZs1KnNExC+ezgV4MBtNMIw58+qX2REtQwiifdC6hwlNQBGfUlBzc+KYkP3IxH5hNvicCPXrMfEVi3ts2WrzaiN6jie2OI2GXbBfXiA/XPyexPpEHrHdyDV8YAt6vEYCVpJ3S7rXAZKkkfbnuR8Uk/32xsac6Y01La2ZfyIh1VrX9Rnfu5ygd6/XeQAGFxACkopDb3mkeXug48x5FCKhNzW+1j2t8/5EEwHTIfPm6G3aP37o/w/ir3QZ2V/xY0spdSxWL7MrLU7slmnDSY0UrH6CBJ/wFI3TNGECCDY9G4xmrpDkZvQMJ4q31EzLQuhipr7ag8ueFa+hUQy2d43nnPGg7NopHTUVyYlWpE+lUT4qfhDCnLpzB8oXLLJb4leptD/JblswOaZd0gRkDV0cJi69NNOUaclRpG6S1NPdRVPLjI3VSjWV8+FmaARknTxqfipl0tGR1DXvd0h251Ww/ZlaNQoaX3bqUS+IK6ZX4hysvuQinS+6n9638/6BbK4RLi6R11O8rPS4OnO66KHtw6yK96BWrg5QxDGcVzcoB8cYb/dE1zPO6C+pHxN0Ttw/JtJrx55+oV9Jq+ScF22IfBWDD+sHfTnBmKlpS99hPGSC4SBsi+dP3p0PjVBVedMdO3WoG57cAEbYVNkRHFROIzjYuGjoM7LOaEQKbtQjkuo5hCSMmezaNq3Gl6TE5J3ZLMu26SjpPJZo4h/9FJhT4JQJzjFXD7x54fBgzO9RvDH9Vl5vHIetcGHct1apLh/6gU3c2PYy5rrYh7a1NP29/H/G9xn/d+f7FNVcw9/H/9sf8ymXPnqdDd7Wx3OpzWRJuP8+iMTFe7wZq48Tce7QciNetUzku+pT/t4UHK/iIq2yPR/8y/315M/rWl1A/sM83phVh6+aeZY39OLNN4Y0P2GdHOWPAAAAAElFTkSuQmCC\"); } /* Banner & Board Title */ .boardBanner { line-height: 0; } .faded-4chan-banner .boardBanner { opacity: 0.5; transition: opacity 0.3s ease-in-out .5s; } .faded-4chan-banner .boardBanner:hover { opacity: 1; transition: opacity 0.3s ease-in; } /* From 4chan SS / OneeChan */ .fourchan-banner-reflection #Banner { -webkit-box-reflect: below 0 -webkit-linear-gradient(rgba(255,255,255,0), rgba(255,255,255,0) 10%, rgba(255,255,255,.5)); } .fourchan-banner-at-sidebar-top .boardBanner, .fourchan-banner-at-sidebar-bottom .boardBanner, .fourchan-banner-at-sidebar-bottom .boardBanner { position: fixed; } .fourchan-banner-at-sidebar-top .boardBanner { top: 16px; } .fourchan-banner-at-sidebar-bottom .boardBanner { bottom: 270px; } .fourchan-banner-under-post-form .boardBanner { bottom: 130px; } .board-title-at-sidebar-top.sidebar-location-right #boardTitle, .board-title-at-sidebar-bottom.sidebar-location-right #boardTitle, .board-title-under-post-form.sidebar-location-right #boardTitle, .fourchan-banner-at-sidebar-top.sidebar-location-right .boardBanner, .fourchan-banner-at-sidebar-bottom.sidebar-location-right .boardBanner, .fourchan-banner-under-post-form.sidebar-location-right .boardBanner { right: 2px; } .board-title-at-sidebar-top.sidebar-location-left #boardTitle, .board-title-at-sidebar-bottom.sidebar-location-left #boardTitle, .board-title-under-post-form.sidebar-location-left #boardTitle, .fourchan-banner-at-sidebar-top.sidebar-location-left .boardBanner, .fourchan-banner-at-sidebar-bottom.sidebar-location-left .boardBanner, .fourchan-banner-under-post-form.sidebar-location-left .boardBanner { left: 2px; } .board-title-at-sidebar-top #boardTitle, .board-title-at-sidebar-bottom #boardTitle, .board-title-under-post-form #boardTitle, .fourchan-banner-at-sidebar-top .boardBanner img, .fourchan-banner-at-sidebar-bottom .boardBanner img, .fourchan-banner-under-post-form .boardBanner img { width: 248px; } .board-title-at-sidebar-top.sidebar-large #boardTitle, .board-title-at-sidebar-bottom.sidebar-large #boardTitle, .board-title-under-post-form.sidebar-large #boardTitle, .fourchan-banner-at-sidebar-top.sidebar-large .boardBanner img, .fourchan-banner-at-sidebar-bottom.sidebar-large .boardBanner img, .fourchan-banner-under-post-form.sidebar-large .boardBanner img { width: 299px; } .fourchan-banner-at-top .boardBanner { position: relative; display: table; margin: 12px auto; text-align: center; } :root:not(.board-subtitle) .boardSubtitle, .board-title-hide #boardTitle, .fourchan-banner-hide .boardBanner { display: none; } #boardTitle { text-align: center; z-index: 4; } .board-title-at-sidebar-top #boardTitle, .board-title-at-sidebar-bottom #boardTitle, .board-title-under-post-form #boardTitle { position: fixed; } .board-title-at-sidebar-top.fourchan-banner-at-sidebar-top.sidebar-large #boardTitle { top: 121px; } .board-title-at-sidebar-top.fourchan-banner-at-sidebar-top #boardTitle { top: 104px; } .board-title-at-sidebar-top #boardTitle { top: 40px; } .board-title-at-sidebar-bottom #boardTitle { bottom: 280px; } .board-title-under-post-form #boardTitle { bottom: 140px; } /* Hover UI */ .move { cursor: pointer; } #ihover { position: fixed; max-height: 97%; max-width: 75%; z-index: 22; } #qp { position: fixed; z-index: 22; } #qp .postMessage::after { clear: both; display: block; content: \"\"; } #qp .full-image { max-height: 300px; max-width: 500px; } #menu { position: fixed; outline: none; z-index: 22; } /* Image Expansion */ .fit-width .full-image { max-width: 100%; width: 100%; } .fit-height .full-image { max-height: 95vh; } .images-overlap-post-form .full-image { position: relative; z-index: 21; } /* Delete Buttons */ .hide-delete-ui .deleteform, .hide-delete-ui .post:not(#exlinks-options) .rice { display: none; } .hide-delete-ui .postInfo { padding: 0 0 0 3px; } .deleteform { position: fixed; z-index: 18; width: 0; bottom: 0; right: 0; border-width: 1px 0 0 1px; border-style: solid; font-size: 0; color: transparent; } .deleteform:hover { width: auto; } .deleteform::before { z-index: 18; border-width: 1px 0 0 1px; border-style: solid; content: '✖'; display: block; position: fixed; bottom: 0; right: 0; box-sizing: border-box; height: 1.6em; width: 1.4em; text-align: center; } .deleteform:hover::before { display: none; } .deleteform input { margin: 0 1px 0 0; } /* Slideout Navigation */ #boardNavDesktopFoot { position: fixed; text-align: center; font-size: 0; color: transparent; overflow: hidden; box-sizing: border-box; width: 248px; } .sidebar-large #boardNavDesktopFoot { width: 299px; } .sidebar-location-right #boardNavDesktopFoot { right: 2px; } .sidebar-location-left #boardNavDesktopFoot { left: 2px; } #boardNavDesktopFoot:hover { overflow-y: auto; padding: 2px; } #boardNavDesktopFoot:not(:hover) { border-color: transparent; background-color: transparent; height: 0; overflow: hidden; padding: 0; border: 0 none; } .slideout-navigation-compact #boardNavDesktopFoot { word-spacing: 1px; } .slideout-navigation-list #boardNavDesktopFoot a { display: block; } .slideout-navigation-list #boardNavDesktopFoot:hover { max-height: 400px; } .slideout-navigation-list #boardNavDesktopFoot a::after { content: ' - ' attr(title); } .slideout-navigation-list #boardNavDesktopFoot a[href*='//boards.4chan.org/']::after, .slideout-navigation-list #boardNavDesktopFoot a[href*='//rs.4chan.org/']::after { content: '/ - ' attr(title); } .slideout-navigation-list #boardNavDesktopFoot a[href*='//boards.4chan.org/']::before, .slideout-navigation-list #boardNavDesktopFoot a[href*='//rs.4chan.org/']::before { content: '/'; } .slideout-navigation-hide #boardNavDesktopFoot { display: none; } /* Watcher */ #thread-watcher { position: fixed; z-index: 14; padding: 2px; } #thread-watcher { width: 200px; } #thread-watcher:not(:hover) { max-height: 200px; overflow: hidden; } .rounded-edges #thread-watcher { border-radius: 3px; } #thread-watcher > div { max-height: 1.3em; overflow: hidden; } .slideout-watcher #thread-watcher { box-sizing: border-box; width: 248px; } .slideout-watcher.sidebar-large #boardNavDesktopFoot { width: 299px; } .slideout-watcher.sidebar-location-right #thread-watcher { left: auto !important; right: 2px !important; } .slideout-watcher.sidebar-location-left #thread-watcher { right: auto !important; left: 2px !important; } .slideout-watcher #thread-watcher .move { cursor: default; } .slideout-watcher.underline-links #thread-watcher .move { text-decoration: underline; } .slideout-watcher #thread-watcher > div { overflow: hidden; } .slideout-watcher #thread-watcher:hover { overflow-y: auto; } .slideout-watcher #thread-watcher:not(:hover) { height: 0; overflow: hidden; border: 0 none; padding: 0; } .watch-thread-link { padding-top: 18px; width: 18px; height: 0px; display: inline-block; background-repeat: no-repeat; opacity: 0.2; position: relative; top: 1px; } .watch-thread-link.watched { opacity: 1; } /* Announcements */ #globalMessage { text-align: center; } .rounded-edges #globalMessage { border-radius: 3px; } .announcements-slideout #globalMessage { position: fixed; padding: 2px; width: 248px; } .announcements-slideout.sidebar-location-right #globalMessage { left: auto; right: 2px; } .announcements-slideout.sidebar-location-left #globalMessage { right: auto; left: 2px; } .announcements-slideout.sidebar-large #globalMessage { width: 299px; } .announcements-slideout #globalMessage h3 { margin: 0; } .announcements-slideout #globalMessage:hover { box-sizing: border-box; overflow-y: auto; } .announcements-slideout #globalMessage:not(:hover) { height: 0; overflow: hidden; padding: 0; border: 0 none; } .announcements-hide #globalMessage { display: none !important; } /* Threads */ #threads, .rounded-edges .board > .thread { border-radius: 4px; } /* Thread Clearfix */ .thread > .threadContainer:last-of-type::after, .thread > .postContainer:last-of-type::after { display: block; content: ' '; clear: both; } /* Posts */ .expanding { opacity: .5; } .fileText:hover .fntrunc, .fileText:not(:hover) .fnfull, .expanded-image > .post > .file > .fileThumb > img[data-md5], .post > .file > .fileThumb > .full-image { display: none; } .expanded-image > .post > .file > .fileThumb > .full-image { display: block; } .thread > .replyContainer:last-of-type .post { margin-bottom: 0; } .menu-button { position: relative; } .stub .menu-button, .post .menu-button, .hide-thread-button, .show-thread-button span, .hide-reply-button, .show-reply-button span { float: right; } .post .menu-button, .hide-thread-button, .hide-reply-button { margin: 0 3px; opacity: 0; transition: opacity .3s ease-out 0s; } .post:hover .hide-reply-button, .post:hover .menu-button, .post:hover .hide-thread-button, .hidden_thread .hide-thread-button, .hidden_thread .menu-button, .inline .hide-reply-button, .inline .menu-button { opacity: 1; } .hidden_thread { text-align: right; } .color-user-ids .posteruid .hand { padding: .1em .3em; border-radius: 1em; font-size: 80%; } .postInfo > span { vertical-align: bottom; } .bolds .subject, .bolds .name { font-weight: 600; } .italics .postertrip { font-style: italic; } .underline-links .replylink { text-decoration: underline; } .fileInfo { padding: 0 3px; } .fileThumb { float: left; margin: 3px 20px; outline: none; } .reply.post { box-sizing: border-box; display: inline-block; } .fit-width-replies .reply.post { display: block; overflow: hidden; } .fit-width-replies .expanded-image .reply.post, .fit-width-replies .hasInline .reply.post { width: 100%; } .indent-replies #unread-line, .indent-replies .thread > .replyContainer, .indent-replies .threadContainer > .replyContainer { margin-left: 2em; } .expanded-image .reply.post, .hasInline .reply.post { display: inline-block; overflow: visible; clear: both; } .rounded-edges .post { border-radius: 3px; } .spoiler, s { text-decoration: none; } /* Emoji */ a.useremail:last-of-type { vertical-align: top; } /* Reply Clearfix */ .reply.post .postMessage { clear: right; } .op-background .op.post .postMessage::after, .force-reply-break .op.post .postMessage::after { display: block; content: ' '; clear: both; } /* OP */ .favicon { vertical-align: bottom; } .op-background .op.post { box-sizing: border-box; } /* Summary */ .force-reply-break .summary { clear: both; } /* Inlined */ .inline { margin: 2px 8px 2px 2px; } .post .inline { margin: 2px; } .inline .replyContainer { display: inline-block; } /* Inlined Clearfix */ .inline .postMessage::after { clear: both; display: block; content: \"\"; } /* Quotes */ .inlined { opacity: .5; } .underline-links .quotelink { text-decoration: underline; } .filtered, .quotelink.filtered { text-decoration: line-through !important; } .inline + .hashlink { display: none; } /* Quote Threading */ .threadContainer { padding-left: 2em; border-left: 1px solid; } .indent-replies .threadContainer { margin-left: 2em; padding-left: 0; } .threadOP { clear: both; } /* Backlinks */ .underline-links .forwardlink, .underline-links .backlink { text-decoration: underline; } .backlink.dead { text-decoration: none; } .filtered-backlinks .filtered.backlink { display: none; } .backlinks-position-lower-left .container, .backlinks-position-lower-right .container { max-width: 100%; padding: 0 5px; } .backlinks-position-lower-left .reply.quoted, .backlinks-position-lower-right .reply.quoted { position: relative; padding-bottom: 1.7em; } .backlinks-position-lower-left .inline .reply.quoted, .backlinks-position-lower-right .inline .reply.quoted, .backlinks-position-lower-right #qp .reply.quoted, .backlinks-position-lower-left #qp .reply.quoted { position: static; padding-bottom: 0; } .backlinks-position-lower-right .reply .container, .backlinks-position-lower-left .reply .container { position: absolute; bottom: 0; padding: 0 5px; } .backlinks-position-lower-left .reply .container { left: 0; } .backlinks-position-lower-right .reply .container { right: 0; } .backlinks-position-lower-right .container::before, .backlinks-position-lower-left .reply .container::before { content: 'REPLIES: '; } .container:empty { display: none; } .backlinks-position-lower-left #qp .container, .backlinks-position-lower-left .inline .container, .backlinks-position-lower-right .inline .container, .backlinks-position-lower-right #qp .container { position: static; max-width: 100%; } .backlinks-position-lower-left #qp .container::before, .backlinks-position-lower-left .inline .container::before, .backlinks-position-lower-right #qp .container::before, .backlinks-position-lower-right .inline .container::before { content: ''; } .backlinks-position-lower-right .inline .container { float: none; } /* Fixes text spoilers */ .remove-spoilers.indicate-spoilers .spoiler::before, .remove-spoilers.indicate-spoilers s::before { content: '[spoiler]'; } .remove-spoilers.indicate-spoilers .spoiler::after, .remove-spoilers.indicate-spoilers s::after { content: '[/spoiler]'; } :root:not(.remove-spoilers) .spoiler:not(:hover) *, :root:not(.remove-spoilers) s:not(:hover) * { color: rgb(0,0,0) !important; text-shadow: none !important; } :root:not(.remove-spoilers) spoiler:not(:hover), :root:not(.remove-spoilers) s:not(:hover) { background-color: rgb(0,0,0); color: rgb(0,0,0) !important; text-shadow: none !important; } /* Code */ .prettyprint { box-sizing: border-box; font-family: monospace; display: inline-block; margin: 0 auto .1em 0; vertical-align: middle; white-space: pre-wrap; border-radius: 2px; overflow-x: auto; padding: 3px; max-width: 100%; } /* Menu */ .entry { border-bottom: 1px solid rgba(0,0,0,.25); cursor: pointer; display: block; outline: none; padding: 3px 1em 3px 7px; position: relative; text-decoration: none; white-space: nowrap; } .entry:last-child { border-bottom: 0; } .has-submenu::after { content: \"\"; border-left: .5em solid; border-top: .3em solid transparent; border-bottom: .3em solid transparent; display: inline-block; margin: .3em; position: absolute; right: 0; } .submenu { display: none; position: absolute; top: -1px; } .focused .submenu { display: block; } /* Stubs */ .fit-width-replies .stub { display: block; text-align: right; clear: both; } /* Element Replacing: */ /* Checkboxes */ .rice { cursor: pointer; width: 9px; height: 9px; margin: 2px 3px 3px; display: inline-block; vertical-align: bottom; } input[type=checkbox]:checked + .rice { position: relative; } input[type=checkbox]:checked + .rice::after { content: \"\"; display: block; width: 4px; height: 10px; border-width: 0 3px 3px 0; border-style: solid; -webkit-transform: rotate(45deg); position: absolute; left: 2px; bottom: -1px; } .rounded-edges .rice { border-radius: 2px;} } .circle-checkboxes .rice { border-radius: 6px;} } input:checked + .rice { background-attachment: scroll; background-repeat: no-repeat; background-position: bottom right; } /* Selects */ .selectrice { position: relative; cursor: default; overflow: hidden; text-align: left; } #settings .selectrice { display: inline-block; } .selectrice::after { content: \"\"; border-right: .25em solid transparent; border-left: .25em solid transparent; position: absolute; right: .4em; top: .5em; } .selectrice::before { content: \"\"; height: 1.6em; position: absolute; right: 1.3em; top: 0; } /* Select Dropdown */ #selectrice { padding: 0; margin: 0; position: fixed; max-height: 120px; overflow-y: auto; overflow-x: hidden; z-index: 32; } #selectrice:empty { display: none; } /* Post Form Shortcut */ .qr-shortcut.on-page { font-size: 250%; } /* Post Form */ #qr { z-index: 20; position: fixed; background: none; border: none; padding: 1px; min-width: 248px; background: transparent; border: 1px solid transparent; } .sidebar-large #qr { min-width: 299px; } .rounded-edges #qr, .rounded-edges #qrtab { border-radius: 3px 3px 0 0; } .post-form-style-fixed #qr { top: auto !important; } .sidebar-location-left:not(.post-form-style-float) #qr { left: 0 !important; right: auto !important; } .sidebar-location-right:not(.post-form-style-float) #qr { right: 0 !important; left: auto !important; } :root:not(.post-form-style-float) #qr { bottom: 0 !important; } .fourchan-ss-navigation.fixed.bottom:not(.post-form-style-float) #qr, .fourchan-ss-navigation.index.pagination-sticky-bottom:not(.post-form-style-float) #qr { bottom: 1.5em !important; } .post-form-style-slideout #qr { top: auto !important; } .post-form-style-slideout.sidebar-location-left #qr { -webkit-transform: translateX(-93%); } .post-form-style-slideout.sidebar-location-right #qr { -webkit-transform: translateX(93%); } .post-form-style-slideout #qr:hover, .post-form-style-slideout #qr.has-focus, .post-form-style-slideout #qr.dump { -webkit-transform: translate(0); } .post-form-style-tabbed-slideout #qr { top: auto !important; } .post-form-style-tabbed-slideout.sidebar-location-left #qr { -webkit-transform: translateX(-100%); } .post-form-style-tabbed-slideout.sidebar-location-right #qr { -webkit-transform: translateX(100%); } .post-form-style-tabbed-slideout #qr:hover, .post-form-style-tabbed-slideout #qr.has-focus, .post-form-style-tabbed-slideout #qr.dump { -webkit-transform: translateX(0); } .post-form-style-tabbed-slideout #qrtab { position: absolute; top: 0; width: 120px; text-align: center; border-width: 1px 1px 0 1px; cursor: default; } .post-form-style-tabbed-slideout.sidebar-location-left #qrtab { -webkit-transform: rotate(90deg); -webkit-transform-origin: bottom right; left: 100%; } .post-form-style-tabbed-slideout.sidebar-location-right #qrtab { -webkit-transform: rotate(-90deg); -webkit-transform-origin: bottom right; right: 100%; } .post-form-style-tabbed-slideout #qr:hover #qrtab, .post-form-style-tabbed-slideout #qr.has-focus #qrtab, .post-form-style-tabbed-slideout #qr.dump #qrtab { opacity: 0 !important; } .post-form-style-slideout #qrtab input, .post-form-style-slideout #qrtab .rice, .post-form-style-tabbed-slideout #qrtab input, .post-form-style-tabbed-slideout #qrtab .close, .post-form-style-tabbed-slideout #qrtab .rice, .post-form-style-tabbed-slideout #qrtab span { display: none; } .post-form-style-tabbed-slideout #qrtab .selectrice { text-align: center; } .transparent-post-form #qr { opacity: 0.2; transition: opacity .3s ease-in-out 1s; } .transparent-post-form #qr:hover, .transparent-post-form #qr.has-focus, .transparent-post-form #qr.dump { opacity: 1; transition: opacity .3s linear; } :root:not(.show-post-form-header):not(.post-form-style-float):not(.post-form-style-tabbed-slideout) #qrtab, .post-form-style-float .autohide:not(:hover):not(.has-focus) form, .show-post-form-header.post-form-style-fixed .autohide:not(:hover):not(.has-focus) form { display: none !important; } :root:not(.post-form-style-tabbed-slideout) #qrtab { margin-bottom: 1px; } #qr.autohide:not(:hover):not(.has-focus) #qrtab { margin-bottom: 0; } .post-form-slideout-transitions.post-form-style-slideout #qr, .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr { transition: -webkit-transform .3s ease-in-out 1s; } .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr.dump, .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr:hover, .post-form-slideout-transitions.post-form-style-tabbed-slideout #qr.has-focus, .post-form-slideout-transitions.post-form-style-slideout #qr.dump, .post-form-slideout-transitions.post-form-style-slideout #qr:hover, .post-form-slideout-transitions.post-form-style-slideout #qr.has-focus { transition: -webkit-transform .3s linear; } .post-form-slideout-transitions #qrtab { transition: opacity .3s ease-in-out 1s; } .post-form-slideout-transitions #qr:hover #qrtab { transition: opacity .3s linear; } #qr .close { float: right; padding: 0 3px; } #qr .warning { min-height: 1.6em; vertical-align: middle; padding: 0 1px; border-width: 1px; border-style: solid; } .persona { width: 248px; max-width: 100%; min-width: 100%; } .persona input.field { width: 100%; } #qr textarea.field { height: 11.6em; min-height: 6em; } #qr.has-captcha textarea.field { height: 6em; } .compact-post-form-inputs .persona input.field { width: 33%; } .compact-post-form-inputs .persona input.field:first-child { margin: 0; } .compact-post-form-inputs .persona input.field { margin: 0 0 0 0.5%; } .compact-post-form-inputs #qr textarea.field { height: 14.9em; min-height: 9em; } .compact-post-form-inputs #qr.has-captcha textarea.field { height: 9em; } .tripcode-hider .tripped:not(:hover):not(:focus) { color: transparent !important; } .textarea-resize-horizontal #qr textarea { resize: horizontal; } .textarea-resize-vertical #qr textarea { resize: vertical; } .textarea-resize-both #qr textarea { resize: both; } .textarea-resize-none #qr textarea { resize: none; } .captcha-img { margin: 1px 0 0; text-align: center; line-height: 0; } .captcha-img img { width: 246px; } .captcha-img, .captcha-img img { height: 4em; } .captcha-input { width: 100%; margin: 1px 0 0; } .field, .selectrice, button, input:not([type=radio]) { box-sizing: border-box; height: 1.6em; margin: 1px 0 0; vertical-align: bottom; padding: 0 1px; outline: none; } .selectrice { padding-right: 1.6em; } #qr textarea { min-width: 100%; } #qr [type='submit'] { width: 25%; } [type='file'] { position: absolute; opacity: 0; z-index: -1; } /* Fake File Input */ #qr-filename, #qr-filerm, .has-file #qr-no-file { display: none; } #qr-no-file, .has-file #qr-filename { display: block; } .has-file #qr-filerm { display: inline-block; } #qr-extras-container { position: absolute; right: 0; top: 0; z-index: 2; } #qr-extras-container > label, #qr-extras-container > a { cursor: pointer; margin-right: 3px; } #qr-filename-container { box-sizing: border-box; display: inline-block; position: relative; width: 100px; min-width: 74.6%; max-width: 74.6%; margin-right: 0.4%; overflow: hidden; padding: 2px 1px 0; } /* Thread Select */ #qr-thread-select, #qr-thread-select .selectrice div { display: inline; } #qr-thread-select .selectrice { cursor: pointer; display: inline-block; width: 120px; border: none; background: none transparent; padding: 0; margin: 0; height: auto; } #qr-thread-select .selectrice::before, #qr-thread-select .selectrice::after { display: none; } /* Dumping UI */ .dump #dump-list-container { display: block; } #dump-list-container { display: none; position: relative; overflow-y: hidden; margin-top: 1px; } #dump-list { overflow-x: auto; overflow-y: hidden; white-space: nowrap; width: 248px; max-width: 100%; min-width: 100%; } #dump-list:hover { overflow-x: auto; } .qr-preview { box-sizing: border-box; counter-increment: thumbnails; cursor: move; display: inline-block; height: 90px; width: 90px; padding: 2px; opacity: .5; overflow: hidden; position: relative; text-shadow: 0 1px 1px #000; transition: opacity .25s ease-in-out; vertical-align: top; } .qr-preview:hover, .qr-preview:focus { opacity: .9; } .qr-preview::before { content: counter(thumbnails); color: #fff; position: absolute; top: 3px; right: 3px; text-shadow: 0 0 3px #000, 0 0 8px #000; } .qr-preview#selected { opacity: 1; } .qr-preview.drag { box-shadow: 0 0 10px rgba(0,0,0,.5); } .qr-preview.over { border-color: #fff; } .qr-preview > span { color: #fff; } .remove { background: none; color: #e00; font-weight: 700; padding: 3px; } a:only-of-type > .remove { display: none; } .remove:hover::after { content: \" Remove\"; } .qr-preview > label { background: rgba(0,0,0,.5); color: #fff; right: 0; bottom: 0; left: 0; position: absolute; text-align: center; } .qr-preview > label > input { margin: 0; } #add-post { cursor: pointer; font-size: 2em; position: absolute; top: 50%; right: 10px; -webkit-transform: translateY(-50%); } /* Ads */ .fade-ads .topad img, .fade-ads .middlead img, .fade-ads .bottomad img { opacity: 0.3; transition: opacity .3s linear; } .fade-ads .topad img:hover, .fade-ads .middlead img:hover, .fade-ads .bottomad img:hover { opacity: 1; } .hide-ads .bottomad + hr, .hide-ads .topad, .hide-ads .middlead, .hide-ads .bottomad, .hide-ads .ad-plea { display: none; } .shrink-ads .topad a img, .shrink-ads .middlead a img, .shrink-ads .bottomad a img { width: 500px; height: auto; } /* Mascot Positions */ #mascot { display: none; position: fixed; z-index: -1; bottom: 0; left: 0; right: 0; line-height: 0; cursor: pointer; } .mascot-position-above-post-form.post-form-style-fixed:not(.post-form-decorations) #mascot img { margin-bottom: -2px; } .mascots #mascot { display: block; } .sidebar-location-right.mascot-location-sidebar #mascot, .sidebar-location-left.mascot-location-opposite #mascot { left: auto; } .sidebar-location-left.mascot-location-sidebar #mascot, .sidebar-location-right.mascot-location-opposite #mascot { right: auto; } .sidebar-location-left.mascot-location-sidebar #mascot img, .sidebar-location-right.mascot-location-opposite #mascot img { -webkit-transform: scaleX(-1); } .fourchan-ss-navigation.bottom.fixed #mascot, .fourchan-ss-navigation.index.pagination-sticky-bottom #mascot { bottom: 1.5em } .mascots-overlap-posts #mascot { z-index: 3; } .mascot-position-middle #mascot { bottom: 50% !important; -webkit-transform: translateY(50%); } .mascot-position-top #mascot { bottom: auto !important; top: 17px; } .grayscale-mascots #mascot { -webkit-filter: url('#grayscale'); } .silhouettize-mascots #mascot img { -webkit-filter: url('#mascot-filter'); } /* Options */ #overlay { position: fixed; z-index: 30; top: 0; right: 0; left: 0; bottom: 0; background: rgba(0,0,0,.5); } #appchanx-settings { width: auto; left: 15%; right: 15%; top: 15%; bottom: 15%; position: fixed; z-index: 31; padding: .3em; } .rounded-edges #appchanx-settings, .rounded-edges #appchanx-settings fieldset, .rounded-edges .mascots-container, .rounded-edges .section-container, .rounded-edges .sections-list > a { border-radius: 3px; } .description { display: none; } #appchanx-settings h3, .section-keybinds, .section-mascots, .section-script, .style { text-align: center; } .section-keybinds table, .section-script fieldset, .section-style fieldset { text-align: left; } .section-keybinds table { margin: auto; } #appchanx-settings fieldset { padding: 5px 0; vertical-align: top; border: 0; margin: 0 3px 6px; display: inline-block; } .single-column-mode #appchanx-settings fieldset { display: block; margin: 0 auto 6px; } #appchanx-settings .section-advanced fieldset { display: block; margin: 0 auto 6px; } .section-advanced .archive-cell { min-width: 200px; } .section-advanced .selectrice { display: inline-block; clear: both; } .section-container { overflow: auto; position: absolute; top: 1.7em; right: 5px; bottom: 5px; left: 5px; padding: 5px; } .sections-list { padding: 0 3px; float: left; } .sections-list > a { cursor: pointer; position: relative; padding: 0 4px; z-index: 1; height: 1.4em; display: inline-block; border-width: 1px 1px 0 1px; border-color: transparent; border-style: solid; } .sections-list > a.tab-selected { border-style: solid; } .credits { float: right; } #appchanx-settings h3 { margin: 0; } .section-script fieldset > div, .section-style fieldset > div, .section-advanced fieldset > div { overflow: visible; padding: 0 5px 0 7px; } #appchanx-settings tr:nth-of-type(2n+1), .section-script fieldset > div:nth-of-type(2n+1), .section-advanced fieldset > div:nth-of-type(2n+1), .section-style fieldset > div:nth-of-type(2n+1), .section-keybinds tr:nth-of-type(2n+1), #selectrice li:nth-of-type(2n+1) { background-color: rgba(0, 0, 0, 0.05); } article li { margin: 10px 0 10px 2em; } #appchanx-settings .option { width: 50%; display: inline-block; vertical-align: bottom; } .option input { width: 100%; } .optionlabel { padding-left: 18px; } .rice + .optionlabel { padding-left: 0; } .section-script fieldset, .styleoption { text-align: left; } .section-style fieldset { width: 370px; } .section-script fieldset { width: 200px; } #mascotcontent, #themecontent, .suboptions { overflow: auto; position: absolute; top: 0; right: 0; bottom: 1.7em; left: 0; } #mascotcontent, #themecontent { padding: 5px; } #themecontent { top: 1.8em; } .mAlign { height: 250px; vertical-align: bottom; display: table-cell; line-height: 0; } #save, .stylesettings { position: absolute; right: 10px; bottom: 0; } .section-style .suboptions { bottom: 0; } .section-container textarea { font-family: monospace; min-height: 150px; resize: vertical; width: 100%; } /* Hover Functionality */ #mouseover { z-index: 33; position: fixed; max-width: 70%; } #mouseover:empty { display: none; } /* Mascot Tab */ #mascot_hide { padding: 3px; position: absolute; top: 2px; right: 18px; } #mascot_hide .rice { float: left; } #mascot_hide > div { height: 0; text-align: right; overflow: hidden; } #mascot_hide:hover > div { height: auto; } #mascot_hide label { width: 100%; display: block; clear: both; text-decoration: none; } .mascots-container { padding: 0; text-align: center; } .mascot, .mascotcontainer { overflow: hidden; } .mascot { position: relative; border: none; margin: 5px; padding: 0; width: 200px; display: inline-block; background-color: transparent; } .mascotcontainer { height: 250px; border: 0; margin: 0; max-height: 250px; cursor: pointer; bottom: 0; border-width: 0 1px 1px; border-style: solid; border-color: transparent; overflow: hidden; } .mascot img { max-width: 200px; } .export-button, .mascotname, #mascot-options { box-sizing: border-box; padding: 0; width: 100%; } #mascot-options { opacity: 0; transition: opacity .3s linear; } .mascot:hover #mascot-options { opacity: 1; } #mascot-options { position: absolute; bottom: 0; right: 0; left: 0; } .export-button { position: absolute; bottom: 1.7em; right: 0; left: 0; text-align: center; } #mascot-options a { display: inline-block; width: 33%; } #upload { position: absolute; width: 100px; left: 50%; margin-left: -50px; text-align: center; bottom: 0; } #mascots_batch { position: absolute; left: 10px; bottom: 0; } /* Themes Tab */ #themes h1 { position: absolute; right: 300px; bottom: 10px; margin: 0; transition: all .2s ease-in-out; opacity: 0; } #themes .selectedtheme h1 { right: 11px; opacity: 1; } #addthemes { position: absolute; left: 10px; bottom: 0; } .theme { margin: 1em; } /* Theme Editor */ #themeConf { position: fixed; top: 0; bottom: 0; width: 296px; z-index: 10; } .sidebar-location-right #themeConf { right: 2px; left: auto; } .sidebar-location-right #themeConf { left: 2px; right: auto; } #themebar input { width: 30%; } .option .color { width: 10%; border-left: none !important; color: transparent !important; } .option .colorfield { width: 90%; } .themevar textarea { min-width: 100%; max-width: 100%; height: 20em; resize: vertical; } /* Mascot Editor */ #mascotConf { position: fixed; height: 17em; bottom: 0; left: 50%; width: 500px; margin-left: -250px; overflow: auto; z-index: 10; } #mascotConf .option, #mascotConf .optionlabel { box-sizing: border-box; width: 50%; display: inline-block; vertical-align: middle; } #mascotConf .option input { width: 100%; } #close { position: absolute; left: 10px; bottom: 0; } /* Catalog */ #content .navLinks, #info .navLinks, .btn-wrap { display: block; } .navLinks > .btn-wrap:not(:first-of-type)::before { content: ' - '; } .button { cursor: pointer; } #content .btn-wrap, #info .btn-wrap { display: inline-block; } #post-preview, #quote-preview { position: absolute; z-index: 22; } .rounded-edges #post-preview { border-radius: 3px; } #settings, #threads, #info .navLinks, #content .navLinks { text-align: center; } #threads .thread { vertical-align: top; display: inline-block; word-wrap: break-word; overflow: hidden; margin: 1px; padding: 5px 0 3px; text-align: center; } .extended-small .thread, .small .thread { width: 165px; max-height: 320px; } .small .teaser, .large .teaser { display: none; } .extended-large .thread, .large .thread { width: 270px; max-height: 410px; } .extended-small .thumb, .small .thumb { max-width: 150px; max-height: 150px; } .panel { position: fixed; top: 50% !important; left: 50%; -webkit-transform: translate(-50%, -50%); padding: 5px; } .icon::after { display: inline-block; float: right; width: 1em; cursor: pointer; } .helpIcon::after { content: '?'; } .closeIcon::after { content: '✖'; } /* Front Page */ #logo { text-align: center; } #doc { box-sizing: border-box; margin: 10px auto; width: 1006px; padding: 2px; position: relative; } .rounded-edges #doc, .rounded-edges #doc div { border-radius: 3px; } #boards .boxcontent { vertical-align: top; text-align: center; } #filter-container, #options-container { top: 4px; right: 8px; position: absolute; } #filtermenu, #optionsmenu { top: 100% !important; left: auto !important; right: 0 !important; } #boards .column { box-sizing: border-box; display: inline-block; width: 180px; text-align: left; vertical-align: top; } .bd ul, .boxcontent ul { vertical-align: top; padding: 0; margin: 0; } .right-box .boxcontent ul { padding: 0 10px; } .yuimenuitem, .boxcontent li { list-style-type: none; } .boxbar { position: relative; } #doc h3, .boxbar h2 { margin: 0; } #doc h3 { text-decoration: none !important; } .underline-links #doc h3 { text-decoration: underline !important; } #ft, .box-outer { margin: 2px 0 0; overflow: hidden; } #ft, .boxbar, .boxcontent { padding: 0 8px; } .yui-module { position: absolute; } .yuimenuitem::before { content: \" [ ] \"; font-family: monospace; } .yuimenuitem-checked::before { content: \" [x] \" } .yui-g { overflow: hidden; } .yui-u { display: inline-block; vertical-align: top; width: 499px; float: right; } .yui-u.first { float: left; } #recent-images .boxcontent { text-align: center; } #ft { text-align: center; } #ft ul { padding: 0; } #ft li { list-style-type: none; display: inline-block; width: 100px; } #preview-tooltip-nws, #preview-tooltip-ws, #ft .fill, .clear-bug { display: none; } /* ExLinks */ #exlinks-options-content { padding: 5px; }",
dynamic: function() {
var editSpace, sidebarLocation;
@@ -11812,12 +12168,12 @@
replyRGB = "rgb(" + (replybg.shiftRGB(parseInt(Conf['Silhouette Contrast'], 10), true)) + ")";
Style.lightTheme = bgColor.isLight();
Style.svg.innerHTML = " \n \n \n ";
- return (".hide_thread_button span > span, .hide_reply_button span > span { background-color: " + theme["Links"] + "; } #mascot_hide label { border-bottom: 1px solid " + theme["Reply Border"] + "; } #content .thumb { box-shadow: 0 0 5px " + theme["Reply Border"] + "; } .export-button, .mascotname, #mascot-options { background: " + theme["Dialog Background"] + "; border: 1px solid " + theme["Buttons Border"] + "; } .highlight-you .opContainer.quotesYou, .highlight-own .opContainer.yourPost, .opContainer.filter-highlight { box-shadow: inset 5px 0 " + theme["Backlinked Reply Outline"] + "; } .highlight-you .quotesYou > .reply, .highlight-own .yourPost > .reply, .filter-highlight > .reply { box-shadow: -5px 0 " + theme["Backlinked Reply Outline"] + "; } hr { border-bottom: 1px solid " + theme["Reply Border"] + "; } hr#unread-line { border-bottom: 1px solid " + theme["Reply Background"] + "; visibility: visible; } .threadContainer { border-color: " + theme["Reply Border"] + " !important; } html { background: " + (backgroundC || '') + "; background-image: " + (theme["Background Image"] || '') + "; background-repeat: " + (theme["Background Repeat"] || '') + "; background-attachment: " + (theme["Background Attachment"] || '') + "; background-position: " + (theme["Background Position"] || '') + "; } .panel, .section-container, #exlinks-options-content, #themecontent { background: " + backgroundC + "; border: 1px solid " + theme["Reply Border"] + "; } .sections-list > a.tab-selected { background: " + backgroundC + "; border-color: " + theme["Reply Border"] + "; } .captcha-img img { -webkit-filter: url(\"#captcha-filter\"); } #boardTitle { text-shadow: 1px 1px " + backgroundC + ", -1px -1px " + backgroundC + ", 1px -1px " + backgroundC + ", -1px 1px " + backgroundC + "; } .sidebar-glow #boardTitle { text-shadow: 1px 1px 1px " + backgroundC + ", -1px -1px 1px " + backgroundC + ", 1px -1px 1px " + backgroundC + ", -1px 1px 1px " + backgroundC + ", 0 2px 4px rgba(0,0,0,.6), 0 0 10px rgba(0,0,0,.6); } #exlinks-options, #appchanx-settings, #qrtab, input[type=\"submit\"], input[value=\"Report\"], span[style=\"left: 5px; position: absolute;\"] a { background: " + theme["Buttons Background"] + "; border: 1px solid " + theme["Buttons Border"] + "; } .enabled .mascotcontainer { background: " + theme["Buttons Background"] + "; border-color: " + theme["Buttons Border"] + "; } #dump, #qr-filename-container, #appchanx-settings input, .captcha-img, .dump #dump, .qr-preview, .selectrice, button, input, textarea { background: " + theme["Input Background"] + "; border: 1px solid " + theme["Input Border"] + "; } .has-file #qr-extras-container { background: " + theme["Input Background"] + "; } #dump:hover, #qr-filename-container:hover, .selectrice:hover, #selectrice li:hover, #selectrice li:nth-of-type(2n+1):hover, input:hover, textarea:hover { background: " + theme["Hovered Input Background"] + "; border-color: " + theme["Hovered Input Border"] + "; } .has-file #qr-filename-container:hover #qr-extras-container { background: " + theme["Hovered Input Background"] + "; } #dump:active, #dump:focus, #selectrice li:focus, .selectrice:focus, #qr-filename-container:active, #qr-filename-container:focus, input:focus, textarea:focus, textarea.field:focus { background: " + theme["Focused Input Background"] + "; border-color: " + theme["Focused Input Border"] + "; color: " + theme["Inputs"] + "; } .has-file #qr-filename-container:active #qr-extras-container, .has-file #qr-filename-container:focus #qr-extras-container { background: " + theme["Focused Input Background"] + "; } #ft, #mouseover, #post-preview, #qp .post, #threads > .thread, #xupdater, .box-outer, .reply.post { border-width: 1px; border-style: solid; border-color: " + theme["Reply Border"] + "; background: " + theme["Reply Background"] + "; } .exblock.reply, .reply.post.highlight, .reply.post:target { background: " + theme["Highlighted Reply Background"] + "; border: 1px solid " + theme["Highlighted Reply Border"] + "; } #header-bar, .pagelist { background: " + theme["Navigation Background"] + "; border-color: " + theme["Navigation Border"] + "; } #doc, #threads, .board > .thread { background: " + theme["Thread Wrapper Background"] + "; border: 1px solid " + theme["Thread Wrapper Border"] + "; } #boardNavDesktopFoot, #mascot_hide, #menu, #selectrice, #themeConf, #watcher, #watcher:hover, .announcements-slideout #globalMessage, .dialog, .post-form-style-float #qr, .post-form-decorations #qr, .submenu { background: " + theme["Dialog Background"] + "; border: 1px solid " + theme["Dialog Border"] + "; } #qp.dialog { border: none; } .watch-thread-link { background-image: url(\"data:image/svg+xml, \"); } .deleteform::before, .deleteform, #qr .warning { background: " + theme["Input Background"] + "; border-color: " + theme["Input Border"] + "; } .disabledwarning, .warning { color: " + theme["Warnings"] + "; } #charCount { color: " + (Style.lightTheme ? "rgba(0,0,0,0.7)" : "rgba(255,255,255,0.7)") + "; } .postNum a { color: " + theme["Post Numbers"] + "; } .subject { color: " + theme["Subjects"] + " !important; } .dateTime, .post-ago { color: " + theme["Timestamps"] + " !important; } #fs_status a, #updater #update-status:not(.new)::after, #showQR, .abbr, .boxbar, .boxcontent, .deleteform::before, .pages strong, .pln, .reply, .reply.highlight, .summary, body, button, span[style=\"left: 5px; position: absolute;\"] a, input, textarea { color: " + theme["Text"] + "; } #exlinks-options-content > table, #appchanx-settings fieldset, #selectrice { border-bottom: 1px solid " + theme["Reply Border"] + "; box-shadow: inset " + theme["Shadow Color"] + " 0 0 5px; } .quote + .spoiler:hover, .quote { color: " + theme["Greentext"] + "; } .forwardlink { border-bottom: 1px dashed " + theme["Backlinks"] + "; } .container::before { color: " + theme["Timestamps"] + "; } .quote-shadows #menu, .quote-shadows #post-preview, .quote-shadows #qp .opContainer, .quote-shadows #qp .replyContainer, .quote-shadows .submenu { box-shadow: 5px 5px 5px " + theme['Shadow Color'] + "; } .rice { background: " + theme["Checkbox Background"] + "; border: 1px solid " + theme["Checkbox Border"] + "; } .selectrice::before { border-left: 1px solid " + theme["Input Border"] + "; } .selectrice::after { border-top: .45em solid " + theme["Inputs"] + "; } .bd { background: " + theme["Buttons Background"] + "; border: 1px solid " + theme["Buttons Border"] + "; } .pages a, #header-bar a { color: " + theme["Navigation Links"] + "; } input[type=checkbox]:checked + .rice::after { border-color: " + theme["Inputs"] + "; } #addReply, #dump, .button, .entry, .replylink, a { color: " + theme["Links"] + "; } .backlink { color: " + theme["Backlinks"] + "; } .qiQuote, .quotelink { color: " + theme["Quotelinks"] + "; } #addReply:hover, #dump:hover, .entry:hover, .replylink:hover, .qiQuote:hover, .quotelink:hover, a .name:hover, a .postertrip:hover, a:hover { color: " + theme["Hovered Links"] + "; } #header-bar a:hover, #boardTitle a:hover { color: " + theme["Hovered Navigation Links"] + "; } #boardTitle { color: " + theme["Board Title"] + "; } .name, .post-author { color: " + theme["Names"] + " !important; } .post-tripcode, .postertrip, .trip { color: " + theme["Tripcodes"] + " !important; } a .postertrip, a .name { color: " + theme["Emails"] + "; } .post.reply.qphl, .post.op.qphl { border-color: " + theme["Backlinked Reply Outline"] + "; background: " + theme["Highlighted Reply Background"] + "; } .quote-shadows .inline .post { box-shadow: 5px 5px 5px " + theme['Shadow Color'] + "; } .placeholder, #qr input::placeholder, #qr textarea::placeholder { color: " + (Style.lightTheme ? "rgba(0,0,0,0.3)" : "rgba(255,255,255,0.2)") + " !important; } #qr input:placeholder, #qr textarea:placeholder, .placeholder { color: " + (Style.lightTheme ? "rgba(0,0,0,0.3)" : "rgba(255,255,255,0.2)") + " !important; } #appchanx-settings fieldset, .boxcontent dd, .selectrice ul { border-color: " + (Style.lightTheme ? "rgba(0,0,0,0.1)" : "rgba(255,255,255,0.1)") + "; } #appchanx-settings li, #selectrice li:not(:first-of-type) { border-top: 1px solid " + (Style.lightTheme ? "rgba(0,0,0,0.05)" : "rgba(255,255,255,0.025)") + "; } #navtopright .exlinksOptionsLink::after, #main-menu, .navLinks > a:first-of-type::after, #watcher::after, #globalMessage::after, #boardNavDesktopFoot::after, #img-controls, #catalog::after, #fappeTyme { " + (!Style.lightTheme ? "-webkit-filter: url(\"#icons-filter\");" : "") + " } .alternate-post-colors #threads > .thread:nth-of-type(2n+1), .alternate-post-colors .replyContainer:nth-of-type(2n+1) .post { background-image: linear-gradient(" + (replybg ? "rgba(" + (replybg.shiftRGB(-4, false)) + ",0.8), rgba(" + (replybg.shiftRGB(-4, false)) + ",0.8)" : Style.lightTheme ? "rgba(0,0,0,0.05), rgba(0,0,0,0.05)" : "rgba(255,255,255,0.02), rgba(255,255,255,0.02)") + "); } .color-reply-headings .boxbar, .color-reply-headings .postInfo { background: " + (replybg ? "rgba(" + (replybg.shiftRGB(-12, false)) + ",0.8)" : "rgba(0,0,0,0.1)") + "; border-bottom: 1px solid " + theme["Reply Border"] + " } .color-file-info .file { background: " + (replybg ? "rgba(" + (replybg.shiftRGB(-8, false)) + ",0.8)" : "rgba(0,0,0,0.1)") + "; border-bottom: 1px solid " + theme["Reply Border"] + " border-top: 1px solid " + theme["Reply Border"] + " } .color-reply.headings.color-file-info { border-top: none; } .op-background .op.post { background: " + theme["Reply Background"] + "; border: 1px solid " + theme["Reply Border"] + "; } .op-background .op.post:target .op-background .op.post.highlight { background: " + theme["Highlighted Reply Background"] + "; border: 1px solid " + theme["Highlighted Reply Border"] + "; } .fourchan-banner-at-sidebar-top.icon-orientation-vertical body::after { background: " + backgroundC + "; } .fourchan-banner-at-sidebar-top.icon-orientation-vertical.fourchan-ss-sidebar body::after, .fourchan-banner-at-sidebar-top.fourchan-ss-sidebar body::before { background: rgba(" + ((background = new Style.color(Style.colorToHex(theme["Reply Background"]))) ? background.shiftRGB(-18) : void 0) + ", 0.8); } .fourchan-ss-sidebar.sidebar-location-right body::before { border-left: 2px solid " + backgroundC + "; box-shadow: inset 1px 0 0 " + theme["Reply Border"] + ", -1px 0 0 " + theme["Reply Border"] + "; } .fourchan-ss-sidebar.sidebar-location-left body::before { border-right: 2px solid " + backgroundC + "; box-shadow: 1px 0 0 " + theme["Reply Border"] + ", inset -1px 0 0 " + theme["Reply Border"] + "; } .sage-highlighting-text.sage-highlight-position-before a.useremail[href*=\"sage\"]:last-of-type::before, .sage-highlighting-text.sage-highlight-position-before a.useremail[href*=\"Sage\"]:last-of-type::before, .sage-highlighting-text.sage-highlight-position-before a.useremail[href*=\"SAGE\"]:last-of-type::before, .sage-highlighting-text.sage-highlight-position-after a.useremail[href*=\"sage\"]:last-of-type::after, .sage-highlighting-text.sage-highlight-position-after a.useremail[href*=\"Sage\"]:last-of-type::after, .sage-highlighting-text.sage-highlight-position-after a.useremail[href*=\"SAGE\"]:last-of-type::after { content: \" (sage) \"; color: " + theme["Sage"] + "; } .quote-shadows #qr { box-shadow: 5px 5px 5px " + theme['Shadow Color'] + "; } " + (theme["Custom CSS"].replace(/\s+/g, ' ').trim())) + ("" + (Style.lightTheme ? " .prettyprint { background-color: #e7e7e7; border: 1px solid #dcdcdc; } .com { color: #dd0000; } .str, .atv { color: #7fa61b; } .pun { color: #61663a; } .tag { color: #117743; } .kwd { color: #5a6F9e; } .typ, .atn { color: #9474bd; } .lit { color: #368c72; } " : " .prettyprint { background-color: rgba(0,0,0,.1); border: 1px solid rgba(0,0,0,0.5); } .tag { color: #96562c; } .pun { color: #5b6f2a; } .com { color: #a34443; } .str, .atv { color: #8ba446; } .kwd { color: #987d3e; } .typ, .atn { color: #897399; } .lit { color: #558773; } "));
+ return (".hide_thread_button span > span, .hide_reply_button span > span { background-color: " + theme["Links"] + "; } #mascot_hide label { border-bottom: 1px solid " + theme["Reply Border"] + "; } #content .thumb { box-shadow: 0 0 5px " + theme["Reply Border"] + "; } .export-button, .mascotname, #mascot-options { background: " + theme["Dialog Background"] + "; border: 1px solid " + theme["Buttons Border"] + "; } .highlight-you .opContainer.quotesYou, .highlight-own .opContainer.yourPost, .opContainer.filter-highlight { box-shadow: inset 5px 0 " + theme["Backlinked Reply Outline"] + "; } .highlight-you .quotesYou > .reply, .highlight-own .yourPost > .reply, .filter-highlight > .reply { box-shadow: -5px 0 " + theme["Backlinked Reply Outline"] + "; } hr { border-bottom: 1px solid " + theme["Reply Border"] + "; } hr#unread-line { border-bottom: 1px solid " + theme["Reply Background"] + "; visibility: visible; } .threadContainer { border-color: " + theme["Reply Border"] + " !important; } html { background: " + (backgroundC || '') + "; background-image: " + (theme["Background Image"] || '') + "; background-repeat: " + (theme["Background Repeat"] || '') + "; background-attachment: " + (theme["Background Attachment"] || '') + "; background-position: " + (theme["Background Position"] || '') + "; } .panel, .section-container, #exlinks-options-content, #themecontent { background: " + backgroundC + "; border: 1px solid " + theme["Reply Border"] + "; } .sections-list > a.tab-selected { background: " + backgroundC + "; border-color: " + theme["Reply Border"] + "; } .captcha-img img { -webkit-filter: url(\"#captcha-filter\"); } #boardTitle { text-shadow: 1px 1px " + backgroundC + ", -1px -1px " + backgroundC + ", 1px -1px " + backgroundC + ", -1px 1px " + backgroundC + "; } .sidebar-glow #boardTitle { text-shadow: 1px 1px 1px " + backgroundC + ", -1px -1px 1px " + backgroundC + ", 1px -1px 1px " + backgroundC + ", -1px 1px 1px " + backgroundC + ", 0 2px 4px rgba(0,0,0,.6), 0 0 10px rgba(0,0,0,.6); } #exlinks-options, #appchanx-settings, #qrtab, input[type=\"submit\"], input[value=\"Report\"], span[style=\"left: 5px; position: absolute;\"] a { background: " + theme["Buttons Background"] + "; border: 1px solid " + theme["Buttons Border"] + "; } .enabled .mascotcontainer { background: " + theme["Buttons Background"] + "; border-color: " + theme["Buttons Border"] + "; } #dump, #qr-filename-container, #appchanx-settings input, .captcha-img, .dump #dump, .qr-preview, .selectrice, button, input, textarea { background: " + theme["Input Background"] + "; border: 1px solid " + theme["Input Border"] + "; } .has-file #qr-extras-container { background: " + theme["Input Background"] + "; } #dump:hover, #qr-filename-container:hover, .selectrice:hover, #selectrice li:hover, #selectrice li:nth-of-type(2n+1):hover, input:hover, textarea:hover { background: " + theme["Hovered Input Background"] + "; border-color: " + theme["Hovered Input Border"] + "; } .has-file #qr-filename-container:hover #qr-extras-container { background: " + theme["Hovered Input Background"] + "; } #dump:active, #dump:focus, #selectrice li:focus, .selectrice:focus, #qr-filename-container:active, #qr-filename-container:focus, input:focus, textarea:focus, textarea.field:focus { background: " + theme["Focused Input Background"] + "; border-color: " + theme["Focused Input Border"] + "; color: " + theme["Inputs"] + "; } .has-file #qr-filename-container:active #qr-extras-container, .has-file #qr-filename-container:focus #qr-extras-container { background: " + theme["Focused Input Background"] + "; } #ft, #mouseover, #post-preview, #qp .post, #threads > .thread, #xupdater, .box-outer, .reply.post { border-width: 1px; border-style: solid; border-color: " + theme["Reply Border"] + "; background: " + theme["Reply Background"] + "; } .exblock.reply, .reply.post.highlight, .reply.post:target { background: " + theme["Highlighted Reply Background"] + "; border: 1px solid " + theme["Highlighted Reply Border"] + "; } #header-bar, .pagelist { background: " + theme["Navigation Background"] + "; border-color: " + theme["Navigation Border"] + "; } #doc, #threads, .board > .thread { background: " + theme["Thread Wrapper Background"] + "; border: 1px solid " + theme["Thread Wrapper Border"] + "; } #boardNavDesktopFoot, #mascot_hide, #menu, #selectrice, #themeConf, #thread-watcher, #thread-watcher:hover, .announcements-slideout #globalMessage, .dialog, .post-form-style-float #qr, .post-form-decorations #qr, .submenu { background: " + theme["Dialog Background"] + "; border: 1px solid " + theme["Dialog Border"] + "; } #qp.dialog { border: none; } .watch-thread-link { background-image: url(\"data:image/svg+xml, \"); } .deleteform::before, .deleteform, #qr .warning { background: " + theme["Input Background"] + "; border-color: " + theme["Input Border"] + "; } .disabledwarning, .warning { color: " + theme["Warnings"] + "; } #charCount { color: " + (Style.lightTheme ? "rgba(0,0,0,0.7)" : "rgba(255,255,255,0.7)") + "; } .postNum a { color: " + theme["Post Numbers"] + "; } .subject { color: " + theme["Subjects"] + " !important; } .dateTime, .post-ago { color: " + theme["Timestamps"] + " !important; } #fs_status a, #updater #update-status:not(.new)::after, #showQR, .abbr, .boxbar, .boxcontent, .deleteform::before, .pages strong, .pln, .reply, .reply.highlight, .summary, body, button, span[style=\"left: 5px; position: absolute;\"] a, input, textarea { color: " + theme["Text"] + "; } #exlinks-options-content > table, #appchanx-settings fieldset, #selectrice { border-bottom: 1px solid " + theme["Reply Border"] + "; box-shadow: inset " + theme["Shadow Color"] + " 0 0 5px; } .quote + .spoiler:hover, .quote { color: " + theme["Greentext"] + "; } .forwardlink { border-bottom: 1px dashed " + theme["Backlinks"] + "; } .container::before { color: " + theme["Timestamps"] + "; } .quote-shadows #menu, .quote-shadows #post-preview, .quote-shadows #qp .opContainer, .quote-shadows #qp .replyContainer, .quote-shadows .submenu { box-shadow: 5px 5px 5px " + theme['Shadow Color'] + "; } .rice { background: " + theme["Checkbox Background"] + "; border: 1px solid " + theme["Checkbox Border"] + "; } .selectrice::before { border-left: 1px solid " + theme["Input Border"] + "; } .selectrice::after { border-top: .45em solid " + theme["Inputs"] + "; } .bd { background: " + theme["Buttons Background"] + "; border: 1px solid " + theme["Buttons Border"] + "; } .pages a, #header-bar a { color: " + theme["Navigation Links"] + "; } input[type=checkbox]:checked + .rice::after { border-color: " + theme["Inputs"] + "; } #addReply, #dump, .button, .entry, .replylink, a { color: " + theme["Links"] + "; } .backlink { color: " + theme["Backlinks"] + "; } .qiQuote, .quotelink { color: " + theme["Quotelinks"] + "; } #addReply:hover, #dump:hover, .entry:hover, .replylink:hover, .qiQuote:hover, .quotelink:hover, a .name:hover, a .postertrip:hover, a:hover { color: " + theme["Hovered Links"] + "; } #header-bar a:hover, #boardTitle a:hover { color: " + theme["Hovered Navigation Links"] + "; } #boardTitle { color: " + theme["Board Title"] + "; } .name, .post-author { color: " + theme["Names"] + " !important; } .post-tripcode, .postertrip, .trip { color: " + theme["Tripcodes"] + " !important; } a .postertrip, a .name { color: " + theme["Emails"] + "; } .post.reply.qphl, .post.op.qphl { border-color: " + theme["Backlinked Reply Outline"] + "; background: " + theme["Highlighted Reply Background"] + "; } .quote-shadows .inline .post { box-shadow: 5px 5px 5px " + theme['Shadow Color'] + "; } .placeholder, #qr input::placeholder, #qr textarea::placeholder { color: " + (Style.lightTheme ? "rgba(0,0,0,0.3)" : "rgba(255,255,255,0.2)") + " !important; } #qr input:placeholder, #qr textarea:placeholder, .placeholder { color: " + (Style.lightTheme ? "rgba(0,0,0,0.3)" : "rgba(255,255,255,0.2)") + " !important; } #appchanx-settings fieldset, .boxcontent dd, .selectrice ul { border-color: " + (Style.lightTheme ? "rgba(0,0,0,0.1)" : "rgba(255,255,255,0.1)") + "; } #appchanx-settings li, #selectrice li:not(:first-of-type) { border-top: 1px solid " + (Style.lightTheme ? "rgba(0,0,0,0.05)" : "rgba(255,255,255,0.025)") + "; } #navtopright .exlinksOptionsLink::after, #main-menu, .navLinks > a:first-of-type::after, #thread-watcher::after, #globalMessage::after, #boardNavDesktopFoot::after, #img-controls, #catalog::after, #fappeTyme { " + (!Style.lightTheme ? "-webkit-filter: url(\"#icons-filter\");" : "") + " } .alternate-post-colors #threads > .thread:nth-of-type(2n+1), .alternate-post-colors .replyContainer:nth-of-type(2n+1) .post { background-image: linear-gradient(" + (replybg ? "rgba(" + (replybg.shiftRGB(-4, false)) + ",0.8), rgba(" + (replybg.shiftRGB(-4, false)) + ",0.8)" : Style.lightTheme ? "rgba(0,0,0,0.05), rgba(0,0,0,0.05)" : "rgba(255,255,255,0.02), rgba(255,255,255,0.02)") + "); } .color-reply-headings .boxbar, .color-reply-headings .postInfo { background: " + (replybg ? "rgba(" + (replybg.shiftRGB(-12, false)) + ",0.8)" : "rgba(0,0,0,0.1)") + "; border-bottom: 1px solid " + theme["Reply Border"] + " } .color-file-info .file { background: " + (replybg ? "rgba(" + (replybg.shiftRGB(-8, false)) + ",0.8)" : "rgba(0,0,0,0.1)") + "; border-bottom: 1px solid " + theme["Reply Border"] + " border-top: 1px solid " + theme["Reply Border"] + " } .color-reply.headings.color-file-info { border-top: none; } .op-background .op.post { background: " + theme["Reply Background"] + "; border: 1px solid " + theme["Reply Border"] + "; } .op-background .op.post:target .op-background .op.post.highlight { background: " + theme["Highlighted Reply Background"] + "; border: 1px solid " + theme["Highlighted Reply Border"] + "; } .fourchan-banner-at-sidebar-top.icon-orientation-vertical body::after { background: " + backgroundC + "; } .fourchan-banner-at-sidebar-top.icon-orientation-vertical.fourchan-ss-sidebar body::after, .fourchan-banner-at-sidebar-top.fourchan-ss-sidebar body::before { background: rgba(" + ((background = new Style.color(Style.colorToHex(theme["Reply Background"]))) ? background.shiftRGB(-18) : void 0) + ", 0.8); } .fourchan-ss-sidebar.sidebar-location-right body::before { border-left: 2px solid " + backgroundC + "; box-shadow: inset 1px 0 0 " + theme["Reply Border"] + ", -1px 0 0 " + theme["Reply Border"] + "; } .fourchan-ss-sidebar.sidebar-location-left body::before { border-right: 2px solid " + backgroundC + "; box-shadow: 1px 0 0 " + theme["Reply Border"] + ", inset -1px 0 0 " + theme["Reply Border"] + "; } .sage-highlighting-text.sage-highlight-position-before a.useremail[href*=\"sage\"]:last-of-type::before, .sage-highlighting-text.sage-highlight-position-before a.useremail[href*=\"Sage\"]:last-of-type::before, .sage-highlighting-text.sage-highlight-position-before a.useremail[href*=\"SAGE\"]:last-of-type::before, .sage-highlighting-text.sage-highlight-position-after a.useremail[href*=\"sage\"]:last-of-type::after, .sage-highlighting-text.sage-highlight-position-after a.useremail[href*=\"Sage\"]:last-of-type::after, .sage-highlighting-text.sage-highlight-position-after a.useremail[href*=\"SAGE\"]:last-of-type::after { content: \" (sage) \"; color: " + theme["Sage"] + "; } .quote-shadows #qr { box-shadow: 5px 5px 5px " + theme['Shadow Color'] + "; } " + (theme["Custom CSS"].replace(/\s+/g, ' ').trim())) + ("" + (Style.lightTheme ? " .prettyprint { background-color: #e7e7e7; border: 1px solid #dcdcdc; } .com { color: #dd0000; } .str, .atv { color: #7fa61b; } .pun { color: #61663a; } .tag { color: #117743; } .kwd { color: #5a6F9e; } .typ, .atn { color: #9474bd; } .lit { color: #368c72; } " : " .prettyprint { background-color: rgba(0,0,0,.1); border: 1px solid rgba(0,0,0,0.5); } .tag { color: #96562c; } .pun { color: #5b6f2a; } .com { color: #a34443; } .str, .atv { color: #8ba446; } .kwd { color: #987d3e; } .typ, .atn { color: #897399; } .lit { color: #558773; } "));
},
iconPositions: function() {
var align, aligner, css, i, iconOffset, navlinks, notCatalog, notEither, position, psa, sidebar;
- css = "#navtopright .exlinksOptionsLink::after, #main-menu, body > div.navLinks > a:first-of-type::after, .slideout-watcher #watcher::after, .announcements-slideout #globalMessage::after, #boardNavDesktopFoot::after, #img-controls, #catalog::after, #fappeTyme { z-index: 18; position: fixed; display: block; width: 15px; height: 15px; content: \"\"; opacity: 0.5; } body::after { content: \"\"; display: block; position: fixed; z-index: 5; width: 18px; height: 18px; } .invisible-icons #navtopright .exlinksOptionsLink::after, .invisible-icons #main-menu, .invisible-icons body > div.navLinks > a:first-of-type::after, .invisible-icons.slideout-watcher #watcher::after, .invisible-icons.announcements-slideout #globalMessage::after, .invisible-icons #boardNavDesktopFoot::after, .invisible-icons #img-controls, .invisible-icons #catalog::after, .invisible-icons #fappeTyme { opacity: 0; } #navtopright .exlinksOptionsLink, body > div.navLinks > a:first-of-type, " + (Conf['Slideout Watcher'] ? '#watcher,' : '') + " " + (Conf['Announcements'] === 'slideout' ? '#globalMessage,' : '') + " #boardNavDesktopFoot, #catalog { z-index: 16; } #navtopright .exlinksOptionsLink:hover, body > div.navLinks > a:first-of-type:hover, .slideout-watcher #watcher:hover, .announcements-slideout #globalMessage:hover, #boardNavDesktopFoot:hover, #img-controls, #catalog:hover { z-index: 17; } #main-menu { visibility: visible; background-position: 0 0; cursor: pointer; } body > div.navLinks > a:first-of-type::after { cursor: pointer; background-position: 0 -15px; } .slideout-watcher #watcher::after { background-position: 0 -30px; } .announcements-slideout #globalMessage::after { background-position: 0 -45px; } #boardNavDesktopFoot::after { background-position: 0 -60px; } #img-controls { background-position: 0 -90px; } #navtopright .exlinksOptionsLink::after { background-position: 0 -105px; } #catalog::after { visibility: visible; background-position: 0 -120px; } #fappeTyme { background-position: 0 -135px; } #boardNavDesktopFoot:hover::after, .announcements-slideout #globalMessage:hover::after, #img-controls:hover, #navlinks a:hover, #appchanOptions:hover, #main-menu:hover, #navtopright .exlinksOptionsLink:hover::after, #qr #qrtab, .slideout-watcher #watcher:hover::after, .thumbnail#selected, div.navLinks > a:first-of-type:hover::after, #catalog:hover::after, #fappeTyme:hover { opacity: 1 !important; }";
+ css = "#navtopright .exlinksOptionsLink::after, #main-menu, body > div.navLinks > a:first-of-type::after, .slideout-watcher #thread-watcher::after, .announcements-slideout #globalMessage::after, #boardNavDesktopFoot::after, #img-controls, #catalog::after, #fappeTyme { z-index: 18; position: fixed; display: block; width: 15px; height: 15px; content: \"\"; opacity: 0.5; } body::after { content: \"\"; display: block; position: fixed; z-index: 5; width: 18px; height: 18px; } .invisible-icons #navtopright .exlinksOptionsLink::after, .invisible-icons #main-menu, .invisible-icons body > div.navLinks > a:first-of-type::after, .invisible-icons.slideout-watcher #thread-watcher::after, .invisible-icons.announcements-slideout #globalMessage::after, .invisible-icons #boardNavDesktopFoot::after, .invisible-icons #img-controls, .invisible-icons #catalog::after, .invisible-icons #fappeTyme { opacity: 0; } #navtopright .exlinksOptionsLink, body > div.navLinks > a:first-of-type, " + (Conf['Slideout Watcher'] ? '#thread-watcher,' : '') + " " + (Conf['Announcements'] === 'slideout' ? '#globalMessage,' : '') + " #boardNavDesktopFoot, #catalog { z-index: 16; } #navtopright .exlinksOptionsLink:hover, body > div.navLinks > a:first-of-type:hover, .slideout-watcher #thread-watcher:hover, .announcements-slideout #globalMessage:hover, #boardNavDesktopFoot:hover, #img-controls, #catalog:hover { z-index: 17; } #main-menu { visibility: visible; background-position: 0 0; cursor: pointer; } body > div.navLinks > a:first-of-type::after { cursor: pointer; background-position: 0 -15px; } .slideout-watcher #thread-watcher::after { background-position: 0 -30px; } .announcements-slideout #globalMessage::after { background-position: 0 -45px; } #boardNavDesktopFoot::after { background-position: 0 -60px; } #img-controls { background-position: 0 -90px; } #navtopright .exlinksOptionsLink::after { background-position: 0 -105px; } #catalog::after { visibility: visible; background-position: 0 -120px; } #fappeTyme { background-position: 0 -135px; } #boardNavDesktopFoot:hover::after, .announcements-slideout #globalMessage:hover::after, #img-controls:hover, #navlinks a:hover, #appchanOptions:hover, #main-menu:hover, #navtopright .exlinksOptionsLink:hover::after, #qr #qrtab, .slideout-watcher #thread-watcher:hover::after, .thumbnail#selected, div.navLinks > a:first-of-type:hover::after, #catalog:hover::after, #fappeTyme:hover { opacity: 1 !important; }";
i = 0;
align = Conf['Sidebar Location'];
sidebar = {
@@ -11844,14 +12200,14 @@
if (iconOffset < 0) {
iconOffset = 0;
}
- css += "body::after { " + align + ": " + (position[i] - 1) + "px; } /* Appchan X Options */ #main-menu { " + align + ": " + position[i++] + "px; } /* Slideout Navigation */ #boardNavDesktopFoot::after { " + align + ": " + position[i++] + "px; } /* Global Message */ .announcements-slideout #globalMessage::after { " + align + ": " + position[i++] + "px; } /* Watcher */ .slideout-watcher #watcher::after { " + align + ": " + position[i++] + "px; } /* ExLinks */ #navtopright .exlinksOptionsLink::after { " + align + ": " + position[i++] + "px; } /* Expand Images */ #img-controls { " + align + ": " + position[i++] + "px; } /* 4chan Catalog */ #catalog::after { " + align + ": " + position[i++] + "px; } /* Back */ div.navLinks > a:first-of-type::after { " + align + ": " + position[i++] + "px; } /* Fappe Tyme */ #fappeTyme { " + align + ": " + position[i++] + "px; } /* Thread Navigation Links */ #navlinks a { margin: 2px; top: 1px; } #navlinks a:last-of-type { " + align + ": " + position[i++] + "px; } #navlinks a:first-of-type { " + align + ": " + position[i++] + "px; } body::after { width: " + (position[i] - 2) + "px; top: 0; } #boardNavDesktopFoot::after, #navtopright .exlinksOptionsLink::after, #main-menu, .slideout-watcher #watcher::after, .announcements-slideout #globalMessage::after, #img-controls, #fappeTyme, div.navLinks > a:first-of-type::after, #catalog::after { top: 1px !important; } .slideout-watcher #globalMessage, .slideout-watcher #watcher, #boardNavDesktopFoot { top: 16px !important; } .fourchan-ss-navigation.fixed.top #header-bar, .fourchan-ss-navigation.pagination-top .pagelist, .fourchan-ss-navigation.pagination-sticky-top .pagelist { padding-" + align + ": " + iconOffset + "px; } .fixed.top:not(.fourchan-ss-navigation) #header-bar, .pagination-top:not(.fourchan-ss-navigation) .pagelist, .pagination-sticky-top:not(.fourchan-ss-navigation) .pagelist { margin-" + align + ": " + iconOffset + "px; }";
+ css += "body::after { " + align + ": " + (position[i] - 1) + "px; } /* Appchan X Options */ #main-menu { " + align + ": " + position[i++] + "px; } /* Slideout Navigation */ #boardNavDesktopFoot::after { " + align + ": " + position[i++] + "px; } /* Global Message */ .announcements-slideout #globalMessage::after { " + align + ": " + position[i++] + "px; } /* Watcher */ .slideout-watcher #thread-watcher::after { " + align + ": " + position[i++] + "px; } /* ExLinks */ #navtopright .exlinksOptionsLink::after { " + align + ": " + position[i++] + "px; } /* Expand Images */ #img-controls { " + align + ": " + position[i++] + "px; } /* 4chan Catalog */ #catalog::after { " + align + ": " + position[i++] + "px; } /* Back */ div.navLinks > a:first-of-type::after { " + align + ": " + position[i++] + "px; } /* Fappe Tyme */ #fappeTyme { " + align + ": " + position[i++] + "px; } /* Thread Navigation Links */ #navlinks a { margin: 2px; top: 1px; } #navlinks a:last-of-type { " + align + ": " + position[i++] + "px; } #navlinks a:first-of-type { " + align + ": " + position[i++] + "px; } body::after { width: " + (position[i] - 2) + "px; top: 0; } #boardNavDesktopFoot::after, #navtopright .exlinksOptionsLink::after, #main-menu, .slideout-watcher #thread-watcher::after, .announcements-slideout #globalMessage::after, #img-controls, #fappeTyme, div.navLinks > a:first-of-type::after, #catalog::after { top: 1px !important; } .slideout-watcher #globalMessage, .slideout-watcher #thread-watcher, #boardNavDesktopFoot { top: 16px !important; } .fourchan-ss-navigation.fixed.top #header-bar, .fourchan-ss-navigation.pagination-top .pagelist, .fourchan-ss-navigation.pagination-sticky-top .pagelist { padding-" + align + ": " + iconOffset + "px; } .fixed.top:not(.fourchan-ss-navigation) #header-bar, .pagination-top:not(.fourchan-ss-navigation) .pagelist, .pagination-sticky-top:not(.fourchan-ss-navigation) .pagelist { margin-" + align + ": " + iconOffset + "px; }";
} else {
position = aligner(2, [notEither && Conf['Image Expansion'], true, Conf['Slideout Navigation'] !== 'hide', Conf['Announcements'] === 'slideout' && (psa = $('#globalMessage', d.body)) && !psa.hidden, Conf['Thread Watcher'] && Conf['Slideout Watcher'], $('#navtopright .exlinksOptionsLink', d.body), notEither, g.VIEW === 'thread', notEither && Conf['Fappe Tyme'], navlinks = ((g.VIEW !== 'thread' && Conf['Index Navigation']) || (g.VIEW === 'thread' && Conf['Reply Navigation'])) && notCatalog, navlinks]);
iconOffset = (20 + (g.VIEW === 'thread' && Conf['Updater Position'] === 'top' ? 100 : 0)) - (Conf['4chan SS Navigation'] ? 0 : sidebar + parseInt(Conf[align.charAt(0).toUpperCase() + align.slice(1) + " Thread Padding"], 10));
if (iconOffset < 0) {
iconOffset = 0;
}
- css += "/* Expand Images */ body::after { top: " + (position[i] - 1) + "px; } #img-controls { top: " + position[i++] + "px; } /* Appchan X Options */ #main-menu { top: " + position[i++] + "px; } /* Slideout Navigation */ #boardNavDesktopFoot, #boardNavDesktopFoot::after { top: " + position[i++] + "px; } /* Global Message */ .announcements-slideout #globalMessage, .announcements-slideout #globalMessage::after { top: " + position[i++] + "px; } /* Watcher */ .slideout-watcher #watcher, .slideout-watcher #watcher::after { top: " + position[i++] + "px !important; } /* ExLinks */ #navtopright .exlinksOptionsLink::after { top: " + position[i++] + "px; } /* 4chan Catalog */ #catalog::after { top: " + position[i++] + "px; } /* Back */ div.navLinks > a:first-of-type::after { top: " + position[i++] + "px; } /* Fappe Tyme */ #fappeTyme { top: " + position[i++] + "px; } /* Thread Navigation Links */ #navlinks a:first-of-type { top: " + position[i++] + "px !important; } #navlinks a:last-of-type { top: " + position[i++] + "px !important; } body::after { height: " + (position[i] - 2) + "px; " + align + ": 2px; } #navlinks a, #navtopright .exlinksOptionsLink::after, #main-menu, #boardNavDesktopFoot::after, #globalMessage::after, #img-controls, #fappeTyme, .slideout-watcher #watcher::after, #catalog::after, div.navLinks > a:first-of-type::after { " + align + ": 3px !important; } #boardNavDesktopFoot, #globalMessage, .slideout-watcher #watcher.dialog { box-sizing: border-box; width: 232px !important; " + align + ": 18px !important; } .sidebar-large #boardNavDesktopFoot, .sidebar-large #globalMessage, .sidebar-large #watcher { width: 288px !important; } .fourchan-ss-navigation.fixed.top #header-bar, .fourchan-ss-navigation.pagination-top .pagelist, .fourchan-ss-navigation.pagination-sticky-top .pagelist { padding-" + align + ": " + iconOffset + "px; } .fixed.top:not(.fourchan-ss-navigation) #header-bar, .pagination-top:not(.fourchan-ss-navigation) .pagelist, .pagination-sticky-top:not(.fourchan-ss-navigation) .pagelist { margin-" + align + ": " + iconOffset + "px; }";
+ css += "/* Expand Images */ body::after { top: " + (position[i] - 1) + "px; } #img-controls { top: " + position[i++] + "px; } /* Appchan X Options */ #main-menu { top: " + position[i++] + "px; } /* Slideout Navigation */ #boardNavDesktopFoot, #boardNavDesktopFoot::after { top: " + position[i++] + "px; } /* Global Message */ .announcements-slideout #globalMessage, .announcements-slideout #globalMessage::after { top: " + position[i++] + "px; } /* Watcher */ .slideout-watcher #thread-watcher, .slideout-watcher #thread-watcher::after { top: " + position[i++] + "px !important; } /* ExLinks */ #navtopright .exlinksOptionsLink::after { top: " + position[i++] + "px; } /* 4chan Catalog */ #catalog::after { top: " + position[i++] + "px; } /* Back */ div.navLinks > a:first-of-type::after { top: " + position[i++] + "px; } /* Fappe Tyme */ #fappeTyme { top: " + position[i++] + "px; } /* Thread Navigation Links */ #navlinks a:first-of-type { top: " + position[i++] + "px !important; } #navlinks a:last-of-type { top: " + position[i++] + "px !important; } body::after { height: " + (position[i] - 2) + "px; " + align + ": 2px; } #navlinks a, #navtopright .exlinksOptionsLink::after, #main-menu, #boardNavDesktopFoot::after, #globalMessage::after, #img-controls, #fappeTyme, .slideout-watcher #thread-watcher::after, #catalog::after, div.navLinks > a:first-of-type::after { " + align + ": 3px !important; } #boardNavDesktopFoot, #globalMessage, .slideout-watcher #thread-watcher.dialog { box-sizing: border-box; width: 232px !important; " + align + ": 18px !important; } .sidebar-large #boardNavDesktopFoot, .sidebar-large #globalMessage, .sidebar-large #thread-watcher { width: 288px !important; } .fourchan-ss-navigation.fixed.top #header-bar, .fourchan-ss-navigation.pagination-top .pagelist, .fourchan-ss-navigation.pagination-sticky-top .pagelist { padding-" + align + ": " + iconOffset + "px; } .fixed.top:not(.fourchan-ss-navigation) #header-bar, .pagination-top:not(.fourchan-ss-navigation) .pagelist, .pagination-sticky-top:not(.fourchan-ss-navigation) .pagelist { margin-" + align + ": " + iconOffset + "px; }";
}
return Style.icons.textContent = css;
},
@@ -12471,11 +12827,8 @@
},
callbacks: [],
cb: function(e) {
- var post;
-
e.preventDefault();
- post = Get.postFromNode(this);
- return ExpandComment.expand(post);
+ return ExpandComment.expand(Get.postFromNode(this));
},
expand: function(post) {
var a;
@@ -12538,6 +12891,12 @@
}
quote.href = "/" + post.board + "/res/" + href;
}
+ Build.capcodeReplies({
+ boardID: post.board.ID,
+ threadID: post.thread.ID,
+ bq: clone,
+ capcodeReplies: postObj.capcode_replies
+ });
post.nodes.shortComment = comment;
$.replace(comment, clone);
post.nodes.comment = post.nodes.longComment = clone;
@@ -13584,7 +13943,8 @@
$.on(d, '4chanXInitFinished', Settings.open);
}
return $.set({
- lastchecked: Date.now(),
+ archives: Conf['archives'],
+ lastarchivecheck: now,
previousversion: g.VERSION
});
});
@@ -13793,7 +14153,6 @@
version: g.VERSION,
date: now
};
- Conf['WatchedThreads'] = {};
for (_i = 0, _len = DataBoards.length; _i < _len; _i++) {
db = DataBoards[_i];
Conf[db] = {
@@ -13849,9 +14208,12 @@
return reader.readAsText(file);
},
loadSettings: function(data) {
- var version;
-
- version = data.version.split('.');
+ if (data.Conf['WatchedThreads']) {
+ data.Conf['watchedThreads'] = {
+ boards: ThreadWatcher.convert(data.Conf['WatchedThreads'])
+ };
+ delete data.Conf['WatchedThreads'];
+ }
return $.set(data.Conf);
},
convertSettings: function(data, map) {
@@ -14891,6 +15253,7 @@
'Thread Updater': ThreadUpdater,
'Thread Stats': ThreadStats,
'Thread Watcher': ThreadWatcher,
+ 'Thread Watcher (Menu)': ThreadWatcher.menu,
'Index Navigation': Nav,
'Keybinds': Keybinds,
'Show Dice Roll': Dice
diff --git a/css/style.css b/css/style.css
new file mode 100644
index 000000000..32819ef69
--- /dev/null
+++ b/css/style.css
@@ -0,0 +1,929 @@
+/* General */
+.dialog {
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .15);
+ border: 1px solid;
+ display: block;
+ padding: 0;
+}
+.field {
+ background-color: #FFF;
+ border: 1px solid #CCC;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ color: #333;
+ font-family: inherit;
+ font-size: 13px;
+ margin: 0;
+ padding: 2px 4px 3px;
+ outline: none;
+ transition: color .25s, border-color .25s, -webkit-flex .25s;
+ transition: color .25s, border-color .25s, flex .25s;
+}
+.field::-moz-placeholder,
+.field:hover::-moz-placeholder {
+ color: #AAA !important;
+}
+.field:hover {
+ border-color: #999;
+}
+.field:hover, .field:focus {
+ color: #000;
+}
+.field[disabled] {
+ background-color: #F2F2F2;
+ color: #888;
+}
+.move {
+ cursor: move;
+}
+label, .watcher-toggler {
+ cursor: pointer;
+}
+a[href="javascript:;"] {
+ text-decoration: none;
+}
+.warning {
+ color: red;
+}
+
+/* 4chan style fixes */
+.opContainer, .op {
+ display: block !important;
+}
+.post {
+ overflow: visible !important;
+}
+[hidden] {
+ display: none !important;
+}
+
+/* fixed, z-index */
+#overlay,
+#qp, #ihover,
+#updater, #thread-stats,
+#navlinks, #header,
+#qr {
+ position: fixed;
+}
+#overlay {
+ z-index: 999;
+}
+#notifications {
+ z-index: 70;
+}
+#qp, #ihover {
+ z-index: 60;
+}
+#menu {
+ z-index: 50;
+}
+#navlinks, #updater, #thread-stats {
+ z-index: 40;
+}
+#qr {
+ z-index: 30;
+}
+#thread-watcher:hover {
+ z-index: 20;
+}
+#header {
+ z-index: 10;
+}
+#thread-watcher {
+ z-index: 5;
+}
+
+/* Header */
+:root.top-header body {
+ margin-top: 2em;
+}
+:root.bottom-header body {
+ margin-bottom: 2em;
+}
+:root.fourchan-x #navtopright,
+:root.fourchan-x #navbotright,
+:root.fourchan-x:not(.show-original-top-board-list) #boardNavDesktop,
+:root.fourchan-x:not(.show-original-bot-board-list) #boardNavDesktopFoot {
+ display: none !important;
+}
+#header {
+ right: 0;
+ left: 0;
+}
+#header.top {
+ top: 0;
+}
+#header.bottom {
+ bottom: 0;
+}
+#header-bar {
+ border-width: 0;
+ display: -webkit-flex;
+ display: flex;
+ padding: 3px 4px 4px;
+ position: relative;
+ transition: all .1s .05s ease-in-out;
+}
+#header.top #header-bar {
+ border-bottom-width: 1px;
+}
+#header.bottom #header-bar {
+ box-shadow: 0 -1px 2px rgba(0, 0, 0, .15);
+ border-top-width: 1px;
+}
+#header.bottom .menu-button i {
+ border-top: none;
+ border-bottom: 6px solid;
+}
+#board-list {
+ -webkit-flex: 1;
+ flex: 1;
+ text-align: center;
+}
+#header-bar.autohide:not(:hover) {
+ box-shadow: none;
+ transition: all .8s .6s cubic-bezier(.55, .055, .675, .19);
+}
+#header.top #header-bar.autohide:not(:hover) {
+ margin-bottom: -1em;
+ -webkit-transform: translateY(-100%);
+ transform: translateY(-100%);
+}
+#header.bottom #header-bar.autohide:not(:hover) {
+ -webkit-transform: translateY(100%);
+ transform: translateY(100%);
+}
+#toggle-header-bar {
+ left: 0;
+ right: 0;
+ height: 10px;
+ position: absolute;
+}
+#header.top #toggle-header-bar {
+ cursor: n-resize;
+ bottom: -8px;
+}
+#header.bottom #toggle-header-bar {
+ cursor: s-resize;
+ top: -8px;
+}
+#header-bar.autohide:not(:hover) #toggle-header-bar,
+#toggle-header-bar:hover {
+ height: 18px;
+}
+#header.top #header-bar.autohide:not(:hover) #toggle-header-bar,
+#header.top #toggle-header-bar:hover {
+ bottom: -16px;
+}
+#header.bottom #header-bar.autohide:not(:hover) #toggle-header-bar,
+#header.bottom #toggle-header-bar:hover {
+ top: -16px;
+}
+#header.top #header-bar.autohide #toggle-header-bar {
+ cursor: s-resize;
+}
+#header.bottom #header-bar.autohide #toggle-header-bar {
+ cursor: n-resize;
+}
+#header-bar a:not(.entry) {
+ text-decoration: none;
+ padding: 1px;
+}
+#shortcuts:empty {
+ display: none;
+}
+.shortcut:not(:last-child)::after {
+ content: " / ";
+}
+.brackets-wrap::before {
+ content: "\\00a0[";
+}
+.brackets-wrap::after {
+ content: "]\\00a0";
+}
+.expand-all-shortcut {
+ opacity: .35;
+}
+
+/* Notifications */
+#notifications {
+ height: 0;
+ text-align: center;
+}
+#header.bottom #notifications {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+}
+.notification {
+ color: #FFF;
+ font-weight: 700;
+ text-shadow: 0 1px 2px rgba(0, 0, 0, .5);
+ box-shadow: 0 1px 2px rgba(0, 0, 0, .15);
+ border-radius: 2px;
+ margin: 1px auto;
+ width: 500px;
+ max-width: 100%;
+ position: relative;
+ transition: all .25s ease-in-out;
+}
+.notification.error {
+ background-color: hsla(0, 100%, 38%, .9);
+}
+.notification.warning {
+ background-color: hsla(36, 100%, 38%, .9);
+}
+.notification.info {
+ background-color: hsla(200, 100%, 38%, .9);
+}
+.notification.success {
+ background-color: hsla(104, 100%, 38%, .9);
+}
+.notification a {
+ color: white;
+}
+.notification > .close {
+ padding: 6px;
+ top: 0;
+ right: 0;
+ position: absolute;
+}
+.message {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ padding: 6px 20px;
+ max-height: 200px;
+ width: 100%;
+ overflow: auto;
+}
+
+/* Settings */
+:root.fourchan-x body {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+#overlay {
+ background-color: rgba(0, 0, 0, .5);
+ display: -webkit-flex;
+ display: flex;
+ position: fixed;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+}
+#fourchanx-settings {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ box-shadow: 0 0 15px rgba(0, 0, 0, .15);
+ height: 600px;
+ max-height: 100%;
+ width: 900px;
+ max-width: 100%;
+ margin: auto;
+ padding: 3px;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-flex-direction: column;
+ flex-direction: column;
+}
+#fourchanx-settings > nav {
+ display: -webkit-flex;
+ display: flex;
+ padding: 2px 2px 0;
+}
+#fourchanx-settings > nav a {
+ text-decoration: underline;
+}
+#fourchanx-settings > nav a.close {
+ text-decoration: none;
+ padding: 2px;
+}
+.sections-list {
+ -webkit-flex: 1;
+ flex: 1;
+}
+.tab-selected {
+ font-weight: 700;
+}
+.section-container {
+ -webkit-flex: 1;
+ flex: 1;
+ position: relative;
+}
+.section-container > section {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ overflow: auto;
+}
+.section-sauce ul,
+.section-rice ul {
+ list-style: none;
+ margin: 0;
+ padding: 8px;
+}
+.section-sauce li,
+.section-rice li {
+ padding-left: 4px;
+}
+.section-main label {
+ text-decoration: underline;
+}
+.section-filter ul,
+.section-qr ul {
+ padding: 0;
+}
+.section-filter li,
+.section-qr li {
+ margin: 10px 40px;
+}
+.section-filter textarea {
+ height: 500px;
+}
+.section-qr textarea {
+ height: 200px;
+}
+.section-sauce textarea {
+ height: 350px;
+}
+.section-rice .field[name="boardnav"] {
+ width: 100%;
+}
+.section-rice textarea {
+ height: 150px;
+}
+.section-archives table {
+ width: 100%;
+}
+.section-archives th:not(:first-child) {
+ width: 30%;
+}
+.section-archives td {
+ text-align: center;
+}
+.section-archives select {
+ width: 90%;
+}
+.section-keybinds .field {
+ font-family: monospace;
+}
+#fourchanx-settings fieldset {
+ border: 1px solid;
+ border-radius: 3px;
+}
+#fourchanx-settings legend {
+ font-weight: 700;
+}
+#fourchanx-settings textarea {
+ font-family: monospace;
+ min-width: 100%;
+ max-width: 100%;
+}
+#fourchanx-settings code {
+ color: #000;
+ background-color: #FFF;
+ padding: 0 2px;
+}
+.unscroll {
+ overflow: hidden;
+}
+
+/* Announcement Hiding */
+:root.hide-announcement #globalMessage,
+:root.hide-announcement-enabled #toggleMsgBtn {
+ display: none;
+}
+a.hide-announcement {
+ float: left;
+}
+
+/* Unread */
+#unread-line {
+ margin: 0;
+}
+
+/* Thread Updater */
+#updater:not(:hover) {
+ background: none;
+ border: none;
+ box-shadow: none;
+}
+#updater > .move {
+ padding: 0 3px;
+}
+#updater > div:last-child {
+ text-align: center;
+}
+#updater input[type=number] {
+ width: 4em;
+}
+#updater:not(:hover) > div:not(.move) {
+ display: none;
+}
+#updater input[type="button"] {
+ width: 100%;
+}
+.new {
+ color: limegreen;
+}
+
+/* Thread Watcher */
+#thread-watcher {
+ max-width: 200px;
+ min-width: 150px;
+ padding: 3px;
+ position: absolute;
+}
+#thread-watcher > div:first-child {
+ display: -webkit-flex;
+ display: flex;
+ -webkit-align-items: center;
+ align-items: center;
+}
+#thread-watcher .move {
+ -webkit-flex: 1;
+ flex: 1;
+}
+#watcher-status:not(:empty)::before {
+ content: "(";
+}
+#watcher-status:not(:empty)::after {
+ content: ")";
+}
+#watched-threads:not(:hover) {
+ max-height: 150px;
+ overflow: hidden;
+}
+#watched-threads div {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+#watched-threads .current {
+ font-weight: 700;
+}
+#watched-threads a {
+ text-decoration: none;
+}
+#watched-threads .dead-thread a[title] {
+ text-decoration: line-through;
+}
+
+/* Thread Stats */
+#thread-stats {
+ background: none;
+ border: none;
+ box-shadow: none;
+}
+
+/* Quote */
+.deadlink {
+ text-decoration: none !important;
+}
+.backlink.deadlink:not(.forwardlink),
+.quotelink.deadlink:not(.forwardlink) {
+ text-decoration: underline !important;
+}
+.inlined {
+ opacity: .5;
+}
+#qp input, .forwarded {
+ display: none;
+}
+.quotelink.forwardlink,
+.backlink.forwardlink {
+ text-decoration: none;
+ border-bottom: 1px dashed;
+}
+.filtered {
+ text-decoration: underline line-through;
+}
+.inline {
+ border: 1px solid;
+ display: table;
+ margin: 2px 0;
+}
+.inline .post {
+ border: 0 !important;
+ background-color: transparent !important;
+ display: table !important;
+ margin: 0 !important;
+ padding: 1px 2px !important;
+}
+#qp > .opContainer::after {
+ content: '';
+ clear: both;
+ display: table;
+}
+#qp .post {
+ border: none;
+ margin: 0;
+ padding: 2px 2px 5px;
+}
+#qp img {
+ max-height: 80vh;
+ max-width: 50vw;
+}
+.qphl {
+ outline: 2px solid rgba(216, 94, 49, .7);
+}
+
+/* File */
+.fileText:hover .fntrunc,
+.fileText:not(:hover) .fnfull,
+.expanded-image > .post > .file > .fileThumb > img[data-md5],
+:not(.expanded-image) > .post > .file > .fileThumb > .full-image {
+ display: none;
+}
+.expanding {
+ opacity: .5;
+}
+.expanded-image {
+ clear: both;
+}
+.expanded-image > .op > .file::after {
+ content: '';
+ clear: both;
+ display: table;
+}
+:root.fit-height .full-image {
+ max-height: 100vh;
+}
+:root.fit-width .full-image {
+ max-width: 100%;
+}
+:root.gecko.fit-width .full-image {
+ width: 100%;
+}
+#ihover {
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ max-height: 100%;
+ max-width: 75%;
+ padding-bottom: 16px;
+}
+
+/* Index/Reply Navigation */
+#navlinks {
+ font-size: 16px;
+ top: 25px;
+ right: 10px;
+}
+
+/* Filter */
+.opContainer.filter-highlight {
+ box-shadow: inset 5px 0 rgba(255, 0, 0, .5);
+}
+.filter-highlight > .reply {
+ box-shadow: -5px 0 rgba(255, 0, 0, .5);
+}
+
+/* Thread & Reply Hiding */
+.hide-thread-button,
+.hide-reply-button {
+ float: left;
+ margin-right: 2px;
+}
+.stub ~ * {
+ display: none !important;
+}
+.stub input {
+ display: inline-block;
+}
+
+/* QR */
+:root.hide-original-post-form #postForm,
+:root.hide-original-post-form .postingMode,
+:root.hide-original-post-form #togglePostForm,
+#qr.autohide:not(.has-focus):not(:hover) > form {
+ display: none;
+}
+#qr select, #dump-button, .remove, .captcha-img {
+ cursor: pointer;
+}
+#qr > div {
+ min-width: 300px;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-align-items: center;
+ align-items: center;
+}
+#qr .move {
+ -webkit-align-self: stretch;
+ align-self: stretch;
+ -webkit-flex: 1;
+ flex: 1;
+}
+#qr select {
+ margin: 0;
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ border: none;
+ background: none;
+}
+#qr option {
+ color: #000;
+ background-color: #F7F7F7;
+}
+#qr .close {
+ padding: 0 3px;
+}
+#qr > form {
+ display: -webkit-flex;
+ display: flex;
+ -webkit-flex-direction: column;
+ flex-direction: column;
+}
+.persona {
+ display: -webkit-flex;
+ display: flex;
+}
+.persona .field {
+ -webkit-flex: 1;
+ flex: 1;
+}
+.persona .field:hover,
+.persona .field:focus {
+ -webkit-flex: 3;
+ flex: 3;
+}
+#dump-button {
+ background: linear-gradient(#EEE, #CCC);
+ border: 1px solid #CCC;
+ margin: 0;
+ padding: 2px 4px 3px;
+ outline: none;
+ width: 30px;
+}
+#dump-button:hover,
+#dump-button:focus {
+ background: linear-gradient(#FFF, #DDD);
+}
+#dump-button:active,
+.dump #dump-button:not(:hover):not(:focus) {
+ background: linear-gradient(#CCC, #DDD);
+}
+:root.gecko #dump-button {
+ padding: 0;
+}
+#qr:not(.dump) #dump-list-container {
+ display: none;
+}
+#dump-list-container {
+ height: 100px;
+ position: relative;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ user-select: none;
+}
+#dump-list {
+ counter-reset: qrpreviews;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ white-space: nowrap;
+}
+#dump-list:hover {
+ bottom: -12px;
+ overflow-x: auto;
+ z-index: 1;
+}
+#dump-list::-webkit-scrollbar {
+ height: 12px;
+}
+#dump-list::-webkit-scrollbar-thumb {
+ border: 1px solid;
+}
+.qr-preview {
+ background-position: 50% 20%;
+ background-size: cover;
+ border: 1px solid #808080;
+ color: #FFF !important;
+ font-size: 12px;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ cursor: move;
+ display: inline-block;
+ height: 92px;
+ width: 92px;
+ margin: 4px;
+ padding: 2px;
+ opacity: .6;
+ outline: none;
+ overflow: hidden;
+ position: relative;
+ text-shadow: 0 1px 1px #000;
+ transition: opacity .25s ease-in-out;
+ vertical-align: top;
+ white-space: pre;
+}
+.qr-preview:hover,
+.qr-preview:focus {
+ opacity: .9;
+ color: #FFF !important;
+}
+.qr-preview#selected {
+ opacity: 1;
+}
+.qr-preview::before {
+ counter-increment: qrpreviews;
+ content: counter(qrpreviews);
+ font-weight: 700;
+ text-shadow: 0 0 3px #000, 0 0 5px #000;
+ position: absolute;
+ top: 3px;
+ right: 3px;
+}
+.qr-preview.drag {
+ border-color: red;
+ border-style: dashed;
+}
+.qr-preview.over {
+ border-color: #FFF;
+ border-style: dashed;
+}
+.remove {
+ color: #E00 !important;
+ font-weight: 700;
+ padding: 3px;
+}
+.remove:hover::after {
+ content: ' Remove';
+}
+.qr-preview > label {
+ background: rgba(0, 0, 0, .5);
+ right: 0;
+ bottom: 0;
+ left: 0;
+ position: absolute;
+ text-align: center;
+}
+.qr-preview > label > input {
+ margin: 1px 0;
+ vertical-align: bottom;
+}
+#add-post {
+ display: inline-block;
+ font-size: 30px;
+ height: 30px;
+ width: 30px;
+ line-height: 1;
+ text-align: center;
+ position: absolute;
+ right: 0;
+ bottom: 0;
+ z-index: 1;
+}
+#qr textarea {
+ min-height: 160px;
+ min-width: 100%;
+ display: block;
+}
+#qr.has-captcha textarea {
+ min-height: 120px;
+}
+.textarea {
+ position: relative;
+}
+#char-count {
+ color: #000;
+ background: hsla(0, 0%, 100%, .5);
+ font-size: 8pt;
+ position: absolute;
+ bottom: 1px;
+ right: 1px;
+ pointer-events: none;
+}
+#char-count.warning {
+ color: red;
+}
+.captcha-img {
+ background: #FFF;
+ outline: 1px solid #CCC;
+ outline-offset: -1px;
+}
+.captcha-img > img {
+ display: block;
+ height: 57px;
+ width: 300px;
+}
+#file-n-submit > input {
+ margin: 0;
+}
+#file-n-submit.has-file #qr-no-file {
+ visibility: hidden;
+}
+#file-n-submit:not(.has-file) #qr-filename,
+#file-n-submit:not(.has-file) #qr-file-spoiler,
+#file-n-submit:not(.has-file) #qr-filerm {
+ display: none;
+}
+#file-n-submit {
+ display: -webkit-flex;
+ display: flex;
+ -webkit-flex-direction: row;
+ flex-direction: row;
+ -webkit-align-items: center;
+ align-items: center;
+}
+#qr-no-file, #qr-filename-container {
+ -webkit-flex: 1;
+ flex: 1;
+}
+#qr-filename-container {
+ cursor: default;
+ position: relative;
+ margin-left: 2px;
+}
+#qr-filename {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ white-space: nowrap;
+}
+#qr-filerm {
+ padding: 0 2px;
+}
+#file-n-submit > #qr-file-spoiler {
+ margin: 0 2px;
+}
+#file-n-submit input[type='submit'] {
+ min-width: 40px;
+ -webkit-order: 1;
+ order: 1;
+}
+
+/* Menu */
+.menu-button {
+ display: inline-block;
+ position: relative;
+}
+.menu-button i {
+ border-top: 6px solid;
+ border-right: 4px solid transparent;
+ border-left: 4px solid transparent;
+ display: inline-block;
+ margin: 2px;
+ vertical-align: middle;
+}
+#menu {
+ border-bottom: 0;
+ display: -webkit-flex;
+ display: flex;
+ margin: 2px 0;
+ -webkit-flex-direction: column;
+ flex-direction: column;
+ position: absolute;
+ outline: none;
+}
+.entry {
+ cursor: pointer;
+ outline: none;
+ padding: 3px 7px;
+ position: relative;
+ text-decoration: none;
+ white-space: nowrap;
+}
+.entry.disabled {
+ color: graytext !important;
+}
+.entry.has-submenu {
+ padding-right: 20px;
+}
+.has-submenu::after {
+ content: '';
+ border-left: 6px solid;
+ border-top: 4px solid transparent;
+ border-bottom: 4px solid transparent;
+ display: inline-block;
+ margin: 4px;
+ position: absolute;
+ right: 3px;
+}
+.has-submenu:not(.focused) > .submenu {
+ display: none;
+}
+.submenu {
+ border-bottom: 0;
+ display: -webkit-flex;
+ display: flex;
+ -webkit-flex-direction: column;
+ flex-direction: column;
+ position: absolute;
+ margin: -1px 0;
+}
+.entry input {
+ margin: 0;
+}
diff --git a/json/archives.json b/json/archives.json
index 95ac1a37a..647889b55 100644
--- a/json/archives.json
+++ b/json/archives.json
@@ -50,8 +50,8 @@
"http": true,
"https": true,
"software": "foolfuuka",
- "boards": ["adv", "asp", "cm", "e", "i", "lgbt", "n", "o", "p", "pol", "s", "s4s", "t", "trv", "y"],
- "files": ["adv", "asp", "cm", "e", "i", "lgbt", "n", "o", "p", "s", "s4s", "t", "trv", "y"]
+ "boards": ["adv", "asp", "cm", "d", "e", "i", "lgbt", "n", "o", "p", "pol", "s", "s4s", "t", "trv", "y"],
+ "files": ["cm", "d", "e", "i", "n", "o", "p", "s", "trv", "y"]
}, {
"uid": 12,
"name": "fap archive",
diff --git a/src/Archive/Redirect.coffee b/src/Archive/Redirect.coffee
index 3f3904287..9eaa101c0 100644
--- a/src/Archive/Redirect.coffee
+++ b/src/Archive/Redirect.coffee
@@ -50,8 +50,8 @@ Redirect =
http: true
https: true
software: 'foolfuuka'
- boards: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
- files: ['adv', 'asp', 'cm', 'i', 'lgbt', 'n', 'o', 'p', 's4s', 't', 'trv']
+ boards: ['adv', 'asp', 'cm', 'd', 'e', 'i', 'lgbt', 'n', 'o', 'p', 'pol', 's', 's4s', 't', 'trv', 'y']
+ files: ['cm', 'd', 'e', 'i', 'n', 'o', 'p', 's', 'trv', 'y']
'Foolz Beta':
domain: 'beta.foolz.us'
diff --git a/src/General/Build.coffee b/src/General/Build.coffee
index cd4f73e01..6a1683a38 100644
--- a/src/General/Build.coffee
+++ b/src/General/Build.coffee
@@ -27,7 +27,7 @@ Build =
date: data.now
dateUTC: data.time
comment: data.com
- capReps: data.capcode_replies
+ capcodeReplies: data.capcode_replies
# thread status
isSticky: !!data.sticky
isClosed: !!data.closed
@@ -59,7 +59,7 @@ Build =
postID, threadID, boardID
name, capcode, tripcode, uniqueID, email, subject, flagCode, flagName, date, dateUTC
isSticky, isClosed
- comment, capReps
+ comment, capcodeReplies
file
} = o
isOP = postID is threadID
@@ -191,26 +191,6 @@ Build =
else
''
- capcodeReplies = ''
- if capReps
- generateCapcodeReplies = (capcodeType, array) ->
- "#{
- switch capcodeType
- when 'admin'
- 'Administrator'
- when 'mod'
- 'Moderator'
- when 'developer'
- 'Developer'
- } Repl#{if array.length > 1 then 'ies' else 'y'}: #{
- array.map (ID) ->
- ">>#{ID} "
- .join ' '
- } "
- for capcodeType, array of capReps
- capcodeReplies += generateCapcodeReplies capcodeType, array
- capcodeReplies = "#{capcodeReplies} "
-
container = $.el 'div',
id: "pc#{postID}"
className: "postContainer #{if isOP then 'op' else 'reply'}Container"
@@ -221,4 +201,36 @@ Build =
continue if href[0] is '/' # Cross-board quote, or board link
quote.href = "/#{boardID}/res/#{href}" # Fix pathnames
+ Build.capcodeReplies {boardID, threadID, root: container, capcodeReplies}
+
container
+
+ capcodeReplies: ({boardID, threadID, bq, root, capcodeReplies}) ->
+ return unless capcodeReplies
+
+ generateCapcodeReplies = (capcodeType, array) ->
+ "#{
+ switch capcodeType
+ when 'admin'
+ 'Administrator'
+ when 'mod'
+ 'Moderator'
+ when 'developer'
+ 'Developer'
+ } Repl#{if array.length > 1 then 'ies' else 'y'}: #{
+ array.map (ID) ->
+ ">>#{ID} "
+ .join ' '
+ } "
+ html = []
+ for capcodeType, array of capcodeReplies
+ html.push generateCapcodeReplies capcodeType, array
+
+ bq or= $ 'blockquote', root
+ $.add bq, [
+ $.el 'br'
+ $.el 'br'
+ $.el 'span',
+ className: 'capcodeReplies'
+ innerHTML: html.join ''
+ ]
diff --git a/src/General/Config.coffee b/src/General/Config.coffee
index cc7b7daf0..017916204 100644
--- a/src/General/Config.coffee
+++ b/src/General/Config.coffee
@@ -53,12 +53,6 @@ Config =
true
'Show dice that were entered into the email field.'
]
- <% if (type !== 'crx') { %>
- 'Check for Updates': [
- true
- 'Check for updated versions of <%= meta.name %>.'
- ]
- <% } %>
'Color User IDs': [
false
'Assign unique colors to user IDs on boards that use them'
@@ -239,14 +233,6 @@ Config =
true
'Bookmark threads.'
]
- 'Auto Watch': [
- true
- 'Automatically watch threads you start.'
- ]
- 'Auto Watch Reply': [
- false
- 'Automatically watch threads you reply to.'
- ]
'Posting':
'Header Shortcut': [
@@ -754,6 +740,24 @@ Config =
['before', 'after']
]
+ threadWatcher:
+ 'Current Board': [
+ false
+ 'Only show watched threads from the current board.'
+ ]
+ 'Auto Watch': [
+ true
+ 'Automatically watch threads you start.'
+ ]
+ 'Auto Watch Reply': [
+ false
+ 'Automatically watch threads you reply to.'
+ ]
+ 'Auto Prune': [
+ false
+ 'Automatically prune 404\'d threads.'
+ ]
+
filter:
name: """
# Filter any namefags:
diff --git a/src/General/Header.coffee b/src/General/Header.coffee
index 5ff841eba..ae02eb70a 100644
--- a/src/General/Header.coffee
+++ b/src/General/Header.coffee
@@ -79,7 +79,6 @@ Header =
fourchannav = $.id 'boardNavDesktop'
if a = $ "a[href*='/#{g.BOARD}/']", fourchannav
a.className = 'current'
-
boardList = $.el 'span',
id: 'board-list'
innerHTML: " - #{fourchannav.innerHTML} "
diff --git a/src/General/Main.coffee b/src/General/Main.coffee
index 740f1a9ea..d9d80648c 100644
--- a/src/General/Main.coffee
+++ b/src/General/Main.coffee
@@ -163,6 +163,7 @@ Main =
'Thread Updater': ThreadUpdater
'Thread Stats': ThreadStats
'Thread Watcher': ThreadWatcher
+ 'Thread Watcher (Menu)': ThreadWatcher.menu
'Index Navigation': Nav
'Keybinds': Keybinds
'Show Dice Roll': Dice
@@ -204,9 +205,6 @@ Main =
Main.callbackNodes Thread, threads
Main.callbackNodesDB Post, posts, ->
$.event '4chanXInitFinished'
- <% if (type !== 'crx') { %>
- Main.checkUpdate()
- <% } %>
if styleSelector = $.id 'styleSelector'
passLink = $.el 'a',
@@ -226,9 +224,6 @@ Main =
new Notification 'warning', 'Cookies need to be enabled on 4chan for <%= meta.name %> to properly function.', 30
$.event '4chanXInitFinished'
- <% if (type !== 'crx') { %>
- Main.checkUpdate()
- <% } %>
callbackNodes: (klass, nodes) ->
# get the nodes' length only once
@@ -302,27 +297,6 @@ Main =
obj.callback.isAddon = true
Klass::callbacks.push obj.callback
- <% if (type !== 'crx') { %>
- message: (e) ->
- {version} = e.data
- if version and version isnt g.VERSION
- el = $.el 'span',
- innerHTML: "Update: <%= meta.name %> v#{version} is out, get it target=_blank>here ."
- new Notification 'info', el, 120
-
- checkUpdate: ->
- return unless Conf['Check for Updates'] and Main.isThisPageLegit()
- now = Date.now()
- $.get 'lastchecked', 0, ({lastchecked}) ->
- if (lastchecked > now - $.DAY)
- return
- $.ready ->
- $.on window, 'message', Main.message
- $.set 'lastchecked', now
- $.add d.head, $.el 'script',
- src: '<%= meta.repo %>raw/<%= meta.mainBranch %>/latest.js'
- <% } %>
-
handleErrors: (errors) ->
unless errors instanceof Array
error = errors
diff --git a/src/General/Settings.coffee b/src/General/Settings.coffee
index 420ae4ca6..ba78e60c4 100644
--- a/src/General/Settings.coffee
+++ b/src/General/Settings.coffee
@@ -29,7 +29,8 @@ Settings =
else
$.on d, '4chanXInitFinished', Settings.open
$.set
- lastchecked: Date.now()
+ archives: Conf['archives']
+ lastarchivecheck: now
previousversion: g.VERSION
Settings.addSection 'Style', Settings.style
@@ -173,7 +174,6 @@ Settings =
data =
version: g.VERSION
date: now
- Conf['WatchedThreads'] = {}
for db in DataBoards
Conf[db] = boards: {}
# Make sure to export the most recent data.
@@ -220,7 +220,9 @@ Settings =
reader.readAsText file
loadSettings: (data) ->
- version = data.version.split '.'
+ if data.Conf['WatchedThreads']
+ data.Conf['watchedThreads'] = boards: ThreadWatcher.convert data.Conf['WatchedThreads']
+ delete data.Conf['WatchedThreads']
$.set data.Conf
convertSettings: (data, map) ->
diff --git a/src/General/css/icons.base.css b/src/General/css/icons.base.css
index e025821a2..0e84efe4a 100644
--- a/src/General/css/icons.base.css
+++ b/src/General/css/icons.base.css
@@ -1,7 +1,7 @@
#navtopright .exlinksOptionsLink::after,
#main-menu,
body > div.navLinks > a:first-of-type::after,
-.slideout-watcher #watcher::after,
+.slideout-watcher #thread-watcher::after,
.announcements-slideout #globalMessage::after,
#boardNavDesktopFoot::after,
#img-controls,
@@ -26,7 +26,7 @@ body::after {
.invisible-icons #navtopright .exlinksOptionsLink::after,
.invisible-icons #main-menu,
.invisible-icons body > div.navLinks > a:first-of-type::after,
-.invisible-icons.slideout-watcher #watcher::after,
+.invisible-icons.slideout-watcher #thread-watcher::after,
.invisible-icons.announcements-slideout #globalMessage::after,
.invisible-icons #boardNavDesktopFoot::after,
.invisible-icons #img-controls,
@@ -36,7 +36,7 @@ body::after {
}
#navtopright .exlinksOptionsLink,
body > div.navLinks > a:first-of-type,
-#{if Conf['Slideout Watcher'] then '#watcher,' else ''}
+#{if Conf['Slideout Watcher'] then '#thread-watcher,' else ''}
#{if Conf['Announcements'] is 'slideout' then '#globalMessage,' else ''}
#boardNavDesktopFoot,
#catalog {
@@ -44,7 +44,7 @@ body > div.navLinks > a:first-of-type,
}
#navtopright .exlinksOptionsLink:hover,
body > div.navLinks > a:first-of-type:hover,
-.slideout-watcher #watcher:hover,
+.slideout-watcher #thread-watcher:hover,
.announcements-slideout #globalMessage:hover,
#boardNavDesktopFoot:hover,
#img-controls,
@@ -60,7 +60,7 @@ body > div.navLinks > a:first-of-type::after {
cursor: pointer;
background-position: 0 -15px;
}
-.slideout-watcher #watcher::after {
+.slideout-watcher #thread-watcher::after {
background-position: 0 -30px;
}
.announcements-slideout #globalMessage::after {
@@ -90,7 +90,7 @@ body > div.navLinks > a:first-of-type::after {
#main-menu:hover,
#navtopright .exlinksOptionsLink:hover::after,
#qr #qrtab,
-.slideout-watcher #watcher:hover::after,
+.slideout-watcher #thread-watcher:hover::after,
.thumbnail#selected,
div.navLinks > a:first-of-type:hover::after,
#catalog:hover::after,
diff --git a/src/General/css/icons.horz.css b/src/General/css/icons.horz.css
index 6c826800a..1b3dedb75 100644
--- a/src/General/css/icons.horz.css
+++ b/src/General/css/icons.horz.css
@@ -14,7 +14,7 @@ body::after {
#{align}: #{position[i++]}px;
}
/* Watcher */
-.slideout-watcher #watcher::after {
+.slideout-watcher #thread-watcher::after {
#{align}: #{position[i++]}px;
}
/* ExLinks */
@@ -55,7 +55,7 @@ body::after {
#boardNavDesktopFoot::after,
#navtopright .exlinksOptionsLink::after,
#main-menu,
-.slideout-watcher #watcher::after,
+.slideout-watcher #thread-watcher::after,
.announcements-slideout #globalMessage::after,
#img-controls,
#fappeTyme,
@@ -64,7 +64,7 @@ div.navLinks > a:first-of-type::after,
top: 1px !important;
}
.slideout-watcher #globalMessage,
-.slideout-watcher #watcher,
+.slideout-watcher #thread-watcher,
#boardNavDesktopFoot {
top: 16px !important;
}
diff --git a/src/General/css/icons.vert.css b/src/General/css/icons.vert.css
index 16500f846..8ecd63c00 100644
--- a/src/General/css/icons.vert.css
+++ b/src/General/css/icons.vert.css
@@ -20,8 +20,8 @@ body::after {
top: #{position[i++]}px;
}
/* Watcher */
-.slideout-watcher #watcher,
-.slideout-watcher #watcher::after {
+.slideout-watcher #thread-watcher,
+.slideout-watcher #thread-watcher::after {
top: #{position[i++]}px !important;
}
/* ExLinks */
@@ -58,21 +58,21 @@ body::after {
#globalMessage::after,
#img-controls,
#fappeTyme,
-.slideout-watcher #watcher::after,
+.slideout-watcher #thread-watcher::after,
#catalog::after,
div.navLinks > a:first-of-type::after {
#{align}: 3px !important;
}
#boardNavDesktopFoot,
#globalMessage,
-.slideout-watcher #watcher.dialog {
+.slideout-watcher #thread-watcher.dialog {
<%= sizing %>: border-box;
width: 232px !important;
#{align}: 18px !important;
}
.sidebar-large #boardNavDesktopFoot,
.sidebar-large #globalMessage,
-.sidebar-large #watcher {
+.sidebar-large #thread-watcher {
width: 288px !important;
}
.fourchan-ss-navigation.fixed.top #header-bar,
diff --git a/src/General/css/layout.css b/src/General/css/layout.css
index 701ed429c..534f74d43 100644
--- a/src/General/css/layout.css
+++ b/src/General/css/layout.css
@@ -482,7 +482,7 @@ th {
.icons-4chan-ss #navtopright .exlinksOptionsLink::after,
.icons-4chan-ss #main-menu,
.icons-4chan-ss .navLinks > a:first-of-type::after,
-.icons-4chan-ss #watcher::after,
+.icons-4chan-ss #thread-watcher::after,
.icons-4chan-ss #globalMessage::after,
.icons-4chan-ss #boardNavDesktopFoot::after,
.icons-4chan-ss #img-controls,
@@ -493,7 +493,7 @@ th {
.icons-oneechan #navtopright .exlinksOptionsLink::after,
.icons-oneechan #main-menu,
.icons-oneechan .navLinks > a:first-of-type::after,
-.icons-oneechan #watcher::after,
+.icons-oneechan #thread-watcher::after,
.icons-oneechan #globalMessage::after,
.icons-oneechan #boardNavDesktopFoot::after,
.icons-oneechan #img-controls,
@@ -751,53 +751,53 @@ th {
display: none;
}
/* Watcher */
-#watcher {
+#thread-watcher {
position: fixed;
z-index: 14;
padding: 2px;
}
-#watcher {
+#thread-watcher {
width: 200px;
}
-#watcher:not(:hover) {
+#thread-watcher:not(:hover) {
max-height: 200px;
overflow: hidden;
}
-.rounded-edges #watcher {
+.rounded-edges #thread-watcher {
border-radius: 3px;
}
-#watcher > div {
+#thread-watcher > div {
max-height: 1.3em;
overflow: hidden;
}
-.slideout-watcher #watcher {
+.slideout-watcher #thread-watcher {
<%= sizing %>: border-box;
width: 248px;
}
.slideout-watcher.sidebar-large #boardNavDesktopFoot {
width: 299px;
}
-.slideout-watcher.sidebar-location-right #watcher {
+.slideout-watcher.sidebar-location-right #thread-watcher {
left: auto !important;
right: 2px !important;
}
-.slideout-watcher.sidebar-location-left #watcher {
+.slideout-watcher.sidebar-location-left #thread-watcher {
right: auto !important;
left: 2px !important;
}
-.slideout-watcher #watcher .move {
+.slideout-watcher #thread-watcher .move {
cursor: default;
}
-.slideout-watcher.underline-links #watcher .move {
+.slideout-watcher.underline-links #thread-watcher .move {
text-decoration: underline;
}
-.slideout-watcher #watcher > div {
+.slideout-watcher #thread-watcher > div {
overflow: hidden;
}
-.slideout-watcher #watcher:hover {
+.slideout-watcher #thread-watcher:hover {
overflow-y: auto;
}
-.slideout-watcher #watcher:not(:hover) {
+.slideout-watcher #thread-watcher:not(:hover) {
height: 0;
overflow: hidden;
border: 0 none;
diff --git a/src/General/css/style.css b/src/General/css/style.css
index eb04ca52a..af1cf0b10 100644
--- a/src/General/css/style.css
+++ b/src/General/css/style.css
@@ -97,10 +97,10 @@ a {
#qr {
z-index: 30;
}
-#watcher {
+#thread-watcher {
z-index: 8;
}
-:root.fixed-watcher #watcher {
+:root.fixed-watcher #thread-watcher {
z-index: 20;
}
.fixed #header-bar {
@@ -465,10 +465,10 @@ a.hide-announcement {
}
/* Thread Watcher */
-#watcher {
+#thread-watcher {
position: absolute;
}
-#watcher {
+#thread-watcher {
padding-bottom: 3px;
overflow: hidden;
white-space: nowrap;
@@ -476,27 +476,27 @@ a.hide-announcement {
max-height: 92%;
overflow-y: auto;
}
-:root.fixed-watcher #watcher {
+:root.fixed-watcher #thread-watcher {
position: fixed;
}
-:root:not(.fixed-watcher) #watcher:not(:hover) {
+:root:not(.fixed-watcher) #thread-watcher:not(:hover) {
max-height: 210px;
overflow-y: hidden;
}
-#watcher > .move {
+#thread-watcher > .move {
padding-top: 3px;
}
-#watcher > div {
+#thread-watcher > div {
max-width: 250px;
overflow: hidden;
padding-left: 3px;
padding-right: 3px;
text-overflow: ellipsis;
}
-#watcher a {
+#thread-watcher a {
text-decoration: none;
}
-#watcher .move>.close {
+#thread-watcher .move>.close {
position: absolute;
right: 0px;
top: 0px;
diff --git a/src/General/css/theme.css b/src/General/css/theme.css
index f6eff9f60..1d7cfc312 100644
--- a/src/General/css/theme.css
+++ b/src/General/css/theme.css
@@ -165,8 +165,8 @@ textarea.field:focus {
#menu,
#selectrice,
#themeConf,
-#watcher,
-#watcher:hover,
+#thread-watcher,
+#thread-watcher:hover,
.announcements-slideout #globalMessage,
.dialog,
.post-form-style-float #qr,
@@ -343,7 +343,7 @@ a .name {
#navtopright .exlinksOptionsLink::after,
#main-menu,
.navLinks > a:first-of-type::after,
-#watcher::after,
+#thread-watcher::after,
#globalMessage::after,
#boardNavDesktopFoot::after,
#img-controls,
diff --git a/src/General/html/Build/post.html b/src/General/html/Build/post.html
index cf833ebdd..239dec4f7 100644
--- a/src/General/html/Build/post.html
+++ b/src/General/html/Build/post.html
@@ -54,6 +54,6 @@
#{if isOP then '' else fileHTML}
- #{comment or ''}#{capcodeReplies} #{" "}
+ #{comment or ''} #{" "}
"""
\ No newline at end of file
diff --git a/src/General/html/Monitoring/ThreadWatcher.html b/src/General/html/Monitoring/ThreadWatcher.html
new file mode 100644
index 000000000..3059ef7b5
--- /dev/null
+++ b/src/General/html/Monitoring/ThreadWatcher.html
@@ -0,0 +1,5 @@
+
+ Thread Watcher
+
+
+
diff --git a/src/General/lib/$.coffee b/src/General/lib/$.coffee
index 09cdb71fa..1709f69ac 100644
--- a/src/General/lib/$.coffee
+++ b/src/General/lib/$.coffee
@@ -54,18 +54,23 @@ $.extend = (object, properties) ->
object[key] = val
return
-$.ajax = (url, options, extra={}) ->
- {type, headers, upCallbacks, form, sync} = extra
- r = new XMLHttpRequest()
- r.overrideMimeType 'text/html'
- type or= form and 'post' or 'get'
- r.open type, url, !sync
- for key, val of headers
- r.setRequestHeader key, val
- $.extend r, options
- $.extend r.upload, upCallbacks
- r.send form
- r
+$.ajax = do ->
+ # Status Code 304: Not modified
+ # With the `If-Modified-Since` header we only receive the HTTP headers and no body for 304 responses.
+ # This saves a lot of bandwidth and CPU time for both the users and the servers.
+ lastModified = {}
+ (url, options, extra={}) ->
+ {type, whenModified, upCallbacks, form, sync} = extra
+ r = new XMLHttpRequest()
+ type or= form and 'post' or 'get'
+ r.open type, url, !sync
+ if whenModified
+ r.setRequestHeader 'If-Modified-Since', lastModified[url] or '0'
+ $.on r, 'load', -> lastModified[url] = r.getResponseHeader 'Last-Modified'
+ $.extend r, options
+ $.extend r.upload, upCallbacks
+ r.send form
+ r
$.cache = do ->
reqs = {}
diff --git a/src/General/lib/databoard.class b/src/General/lib/databoard.class
index 80c190f17..e1f58ed47 100644
--- a/src/General/lib/databoard.class
+++ b/src/General/lib/databoard.class
@@ -1,10 +1,10 @@
-DataBoards = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts']
+DataBoards = ['hiddenThreads', 'hiddenPosts', 'lastReadPosts', 'yourPosts', 'watchedThreads']
class DataBoard
- constructor: (@key, sync) ->
+ constructor: (@key, sync, dontClean) ->
@data = Conf[key]
$.sync key, @onSync.bind @
- @clean()
+ @clean() unless dontClean
return unless sync
# Chrome also fires the onChanged callback on the current tab,
# so we only start syncing when we're ready.
@@ -13,6 +13,9 @@ class DataBoard
@sync = sync
$.on d, '4chanXInitFinished', init
+ save: ->
+ $.set @key, @data
+
delete: ({boardID, threadID, postID}) ->
if postID
delete @data.boards[boardID][threadID][postID]
@@ -22,7 +25,7 @@ class DataBoard
@deleteIfEmpty {boardID}
else
delete @data.boards[boardID]
- $.set @key, @data
+ @save()
deleteIfEmpty: ({boardID, threadID}) ->
if threadID
@@ -39,7 +42,7 @@ class DataBoard
(@data.boards[boardID] or= {})[threadID] = val
else
@data.boards[boardID] = val
- $.set @key, @data
+ @save()
get: ({boardID, threadID, postID, defaultValue}) ->
if board = @data.boards[boardID]
@@ -67,8 +70,7 @@ class DataBoard
@data.lastChecked = now
for boardID of @data.boards
@ajaxClean boardID
-
- $.set @key, @data
+ @save()
ajaxClean: (boardID) ->
$.cache "//api.4chan.org/#{boardID}/threads.json", (e) =>
@@ -84,7 +86,7 @@ class DataBoard
threads[thread.no] = board[thread.no]
@data.boards[boardID] = threads
@deleteIfEmpty {boardID}
- $.set @key, @data
+ @save()
onSync: (data) ->
@data = data or boards: {}
diff --git a/src/General/lib/polyfill.coffee b/src/General/lib/polyfill.coffee
index 5d9ddc124..3cec1905a 100644
--- a/src/General/lib/polyfill.coffee
+++ b/src/General/lib/polyfill.coffee
@@ -1,6 +1,16 @@
Polyfill =
init: ->
+ Polyfill.toBlob()
Polyfill.visibility()
+ toBlob: ->
+ HTMLCanvasElement::toBlob or= (cb) ->
+ data = atob @toDataURL()[22..]
+ # DataUrl to Binary code from Aeosynth's 4chan X repo
+ l = data.length
+ ui8a = new Uint8Array l
+ for i in [0...l]
+ ui8a[i] = data.charCodeAt i
+ cb new Blob [ui8a], type: 'image/png'
visibility: ->
# page visibility API
return unless 'webkitHidden' of document
diff --git a/src/Images/ImageExpand.coffee b/src/Images/ImageExpand.coffee
index a442ab73b..246c61493 100644
--- a/src/Images/ImageExpand.coffee
+++ b/src/Images/ImageExpand.coffee
@@ -173,8 +173,8 @@ ImageExpand =
{createSubEntry} = ImageExpand.menu
subEntries = []
- for key, conf of Config.imageExpansion
- subEntries.push createSubEntry key, conf
+ for name, conf of Config.imageExpansion
+ subEntries.push createSubEntry name, conf[1]
$.event 'AddMenuEntry',
type: 'header'
@@ -182,17 +182,16 @@ ImageExpand =
order: 105
subEntries: subEntries
- createSubEntry: (type, config) ->
+ createSubEntry: (name, desc) ->
label = $.el 'label',
- innerHTML: " #{type}"
+ innerHTML: " #{name}"
+ title: desc
input = label.firstElementChild
- if type in ['Fit width', 'Fit height']
+ if name in ['Fit width', 'Fit height']
$.on input, 'change', ImageExpand.cb.setFitness
- if config
- label.title = config[1]
- input.checked = Conf[type]
- $.event 'change', null, input
- $.on input, 'change', $.cb.checked
+ input.checked = Conf[name]
+ $.event 'change', null, input
+ $.on input, 'change', $.cb.checked
el: label
menuToggle: (e) ->
diff --git a/src/Linkification/Linkify.coffee b/src/Linkification/Linkify.coffee
index f017b2b3d..ef1684dce 100644
--- a/src/Linkification/Linkify.coffee
+++ b/src/Linkification/Linkify.coffee
@@ -4,23 +4,20 @@ Linkify =
@regString = if Conf['Allow False Positives']
///(
- \b(
- [-a-z]+://
- |
- [a-z]{3,}\.[-a-z0-9]+\.[a-z]
- |
- [-a-z0-9]+\.[a-z]
- |
- [\d]+\.[\d]+\.[\d]+\.[\d]+/
- |
- [a-z]{3,}:[a-z0-9?]
- |
- [^\s@]+@[a-z0-9.-]+\.[a-z0-9]
- )
- [^\s'"]+
- )///gi
+ [-a-z]+://
+ |
+ [a-z]{3,}\.[-a-z0-9]+\.[a-z]
+ |
+ [-a-z0-9]+\.[a-z]
+ |
+ [\d]+\.[\d]+\.[\d]+\.[\d]+/
+ |
+ [a-z]{3,}:[a-z0-9?]
+ |
+ [^\s@]+@[a-z0-9.-]+\.[a-z0-9]
+ )///i
else
- /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi
+ /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1})/i
if Conf['Comment Expansion']
ExpandComment.callbacks.push @node
@@ -43,16 +40,44 @@ Linkify =
return
+ test = /[^\s'"]+/g
+ space = /[\s'"]/
+
snapshot = $.X './/br|.//text()', @nodes.comment
i = 0
while node = snapshot.snapshotItem i++
+ links = []
+ {data} = node
+ continue if node.parentElement.nodeName is "A" or not data
- continue if node.parentElement.nodeName is "A"
- links = []
+ while result = test.exec data
+ {index} = result
+ endNode = node
+ if (length = index + result[0].length) is data.length
- if Linkify.regString.test node.data
- Linkify.regString.lastIndex = 0
- Linkify.gatherLinks snapshot, @, node, links, i
+ while (saved = snapshot.snapshotItem i++)
+ break if saved.nodeName is 'BR'
+
+ endNode = saved
+ {length} = saved.data
+
+ if end = space.exec saved.data
+ length = end.index
+ i--
+ break
+
+ if length is endNode.data.length then test.lastIndex = 0
+ range = Linkify.makeRange node, endNode, index, length
+ if link = Linkify.regString.exec text = range.toString()
+ if lIndex = link.index
+ range.setStart node, lIndex + index
+ links.push [range, text]
+ break
+
+ else
+ if link = Linkify.regString.exec result[0]
+ range = Linkify.makeRange node, node, link.index, link.length
+ links.push [range, link]
for range in links.reverse()
@nodes.links.push Linkify.makeLink range, @
@@ -68,66 +93,29 @@ Linkify =
return
- gatherLinks: (snapshot, post, node, links, i) ->
- {data} = node
- len = data.length
-
- while (match = Linkify.regString.exec data)
- {index} = match
- link = match[0]
- len2 = index + link.length
-
- break if len is len2
-
- range = document.createRange();
- range.setStart node, index
- range.setEnd node, len2
- links.push range
-
- Linkify.regString.lastIndex = 0
-
- if match
- links.push Linkify.seek snapshot, post, node, links, match, i
-
- return
-
- seek: (snapshot, post, node, links, match, i) ->
- link = match[0]
- range = document.createRange()
- range.setStart node, match.index
-
- while (next = snapshot.snapshotItem i++) and next.nodeName isnt 'BR'
- node = next
- data = node.data
- if result = /[\s'"]/.exec data
- {index} = result
- range.setEnd node, index
- Linkify.regString.lastIndex = index
- Linkify.gatherLinks snapshot, post, node, links, i
- return range
-
- if range.collapsed
- range.setEnd node, node.data.length
-
+ makeRange: (startNode, endNode, startOffset, endOffset) ->
+ range = document.createRange();
+ range.setStart startNode, startOffset
+ range.setEnd endNode, endOffset
range
- makeLink: (range) ->
- link = range.toString()
- link =
- if link.contains ':'
- link
+ makeLink: ([range, text]) ->
+ text
+ text =
+ if text.contains ':'
+ text
else (
- if link.contains '@'
+ if text.contains '@'
'mailto:'
else
'http://'
- ) + link
+ ) + text
a = $.el 'a',
className: 'linkify'
rel: 'nofollow noreferrer'
target: '_blank'
- href: link
+ href: text
$.add a, range.extractContents()
range.insertNode a
a
diff --git a/src/Miscellaneous/ExpandComment.coffee b/src/Miscellaneous/ExpandComment.coffee
index e66a458ef..d06f140c2 100644
--- a/src/Miscellaneous/ExpandComment.coffee
+++ b/src/Miscellaneous/ExpandComment.coffee
@@ -19,9 +19,8 @@ ExpandComment =
cb: (e) ->
e.preventDefault()
- post = Get.postFromNode @
- ExpandComment.expand post
-
+ ExpandComment.expand Get.postFromNode @
+
expand: (post) ->
if post.nodes.longComment and !post.nodes.longComment.parentNode
$.replace post.nodes.shortComment, post.nodes.longComment
@@ -61,6 +60,11 @@ ExpandComment =
href = quote.getAttribute 'href'
continue if href[0] is '/' # Cross-board quote, or board link
quote.href = "/#{post.board}/res/#{href}" # Fix pathnames
+ Build.capcodeReplies
+ boardID: post.board.ID
+ threadID: post.thread.ID
+ bq: clone
+ capcodeReplies: postObj.capcode_replies
post.nodes.shortComment = comment
$.replace comment, clone
post.nodes.comment = post.nodes.longComment = clone
diff --git a/src/Monitoring/ThreadStats.coffee b/src/Monitoring/ThreadStats.coffee
index a8002a575..452caf4cd 100644
--- a/src/Monitoring/ThreadStats.coffee
+++ b/src/Monitoring/ThreadStats.coffee
@@ -18,7 +18,6 @@ ThreadStats =
@postCountEl = $ '#post-count', sc
@fileCountEl = $ '#file-count', sc
@pageCountEl = $ '#page-count', sc
- @lastModified = '0'
Thread::callbacks.push
name: 'Thread Stats'
@@ -55,12 +54,10 @@ ThreadStats =
return
setTimeout ThreadStats.fetchPage, 2 * $.MINUTE
$.ajax "//api.4chan.org/#{ThreadStats.thread.board}/threads.json", onload: ThreadStats.onThreadsLoad,
- headers: 'If-Modified-Since': ThreadStats.lastModified
+ whenModified: true
onThreadsLoad: ->
- return if !Conf["Page Count in Stats"]
- ThreadStats.lastModified = @getResponseHeader 'Last-Modified'
- return if @status isnt 200
+ return unless Conf["Page Count in Stats"] and @status is 200
pages = JSON.parse @response
for page in pages
for thread in page.threads
diff --git a/src/Monitoring/ThreadUpdater.coffee b/src/Monitoring/ThreadUpdater.coffee
index 115bea3f1..3bd125c7a 100644
--- a/src/Monitoring/ThreadUpdater.coffee
+++ b/src/Monitoring/ThreadUpdater.coffee
@@ -64,7 +64,6 @@ ThreadUpdater =
ThreadUpdater.root = @OP.nodes.root.parentNode
ThreadUpdater.lastPost = +ThreadUpdater.root.lastElementChild.id.match(/\d+/)[0]
ThreadUpdater.outdateCount = 0
- ThreadUpdater.lastModified = '0'
ThreadUpdater.cb.interval.call $.el 'input', value: Conf['Interval']
@@ -137,9 +136,7 @@ ThreadUpdater =
when 200
g.DEAD = false
ThreadUpdater.parse JSON.parse(req.response).posts
- ThreadUpdater.lastModified = req.getResponseHeader 'Last-Modified'
- if Conf['Auto Update']
- ThreadUpdater.set 'timer', ThreadUpdater.getInterval()
+ ThreadUpdater.set 'timer', ThreadUpdater.getInterval()
when 404
g.DEAD = true
ThreadUpdater.set 'timer', null
@@ -150,14 +147,8 @@ ThreadUpdater =
404: true
thread: ThreadUpdater.thread
else
- if Conf['Auto Update']
- ThreadUpdater.outdateCount++
- ThreadUpdater.set 'timer', ThreadUpdater.getInterval()
- ###
- Status Code 304: Not modified
- By sending the `If-Modified-Since` header we get a proper status code, and no response.
- This saves bandwidth for both the user and the servers and avoid unnecessary computation.
- ###
+ ThreadUpdater.outdateCount++
+ ThreadUpdater.set 'timer', ThreadUpdater.getInterval()
[text, klass] = if req.status is 304
[null, null]
else
@@ -219,7 +210,7 @@ ThreadUpdater =
ThreadUpdater.req.abort()
url = "//api.4chan.org/#{ThreadUpdater.thread.board}/res/#{ThreadUpdater.thread}.json"
ThreadUpdater.req = $.ajax url, onloadend: ThreadUpdater.cb.load,
- headers: 'If-Modified-Since': ThreadUpdater.lastModified
+ whenModified: true
updateThreadStatus: (title, OP) ->
titleLC = title.toLowerCase()
diff --git a/src/Monitoring/ThreadWatcher.coffee b/src/Monitoring/ThreadWatcher.coffee
index 50895fed9..bab77a3e0 100644
--- a/src/Monitoring/ThreadWatcher.coffee
+++ b/src/Monitoring/ThreadWatcher.coffee
@@ -2,98 +2,282 @@ ThreadWatcher =
init: ->
return unless Conf['Thread Watcher']
- @dialog = UI.dialog 'watcher', 'top: 50px; left: 0px;',
- 'Thread Watcher
'
+
+ @db = new DataBoard 'watchedThreads', @refresh, true
+ @dialog = UI.dialog 'thread-watcher', 'top: 50px; left: 0px;', """
+ <%= grunt.file.read('src/General/html/Monitoring/ThreadWatcher.html').replace(/>\s+<').trim() %>
+ """
+ @status = $ '#watcher-status', @dialog
+ @list = @dialog.lastElementChild
$.on d, 'QRPostSuccessful', @cb.post
- $.sync 'WatchedThreads', @refresh
+ $.on d, 'ThreadUpdate', @cb.threadUpdate if g.VIEW is 'thread'
+ $.on d, '4chanXInitFinished', @ready
- $.ready ->
- ThreadWatcher.refresh()
- $.add d.body, ThreadWatcher.dialog
+ now = Date.now()
+ if (@db.data.lastChecked or 0) < now - 2 * $.HOUR
+ @db.data.lastChecked = now
+ ThreadWatcher.fetchAllStatus()
+ @db.save()
+
+ # XXX tmp conversion from old to new format
+ $.get 'WatchedThreads', null, ({WatchedThreads}) ->
+ return unless WatchedThreads
+ for boardID, threads of ThreadWatcher.convert WatchedThreads
+ for threadID, data of threads
+ ThreadWatcher.db.set {boardID, threadID, val: data}
+ $.delete 'WatchedThreads'
Thread::callbacks.push
name: 'Thread Watcher'
cb: @node
node: ->
- favicon = $.el 'a',
- className: 'watch-thread-link'
- href: 'javascript:;'
- $.on favicon, 'click', ThreadWatcher.cb.toggle
- $.before $('input', @OP.nodes.post), favicon
- return if g.VIEW isnt 'thread'
- $.get 'AutoWatch', 0, (item) =>
- return if item['AutoWatch'] isnt @ID
- ThreadWatcher.watch @
+ toggler = $.el 'img',
+ className: 'watcher-toggler'
+ $.on toggler, 'click', ThreadWatcher.cb.toggle
+ $.before $('input', @OP.nodes.post), toggler
+
+ ready: ->
+ $.off d, '4chanXInitFinished', ThreadWatcher.ready
+ return unless Main.isThisPageLegit()
+ ThreadWatcher.refresh()
+ $.add d.body, ThreadWatcher.dialog
+
+ return unless Conf['Auto Watch']
+ $.get 'AutoWatch', 0, ({AutoWatch}) ->
+ return unless thread = g.BOARD.threads[AutoWatch]
+ ThreadWatcher.add thread
$.delete 'AutoWatch'
- refresh: (watched) ->
- unless watched
- $.get 'WatchedThreads', {}, (item) ->
- ThreadWatcher.refresh item['WatchedThreads']
- return
- nodes = [$('.move', ThreadWatcher.dialog)]
- for board of watched
- for id, props of watched[board]
- x = $.el 'a',
- textContent: '✖'
- className: 'close'
- href: 'javascript:;'
- $.on x, 'click', ThreadWatcher.cb.x
- link = $.el 'a', props
- link.title = link.textContent
-
- div = $.el 'div'
- $.add div, [x, $.tn(' '), link]
- nodes.push div
-
- $.rmAll ThreadWatcher.dialog
- $.add ThreadWatcher.dialog, nodes
-
- watched = watched[g.BOARD] or {}
- for ID, thread of g.BOARD.threads
- favicon = $ '.watch-thread-link', thread.OP.nodes.post
- if ID of watched
- $.addClass favicon, 'watched'
- else
- $.rmClass favicon, 'watched'
- return
-
cb:
+ openAll: ->
+ return if $.hasClass @, 'disabled'
+ for a in $$ 'a[title]', ThreadWatcher.list
+ $.open a.href
+ $.event 'CloseMenu'
+ checkThreads: ->
+ return if $.hasClass @, 'disabled'
+ ThreadWatcher.fetchAllStatus()
+ pruneDeads: ->
+ return if $.hasClass @, 'disabled'
+ for {boardID, threadID, data} in ThreadWatcher.getAll() when data.isDead
+ delete ThreadWatcher.db.data.boards[boardID][threadID]
+ ThreadWatcher.db.deleteIfEmpty {boardID}
+ ThreadWatcher.db.save()
+ ThreadWatcher.refresh()
+ $.event 'CloseMenu'
toggle: ->
ThreadWatcher.toggle Get.postFromNode(@).thread
- x: ->
- thread = @nextElementSibling.pathname.split '/'
- ThreadWatcher.unwatch thread[1], thread[3]
+ rm: ->
+ [boardID, threadID] = @parentNode.dataset.fullID.split '.'
+ ThreadWatcher.rm boardID, +threadID
post: (e) ->
{board, postID, threadID} = e.detail
if postID is threadID
if Conf['Auto Watch']
$.set 'AutoWatch', threadID
else if Conf['Auto Watch Reply']
- ThreadWatcher.watch board.threads[threadID]
+ ThreadWatcher.add board.threads[threadID]
+ threadUpdate: (e) ->
+ {thread} = e.detail
+ return unless e.detail[404] and ThreadWatcher.db.get {boardID: thread.board.ID, threadID: thread.ID}
+ # Update 404 status.
+ ThreadWatcher.add thread
+
+ fetchCount:
+ fetched: 0
+ fetching: 0
+ fetchAllStatus: ->
+ ThreadWatcher.status.textContent = '...'
+ for thread in ThreadWatcher.getAll()
+ ThreadWatcher.fetchStatus thread
+ return
+ fetchStatus: ({boardID, threadID, data}) ->
+ return if data.isDead
+ {fetchCount} = ThreadWatcher
+ fetchCount.fetching++
+ $.ajax "//api.4chan.org/#{boardID}/res/#{threadID}.json",
+ onloadend: ->
+ fetchCount.fetched++
+ if fetchCount.fetched is fetchCount.fetching
+ fetchCount.fetched = 0
+ fetchCount.fetching = 0
+ status = ''
+ else
+ status = "#{Math.round fetchCount.fetched / fetchCount.fetching * 100}%"
+ ThreadWatcher.status.textContent = status
+ return if @status isnt 404
+ if Conf['Auto Prune']
+ ThreadWatcher.rm boardID, threadID
+ else
+ data.isDead = true
+ ThreadWatcher.db.set {boardID, threadID, val: data}
+ ThreadWatcher.refresh()
+ ,
+ type: 'head'
+
+ getAll: ->
+ all = []
+ for boardID, threads of ThreadWatcher.db.data.boards
+ if Conf['Current Board'] and boardID isnt g.BOARD.ID
+ continue
+ for threadID, data of threads
+ all.push {boardID, threadID, data}
+ all
+
+ makeLine: (boardID, threadID, data) ->
+ x = $.el 'a',
+ textContent: '✖'
+ href: 'javascript:;'
+ $.on x, 'click', ThreadWatcher.cb.rm
+
+ if data.isDead
+ href = Redirect.to 'thread', {boardID, threadID}
+ link = $.el 'a',
+ href: href or "/#{boardID}/res/#{threadID}"
+ textContent: data.excerpt
+ title: data.excerpt
+
+ div = $.el 'div'
+ fullID = "#{boardID}.#{threadID}"
+ div.dataset.fullID = fullID
+ $.addClass div, 'current' if g.VIEW is 'thread' and fullID is "#{g.BOARD}.#{g.THREADID}"
+ $.addClass div, 'dead-thread' if data.isDead
+ $.add div, [x, $.tn(' '), link]
+ div
+ refresh: ->
+ nodes = []
+ for {boardID, threadID, data} in ThreadWatcher.getAll()
+ nodes.push ThreadWatcher.makeLine boardID, threadID, data
+
+ {list} = ThreadWatcher
+ $.rmAll list
+ $.add list, nodes
+
+ for threadID, thread of g.BOARD.threads
+ toggler = $ '.watcher-toggler', thread.OP.nodes.post
+ toggler.src = if ThreadWatcher.db.get {boardID: thread.board.ID, threadID}
+ Favicon.default
+ else
+ Favicon.empty
+
+ for refresher in ThreadWatcher.menu.refreshers
+ refresher()
+ return
toggle: (thread) ->
- unless $.hasClass $('.watch-thread-link', thread.OP.nodes.post), 'watched'
- ThreadWatcher.watch thread
+ boardID = thread.board.ID
+ threadID = thread.ID
+ if ThreadWatcher.db.get {boardID, threadID}
+ ThreadWatcher.rm boardID, threadID
else
- ThreadWatcher.unwatch thread.board, thread.ID
+ ThreadWatcher.add thread
+ add: (thread) ->
+ data = {}
+ boardID = thread.board.ID
+ threadID = thread.ID
+ if thread.isDead
+ if Conf['Auto Prune'] and ThreadWatcher.db.get {boardID, threadID}
+ ThreadWatcher.rm boardID, threadID
+ return
+ data.isDead = true
+ data.excerpt = Get.threadExcerpt thread
+ ThreadWatcher.db.set {boardID, threadID, val: data}
+ ThreadWatcher.refresh()
+ rm: (boardID, threadID) ->
+ ThreadWatcher.db.delete {boardID, threadID}
+ ThreadWatcher.refresh()
- unwatch: (board, threadID) ->
- $.get 'WatchedThreads', {}, (item) ->
- watched = item['WatchedThreads']
- delete watched[board][threadID]
- delete watched[board] unless Object.keys(watched[board]).length
- ThreadWatcher.refresh watched
- $.set 'WatchedThreads', watched
+ convert: (oldFormat) ->
+ newFormat = {}
+ for boardID, threads of oldFormat
+ for threadID, data of threads
+ (newFormat[boardID] or= {})[threadID] = excerpt: data.textContent
+ newFormat
- watch: (thread) ->
- $.get 'WatchedThreads', {}, (item) ->
- watched = item['WatchedThreads']
- watched[thread.board] or= {}
- watched[thread.board][thread] =
- href: "/#{thread.board}/res/#{thread}"
- textContent: Get.threadExcerpt thread
- ThreadWatcher.refresh watched
- $.set 'WatchedThreads', watched
\ No newline at end of file
+ menu:
+ refreshers: []
+ init: ->
+ return if !Conf['Thread Watcher']
+ menu = new UI.Menu 'thread watcher'
+ $.on $('.menu-button', ThreadWatcher.dialog), 'click', (e) ->
+ menu.toggle e, @, ThreadWatcher
+ @addHeaderMenuEntry()
+ @addMenuEntries()
+
+ addHeaderMenuEntry: ->
+ return if g.VIEW isnt 'thread'
+ entryEl = $.el 'a',
+ href: 'javascript:;'
+ $.event 'AddMenuEntry',
+ type: 'header'
+ el: entryEl
+ order: 60
+ $.on entryEl, 'click', -> ThreadWatcher.toggle g.threads["#{g.BOARD}.#{g.THREADID}"]
+ @refreshers.push ->
+ [addClass, rmClass, text] = if $ '.current', ThreadWatcher.list
+ ['unwatch-thread', 'watch-thread', 'Unwatch thread']
+ else
+ ['watch-thread', 'unwatch-thread', 'Watch thread']
+ $.addClass entryEl, addClass
+ $.rmClass entryEl, rmClass
+ entryEl.textContent = text
+
+ addMenuEntries: ->
+ entries = []
+
+ # `Open all` entry
+ entries.push
+ cb: ThreadWatcher.cb.openAll
+ entry:
+ type: 'thread watcher'
+ el: $.el 'a',
+ textContent: 'Open all threads'
+ refresh: -> (if ThreadWatcher.list.firstElementChild then $.rmClass else $.addClass) @el, 'disabled'
+
+ # `Check 404'd threads` entry
+ entries.push
+ cb: ThreadWatcher.cb.checkThreads
+ entry:
+ type: 'thread watcher'
+ el: $.el 'a',
+ textContent: 'Check 404\'d threads'
+ refresh: -> (if $('div:not(.dead-thread)', ThreadWatcher.list) then $.rmClass else $.addClass) @el, 'disabled'
+
+ # `Prune 404'd threads` entry
+ entries.push
+ cb: ThreadWatcher.cb.pruneDeads
+ entry:
+ type: 'thread watcher'
+ el: $.el 'a',
+ textContent: 'Prune 404\'d threads'
+ refresh: -> (if $('.dead-thread', ThreadWatcher.list) then $.rmClass else $.addClass) @el, 'disabled'
+
+ # `Settings` entries:
+ subEntries = []
+ for name, conf of Config.threadWatcher
+ subEntries.push @createSubEntry name, conf[1]
+ entries.push
+ entry:
+ type: 'thread watcher'
+ el: $.el 'span',
+ textContent: 'Settings'
+ subEntries: subEntries
+
+ for {entry, cb, refresh} in entries
+ entry.el.href = 'javascript:;' if entry.el.nodeName is 'A'
+ $.on entry.el, 'click', cb if cb
+ @refreshers.push refresh.bind entry if refresh
+ $.event 'AddMenuEntry', entry
+ createSubEntry: (name, desc) ->
+ entry =
+ type: 'thread watcher'
+ el: $.el 'label',
+ innerHTML: " #{name}"
+ title: desc
+ input = entry.el.firstElementChild
+ input.checked = Conf[name]
+ $.on input, 'change', $.cb.checked
+ $.on input, 'change', ThreadWatcher.refresh if name is 'Current Board'
+ entry
diff --git a/src/Posting/QuickReply.coffee b/src/Posting/QuickReply.coffee
index 5907fec94..c1a40cad4 100644
--- a/src/Posting/QuickReply.coffee
+++ b/src/Posting/QuickReply.coffee
@@ -665,21 +665,9 @@ QR =
cv.width = img.width = width
cv.getContext('2d').drawImage img, 0, 0, width, height
URL.revokeObjectURL fileURL
- applyBlob = (blob) =>
+ cv.toBlob (blob) =>
@URL = URL.createObjectURL blob
@nodes.el.style.backgroundImage = "url(#{@URL})"
- if cv.toBlob
- cv.toBlob applyBlob
- return
- data = atob cv.toDataURL().split(',')[1]
-
- # DataUrl to Binary code from Aeosynth's 4chan X repo
- l = data.length
- ui8a = new Uint8Array l
- for i in [0...l]
- ui8a[i] = data.charCodeAt i
-
- applyBlob new Blob [ui8a], type: 'image/png'
fileURL = URL.createObjectURL @file
img.src = fileURL
diff --git a/src/Quotelinks/QuoteYou.coffee b/src/Quotelinks/QuoteYou.coffee
index 2e5da0dc2..898f89fe4 100644
--- a/src/Quotelinks/QuoteYou.coffee
+++ b/src/Quotelinks/QuoteYou.coffee
@@ -16,7 +16,6 @@ QuoteYou =
cb: @node
node: ->
- # Stop there if it's a clone.
return if @isClone
if @info.yours