Release 4chan X v1.11.13.3.

This commit is contained in:
ccd0 2015-10-18 17:24:29 -07:00
parent 2726a17a7b
commit 2af12c3c54
13 changed files with 196 additions and 78 deletions

View File

@ -4,6 +4,10 @@ Sometimes the changelog has notes (not comprehensive) acknowledging people's wor
### v1.11.13
**v1.11.13.3** *(2015-10-18)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.13.3/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.13.3/builds/4chan-X-noupdate.crx "Chromium version")]
- Show "S" in spoiler checkbox in Quick Reply.
- Support Oekaki from Quick Reply on /i/.
**v1.11.13.2** *(2015-10-18)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.13.2/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.13.2/builds/4chan-X-noupdate.crx "Chromium version")]
- Merge v1.11.12.8: Update to support MathJax on /sci/.
- Gallery bugfixes.

Binary file not shown.

View File

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

View File

@ -1,7 +1,7 @@
// Generated by CoffeeScript
// ==UserScript==
// @name 4chan X beta
// @version 1.11.13.2
// @version 1.11.13.3
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@ -300,7 +300,7 @@
name: "# Filter any namefags:\n#/^(?!Anonymous$)/",
uniqueID: "# Filter a specific ID:\n#/Txhvk1Tl/",
tripcode: "# Filter any tripfag\n#/^!/",
capcode: "# Set a custom class for mods:\n#/Mod$/;highlight:mod;op:yes\n# Set a custom class for moot:\n#/Admin$/;highlight:moot;op:yes",
capcode: "# Set a custom class for mods:\n#/Mod$/;highlight:mod;op:yes\n# Set a custom class for admins:\n#/Admin$/;highlight:admin;op:yes",
subject: "# Filter Generals on /v/:\n#/general/i;boards:v;op:only",
comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g\n# Filter posts with 20 or more quote links:\n#/(?:>>\\d(?:(?!>>\\d)[^])*){20}/\n# Filter posts like T H I S / H / I / S:\n#/^>?\\s?\\w\\s?(\\w)\\s?(\\w)\\s?(\\w).*$[\\s>]+\\1[\\s>]+\\2[\\s>]+\\3/im",
flag: '',
@ -415,7 +415,7 @@
doc = d.documentElement;
g = {
VERSION: '1.11.13.2',
VERSION: '1.11.13.3',
NAMESPACE: '4chan X.',
boards: {}
};
@ -2520,8 +2520,10 @@
return this.toBlob();
},
toBlob: function() {
var base1;
return (base1 = HTMLCanvasElement.prototype).toBlob || (base1.toBlob = function(cb) {
if (HTMLCanvasElement.prototype.toBlob) {
return;
}
HTMLCanvasElement.prototype.toBlob = function(cb) {
var data, i, k, l, ref, ui8a;
data = atob(this.toDataURL().slice(22));
l = data.length;
@ -2532,7 +2534,8 @@
return cb(new Blob([ui8a], {
type: 'image/png'
}));
});
};
return $.globalEval("HTMLCanvasElement.prototype.toBlob = (" + HTMLCanvasElement.prototype.toBlob + ");");
}
};
@ -7087,6 +7090,9 @@
QR.setCustomCooldown(enabled);
return $.set('customCooldownEnabled', enabled);
},
oekakiDraw: function() {
return $.globalEval('Tegaki.open({\n onDone: function() {\n Tegaki.flatten().toBlob(function (blob) {\n var detail = {file: blob, name: \'tegaki.png\'};\n var event = new CustomEvent(\'QRSetFile\', {bubbles: true, detail: detail});\n document.dispatchEvent(event);\n });\n },\n onCancel: function() {},\n width: +document.querySelector(\'#qr [name=oekaki-width]\').value,\n height: +document.querySelector(\'#qr [name=oekaki-height]\').value\n});');
},
error: function(err, focusOverride) {
var el, notice, notif;
QR.open();
@ -7410,7 +7416,7 @@
var dialog, event, i, items, m, match_max, match_min, name, node, nodes, ref, rules, save, scriptData, setNode;
QR.nodes = nodes = {
el: dialog = UI.dialog('qr', 'top: 50px; right: 0px;', {
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 type=\"button\" id=\"sjis-toggle\" title=\"Toggle Mona font\" value=\"∀\"><input name=\"name\" data-name=\"name\" list=\"list-name\" placeholder=\"Name\" class=\"field\" size=\"1\"><input name=\"email\" data-name=\"email\" list=\"list-email\" placeholder=\"Options\" class=\"field\" size=\"1\"><input name=\"sub\" data-name=\"sub\" list=\"list-sub\" placeholder=\"Subject\" class=\"field\" size=\"1\"></div><div class=\"textarea\"><textarea data-name=\"com\" placeholder=\"Comment\" class=\"field\"></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\">+</a></div><div id=\"file-n-submit\"><input type=\"button\" id=\"qr-file-button\" value=\"Files\"><span id=\"qr-filename-container\" class=\"field\"><span id=\"qr-no-file\">No selected file</span><input id=\"qr-filename\" data-name=\"filename\" spellcheck=\"false\"><label id=\"qr-spoiler-label\"><input type=\"checkbox\" id=\"qr-file-spoiler\" title=\"Spoiler image\"></label><a href=\"javascript:;\" id=\"qr-filerm\" 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 hidden id=\"paste-area\" title=\"Select to paste images\" class=\"fa fa-clipboard\" tabindex=\"-1\" contentEditable=\"true\"></a><a id=\"custom-cooldown-button\" title=\"Toggle custom cooldown\" class=\"disabled\"><i class=\"fa fa-clock-o\"></i></a><a id=\"dump-button\" title=\"Dump list\"><i class=\"fa fa-plus-square\"></i></a></span><input type=\"submit\"></div><input type=\"file\" multiple></form><datalist id=\"list-name\"></datalist><datalist id=\"list-email\"></datalist><datalist id=\"list-sub\"></datalist> "
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 type=\"button\" id=\"sjis-toggle\" title=\"Toggle Mona font\" value=\"∀\"><input name=\"name\" data-name=\"name\" list=\"list-name\" placeholder=\"Name\" class=\"field\" size=\"1\"><input name=\"email\" data-name=\"email\" list=\"list-email\" placeholder=\"Options\" class=\"field\" size=\"1\"><input name=\"sub\" data-name=\"sub\" list=\"list-sub\" placeholder=\"Subject\" class=\"field\" size=\"1\"></div><div class=\"textarea\"><textarea data-name=\"com\" placeholder=\"Comment\" class=\"field\"></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\">+</a></div><div class=\"oekaki\"><input type=\"button\" id=\"qr-draw-button\" value=\"Draw\"><label><span>Width:</span><input name=\"oekaki-width\" value=\"400\" type=\"number\" class=\"field\" size=\"1\"></label><label><span>Height:</span><input name=\"oekaki-height\" value=\"400\" type=\"number\" class=\"field\" size=\"1\"></label></div><div id=\"file-n-submit\"><input type=\"button\" id=\"qr-file-button\" value=\"Files\"><span id=\"qr-filename-container\" class=\"field\"><span id=\"qr-no-file\">No selected file</span><input id=\"qr-filename\" data-name=\"filename\" spellcheck=\"false\"><label id=\"qr-spoiler-label\"><input type=\"checkbox\" id=\"qr-file-spoiler\" title=\"Spoiler image\"><span class=\"checkbox-letter\">S</span></label><a href=\"javascript:;\" id=\"qr-filerm\" 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 hidden id=\"paste-area\" title=\"Select to paste images\" class=\"fa fa-clipboard\" tabindex=\"-1\" contentEditable=\"true\"></a><a id=\"custom-cooldown-button\" title=\"Toggle custom cooldown\" class=\"disabled\"><i class=\"fa fa-clock-o\"></i></a><a id=\"dump-button\" title=\"Dump list\"><i class=\"fa fa-plus-square\"></i></a></span><input type=\"submit\"></div><select data-default=\"4\" name=\"filetag\"><option value=\"0\">Hentai</option><option value=\"6\">Porn</option><option value=\"1\">Japanese</option><option value=\"2\">Anime</option><option value=\"3\">Game</option><option value=\"5\">Loop</option><option value=\"4\" selected>Other</option></select><input type=\"file\" multiple></form><datalist id=\"list-name\"></datalist><datalist id=\"list-email\"></datalist><datalist id=\"list-sub\"></datalist> "
})
};
setNode = function(name, query) {
@ -7443,6 +7449,8 @@
setNode('status', '[type=submit]');
setNode('fileInput', '[type=file]');
setNode('customCooldown', '#custom-cooldown-button');
setNode('flashTag', '[name=filetag]');
setNode('drawButton', '#qr-draw-button');
rules = $('ul.rules').textContent.trim();
match_min = rules.match(/.+smaller than (\d+)x(\d+).+/);
match_max = rules.match(/.+greater than (\d+)x(\d+).+/);
@ -7486,16 +7494,6 @@
return $.sync('customCooldownEnabled', QR.setCustomCooldown);
});
}
if (g.BOARD.ID === 'f') {
nodes.flashTag = $.el('select', {
name: 'filetag'
});
$.extend(nodes.flashTag, {
innerHTML: "<option value=\"0\">Hentai</option><option value=\"6\">Porn</option><option value=\"1\">Japanese</option><option value=\"2\">Anime</option><option value=\"3\">Game</option><option value=\"5\">Loop</option><option value=\"4\" selected>Other</option>"
});
nodes.flashTag.dataset["default"] = '4';
$.add(nodes.form, nodes.flashTag);
}
$.on(nodes.fileButton, 'click', QR.openFileInput);
$.on(nodes.noFile, 'click', QR.openFileInput);
$.on(nodes.filename, 'focus', function() {
@ -7525,6 +7523,7 @@
$.on(nodes.fileInput, 'change', QR.handleFiles);
$.on(nodes.sjisToggle, 'click', QR.toggleSJIS);
$.on(nodes.customCooldown, 'click', QR.toggleCustomCooldown);
$.on(nodes.drawButton, 'click', QR.oekakiDraw);
window.addEventListener('focus', QR.focus, true);
window.addEventListener('blur', QR.focus, true);
$.on(d, 'click', QR.focus);
@ -19577,7 +19576,9 @@
"#qr.forced-anon input[data-name=\"name\"]:not(.force-show),\n" +
"#qr.forced-anon input[data-name=\"sub\"]:not(.force-show),\n" +
"#qr.reply-to-thread input[data-name=\"sub\"]:not(.force-show),\n" +
"body:not(.board_f) #qr select[name=\"filetag\"],\n" +
"#qr.reply-to-thread select[name=\"filetag\"],\n" +
"body:not(.board_i) .oekaki,\n" +
"body:not(.board_jp) #sjis-toggle {\n" +
" display: none;\n" +
"}\n" +
@ -19678,8 +19679,8 @@
".goog-bubble-content iframe {\n" +
" position: static !important;\n" +
"}\n" +
"/* File Input, Submit Button */\n" +
"#file-n-submit {\n" +
"/* File Input, Submit Button, Oekaki */\n" +
"#file-n-submit, .oekaki {\n" +
" display: -webkit-flex;\n" +
" display: flex;\n" +
" -webkit-align-items: stretch;\n" +
@ -19687,13 +19688,13 @@
" height: 25px;\n" +
" margin-top: 1px;\n" +
"}\n" +
"#file-n-submit > input {\n" +
"#file-n-submit > input, #qr-draw-button {\n" +
" background: linear-gradient(to bottom, #F8F8F8, #DCDCDC) no-repeat;\n" +
" border: 1px solid #BBB;\n" +
" border-radius: 2px;\n" +
" height: 100%;\n" +
"}\n" +
"#qr-file-button {\n" +
"#qr-file-button, #qr-draw-button {\n" +
" width: 15%;\n" +
"}\n" +
"#file-n-submit input[type=\"submit\"] {\n" +
@ -19733,12 +19734,31 @@
"#qr-no-file {\n" +
" color: #AAA;\n" +
"}\n" +
".oekaki > label {\n" +
" -webkit-flex: 1 1 auto;\n" +
" flex: 1 1 auto;\n" +
" width: 0;\n" +
" display: -webkit-flex;\n" +
" display: flex;\n" +
" -webkit-align-items: center;\n" +
" align-items: center;\n" +
" height: 100%;\n" +
"}\n" +
".oekaki > label > span {\n" +
" margin: 0 3px;\n" +
"}\n" +
".oekaki > label > input {\n" +
" -webkit-flex: 1 1 auto;\n" +
" flex: 1 1 auto;\n" +
" width: 0;\n" +
" height: 100%;\n" +
"}\n" +
"#qr input[type=\"file\"] {\n" +
" visibility: hidden;\n" +
" position: absolute;\n" +
"}\n" +
"/* Spoiler Checkbox, QR Icons */\n" +
"#qr-spoiler-label, #qr-filename-container > a {\n" +
"#qr-filename-container > label, #qr-filename-container > a {\n" +
" -webkit-flex: none;\n" +
" flex: none;\n" +
" margin: 0;\n" +
@ -19750,9 +19770,26 @@
"#file-n-submit:not(.custom-cooldown) #custom-cooldown-button {\n" +
" display: none;\n" +
"}\n" +
"#qr-file-spoiler {\n" +
"#qr-filename-container > label {\n" +
" position: relative;\n" +
"}\n" +
"#qr-filename-container input[type=\"checkbox\"] {\n" +
" margin: 0;\n" +
"}\n" +
".checkbox-letter {\n" +
" pointer-events: none;\n" +
" position: absolute;\n" +
" top: 2px;\n" +
" left: 0;\n" +
" right: 0;\n" +
" text-align: center;\n" +
" font-size: 11px;\n" +
" font-weight: bold;\n" +
" color: rgba(0,0,0,.6);\n" +
"}\n" +
"input[type=\"checkbox\"]:checked ~ .checkbox-letter {\n" +
" display: none;\n" +
"}\n" +
"#paste-area, #url-button, #custom-cooldown-button, #dump-button {\n" +
" opacity: 0.6;\n" +
"}\n" +
@ -20711,7 +20748,8 @@
" background: rgb(26, 27, 29);\n" +
"}\n" +
":root.tomorrow #qr select,\n" +
":root.tomorrow #file-n-submit > input {\n" +
":root.tomorrow #file-n-submit > input,\n" +
":root.tomorrow #qr-draw-button {\n" +
" border-color: rgb(40, 41, 42);\n" +
"}\n" +
":root.tomorrow #qr-filename {\n" +

Binary file not shown.

View File

@ -1,7 +1,7 @@
// Generated by CoffeeScript
// ==UserScript==
// @name 4chan X
// @version 1.11.13.2
// @version 1.11.13.3
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@ -300,7 +300,7 @@
name: "# Filter any namefags:\n#/^(?!Anonymous$)/",
uniqueID: "# Filter a specific ID:\n#/Txhvk1Tl/",
tripcode: "# Filter any tripfag\n#/^!/",
capcode: "# Set a custom class for mods:\n#/Mod$/;highlight:mod;op:yes\n# Set a custom class for moot:\n#/Admin$/;highlight:moot;op:yes",
capcode: "# Set a custom class for mods:\n#/Mod$/;highlight:mod;op:yes\n# Set a custom class for admins:\n#/Admin$/;highlight:admin;op:yes",
subject: "# Filter Generals on /v/:\n#/general/i;boards:v;op:only",
comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g\n# Filter posts with 20 or more quote links:\n#/(?:>>\\d(?:(?!>>\\d)[^])*){20}/\n# Filter posts like T H I S / H / I / S:\n#/^>?\\s?\\w\\s?(\\w)\\s?(\\w)\\s?(\\w).*$[\\s>]+\\1[\\s>]+\\2[\\s>]+\\3/im",
flag: '',
@ -415,7 +415,7 @@
doc = d.documentElement;
g = {
VERSION: '1.11.13.2',
VERSION: '1.11.13.3',
NAMESPACE: '4chan X.',
boards: {}
};
@ -2520,8 +2520,10 @@
return this.toBlob();
},
toBlob: function() {
var base1;
return (base1 = HTMLCanvasElement.prototype).toBlob || (base1.toBlob = function(cb) {
if (HTMLCanvasElement.prototype.toBlob) {
return;
}
HTMLCanvasElement.prototype.toBlob = function(cb) {
var data, i, k, l, ref, ui8a;
data = atob(this.toDataURL().slice(22));
l = data.length;
@ -2532,7 +2534,8 @@
return cb(new Blob([ui8a], {
type: 'image/png'
}));
});
};
return $.globalEval("HTMLCanvasElement.prototype.toBlob = (" + HTMLCanvasElement.prototype.toBlob + ");");
}
};
@ -7087,6 +7090,9 @@
QR.setCustomCooldown(enabled);
return $.set('customCooldownEnabled', enabled);
},
oekakiDraw: function() {
return $.globalEval('Tegaki.open({\n onDone: function() {\n Tegaki.flatten().toBlob(function (blob) {\n var detail = {file: blob, name: \'tegaki.png\'};\n var event = new CustomEvent(\'QRSetFile\', {bubbles: true, detail: detail});\n document.dispatchEvent(event);\n });\n },\n onCancel: function() {},\n width: +document.querySelector(\'#qr [name=oekaki-width]\').value,\n height: +document.querySelector(\'#qr [name=oekaki-height]\').value\n});');
},
error: function(err, focusOverride) {
var el, notice, notif;
QR.open();
@ -7410,7 +7416,7 @@
var dialog, event, i, items, m, match_max, match_min, name, node, nodes, ref, rules, save, scriptData, setNode;
QR.nodes = nodes = {
el: dialog = UI.dialog('qr', 'top: 50px; right: 0px;', {
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 type=\"button\" id=\"sjis-toggle\" title=\"Toggle Mona font\" value=\"∀\"><input name=\"name\" data-name=\"name\" list=\"list-name\" placeholder=\"Name\" class=\"field\" size=\"1\"><input name=\"email\" data-name=\"email\" list=\"list-email\" placeholder=\"Options\" class=\"field\" size=\"1\"><input name=\"sub\" data-name=\"sub\" list=\"list-sub\" placeholder=\"Subject\" class=\"field\" size=\"1\"></div><div class=\"textarea\"><textarea data-name=\"com\" placeholder=\"Comment\" class=\"field\"></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\">+</a></div><div id=\"file-n-submit\"><input type=\"button\" id=\"qr-file-button\" value=\"Files\"><span id=\"qr-filename-container\" class=\"field\"><span id=\"qr-no-file\">No selected file</span><input id=\"qr-filename\" data-name=\"filename\" spellcheck=\"false\"><label id=\"qr-spoiler-label\"><input type=\"checkbox\" id=\"qr-file-spoiler\" title=\"Spoiler image\"></label><a href=\"javascript:;\" id=\"qr-filerm\" 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 hidden id=\"paste-area\" title=\"Select to paste images\" class=\"fa fa-clipboard\" tabindex=\"-1\" contentEditable=\"true\"></a><a id=\"custom-cooldown-button\" title=\"Toggle custom cooldown\" class=\"disabled\"><i class=\"fa fa-clock-o\"></i></a><a id=\"dump-button\" title=\"Dump list\"><i class=\"fa fa-plus-square\"></i></a></span><input type=\"submit\"></div><input type=\"file\" multiple></form><datalist id=\"list-name\"></datalist><datalist id=\"list-email\"></datalist><datalist id=\"list-sub\"></datalist> "
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 type=\"button\" id=\"sjis-toggle\" title=\"Toggle Mona font\" value=\"∀\"><input name=\"name\" data-name=\"name\" list=\"list-name\" placeholder=\"Name\" class=\"field\" size=\"1\"><input name=\"email\" data-name=\"email\" list=\"list-email\" placeholder=\"Options\" class=\"field\" size=\"1\"><input name=\"sub\" data-name=\"sub\" list=\"list-sub\" placeholder=\"Subject\" class=\"field\" size=\"1\"></div><div class=\"textarea\"><textarea data-name=\"com\" placeholder=\"Comment\" class=\"field\"></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\">+</a></div><div class=\"oekaki\"><input type=\"button\" id=\"qr-draw-button\" value=\"Draw\"><label><span>Width:</span><input name=\"oekaki-width\" value=\"400\" type=\"number\" class=\"field\" size=\"1\"></label><label><span>Height:</span><input name=\"oekaki-height\" value=\"400\" type=\"number\" class=\"field\" size=\"1\"></label></div><div id=\"file-n-submit\"><input type=\"button\" id=\"qr-file-button\" value=\"Files\"><span id=\"qr-filename-container\" class=\"field\"><span id=\"qr-no-file\">No selected file</span><input id=\"qr-filename\" data-name=\"filename\" spellcheck=\"false\"><label id=\"qr-spoiler-label\"><input type=\"checkbox\" id=\"qr-file-spoiler\" title=\"Spoiler image\"><span class=\"checkbox-letter\">S</span></label><a href=\"javascript:;\" id=\"qr-filerm\" 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 hidden id=\"paste-area\" title=\"Select to paste images\" class=\"fa fa-clipboard\" tabindex=\"-1\" contentEditable=\"true\"></a><a id=\"custom-cooldown-button\" title=\"Toggle custom cooldown\" class=\"disabled\"><i class=\"fa fa-clock-o\"></i></a><a id=\"dump-button\" title=\"Dump list\"><i class=\"fa fa-plus-square\"></i></a></span><input type=\"submit\"></div><select data-default=\"4\" name=\"filetag\"><option value=\"0\">Hentai</option><option value=\"6\">Porn</option><option value=\"1\">Japanese</option><option value=\"2\">Anime</option><option value=\"3\">Game</option><option value=\"5\">Loop</option><option value=\"4\" selected>Other</option></select><input type=\"file\" multiple></form><datalist id=\"list-name\"></datalist><datalist id=\"list-email\"></datalist><datalist id=\"list-sub\"></datalist> "
})
};
setNode = function(name, query) {
@ -7443,6 +7449,8 @@
setNode('status', '[type=submit]');
setNode('fileInput', '[type=file]');
setNode('customCooldown', '#custom-cooldown-button');
setNode('flashTag', '[name=filetag]');
setNode('drawButton', '#qr-draw-button');
rules = $('ul.rules').textContent.trim();
match_min = rules.match(/.+smaller than (\d+)x(\d+).+/);
match_max = rules.match(/.+greater than (\d+)x(\d+).+/);
@ -7486,16 +7494,6 @@
return $.sync('customCooldownEnabled', QR.setCustomCooldown);
});
}
if (g.BOARD.ID === 'f') {
nodes.flashTag = $.el('select', {
name: 'filetag'
});
$.extend(nodes.flashTag, {
innerHTML: "<option value=\"0\">Hentai</option><option value=\"6\">Porn</option><option value=\"1\">Japanese</option><option value=\"2\">Anime</option><option value=\"3\">Game</option><option value=\"5\">Loop</option><option value=\"4\" selected>Other</option>"
});
nodes.flashTag.dataset["default"] = '4';
$.add(nodes.form, nodes.flashTag);
}
$.on(nodes.fileButton, 'click', QR.openFileInput);
$.on(nodes.noFile, 'click', QR.openFileInput);
$.on(nodes.filename, 'focus', function() {
@ -7525,6 +7523,7 @@
$.on(nodes.fileInput, 'change', QR.handleFiles);
$.on(nodes.sjisToggle, 'click', QR.toggleSJIS);
$.on(nodes.customCooldown, 'click', QR.toggleCustomCooldown);
$.on(nodes.drawButton, 'click', QR.oekakiDraw);
window.addEventListener('focus', QR.focus, true);
window.addEventListener('blur', QR.focus, true);
$.on(d, 'click', QR.focus);
@ -19577,7 +19576,9 @@
"#qr.forced-anon input[data-name=\"name\"]:not(.force-show),\n" +
"#qr.forced-anon input[data-name=\"sub\"]:not(.force-show),\n" +
"#qr.reply-to-thread input[data-name=\"sub\"]:not(.force-show),\n" +
"body:not(.board_f) #qr select[name=\"filetag\"],\n" +
"#qr.reply-to-thread select[name=\"filetag\"],\n" +
"body:not(.board_i) .oekaki,\n" +
"body:not(.board_jp) #sjis-toggle {\n" +
" display: none;\n" +
"}\n" +
@ -19678,8 +19679,8 @@
".goog-bubble-content iframe {\n" +
" position: static !important;\n" +
"}\n" +
"/* File Input, Submit Button */\n" +
"#file-n-submit {\n" +
"/* File Input, Submit Button, Oekaki */\n" +
"#file-n-submit, .oekaki {\n" +
" display: -webkit-flex;\n" +
" display: flex;\n" +
" -webkit-align-items: stretch;\n" +
@ -19687,13 +19688,13 @@
" height: 25px;\n" +
" margin-top: 1px;\n" +
"}\n" +
"#file-n-submit > input {\n" +
"#file-n-submit > input, #qr-draw-button {\n" +
" background: linear-gradient(to bottom, #F8F8F8, #DCDCDC) no-repeat;\n" +
" border: 1px solid #BBB;\n" +
" border-radius: 2px;\n" +
" height: 100%;\n" +
"}\n" +
"#qr-file-button {\n" +
"#qr-file-button, #qr-draw-button {\n" +
" width: 15%;\n" +
"}\n" +
"#file-n-submit input[type=\"submit\"] {\n" +
@ -19733,12 +19734,31 @@
"#qr-no-file {\n" +
" color: #AAA;\n" +
"}\n" +
".oekaki > label {\n" +
" -webkit-flex: 1 1 auto;\n" +
" flex: 1 1 auto;\n" +
" width: 0;\n" +
" display: -webkit-flex;\n" +
" display: flex;\n" +
" -webkit-align-items: center;\n" +
" align-items: center;\n" +
" height: 100%;\n" +
"}\n" +
".oekaki > label > span {\n" +
" margin: 0 3px;\n" +
"}\n" +
".oekaki > label > input {\n" +
" -webkit-flex: 1 1 auto;\n" +
" flex: 1 1 auto;\n" +
" width: 0;\n" +
" height: 100%;\n" +
"}\n" +
"#qr input[type=\"file\"] {\n" +
" visibility: hidden;\n" +
" position: absolute;\n" +
"}\n" +
"/* Spoiler Checkbox, QR Icons */\n" +
"#qr-spoiler-label, #qr-filename-container > a {\n" +
"#qr-filename-container > label, #qr-filename-container > a {\n" +
" -webkit-flex: none;\n" +
" flex: none;\n" +
" margin: 0;\n" +
@ -19750,9 +19770,26 @@
"#file-n-submit:not(.custom-cooldown) #custom-cooldown-button {\n" +
" display: none;\n" +
"}\n" +
"#qr-file-spoiler {\n" +
"#qr-filename-container > label {\n" +
" position: relative;\n" +
"}\n" +
"#qr-filename-container input[type=\"checkbox\"] {\n" +
" margin: 0;\n" +
"}\n" +
".checkbox-letter {\n" +
" pointer-events: none;\n" +
" position: absolute;\n" +
" top: 2px;\n" +
" left: 0;\n" +
" right: 0;\n" +
" text-align: center;\n" +
" font-size: 11px;\n" +
" font-weight: bold;\n" +
" color: rgba(0,0,0,.6);\n" +
"}\n" +
"input[type=\"checkbox\"]:checked ~ .checkbox-letter {\n" +
" display: none;\n" +
"}\n" +
"#paste-area, #url-button, #custom-cooldown-button, #dump-button {\n" +
" opacity: 0.6;\n" +
"}\n" +
@ -20711,7 +20748,8 @@
" background: rgb(26, 27, 29);\n" +
"}\n" +
":root.tomorrow #qr select,\n" +
":root.tomorrow #file-n-submit > input {\n" +
":root.tomorrow #file-n-submit > input,\n" +
":root.tomorrow #qr-draw-button {\n" +
" border-color: rgb(40, 41, 42);\n" +
"}\n" +
":root.tomorrow #qr-filename {\n" +

Binary file not shown.

View File

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

View File

@ -1,7 +1,7 @@
// Generated by CoffeeScript
// ==UserScript==
// @name 4chan X
// @version 1.11.13.2
// @version 1.11.13.3
// @minGMVer 1.14
// @minFFVer 26
// @namespace 4chan-X
@ -300,7 +300,7 @@
name: "# Filter any namefags:\n#/^(?!Anonymous$)/",
uniqueID: "# Filter a specific ID:\n#/Txhvk1Tl/",
tripcode: "# Filter any tripfag\n#/^!/",
capcode: "# Set a custom class for mods:\n#/Mod$/;highlight:mod;op:yes\n# Set a custom class for moot:\n#/Admin$/;highlight:moot;op:yes",
capcode: "# Set a custom class for mods:\n#/Mod$/;highlight:mod;op:yes\n# Set a custom class for admins:\n#/Admin$/;highlight:admin;op:yes",
subject: "# Filter Generals on /v/:\n#/general/i;boards:v;op:only",
comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g\n# Filter posts with 20 or more quote links:\n#/(?:>>\\d(?:(?!>>\\d)[^])*){20}/\n# Filter posts like T H I S / H / I / S:\n#/^>?\\s?\\w\\s?(\\w)\\s?(\\w)\\s?(\\w).*$[\\s>]+\\1[\\s>]+\\2[\\s>]+\\3/im",
flag: '',
@ -415,7 +415,7 @@
doc = d.documentElement;
g = {
VERSION: '1.11.13.2',
VERSION: '1.11.13.3',
NAMESPACE: '4chan X.',
boards: {}
};
@ -2520,8 +2520,10 @@
return this.toBlob();
},
toBlob: function() {
var base1;
return (base1 = HTMLCanvasElement.prototype).toBlob || (base1.toBlob = function(cb) {
if (HTMLCanvasElement.prototype.toBlob) {
return;
}
HTMLCanvasElement.prototype.toBlob = function(cb) {
var data, i, k, l, ref, ui8a;
data = atob(this.toDataURL().slice(22));
l = data.length;
@ -2532,7 +2534,8 @@
return cb(new Blob([ui8a], {
type: 'image/png'
}));
});
};
return $.globalEval("HTMLCanvasElement.prototype.toBlob = (" + HTMLCanvasElement.prototype.toBlob + ");");
}
};
@ -7087,6 +7090,9 @@
QR.setCustomCooldown(enabled);
return $.set('customCooldownEnabled', enabled);
},
oekakiDraw: function() {
return $.globalEval('Tegaki.open({\n onDone: function() {\n Tegaki.flatten().toBlob(function (blob) {\n var detail = {file: blob, name: \'tegaki.png\'};\n var event = new CustomEvent(\'QRSetFile\', {bubbles: true, detail: detail});\n document.dispatchEvent(event);\n });\n },\n onCancel: function() {},\n width: +document.querySelector(\'#qr [name=oekaki-width]\').value,\n height: +document.querySelector(\'#qr [name=oekaki-height]\').value\n});');
},
error: function(err, focusOverride) {
var el, notice, notif;
QR.open();
@ -7410,7 +7416,7 @@
var dialog, event, i, items, m, match_max, match_min, name, node, nodes, ref, rules, save, scriptData, setNode;
QR.nodes = nodes = {
el: dialog = UI.dialog('qr', 'top: 50px; right: 0px;', {
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 type=\"button\" id=\"sjis-toggle\" title=\"Toggle Mona font\" value=\"∀\"><input name=\"name\" data-name=\"name\" list=\"list-name\" placeholder=\"Name\" class=\"field\" size=\"1\"><input name=\"email\" data-name=\"email\" list=\"list-email\" placeholder=\"Options\" class=\"field\" size=\"1\"><input name=\"sub\" data-name=\"sub\" list=\"list-sub\" placeholder=\"Subject\" class=\"field\" size=\"1\"></div><div class=\"textarea\"><textarea data-name=\"com\" placeholder=\"Comment\" class=\"field\"></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\">+</a></div><div id=\"file-n-submit\"><input type=\"button\" id=\"qr-file-button\" value=\"Files\"><span id=\"qr-filename-container\" class=\"field\"><span id=\"qr-no-file\">No selected file</span><input id=\"qr-filename\" data-name=\"filename\" spellcheck=\"false\"><label id=\"qr-spoiler-label\"><input type=\"checkbox\" id=\"qr-file-spoiler\" title=\"Spoiler image\"></label><a href=\"javascript:;\" id=\"qr-filerm\" 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 hidden id=\"paste-area\" title=\"Select to paste images\" class=\"fa fa-clipboard\" tabindex=\"-1\" contentEditable=\"true\"></a><a id=\"custom-cooldown-button\" title=\"Toggle custom cooldown\" class=\"disabled\"><i class=\"fa fa-clock-o\"></i></a><a id=\"dump-button\" title=\"Dump list\"><i class=\"fa fa-plus-square\"></i></a></span><input type=\"submit\"></div><input type=\"file\" multiple></form><datalist id=\"list-name\"></datalist><datalist id=\"list-email\"></datalist><datalist id=\"list-sub\"></datalist> "
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 type=\"button\" id=\"sjis-toggle\" title=\"Toggle Mona font\" value=\"∀\"><input name=\"name\" data-name=\"name\" list=\"list-name\" placeholder=\"Name\" class=\"field\" size=\"1\"><input name=\"email\" data-name=\"email\" list=\"list-email\" placeholder=\"Options\" class=\"field\" size=\"1\"><input name=\"sub\" data-name=\"sub\" list=\"list-sub\" placeholder=\"Subject\" class=\"field\" size=\"1\"></div><div class=\"textarea\"><textarea data-name=\"com\" placeholder=\"Comment\" class=\"field\"></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\">+</a></div><div class=\"oekaki\"><input type=\"button\" id=\"qr-draw-button\" value=\"Draw\"><label><span>Width:</span><input name=\"oekaki-width\" value=\"400\" type=\"number\" class=\"field\" size=\"1\"></label><label><span>Height:</span><input name=\"oekaki-height\" value=\"400\" type=\"number\" class=\"field\" size=\"1\"></label></div><div id=\"file-n-submit\"><input type=\"button\" id=\"qr-file-button\" value=\"Files\"><span id=\"qr-filename-container\" class=\"field\"><span id=\"qr-no-file\">No selected file</span><input id=\"qr-filename\" data-name=\"filename\" spellcheck=\"false\"><label id=\"qr-spoiler-label\"><input type=\"checkbox\" id=\"qr-file-spoiler\" title=\"Spoiler image\"><span class=\"checkbox-letter\">S</span></label><a href=\"javascript:;\" id=\"qr-filerm\" 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 hidden id=\"paste-area\" title=\"Select to paste images\" class=\"fa fa-clipboard\" tabindex=\"-1\" contentEditable=\"true\"></a><a id=\"custom-cooldown-button\" title=\"Toggle custom cooldown\" class=\"disabled\"><i class=\"fa fa-clock-o\"></i></a><a id=\"dump-button\" title=\"Dump list\"><i class=\"fa fa-plus-square\"></i></a></span><input type=\"submit\"></div><select data-default=\"4\" name=\"filetag\"><option value=\"0\">Hentai</option><option value=\"6\">Porn</option><option value=\"1\">Japanese</option><option value=\"2\">Anime</option><option value=\"3\">Game</option><option value=\"5\">Loop</option><option value=\"4\" selected>Other</option></select><input type=\"file\" multiple></form><datalist id=\"list-name\"></datalist><datalist id=\"list-email\"></datalist><datalist id=\"list-sub\"></datalist> "
})
};
setNode = function(name, query) {
@ -7443,6 +7449,8 @@
setNode('status', '[type=submit]');
setNode('fileInput', '[type=file]');
setNode('customCooldown', '#custom-cooldown-button');
setNode('flashTag', '[name=filetag]');
setNode('drawButton', '#qr-draw-button');
rules = $('ul.rules').textContent.trim();
match_min = rules.match(/.+smaller than (\d+)x(\d+).+/);
match_max = rules.match(/.+greater than (\d+)x(\d+).+/);
@ -7486,16 +7494,6 @@
return $.sync('customCooldownEnabled', QR.setCustomCooldown);
});
}
if (g.BOARD.ID === 'f') {
nodes.flashTag = $.el('select', {
name: 'filetag'
});
$.extend(nodes.flashTag, {
innerHTML: "<option value=\"0\">Hentai</option><option value=\"6\">Porn</option><option value=\"1\">Japanese</option><option value=\"2\">Anime</option><option value=\"3\">Game</option><option value=\"5\">Loop</option><option value=\"4\" selected>Other</option>"
});
nodes.flashTag.dataset["default"] = '4';
$.add(nodes.form, nodes.flashTag);
}
$.on(nodes.fileButton, 'click', QR.openFileInput);
$.on(nodes.noFile, 'click', QR.openFileInput);
$.on(nodes.filename, 'focus', function() {
@ -7525,6 +7523,7 @@
$.on(nodes.fileInput, 'change', QR.handleFiles);
$.on(nodes.sjisToggle, 'click', QR.toggleSJIS);
$.on(nodes.customCooldown, 'click', QR.toggleCustomCooldown);
$.on(nodes.drawButton, 'click', QR.oekakiDraw);
window.addEventListener('focus', QR.focus, true);
window.addEventListener('blur', QR.focus, true);
$.on(d, 'click', QR.focus);
@ -19577,7 +19576,9 @@
"#qr.forced-anon input[data-name=\"name\"]:not(.force-show),\n" +
"#qr.forced-anon input[data-name=\"sub\"]:not(.force-show),\n" +
"#qr.reply-to-thread input[data-name=\"sub\"]:not(.force-show),\n" +
"body:not(.board_f) #qr select[name=\"filetag\"],\n" +
"#qr.reply-to-thread select[name=\"filetag\"],\n" +
"body:not(.board_i) .oekaki,\n" +
"body:not(.board_jp) #sjis-toggle {\n" +
" display: none;\n" +
"}\n" +
@ -19678,8 +19679,8 @@
".goog-bubble-content iframe {\n" +
" position: static !important;\n" +
"}\n" +
"/* File Input, Submit Button */\n" +
"#file-n-submit {\n" +
"/* File Input, Submit Button, Oekaki */\n" +
"#file-n-submit, .oekaki {\n" +
" display: -webkit-flex;\n" +
" display: flex;\n" +
" -webkit-align-items: stretch;\n" +
@ -19687,13 +19688,13 @@
" height: 25px;\n" +
" margin-top: 1px;\n" +
"}\n" +
"#file-n-submit > input {\n" +
"#file-n-submit > input, #qr-draw-button {\n" +
" background: linear-gradient(to bottom, #F8F8F8, #DCDCDC) no-repeat;\n" +
" border: 1px solid #BBB;\n" +
" border-radius: 2px;\n" +
" height: 100%;\n" +
"}\n" +
"#qr-file-button {\n" +
"#qr-file-button, #qr-draw-button {\n" +
" width: 15%;\n" +
"}\n" +
"#file-n-submit input[type=\"submit\"] {\n" +
@ -19733,12 +19734,31 @@
"#qr-no-file {\n" +
" color: #AAA;\n" +
"}\n" +
".oekaki > label {\n" +
" -webkit-flex: 1 1 auto;\n" +
" flex: 1 1 auto;\n" +
" width: 0;\n" +
" display: -webkit-flex;\n" +
" display: flex;\n" +
" -webkit-align-items: center;\n" +
" align-items: center;\n" +
" height: 100%;\n" +
"}\n" +
".oekaki > label > span {\n" +
" margin: 0 3px;\n" +
"}\n" +
".oekaki > label > input {\n" +
" -webkit-flex: 1 1 auto;\n" +
" flex: 1 1 auto;\n" +
" width: 0;\n" +
" height: 100%;\n" +
"}\n" +
"#qr input[type=\"file\"] {\n" +
" visibility: hidden;\n" +
" position: absolute;\n" +
"}\n" +
"/* Spoiler Checkbox, QR Icons */\n" +
"#qr-spoiler-label, #qr-filename-container > a {\n" +
"#qr-filename-container > label, #qr-filename-container > a {\n" +
" -webkit-flex: none;\n" +
" flex: none;\n" +
" margin: 0;\n" +
@ -19750,9 +19770,26 @@
"#file-n-submit:not(.custom-cooldown) #custom-cooldown-button {\n" +
" display: none;\n" +
"}\n" +
"#qr-file-spoiler {\n" +
"#qr-filename-container > label {\n" +
" position: relative;\n" +
"}\n" +
"#qr-filename-container input[type=\"checkbox\"] {\n" +
" margin: 0;\n" +
"}\n" +
".checkbox-letter {\n" +
" pointer-events: none;\n" +
" position: absolute;\n" +
" top: 2px;\n" +
" left: 0;\n" +
" right: 0;\n" +
" text-align: center;\n" +
" font-size: 11px;\n" +
" font-weight: bold;\n" +
" color: rgba(0,0,0,.6);\n" +
"}\n" +
"input[type=\"checkbox\"]:checked ~ .checkbox-letter {\n" +
" display: none;\n" +
"}\n" +
"#paste-area, #url-button, #custom-cooldown-button, #dump-button {\n" +
" opacity: 0.6;\n" +
"}\n" +
@ -20711,7 +20748,8 @@
" background: rgb(26, 27, 29);\n" +
"}\n" +
":root.tomorrow #qr select,\n" +
":root.tomorrow #file-n-submit > input {\n" +
":root.tomorrow #file-n-submit > input,\n" +
":root.tomorrow #qr-draw-button {\n" +
" border-color: rgb(40, 41, 42);\n" +
"}\n" +
":root.tomorrow #qr-filename {\n" +

Binary file not shown.

View File

@ -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://www.4chan-x.net/builds/4chan-X-beta.crx' version='1.11.13.2' />
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X-beta.crx' version='1.11.13.3' />
</app>
</gupdate>

View File

@ -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://www.4chan-x.net/builds/4chan-X.crx' version='1.11.13.2' />
<updatecheck codebase='https://www.4chan-x.net/builds/4chan-X.crx' version='1.11.13.3' />
</app>
</gupdate>

View File

@ -4,8 +4,8 @@
"meta": {
"name": "4chan X",
"fork": "ccd0",
"version": "1.11.13.2",
"date": "2015-10-18T07:48:28.182Z",
"version": "1.11.13.3",
"date": "2015-10-19T00:22:53.625Z",
"page": "https://www.4chan-x.net/",
"downloads": "https://www.4chan-x.net/builds/",
"oldVersions": "https://raw.githubusercontent.com/ccd0/4chan-x/",