Release 4chan X v1.7.37.
This commit is contained in:
parent
74e9dca89b
commit
61983c537c
10
CHANGELOG.md
10
CHANGELOG.md
@ -1,3 +1,13 @@
|
||||
### v1.7.37
|
||||
*2014-05-14*
|
||||
|
||||
**DamonGant**
|
||||
- Innovandalism Archive is now Deniable Plausibility.
|
||||
|
||||
**ccd0**
|
||||
- Disable HTML both in custom board titles and file info formatting. This shuts down a means for a malicious script injected into the page to permanently install itself, to be run each time you browse 4chan. I expect few or no people were actually using their own HTML in these fields; if you want it back, make a request on the [issues](https://github.com/ccd0/4chan-x/issues) page, and I will consider working on a secure implementation.
|
||||
- Bug fixes.
|
||||
|
||||
### v1.7.36
|
||||
*2014-05-13*
|
||||
|
||||
|
||||
2
LICENSE
2
LICENSE
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* 4chan X - Version 1.7.36 - 2014-05-13
|
||||
* 4chan X - Version 1.7.37 - 2014-05-14
|
||||
*
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.7.36
|
||||
// @version 1.7.37
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
// Generated by CoffeeScript
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.7.36
|
||||
// @version 1.7.37
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -24,7 +24,7 @@
|
||||
// ==/UserScript==
|
||||
|
||||
/*
|
||||
* 4chan X - Version 1.7.36 - 2014-05-13
|
||||
* 4chan X - Version 1.7.37 - 2014-05-14
|
||||
*
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
||||
@ -154,7 +154,7 @@
|
||||
'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.'],
|
||||
'Show Support Message': [true, 'Warn if your browser is unsupported. 4chan X may not operate correctly on unsupported browser versions.']
|
||||
'Show Support Message': [true, 'Warn if your browser or configuration is unsupported and may cause 4chan X to not operate correctly.']
|
||||
},
|
||||
'Linkification': {
|
||||
'Linkify': [true, 'Convert text into links where applicable.'],
|
||||
@ -372,7 +372,7 @@
|
||||
doc = d.documentElement;
|
||||
|
||||
g = {
|
||||
VERSION: '1.7.36',
|
||||
VERSION: '1.7.37',
|
||||
NAMESPACE: '4chan X.',
|
||||
boards: {}
|
||||
};
|
||||
@ -552,15 +552,21 @@
|
||||
};
|
||||
|
||||
$.addClass = function() {
|
||||
var className, el, _ref;
|
||||
el = arguments[0], className = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
||||
return (_ref = el.classList).add.apply(_ref, className);
|
||||
var className, classNames, el, _i, _len;
|
||||
el = arguments[0], classNames = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
||||
for (_i = 0, _len = classNames.length; _i < _len; _i++) {
|
||||
className = classNames[_i];
|
||||
el.classList.add(className);
|
||||
}
|
||||
};
|
||||
|
||||
$.rmClass = function() {
|
||||
var className, el, _ref;
|
||||
el = arguments[0], className = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
||||
return (_ref = el.classList).remove.apply(_ref, className);
|
||||
var className, classNames, el, _i, _len;
|
||||
el = arguments[0], classNames = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
||||
for (_i = 0, _len = classNames.length; _i < _len; _i++) {
|
||||
className = classNames[_i];
|
||||
el.classList.remove(className);
|
||||
}
|
||||
};
|
||||
|
||||
$.toggleClass = function(el, className) {
|
||||
@ -2284,7 +2290,7 @@
|
||||
return;
|
||||
}
|
||||
el = $.el('span', {
|
||||
innerHTML: "Desktop notification permissions are not granted.\n[<a href='https://github.com/MayhemYDG/4chan-x/wiki/FAQ#desktop-notifications' target=_blank>FAQ</a>]<br>\n<button>Authorize</button> or <button>Disable</button>"
|
||||
innerHTML: '4chan X needs your permission to show desktop notifications.\n[<a href=\'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions#why-is-4chan-x-asking-for-permission-to-show-desktop-notifications\' target=_blank>FAQ</a>]<br>\n<button>Authorize</button> or <button>Disable</button>'
|
||||
});
|
||||
_ref = $$('button', el), authorize = _ref[0], disable = _ref[1];
|
||||
$.on(authorize, 'click', function() {
|
||||
@ -3092,7 +3098,7 @@
|
||||
o.file = {
|
||||
name: data.filename + data.ext,
|
||||
timestamp: "" + data.tim + data.ext,
|
||||
url: boardID === 'f' ? ("//i.4cdn.org/" + boardID + "/" + data.filename + data.ext).replace(/'/g, ''') : "//i.4cdn.org/" + boardID + "/" + data.tim + data.ext,
|
||||
url: boardID === 'f' ? ("//i.4cdn.org/" + boardID + "/" + (encodeURIComponent(data.filename)) + data.ext).replace(/'/g, ''') : "//i.4cdn.org/" + boardID + "/" + data.tim + data.ext,
|
||||
height: data.h,
|
||||
width: data.w,
|
||||
MD5: data.md5,
|
||||
@ -3172,7 +3178,7 @@
|
||||
a.textContent = Build.shortFilename(filename);
|
||||
shortFilename = a.innerHTML;
|
||||
a.textContent = filename;
|
||||
filename = a.innerHTML.replace(/'/g, ''');
|
||||
filename = a.innerHTML.replace(/'/g, ''');
|
||||
fileDims = file.name.slice(-3) === 'pdf' ? 'PDF' : "" + file.width + "x" + file.height;
|
||||
fileInfo = ("<div class=fileText id=fT" + postID + (file.isSpoiler ? " title='" + filename + "'" : '') + ">File: <a href='" + file.url + "' target=_blank>" + file.timestamp + "</a>") + ("-(" + fileSize + ", " + fileDims + (file.isSpoiler ? '' : ", <span" + (filename !== shortFilename ? " title='" + filename + "'" : '') + ">" + shortFilename + "</span>")) + ")</div>";
|
||||
fileHTML = "<div class=file id=f" + postID + ">" + fileInfo + imgSrc + "</div>";
|
||||
@ -3521,13 +3527,13 @@
|
||||
|
||||
UI = (function() {
|
||||
var Menu, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, touchend, touchmove;
|
||||
dialog = function(id, position, html) {
|
||||
dialog = function(id, position, properties) {
|
||||
var child, el, move, _i, _len, _ref;
|
||||
el = $.el('div', {
|
||||
className: 'dialog',
|
||||
innerHTML: html,
|
||||
id: id
|
||||
});
|
||||
$.extend(el, properties);
|
||||
el.style.cssText = position;
|
||||
$.get("" + id + ".position", position, function(item) {
|
||||
return el.style.cssText = item["" + id + ".position"];
|
||||
@ -6207,7 +6213,9 @@
|
||||
dialog: function() {
|
||||
var dialog, elm, event, i, items, name, node, nodes, prop, rules, save, setNode, _, _i, _len, _ref, _ref1, _ref2;
|
||||
QR.nodes = nodes = {
|
||||
el: dialog = UI.dialog('qr', 'top:0;right:0;', "<div class=move><label><input type=checkbox id=autohide title=Auto-hide>Quick Reply</label><a href=javascript:; class=close title=Close>×</a><select data-name=thread title='Create a new thread / Reply'><option value=new>New thread</option></select></div><form><div class=persona><input name=name data-name=name list=\"list-name\" placeholder=Name class=field size=1 tabindex=10><input name=email data-name=email list=\"list-email\" placeholder=E-mail class=field size=1 tabindex=20><input name=sub data-name=sub list=\"list-sub\" placeholder=Subject class=field size=1 tabindex=30> </div><div class=textarea><textarea data-name=com placeholder=Comment class=field tabindex=40></textarea><span id=char-count></span></div><div id=dump-list-container><div id=dump-list></div><a id=add-post href=javascript:; title=\"Add a post\" tabindex=50>+</a></div><div id=file-n-submit><span id=qr-filename-container class=field tabindex=60><span id=qr-no-file>No selected file</span><input id=\"qr-filename\" data-name=\"filename\" spellcheck=\"false\"><span id=qr-extras-container><a id=qr-filerm href=javascript:; title='Remove file'><i class=\"fa fa-times-circle\"></i></a><a id=url-button title='Post from url'><i class=\"fa fa-link\"></i></a><a id=dump-button title='Dump list'><i class=\"fa fa-plus-square\"></i></a></span></span><label id=qr-spoiler-label><input type=checkbox id=qr-file-spoiler title='Spoiler image' tabindex=70></label><input type=submit tabindex=80></div><input type=file multiple></form><datalist id=\"list-name\"></datalist><datalist id=\"list-email\"></datalist><datalist id=\"list-sub\"></datalist> ")
|
||||
el: dialog = UI.dialog('qr', 'top:0;right:0;', {
|
||||
innerHTML: "<div class=move><label><input type=checkbox id=autohide title=Auto-hide>Quick Reply</label><a href=javascript:; class=close title=Close>×</a><select data-name=thread title='Create a new thread / Reply'><option value=new>New thread</option></select></div><form><div class=persona><input name=name data-name=name list=\"list-name\" placeholder=Name class=field size=1 tabindex=10><input name=email data-name=email list=\"list-email\" placeholder=E-mail class=field size=1 tabindex=20><input name=sub data-name=sub list=\"list-sub\" placeholder=Subject class=field size=1 tabindex=30> </div><div class=textarea><textarea data-name=com placeholder=Comment class=field tabindex=40></textarea><span id=char-count></span></div><div id=dump-list-container><div id=dump-list></div><a id=add-post href=javascript:; title=\"Add a post\" tabindex=50>+</a></div><div id=file-n-submit><span id=qr-filename-container class=field tabindex=60><span id=qr-no-file>No selected file</span><input id=\"qr-filename\" data-name=\"filename\" spellcheck=\"false\"><span id=qr-extras-container><a id=qr-filerm href=javascript:; title='Remove file'><i class=\"fa fa-times-circle\"></i></a><a id=url-button title='Post from url'><i class=\"fa fa-link\"></i></a><a id=dump-button title='Dump list'><i class=\"fa fa-plus-square\"></i></a></span></span><label id=qr-spoiler-label><input type=checkbox id=qr-file-spoiler title='Spoiler image' tabindex=70></label><input type=submit tabindex=80></div><input type=file multiple></form><datalist id=\"list-name\"></datalist><datalist id=\"list-email\"></datalist><datalist id=\"list-sub\"></datalist> "
|
||||
})
|
||||
};
|
||||
setNode = function(name, query) {
|
||||
return nodes[name] = $(query, dialog);
|
||||
@ -6263,7 +6271,7 @@
|
||||
if (g.BOARD.ID === 'f') {
|
||||
nodes.flashTag = $.el('select', {
|
||||
name: 'filetag',
|
||||
innerHTML: "<option value=0>Hentai</option>\n<option value=6>Porn</option>\n<option value=1>Japanese</option>\n<option value=2>Anime</option>\n<option value=3>Game</option>\n<option value=5>Loop</option>\n<option value=4 selected>Other</option>"
|
||||
innerHTML: '<option value=0>Hentai</option>\n<option value=6>Porn</option>\n<option value=1>Japanese</option>\n<option value=2>Anime</option>\n<option value=3>Game</option>\n<option value=5>Loop</option>\n<option value=4 selected>Other</option>'
|
||||
});
|
||||
nodes.flashTag.dataset["default"] = '4';
|
||||
$.add(nodes.form, nodes.flashTag);
|
||||
@ -6456,7 +6464,7 @@
|
||||
QR.cooldown.auto = false;
|
||||
QR.status();
|
||||
return QR.error($.el('span', {
|
||||
innerHTML: "4chan X encountered an error while posting. \n[<a href=\"//4chan.org/banned\" target=_blank>Banned?</a>] [<a href=\"https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions#what-does-4chan-x-encountered-an-error-while-posting-please-try-again-mean\" target=_blank>More info</a>]"
|
||||
innerHTML: '4chan X encountered an error while posting. \n[<a href="//4chan.org/banned" target=_blank>Banned?</a>] [<a href="https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions#what-does-4chan-x-encountered-an-error-while-posting-please-try-again-mean" target=_blank>More info</a>]'
|
||||
}));
|
||||
}
|
||||
};
|
||||
@ -7519,7 +7527,7 @@
|
||||
nodes = Gallery.nodes = {};
|
||||
nodes.el = dialog = $.el('div', {
|
||||
id: 'a-gallery',
|
||||
innerHTML: "<div class=gal-viewport>\n <span class=gal-buttons>\n <a class=\"menu-button\" href=\"javascript:;\"><i></i></a>\n <a href=javascript:; class=gal-close>×</a>\n </span>\n <a class=gal-name target=\"_blank\"></a>\n <span class=gal-count><span class='count'></span> / <span class='total'></span></a></span>\n <div class=gal-prev></div>\n <div class=gal-image>\n <a href=javascript:;><img></a>\n </div>\n <div class=gal-next></div>\n</div>\n<div class=gal-thumbnails></div>"
|
||||
innerHTML: '<div class=gal-viewport>\n <span class=gal-buttons>\n <a class="menu-button" href="javascript:;"><i></i></a>\n <a href=javascript:; class=gal-close>×</a>\n </span>\n <a class=gal-name target="_blank"></a>\n <span class=gal-count><span class=\'count\'></span> / <span class=\'total\'></span></a></span>\n <div class=gal-prev></div>\n <div class=gal-image>\n <a href=javascript:;><img></a>\n </div>\n <div class=gal-next></div>\n</div>\n<div class=gal-thumbnails></div>'
|
||||
});
|
||||
_ref = {
|
||||
frame: '.gal-image',
|
||||
@ -9428,7 +9436,7 @@
|
||||
}
|
||||
if (Conf['Updater and Stats in Header']) {
|
||||
this.dialog = sc = $.el('span', {
|
||||
innerHTML: "<span id=post-count>0</span> / <span id=file-count>0</span>" + (Conf["Page Count in Stats"] ? " / <span id=page-count>0</span>" : ""),
|
||||
innerHTML: "<span id=post-count>0</span> / <span id=file-count>0</span>" + (Conf['Page Count in Stats'] ? ' / <span id=page-count>0</span>' : ''),
|
||||
id: 'thread-stats',
|
||||
title: 'Post Count / File Count' + (Conf["Page Count in Stats"] ? " / Page Count" : "")
|
||||
});
|
||||
@ -9436,7 +9444,9 @@
|
||||
return Header.addShortcut(sc);
|
||||
});
|
||||
} else {
|
||||
this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', "<div class=move title='Post Count / File Count" + (Conf["Page Count in Stats"] ? " / Page Count" : "") + "'><span id=post-count>0</span> / <span id=file-count>0</span>" + (Conf["Page Count in Stats"] ? " / <span id=page-count>0</span>" : "") + "</div>");
|
||||
this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', {
|
||||
innerHTML: "<div class=move title='Post Count / File Count" + (Conf['Page Count in Stats'] ? ' / Page Count' : '') + "'><span id=post-count>0</span> / <span id=file-count>0</span>" + (Conf['Page Count in Stats'] ? ' / <span id=page-count>0</span>' : '') + "</div>"
|
||||
});
|
||||
$.ready((function(_this) {
|
||||
return function() {
|
||||
return $.add(d.body, sc);
|
||||
@ -9547,14 +9557,16 @@
|
||||
}
|
||||
if (Conf['Updater and Stats in Header']) {
|
||||
this.dialog = sc = $.el('span', {
|
||||
innerHTML: "<span id=update-status></span><span id=update-timer title='Update now'></span>",
|
||||
innerHTML: '<span id=update-status></span><span id=update-timer title="Update now"></span>',
|
||||
id: 'updater'
|
||||
});
|
||||
$.ready(function() {
|
||||
return Header.addShortcut(sc);
|
||||
});
|
||||
} else {
|
||||
this.dialog = sc = UI.dialog('updater', 'bottom: 0px; left: 0px;', "<div class=move></div><span id=update-status></span><span id=update-timer title='Update now'></span>");
|
||||
this.dialog = sc = UI.dialog('updater', 'bottom: 0px; left: 0px;', {
|
||||
innerHTML: '<div class=move></div><span id=update-status></span><span id=update-timer title="Update now"></span>'
|
||||
});
|
||||
$.addClass(doc, 'float');
|
||||
$.ready((function(_this) {
|
||||
return function() {
|
||||
@ -9956,7 +9968,9 @@
|
||||
className: 'disabled fa fa-eye'
|
||||
});
|
||||
this.db = new DataBoard('watchedThreads', this.refresh, true);
|
||||
this.dialog = UI.dialog('thread-watcher', 'top: 50px; left: 0px;', "<div class=\"move\">Thread Watcher <span id=\"watcher-status\"></span><a class=\"menu-button\" href=\"javascript:;\"><i class=\"fa fa-angle-down\"></i></a><a class=close href=javascript:;>×</a></span></div><div id=\"watched-threads\"></div>");
|
||||
this.dialog = UI.dialog('thread-watcher', 'top: 50px; left: 0px;', {
|
||||
innerHTML: "<div class=\"move\">Thread Watcher <span id=\"watcher-status\"></span><a class=\"menu-button\" href=\"javascript:;\"><i class=\"fa fa-angle-down\"></i></a><a class=close href=javascript:;>×</a></span></div><div id=\"watched-threads\"></div>"
|
||||
});
|
||||
this.status = $('#watcher-status', this.dialog);
|
||||
this.list = this.dialog.lastElementChild;
|
||||
$.on(d, 'QRPostSuccessful', this.cb.post);
|
||||
@ -10767,7 +10781,7 @@
|
||||
}
|
||||
return Redirect.data = o;
|
||||
},
|
||||
archives: [{"uid":0,"name":"Foolz","domain":"archive.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["a","biz","co","diy","gd","jp","m","sci","sp","tg","tv","vg","vp","vr","wsg"],"files":["a","biz","diy","gd","jp","m","sci","tg","vg","vp","vr","wsg"]},{"uid":1,"name":"NSFW Foolz","domain":"nsfw.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["u"],"files":["u"]},{"uid":2,"name":"The Dark Cave","domain":"archive.thedarkcave.org","http":true,"https":true,"software":"foolfuuka","boards":["c","int","out","po"],"files":["c","po"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":18,"name":"4plebs Flash Archive","domain":"flash.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["f"],"files":["f"]},{"uid":4,"name":"Nyafuu","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["d","i","lgbt"],"files":["d","i","lgbt"]},{"uid":8,"name":"Rebecca Black Tech","domain":"rbt.asia","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","w"],"files":["cgl","g","mu","w"]},{"uid":9,"name":"Heinessen","domain":"archive.heinessen.com","http":true,"https":false,"software":"fuuka","boards":["an","fit","k","mlp","r9k","toy"],"files":["an","fit","k","mlp","r9k","toy"]},{"uid":10,"name":"warosu","domain":"fuuka.warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.eu","http":true,"https":true,"software":"foolfuuka","boards":["asp","b","cm","h","hc","hm","n","p","r","s","soc","y"],"files":["asp","cm","h","hc","hm","n","p","r","s","soc","y"]},{"uid":16,"name":"maware","domain":"archive.mawa.re","http":true,"https":false,"software":"foolfuuka","boards":["t"],"files":["t"]},{"uid":17,"name":"installgentoo.com","domain":"chan.installgentoo.com","http":true,"https":false,"software":"foolfuuka","boards":["g","t"],"files":["g","t"]},{"uid":19,"name":"Innovandalism Archive","domain":"boards.innovandalism.eu","http":true,"https":false,"software":"foolfuuka","boards":["v"],"files":[]},{"uid":13,"name":"Foolz Beta","domain":"beta.foolz.us","http":true,"https":true,"withCredentials":true,"software":"foolfuuka","boards":["a","biz","co","d","diy","gd","h","i","jp","m","mlp","s4s","sci","sp","tg","tv","u","v","vg","vp","vr","wsg"],"files":[]}],
|
||||
archives: [{"uid":0,"name":"Foolz","domain":"archive.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["a","biz","co","diy","gd","jp","m","sci","sp","tg","tv","vg","vp","vr","wsg"],"files":["a","biz","diy","gd","jp","m","sci","tg","vg","vp","vr","wsg"]},{"uid":1,"name":"NSFW Foolz","domain":"nsfw.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["u"],"files":["u"]},{"uid":2,"name":"The Dark Cave","domain":"archive.thedarkcave.org","http":true,"https":true,"software":"foolfuuka","boards":["c","int","out","po"],"files":["c","po"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":18,"name":"4plebs Flash Archive","domain":"flash.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["f"],"files":["f"]},{"uid":4,"name":"Nyafuu","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["d","i","lgbt"],"files":["d","i","lgbt"]},{"uid":8,"name":"Rebecca Black Tech","domain":"rbt.asia","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","w"],"files":["cgl","g","mu","w"]},{"uid":9,"name":"Heinessen","domain":"archive.heinessen.com","http":true,"https":false,"software":"fuuka","boards":["an","fit","k","mlp","r9k","toy"],"files":["an","fit","k","mlp","r9k","toy"]},{"uid":10,"name":"warosu","domain":"fuuka.warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.eu","http":true,"https":true,"software":"foolfuuka","boards":["asp","b","cm","h","hc","hm","n","p","r","s","soc","y"],"files":["asp","cm","h","hc","hm","n","p","r","s","soc","y"]},{"uid":16,"name":"maware","domain":"archive.mawa.re","http":true,"https":false,"software":"foolfuuka","boards":["t"],"files":["t"]},{"uid":17,"name":"installgentoo.com","domain":"chan.installgentoo.com","http":true,"https":false,"software":"foolfuuka","boards":["g","t"],"files":["g","t"]},{"uid":13,"name":"Foolz Beta","domain":"beta.foolz.us","http":true,"https":true,"withCredentials":true,"software":"foolfuuka","boards":["a","biz","co","d","diy","gd","h","i","jp","m","mlp","s4s","sci","sp","tg","tv","u","v","vg","vp","vr","wsg"],"files":[]},{"uid":19,"name":"Deniable Plausibility","domain":"boards.deniableplausibility.net","http":true,"https":false,"software":"foolfuuka","boards":["v"],"files":["v"]}],
|
||||
to: function(dest, data) {
|
||||
var archive;
|
||||
archive = (dest === 'search' ? Redirect.data.thread : Redirect.data[dest])[data.boardID];
|
||||
@ -10940,11 +10954,10 @@
|
||||
},
|
||||
focus: function() {
|
||||
var items, string, string2;
|
||||
this.textContent = this.innerHTML;
|
||||
string = "" + g.BOARD + "." + this.className;
|
||||
string2 = "" + string + ".orig";
|
||||
items = {
|
||||
title: this.innerHTML
|
||||
title: this.textContent
|
||||
};
|
||||
items[string] = '';
|
||||
items[string2] = false;
|
||||
@ -10955,14 +10968,13 @@
|
||||
});
|
||||
},
|
||||
blur: function() {
|
||||
this.innerHTML = this.textContent;
|
||||
this.contentEditable = false;
|
||||
return $.set("" + g.BOARD + "." + this.className, this.textContent);
|
||||
}
|
||||
},
|
||||
custom: function(child) {
|
||||
var cachedTest, string;
|
||||
cachedTest = child.innerHTML;
|
||||
cachedTest = child.textContent;
|
||||
string = "" + g.BOARD + "." + child.className;
|
||||
$.on(child, 'click keydown focus blur', function(e) {
|
||||
return Banner.cb[e.type].apply(this, [e]);
|
||||
@ -10973,12 +10985,12 @@
|
||||
return;
|
||||
}
|
||||
if (Conf['Persistent Custom Board Titles']) {
|
||||
return child.innerHTML = title;
|
||||
return child.textContent = title;
|
||||
}
|
||||
string2 = "" + string + ".orig";
|
||||
return $.get(string2, cachedTest, function(itemb) {
|
||||
if (cachedTest === itemb[string2]) {
|
||||
return child.innerHTML = title;
|
||||
return child.textContent = title;
|
||||
} else {
|
||||
$.set(string, cachedTest);
|
||||
return $.set(string2, cachedTest);
|
||||
@ -11427,11 +11439,11 @@
|
||||
return this.file.text.innerHTML = "<span class=file-info>" + (FileInfo.format(Conf['fileInfo'], this)) + "</span>";
|
||||
},
|
||||
format: function(formatString, post) {
|
||||
return formatString.replace(/%([A-Za-z])/g, function(s, c) {
|
||||
return formatString.replace(/%([A-Za-z])|[^%]+/g, function(s, c) {
|
||||
if (c in FileInfo.formatters) {
|
||||
return FileInfo.formatters[c].call(post);
|
||||
} else {
|
||||
return s;
|
||||
return FileInfo.escape(s);
|
||||
}
|
||||
});
|
||||
},
|
||||
@ -11451,7 +11463,7 @@
|
||||
return name.replace(/[&"'<>]/g, function(c) {
|
||||
return {
|
||||
'&': '&',
|
||||
"'": ''',
|
||||
"'": ''',
|
||||
'"': '"',
|
||||
'<': '<',
|
||||
'>': '>'
|
||||
@ -13521,7 +13533,7 @@
|
||||
});
|
||||
},
|
||||
initReady: function() {
|
||||
var GMver, err, href, i, passLink, styleSelector, test, v, _i, _len, _ref, _ref1;
|
||||
var GMver, err, href, i, passLink, styleSelector, v, _i, _len, _ref, _ref1;
|
||||
if ((_ref = d.title) === '4chan - Temporarily Offline' || _ref === '4chan - 404 Not Found') {
|
||||
if (Conf['404 Redirect'] && g.VIEW === 'thread') {
|
||||
href = Redirect.to('thread', {
|
||||
@ -13549,10 +13561,8 @@
|
||||
} else {
|
||||
$.event('4chanXInitFinished');
|
||||
}
|
||||
test = $.el('span');
|
||||
test.classList.add('a', 'b');
|
||||
if (test.className !== 'a b' && Conf['Show Support Message']) {
|
||||
new Notice('warning', "Your version of Firefox is outdated (v26 minimum) and 4chan X may not operate correctly.", 30);
|
||||
if (!Conf['Show Support Message']) {
|
||||
return;
|
||||
}
|
||||
GMver = GM_info.version.split('.');
|
||||
_ref1 = "1.14".split('.');
|
||||
|
||||
BIN
builds/crx.crx
BIN
builds/crx.crx
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "4chan X",
|
||||
"version": "1.7.36",
|
||||
"version": "1.7.37",
|
||||
"manifest_version": 2,
|
||||
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
||||
"icons": {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
// Generated by CoffeeScript
|
||||
/*
|
||||
* 4chan X - Version 1.7.36 - 2014-05-13
|
||||
* 4chan X - Version 1.7.37 - 2014-05-14
|
||||
*
|
||||
* Licensed under the MIT license.
|
||||
* https://github.com/ccd0/4chan-x/blob/master/LICENSE
|
||||
@ -130,7 +130,7 @@
|
||||
'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.'],
|
||||
'Show Support Message': [true, 'Warn if your browser is unsupported. 4chan X may not operate correctly on unsupported browser versions.']
|
||||
'Show Support Message': [true, 'Warn if your browser or configuration is unsupported and may cause 4chan X to not operate correctly.']
|
||||
},
|
||||
'Linkification': {
|
||||
'Linkify': [true, 'Convert text into links where applicable.'],
|
||||
@ -348,7 +348,7 @@
|
||||
doc = d.documentElement;
|
||||
|
||||
g = {
|
||||
VERSION: '1.7.36',
|
||||
VERSION: '1.7.37',
|
||||
NAMESPACE: '4chan X.',
|
||||
boards: {}
|
||||
};
|
||||
@ -528,15 +528,21 @@
|
||||
};
|
||||
|
||||
$.addClass = function() {
|
||||
var className, el, _ref;
|
||||
el = arguments[0], className = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
||||
return (_ref = el.classList).add.apply(_ref, className);
|
||||
var className, classNames, el, _i, _len;
|
||||
el = arguments[0], classNames = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
||||
for (_i = 0, _len = classNames.length; _i < _len; _i++) {
|
||||
className = classNames[_i];
|
||||
el.classList.add(className);
|
||||
}
|
||||
};
|
||||
|
||||
$.rmClass = function() {
|
||||
var className, el, _ref;
|
||||
el = arguments[0], className = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
||||
return (_ref = el.classList).remove.apply(_ref, className);
|
||||
var className, classNames, el, _i, _len;
|
||||
el = arguments[0], classNames = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
||||
for (_i = 0, _len = classNames.length; _i < _len; _i++) {
|
||||
className = classNames[_i];
|
||||
el.classList.remove(className);
|
||||
}
|
||||
};
|
||||
|
||||
$.toggleClass = function(el, className) {
|
||||
@ -2325,7 +2331,7 @@
|
||||
return;
|
||||
}
|
||||
el = $.el('span', {
|
||||
innerHTML: "Desktop notification permissions are not granted.\n[<a href='https://github.com/MayhemYDG/4chan-x/wiki/FAQ#desktop-notifications' target=_blank>FAQ</a>]<br>\n<button>Authorize</button> or <button>Disable</button>"
|
||||
innerHTML: '4chan X needs your permission to show desktop notifications.\n[<a href=\'https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions#why-is-4chan-x-asking-for-permission-to-show-desktop-notifications\' target=_blank>FAQ</a>]<br>\n<button>Authorize</button> or <button>Disable</button>'
|
||||
});
|
||||
_ref = $$('button', el), authorize = _ref[0], disable = _ref[1];
|
||||
$.on(authorize, 'click', function() {
|
||||
@ -3133,7 +3139,7 @@
|
||||
o.file = {
|
||||
name: data.filename + data.ext,
|
||||
timestamp: "" + data.tim + data.ext,
|
||||
url: boardID === 'f' ? ("//i.4cdn.org/" + boardID + "/" + data.filename + data.ext).replace(/'/g, ''') : "//i.4cdn.org/" + boardID + "/" + data.tim + data.ext,
|
||||
url: boardID === 'f' ? ("//i.4cdn.org/" + boardID + "/" + (encodeURIComponent(data.filename)) + data.ext).replace(/'/g, ''') : "//i.4cdn.org/" + boardID + "/" + data.tim + data.ext,
|
||||
height: data.h,
|
||||
width: data.w,
|
||||
MD5: data.md5,
|
||||
@ -3213,7 +3219,7 @@
|
||||
a.textContent = Build.shortFilename(filename);
|
||||
shortFilename = a.innerHTML;
|
||||
a.textContent = filename;
|
||||
filename = a.innerHTML.replace(/'/g, ''');
|
||||
filename = a.innerHTML.replace(/'/g, ''');
|
||||
fileDims = file.name.slice(-3) === 'pdf' ? 'PDF' : "" + file.width + "x" + file.height;
|
||||
fileInfo = ("<div class=fileText id=fT" + postID + (file.isSpoiler ? " title='" + filename + "'" : '') + ">File: <a href='" + file.url + "' target=_blank>" + file.timestamp + "</a>") + ("-(" + fileSize + ", " + fileDims + (file.isSpoiler ? '' : ", <span" + (filename !== shortFilename ? " title='" + filename + "'" : '') + ">" + shortFilename + "</span>")) + ")</div>";
|
||||
fileHTML = "<div class=file id=f" + postID + ">" + fileInfo + imgSrc + "</div>";
|
||||
@ -3562,13 +3568,13 @@
|
||||
|
||||
UI = (function() {
|
||||
var Menu, dialog, drag, dragend, dragstart, hover, hoverend, hoverstart, touchend, touchmove;
|
||||
dialog = function(id, position, html) {
|
||||
dialog = function(id, position, properties) {
|
||||
var child, el, move, _i, _len, _ref;
|
||||
el = $.el('div', {
|
||||
className: 'dialog',
|
||||
innerHTML: html,
|
||||
id: id
|
||||
});
|
||||
$.extend(el, properties);
|
||||
el.style.cssText = position;
|
||||
$.get("" + id + ".position", position, function(item) {
|
||||
return el.style.cssText = item["" + id + ".position"];
|
||||
@ -6243,7 +6249,9 @@
|
||||
dialog: function() {
|
||||
var dialog, elm, event, i, items, name, node, nodes, prop, rules, save, setNode, _, _i, _len, _ref, _ref1, _ref2;
|
||||
QR.nodes = nodes = {
|
||||
el: dialog = UI.dialog('qr', 'top:0;right:0;', "<div class=move><label><input type=checkbox id=autohide title=Auto-hide>Quick Reply</label><a href=javascript:; class=close title=Close>×</a><select data-name=thread title='Create a new thread / Reply'><option value=new>New thread</option></select></div><form><div class=persona><input name=name data-name=name list=\"list-name\" placeholder=Name class=field size=1 tabindex=10><input name=email data-name=email list=\"list-email\" placeholder=E-mail class=field size=1 tabindex=20><input name=sub data-name=sub list=\"list-sub\" placeholder=Subject class=field size=1 tabindex=30> </div><div class=textarea><textarea data-name=com placeholder=Comment class=field tabindex=40></textarea><span id=char-count></span></div><div id=dump-list-container><div id=dump-list></div><a id=add-post href=javascript:; title=\"Add a post\" tabindex=50>+</a></div><div id=file-n-submit><span id=qr-filename-container class=field tabindex=60><span id=qr-no-file>No selected file</span><input id=\"qr-filename\" data-name=\"filename\" spellcheck=\"false\"><span id=qr-extras-container><a id=qr-filerm href=javascript:; title='Remove file'><i class=\"fa fa-times-circle\"></i></a><a id=url-button title='Post from url'><i class=\"fa fa-link\"></i></a><a id=dump-button title='Dump list'><i class=\"fa fa-plus-square\"></i></a></span></span><label id=qr-spoiler-label><input type=checkbox id=qr-file-spoiler title='Spoiler image' tabindex=70></label><input type=submit tabindex=80></div><input type=file multiple></form><datalist id=\"list-name\"></datalist><datalist id=\"list-email\"></datalist><datalist id=\"list-sub\"></datalist> ")
|
||||
el: dialog = UI.dialog('qr', 'top:0;right:0;', {
|
||||
innerHTML: "<div class=move><label><input type=checkbox id=autohide title=Auto-hide>Quick Reply</label><a href=javascript:; class=close title=Close>×</a><select data-name=thread title='Create a new thread / Reply'><option value=new>New thread</option></select></div><form><div class=persona><input name=name data-name=name list=\"list-name\" placeholder=Name class=field size=1 tabindex=10><input name=email data-name=email list=\"list-email\" placeholder=E-mail class=field size=1 tabindex=20><input name=sub data-name=sub list=\"list-sub\" placeholder=Subject class=field size=1 tabindex=30> </div><div class=textarea><textarea data-name=com placeholder=Comment class=field tabindex=40></textarea><span id=char-count></span></div><div id=dump-list-container><div id=dump-list></div><a id=add-post href=javascript:; title=\"Add a post\" tabindex=50>+</a></div><div id=file-n-submit><span id=qr-filename-container class=field tabindex=60><span id=qr-no-file>No selected file</span><input id=\"qr-filename\" data-name=\"filename\" spellcheck=\"false\"><span id=qr-extras-container><a id=qr-filerm href=javascript:; title='Remove file'><i class=\"fa fa-times-circle\"></i></a><a id=url-button title='Post from url'><i class=\"fa fa-link\"></i></a><a id=dump-button title='Dump list'><i class=\"fa fa-plus-square\"></i></a></span></span><label id=qr-spoiler-label><input type=checkbox id=qr-file-spoiler title='Spoiler image' tabindex=70></label><input type=submit tabindex=80></div><input type=file multiple></form><datalist id=\"list-name\"></datalist><datalist id=\"list-email\"></datalist><datalist id=\"list-sub\"></datalist> "
|
||||
})
|
||||
};
|
||||
setNode = function(name, query) {
|
||||
return nodes[name] = $(query, dialog);
|
||||
@ -6299,7 +6307,7 @@
|
||||
if (g.BOARD.ID === 'f') {
|
||||
nodes.flashTag = $.el('select', {
|
||||
name: 'filetag',
|
||||
innerHTML: "<option value=0>Hentai</option>\n<option value=6>Porn</option>\n<option value=1>Japanese</option>\n<option value=2>Anime</option>\n<option value=3>Game</option>\n<option value=5>Loop</option>\n<option value=4 selected>Other</option>"
|
||||
innerHTML: '<option value=0>Hentai</option>\n<option value=6>Porn</option>\n<option value=1>Japanese</option>\n<option value=2>Anime</option>\n<option value=3>Game</option>\n<option value=5>Loop</option>\n<option value=4 selected>Other</option>'
|
||||
});
|
||||
nodes.flashTag.dataset["default"] = '4';
|
||||
$.add(nodes.form, nodes.flashTag);
|
||||
@ -6481,7 +6489,7 @@
|
||||
QR.cooldown.auto = false;
|
||||
QR.status();
|
||||
return QR.error($.el('span', {
|
||||
innerHTML: "4chan X encountered an error while posting. \n[<a href=\"//4chan.org/banned\" target=_blank>Banned?</a>] [<a href=\"https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions#what-does-4chan-x-encountered-an-error-while-posting-please-try-again-mean\" target=_blank>More info</a>]"
|
||||
innerHTML: '4chan X encountered an error while posting. \n[<a href="//4chan.org/banned" target=_blank>Banned?</a>] [<a href="https://github.com/ccd0/4chan-x/wiki/Frequently-Asked-Questions#what-does-4chan-x-encountered-an-error-while-posting-please-try-again-mean" target=_blank>More info</a>]'
|
||||
}));
|
||||
}
|
||||
};
|
||||
@ -7538,7 +7546,7 @@
|
||||
nodes = Gallery.nodes = {};
|
||||
nodes.el = dialog = $.el('div', {
|
||||
id: 'a-gallery',
|
||||
innerHTML: "<div class=gal-viewport>\n <span class=gal-buttons>\n <a class=\"menu-button\" href=\"javascript:;\"><i></i></a>\n <a href=javascript:; class=gal-close>×</a>\n </span>\n <a class=gal-name target=\"_blank\"></a>\n <span class=gal-count><span class='count'></span> / <span class='total'></span></a></span>\n <div class=gal-prev></div>\n <div class=gal-image>\n <a href=javascript:;><img></a>\n </div>\n <div class=gal-next></div>\n</div>\n<div class=gal-thumbnails></div>"
|
||||
innerHTML: '<div class=gal-viewport>\n <span class=gal-buttons>\n <a class="menu-button" href="javascript:;"><i></i></a>\n <a href=javascript:; class=gal-close>×</a>\n </span>\n <a class=gal-name target="_blank"></a>\n <span class=gal-count><span class=\'count\'></span> / <span class=\'total\'></span></a></span>\n <div class=gal-prev></div>\n <div class=gal-image>\n <a href=javascript:;><img></a>\n </div>\n <div class=gal-next></div>\n</div>\n<div class=gal-thumbnails></div>'
|
||||
});
|
||||
_ref = {
|
||||
frame: '.gal-image',
|
||||
@ -9425,7 +9433,7 @@
|
||||
}
|
||||
if (Conf['Updater and Stats in Header']) {
|
||||
this.dialog = sc = $.el('span', {
|
||||
innerHTML: "<span id=post-count>0</span> / <span id=file-count>0</span>" + (Conf["Page Count in Stats"] ? " / <span id=page-count>0</span>" : ""),
|
||||
innerHTML: "<span id=post-count>0</span> / <span id=file-count>0</span>" + (Conf['Page Count in Stats'] ? ' / <span id=page-count>0</span>' : ''),
|
||||
id: 'thread-stats',
|
||||
title: 'Post Count / File Count' + (Conf["Page Count in Stats"] ? " / Page Count" : "")
|
||||
});
|
||||
@ -9433,7 +9441,9 @@
|
||||
return Header.addShortcut(sc);
|
||||
});
|
||||
} else {
|
||||
this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', "<div class=move title='Post Count / File Count" + (Conf["Page Count in Stats"] ? " / Page Count" : "") + "'><span id=post-count>0</span> / <span id=file-count>0</span>" + (Conf["Page Count in Stats"] ? " / <span id=page-count>0</span>" : "") + "</div>");
|
||||
this.dialog = sc = UI.dialog('thread-stats', 'bottom: 0px; right: 0px;', {
|
||||
innerHTML: "<div class=move title='Post Count / File Count" + (Conf['Page Count in Stats'] ? ' / Page Count' : '') + "'><span id=post-count>0</span> / <span id=file-count>0</span>" + (Conf['Page Count in Stats'] ? ' / <span id=page-count>0</span>' : '') + "</div>"
|
||||
});
|
||||
$.ready((function(_this) {
|
||||
return function() {
|
||||
return $.add(d.body, sc);
|
||||
@ -9544,14 +9554,16 @@
|
||||
}
|
||||
if (Conf['Updater and Stats in Header']) {
|
||||
this.dialog = sc = $.el('span', {
|
||||
innerHTML: "<span id=update-status></span><span id=update-timer title='Update now'></span>",
|
||||
innerHTML: '<span id=update-status></span><span id=update-timer title="Update now"></span>',
|
||||
id: 'updater'
|
||||
});
|
||||
$.ready(function() {
|
||||
return Header.addShortcut(sc);
|
||||
});
|
||||
} else {
|
||||
this.dialog = sc = UI.dialog('updater', 'bottom: 0px; left: 0px;', "<div class=move></div><span id=update-status></span><span id=update-timer title='Update now'></span>");
|
||||
this.dialog = sc = UI.dialog('updater', 'bottom: 0px; left: 0px;', {
|
||||
innerHTML: '<div class=move></div><span id=update-status></span><span id=update-timer title="Update now"></span>'
|
||||
});
|
||||
$.addClass(doc, 'float');
|
||||
$.ready((function(_this) {
|
||||
return function() {
|
||||
@ -9953,7 +9965,9 @@
|
||||
className: 'disabled fa fa-eye'
|
||||
});
|
||||
this.db = new DataBoard('watchedThreads', this.refresh, true);
|
||||
this.dialog = UI.dialog('thread-watcher', 'top: 50px; left: 0px;', "<div class=\"move\">Thread Watcher <span id=\"watcher-status\"></span><a class=\"menu-button\" href=\"javascript:;\"><i class=\"fa fa-angle-down\"></i></a><a class=close href=javascript:;>×</a></span></div><div id=\"watched-threads\"></div>");
|
||||
this.dialog = UI.dialog('thread-watcher', 'top: 50px; left: 0px;', {
|
||||
innerHTML: "<div class=\"move\">Thread Watcher <span id=\"watcher-status\"></span><a class=\"menu-button\" href=\"javascript:;\"><i class=\"fa fa-angle-down\"></i></a><a class=close href=javascript:;>×</a></span></div><div id=\"watched-threads\"></div>"
|
||||
});
|
||||
this.status = $('#watcher-status', this.dialog);
|
||||
this.list = this.dialog.lastElementChild;
|
||||
$.on(d, 'QRPostSuccessful', this.cb.post);
|
||||
@ -10770,7 +10784,7 @@
|
||||
}
|
||||
return Redirect.data = o;
|
||||
},
|
||||
archives: [{"uid":0,"name":"Foolz","domain":"archive.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["a","biz","co","diy","gd","jp","m","sci","sp","tg","tv","vg","vp","vr","wsg"],"files":["a","biz","diy","gd","jp","m","sci","tg","vg","vp","vr","wsg"]},{"uid":1,"name":"NSFW Foolz","domain":"nsfw.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["u"],"files":["u"]},{"uid":2,"name":"The Dark Cave","domain":"archive.thedarkcave.org","http":true,"https":true,"software":"foolfuuka","boards":["c","int","out","po"],"files":["c","po"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":18,"name":"4plebs Flash Archive","domain":"flash.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["f"],"files":["f"]},{"uid":4,"name":"Nyafuu","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["d","i","lgbt"],"files":["d","i","lgbt"]},{"uid":8,"name":"Rebecca Black Tech","domain":"rbt.asia","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","w"],"files":["cgl","g","mu","w"]},{"uid":9,"name":"Heinessen","domain":"archive.heinessen.com","http":true,"https":false,"software":"fuuka","boards":["an","fit","k","mlp","r9k","toy"],"files":["an","fit","k","mlp","r9k","toy"]},{"uid":10,"name":"warosu","domain":"fuuka.warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.eu","http":true,"https":true,"software":"foolfuuka","boards":["asp","b","cm","h","hc","hm","n","p","r","s","soc","y"],"files":["asp","cm","h","hc","hm","n","p","r","s","soc","y"]},{"uid":16,"name":"maware","domain":"archive.mawa.re","http":true,"https":false,"software":"foolfuuka","boards":["t"],"files":["t"]},{"uid":17,"name":"installgentoo.com","domain":"chan.installgentoo.com","http":true,"https":false,"software":"foolfuuka","boards":["g","t"],"files":["g","t"]},{"uid":19,"name":"Innovandalism Archive","domain":"boards.innovandalism.eu","http":true,"https":false,"software":"foolfuuka","boards":["v"],"files":[]},{"uid":13,"name":"Foolz Beta","domain":"beta.foolz.us","http":true,"https":true,"withCredentials":true,"software":"foolfuuka","boards":["a","biz","co","d","diy","gd","h","i","jp","m","mlp","s4s","sci","sp","tg","tv","u","v","vg","vp","vr","wsg"],"files":[]}],
|
||||
archives: [{"uid":0,"name":"Foolz","domain":"archive.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["a","biz","co","diy","gd","jp","m","sci","sp","tg","tv","vg","vp","vr","wsg"],"files":["a","biz","diy","gd","jp","m","sci","tg","vg","vp","vr","wsg"]},{"uid":1,"name":"NSFW Foolz","domain":"nsfw.foolz.us","http":true,"https":true,"software":"foolfuuka","boards":["u"],"files":["u"]},{"uid":2,"name":"The Dark Cave","domain":"archive.thedarkcave.org","http":true,"https":true,"software":"foolfuuka","boards":["c","int","out","po"],"files":["c","po"]},{"uid":3,"name":"4plebs Archive","domain":"archive.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["adv","hr","o","pol","s4s","tg","trv","tv","x"],"files":["adv","hr","o","pol","s4s","tg","trv","tv","x"]},{"uid":18,"name":"4plebs Flash Archive","domain":"flash.4plebs.org","http":true,"https":true,"software":"foolfuuka","boards":["f"],"files":["f"]},{"uid":4,"name":"Nyafuu","domain":"archive.nyafuu.org","http":true,"https":true,"software":"foolfuuka","boards":["c","e","w","wg"],"files":["c","e","w","wg"]},{"uid":5,"name":"Love is Over","domain":"archive.loveisover.me","http":true,"https":true,"software":"foolfuuka","boards":["d","i","lgbt"],"files":["d","i","lgbt"]},{"uid":8,"name":"Rebecca Black Tech","domain":"rbt.asia","http":false,"https":true,"software":"fuuka","boards":["cgl","g","mu","w"],"files":["cgl","g","mu","w"]},{"uid":9,"name":"Heinessen","domain":"archive.heinessen.com","http":true,"https":false,"software":"fuuka","boards":["an","fit","k","mlp","r9k","toy"],"files":["an","fit","k","mlp","r9k","toy"]},{"uid":10,"name":"warosu","domain":"fuuka.warosu.org","http":false,"https":true,"software":"fuuka","boards":["3","biz","cgl","ck","diy","fa","g","ic","jp","lit","sci","tg","vr"],"files":["3","biz","cgl","ck","diy","fa","ic","jp","lit","sci","tg","vr"]},{"uid":15,"name":"fgts","domain":"fgts.eu","http":true,"https":true,"software":"foolfuuka","boards":["asp","b","cm","h","hc","hm","n","p","r","s","soc","y"],"files":["asp","cm","h","hc","hm","n","p","r","s","soc","y"]},{"uid":16,"name":"maware","domain":"archive.mawa.re","http":true,"https":false,"software":"foolfuuka","boards":["t"],"files":["t"]},{"uid":17,"name":"installgentoo.com","domain":"chan.installgentoo.com","http":true,"https":false,"software":"foolfuuka","boards":["g","t"],"files":["g","t"]},{"uid":13,"name":"Foolz Beta","domain":"beta.foolz.us","http":true,"https":true,"withCredentials":true,"software":"foolfuuka","boards":["a","biz","co","d","diy","gd","h","i","jp","m","mlp","s4s","sci","sp","tg","tv","u","v","vg","vp","vr","wsg"],"files":[]},{"uid":19,"name":"Deniable Plausibility","domain":"boards.deniableplausibility.net","http":true,"https":false,"software":"foolfuuka","boards":["v"],"files":["v"]}],
|
||||
to: function(dest, data) {
|
||||
var archive;
|
||||
archive = (dest === 'search' ? Redirect.data.thread : Redirect.data[dest])[data.boardID];
|
||||
@ -10943,11 +10957,10 @@
|
||||
},
|
||||
focus: function() {
|
||||
var items, string, string2;
|
||||
this.textContent = this.innerHTML;
|
||||
string = "" + g.BOARD + "." + this.className;
|
||||
string2 = "" + string + ".orig";
|
||||
items = {
|
||||
title: this.innerHTML
|
||||
title: this.textContent
|
||||
};
|
||||
items[string] = '';
|
||||
items[string2] = false;
|
||||
@ -10958,14 +10971,13 @@
|
||||
});
|
||||
},
|
||||
blur: function() {
|
||||
this.innerHTML = this.textContent;
|
||||
this.contentEditable = false;
|
||||
return $.set("" + g.BOARD + "." + this.className, this.textContent);
|
||||
}
|
||||
},
|
||||
custom: function(child) {
|
||||
var cachedTest, string;
|
||||
cachedTest = child.innerHTML;
|
||||
cachedTest = child.textContent;
|
||||
string = "" + g.BOARD + "." + child.className;
|
||||
$.on(child, 'click keydown focus blur', function(e) {
|
||||
return Banner.cb[e.type].apply(this, [e]);
|
||||
@ -10976,12 +10988,12 @@
|
||||
return;
|
||||
}
|
||||
if (Conf['Persistent Custom Board Titles']) {
|
||||
return child.innerHTML = title;
|
||||
return child.textContent = title;
|
||||
}
|
||||
string2 = "" + string + ".orig";
|
||||
return $.get(string2, cachedTest, function(itemb) {
|
||||
if (cachedTest === itemb[string2]) {
|
||||
return child.innerHTML = title;
|
||||
return child.textContent = title;
|
||||
} else {
|
||||
$.set(string, cachedTest);
|
||||
return $.set(string2, cachedTest);
|
||||
@ -11430,11 +11442,11 @@
|
||||
return this.file.text.innerHTML = "<span class=file-info>" + (FileInfo.format(Conf['fileInfo'], this)) + "</span>";
|
||||
},
|
||||
format: function(formatString, post) {
|
||||
return formatString.replace(/%([A-Za-z])/g, function(s, c) {
|
||||
return formatString.replace(/%([A-Za-z])|[^%]+/g, function(s, c) {
|
||||
if (c in FileInfo.formatters) {
|
||||
return FileInfo.formatters[c].call(post);
|
||||
} else {
|
||||
return s;
|
||||
return FileInfo.escape(s);
|
||||
}
|
||||
});
|
||||
},
|
||||
@ -11454,7 +11466,7 @@
|
||||
return name.replace(/[&"'<>]/g, function(c) {
|
||||
return {
|
||||
'&': '&',
|
||||
"'": ''',
|
||||
"'": ''',
|
||||
'"': '"',
|
||||
'<': '<',
|
||||
'>': '>'
|
||||
@ -13554,6 +13566,9 @@
|
||||
} else {
|
||||
$.event('4chanXInitFinished');
|
||||
}
|
||||
if (!Conf['Show Support Message']) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
return localStorage.getItem('4chan-settings');
|
||||
} catch (_error) {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
|
||||
<app appid='lacclbnghgdicfifcamcmcnilckjamag'>
|
||||
<updatecheck codebase='https://ccd0.github.io/4chan-x/builds/crx.crx' version='1.7.36' />
|
||||
<updatecheck codebase='https://ccd0.github.io/4chan-x/builds/crx.crx' version='1.7.37' />
|
||||
</app>
|
||||
</gupdate>
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "4chan-X",
|
||||
"version": "1.7.36",
|
||||
"version": "1.7.37",
|
||||
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
||||
"meta": {
|
||||
"name": "4chan X",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user