Release 4chan X v1.11.2.0.
This commit is contained in:
parent
72d59eaf27
commit
c448ed5a60
@ -2,6 +2,14 @@ Sometimes the changelog has notes (not comprehensive) acknowledging people's wor
|
||||
|
||||
The links to individual versions below are to copies of the script with the update URL removed. If you want automatic updates, install the script from the links on the [main page](https://github.com/ccd0/4chan-x).
|
||||
|
||||
### v1.11.2
|
||||
|
||||
**v1.11.2.0** *(2015-06-29)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.0/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.2.0/builds/4chan-X-noupdate.crx "Chromium version")]
|
||||
- Based on v1.11.1.3.
|
||||
- `Use Recaptcha v1` option now works on the original post form.
|
||||
- Captcha section of QR can now be opened with the space bar.
|
||||
- Minor bugfixes.
|
||||
|
||||
### v1.11.1
|
||||
|
||||
**v1.11.1.3** *(2015-06-26)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.1.3/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.1.3/builds/4chan-X-noupdate.crx "Chromium version")]
|
||||
|
||||
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name 4chan X beta
|
||||
// @version 1.11.1.3
|
||||
// @version 1.11.2.0
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
// Generated by CoffeeScript
|
||||
// ==UserScript==
|
||||
// @name 4chan X beta
|
||||
// @version 1.11.1.3
|
||||
// @version 1.11.2.0
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -242,12 +242,12 @@
|
||||
'Hide Original Post Form': [true, 'Hide the normal post form.', 1],
|
||||
'Cooldown': [true, 'Indicate the remaining time before posting again.', 1],
|
||||
'Posting Success Notifications': [true, 'Show notifications on successful post creation or file uploading.', 1],
|
||||
'Use Recaptcha v1': [false, 'Use the old text version of Recaptcha.', 1],
|
||||
'Force Noscript Captcha': [false, 'Use the non-Javascript fallback captcha in the QR even if Javascript is enabled.', 1],
|
||||
'Auto-load captcha': [false, 'Automatically load the captcha in the QR even if your post is empty.', 1],
|
||||
'Post on Captcha Completion': [false, 'Submit the post immediately when the captcha is completed.', 1],
|
||||
'Bottom QR Link': [true, 'Places a link on the bottom of threads to open the QR.', 1],
|
||||
'Captcha Fixes': [true, 'Make captcha easier to use, especially with the keyboard.'],
|
||||
'Use Recaptcha v1': [false, 'Use the old text version of Recaptcha.'],
|
||||
'Use Recaptcha v2 in Reports': [false, 'Use the image selection captcha in the report window.']
|
||||
},
|
||||
'Quote Links': {
|
||||
@ -299,7 +299,7 @@
|
||||
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",
|
||||
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",
|
||||
comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g\n# Filter posts with 10 or more quote links:\n#/(?:>>\\d(?:(?!>>\\d)[^])*){10}/",
|
||||
flag: '',
|
||||
filename: '',
|
||||
dimensions: "# Highlight potential wallpapers:\n#/1920x1080/;op:yes;highlight;top:no;boards:w,wg",
|
||||
@ -411,7 +411,7 @@
|
||||
doc = d.documentElement;
|
||||
|
||||
g = {
|
||||
VERSION: '1.11.1.3',
|
||||
VERSION: '1.11.2.0',
|
||||
NAMESPACE: '4chan X.',
|
||||
boards: {}
|
||||
};
|
||||
@ -1523,7 +1523,6 @@
|
||||
};
|
||||
|
||||
Post.prototype.collect = function() {
|
||||
this.kill();
|
||||
g.posts.rm(this.fullID);
|
||||
this.thread.posts.rm(this);
|
||||
return this.board.posts.rm(this);
|
||||
@ -6956,24 +6955,26 @@
|
||||
return alert(el.textContent);
|
||||
}
|
||||
} else if (d.hidden || !(focusOverride || d.hasFocus())) {
|
||||
notif = new Notification(el.textContent, {
|
||||
body: el.textContent,
|
||||
icon: Favicon.logo
|
||||
});
|
||||
notif.onclick = function() {
|
||||
return window.focus();
|
||||
};
|
||||
if (typeof chrome !== "undefined" && chrome !== null) {
|
||||
notif.onclose = function() {
|
||||
return notice.close();
|
||||
try {
|
||||
notif = new Notification(el.textContent, {
|
||||
body: el.textContent,
|
||||
icon: Favicon.logo
|
||||
});
|
||||
notif.onclick = function() {
|
||||
return window.focus();
|
||||
};
|
||||
return notif.onshow = function() {
|
||||
return setTimeout(function() {
|
||||
notif.onclose = null;
|
||||
return notif.close();
|
||||
}, 7 * $.SECOND);
|
||||
};
|
||||
}
|
||||
if (typeof chrome !== "undefined" && chrome !== null) {
|
||||
notif.onclose = function() {
|
||||
return notice.close();
|
||||
};
|
||||
return notif.onshow = function() {
|
||||
return setTimeout(function() {
|
||||
notif.onclose = null;
|
||||
return notif.close();
|
||||
}, 7 * $.SECOND);
|
||||
};
|
||||
}
|
||||
} catch (_error) {}
|
||||
}
|
||||
},
|
||||
notifications: [],
|
||||
@ -7820,33 +7821,6 @@
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.language = {
|
||||
init: function() {
|
||||
if (!(Conf['captchaLanguage'].trim() && d.cookie.indexOf('pass_enabled=1') < 0 && !Conf['Hide Original Post Form'])) {
|
||||
return;
|
||||
}
|
||||
return $.onExists(doc, '#captchaFormPart', true, function(node) {
|
||||
return $.onExists(node, 'iframe', true, Captcha.language.fixIframe);
|
||||
});
|
||||
},
|
||||
fixPage: function() {
|
||||
if (!(Conf['captchaLanguage'].trim() && d.cookie.indexOf('pass_enabled=1') < 0)) {
|
||||
return;
|
||||
}
|
||||
return $.onExists(doc, 'iframe', true, Captcha.language.fixIframe);
|
||||
},
|
||||
fixIframe: function(el) {
|
||||
var lang, src;
|
||||
if (!(lang = Conf['captchaLanguage'].trim())) {
|
||||
return;
|
||||
}
|
||||
src = /[?&]hl=/.test(el.src) ? el.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent(lang)) : el.src + ("&hl=" + (encodeURIComponent(lang)));
|
||||
if (el.src !== src) {
|
||||
return el.src = src;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.noscript = {
|
||||
lifetime: 30 * $.MINUTE,
|
||||
init: function() {
|
||||
@ -7854,7 +7828,7 @@
|
||||
if (d.cookie.indexOf('pass_enabled=1') >= 0) {
|
||||
return;
|
||||
}
|
||||
if (!(this.isEnabled = !!$.id('g-recaptcha'))) {
|
||||
if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
container = $.el('div', {
|
||||
@ -8182,24 +8156,97 @@
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.v1 = {
|
||||
Captcha.replace = {
|
||||
init: function() {
|
||||
var captchaContainer, imgContainer, input, script;
|
||||
var jsEnabled;
|
||||
if (!(d.cookie.indexOf('pass_enabled=1') < 0)) {
|
||||
return;
|
||||
}
|
||||
if (location.hostname === 'boards.4chan.org' && Conf['Hide Original Post Form']) {
|
||||
return;
|
||||
}
|
||||
jsEnabled = $.hasClass(doc, 'js-enabled');
|
||||
if (location.hostname === 'sys.4chan.org' && Conf['Use Recaptcha v2 in Reports'] && jsEnabled) {
|
||||
$.ready(Captcha.replace.v2);
|
||||
return;
|
||||
}
|
||||
if (Conf['Use Recaptcha v1'] && jsEnabled && location.hostname !== 'www.4chan.org') {
|
||||
$.ready(Captcha.replace.v1);
|
||||
return;
|
||||
}
|
||||
if (Conf['captchaLanguage'].trim()) {
|
||||
if (location.hostname === 'boards.4chan.org') {
|
||||
return $.onExists(doc, '#captchaFormPart', true, function(node) {
|
||||
return $.onExists(node, 'iframe', true, Captcha.replace.iframe);
|
||||
});
|
||||
} else {
|
||||
return $.onExists(doc, 'iframe', true, Captcha.replace.iframe);
|
||||
}
|
||||
}
|
||||
},
|
||||
v1: function() {
|
||||
var form, link;
|
||||
if (!$.id('g-recaptcha')) {
|
||||
return;
|
||||
}
|
||||
Captcha.v1.replace();
|
||||
if (link = $.id('form-link')) {
|
||||
return $.on(link, 'click', function() {
|
||||
return Captcha.v1.create();
|
||||
});
|
||||
} else if (location.hostname === 'boards.4chan.org') {
|
||||
form = $.id('postForm');
|
||||
return form.addEventListener('focus', (function() {
|
||||
return Captcha.v1.create();
|
||||
}), true);
|
||||
} else {
|
||||
return Captcha.v1.create();
|
||||
}
|
||||
},
|
||||
v2: function() {
|
||||
var container, lang, old, script, url;
|
||||
if (!(old = $.id('captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
container = $.el('div', {
|
||||
className: 'g-recaptcha'
|
||||
});
|
||||
$.extend(container.dataset, {
|
||||
sitekey: '6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc',
|
||||
tabindex: 3
|
||||
});
|
||||
$.replace(old, container);
|
||||
url = 'https://www.google.com/recaptcha/api.js';
|
||||
if (lang = Conf['captchaLanguage'].trim()) {
|
||||
url += "?hl=" + (encodeURIComponent(lang));
|
||||
}
|
||||
script = $.el('script', {
|
||||
src: url
|
||||
});
|
||||
return $.add(d.head, script);
|
||||
},
|
||||
iframe: function(el) {
|
||||
var lang, src;
|
||||
if (!(lang = Conf['captchaLanguage'].trim())) {
|
||||
return;
|
||||
}
|
||||
src = /[?&]hl=/.test(el.src) ? el.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent(lang)) : el.src + ("&hl=" + (encodeURIComponent(lang)));
|
||||
if (el.src !== src) {
|
||||
return el.src = src;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.v1 = {
|
||||
blank: "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='57'/>",
|
||||
init: function() {
|
||||
var imgContainer, input;
|
||||
if (d.cookie.indexOf('pass_enabled=1') >= 0) {
|
||||
return;
|
||||
}
|
||||
if (!(this.isEnabled = !!$.id('g-recaptcha'))) {
|
||||
if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
script = $.el('script', {
|
||||
src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js'
|
||||
});
|
||||
$.add(d.head, script);
|
||||
captchaContainer = $.el('div', {
|
||||
id: 'captchaContainer',
|
||||
hidden: true
|
||||
});
|
||||
$.add(d.body, captchaContainer);
|
||||
imgContainer = $.el('div', {
|
||||
className: 'captcha-img',
|
||||
title: 'Reload reCAPTCHA'
|
||||
@ -8231,13 +8278,36 @@
|
||||
return QR.captcha.clear();
|
||||
});
|
||||
$.sync('captchas', this.sync);
|
||||
new MutationObserver(this.afterSetup).observe($.id('captchaContainer'), {
|
||||
childList: true
|
||||
});
|
||||
this.beforeSetup();
|
||||
if (Conf['Auto-load captcha']) {
|
||||
return this.setup();
|
||||
this.setup();
|
||||
}
|
||||
new MutationObserver(this.afterSetup).observe($.id('captchaContainerAlt'), {
|
||||
childList: true
|
||||
});
|
||||
return this.afterSetup();
|
||||
},
|
||||
replace: function() {
|
||||
var container, old;
|
||||
if (this.script) {
|
||||
return;
|
||||
}
|
||||
if (!(this.script = $('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', d.head))) {
|
||||
this.script = $.el('script', {
|
||||
src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js'
|
||||
});
|
||||
$.add(d.head, this.script);
|
||||
}
|
||||
if (old = $.id('g-recaptcha')) {
|
||||
container = $.el('div', {
|
||||
id: 'captchaContainerAlt'
|
||||
});
|
||||
return $.replace(old, container);
|
||||
}
|
||||
},
|
||||
create: function() {
|
||||
this.replace();
|
||||
return $.globalEval('(function() {\n var container = document.getElementById("captchaContainerAlt");\n if (container.firstChild) return;\n var options = {\n theme: "clean",\n tabindex: {"boards.4chan.org": 5, "sys.4chan.org": 3}[location.hostname]\n };\n if (window.Recaptcha) {\n window.Recaptcha.create("6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc", container, options);\n } else {\n var script = document.head.querySelector(\'script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]\');\n script.addEventListener(\'load\', function() {\n window.Recaptcha.create("6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc", container, options);\n }, false);\n }\n})();');
|
||||
},
|
||||
cb: {
|
||||
focus: function() {
|
||||
@ -8248,6 +8318,7 @@
|
||||
var img, input, ref;
|
||||
ref = this.nodes, img = ref.img, input = ref.input;
|
||||
img.parentNode.hidden = true;
|
||||
img.src = this.blank;
|
||||
input.value = '';
|
||||
input.placeholder = 'Focus to load reCAPTCHA';
|
||||
this.count();
|
||||
@ -8268,10 +8339,10 @@
|
||||
onNewPost: function() {},
|
||||
onPostChange: function() {},
|
||||
setup: function(focus, force) {
|
||||
if (!(this.isEnabled && (this.needed() || force))) {
|
||||
if (!(this.isEnabled && (force || this.needed()))) {
|
||||
return;
|
||||
}
|
||||
$.globalEval('(function() {\n var captchaContainer = document.getElementById("captchaContainer");\n if (captchaContainer.firstChild) return;\n function setup() {\n if (window.Recaptcha) {\n Recaptcha.create(recaptchaKey, captchaContainer, {theme: "clean"});\n } else {\n setTimeout(setup, 25);\n }\n }\n setup();\n})()');
|
||||
this.create();
|
||||
if (focus) {
|
||||
return this.nodes.input.focus();
|
||||
}
|
||||
@ -8308,11 +8379,13 @@
|
||||
}
|
||||
},
|
||||
destroy: function() {
|
||||
if (!this.isEnabled) {
|
||||
if (!this.script) {
|
||||
return;
|
||||
}
|
||||
$.globalEval('Recaptcha.destroy()');
|
||||
return this.beforeSetup();
|
||||
$.globalEval('window.Recaptcha.destroy();');
|
||||
if (this.nodes) {
|
||||
return this.beforeSetup();
|
||||
}
|
||||
},
|
||||
sync: function(captchas) {
|
||||
if (captchas == null) {
|
||||
@ -8380,6 +8453,10 @@
|
||||
},
|
||||
load: function() {
|
||||
var challenge, challenge_image;
|
||||
if ($('#captchaContainerAlt[class~="recaptcha_is_showing_audio"]')) {
|
||||
this.nodes.img.src = this.blank;
|
||||
return;
|
||||
}
|
||||
if (!this.nodes.challenge.firstChild) {
|
||||
return;
|
||||
}
|
||||
@ -8390,7 +8467,7 @@
|
||||
challenge = this.nodes.challenge.firstChild.value;
|
||||
this.nodes.img.alt = challenge;
|
||||
this.nodes.img.src = challenge_image.src;
|
||||
this.nodes.input.value = null;
|
||||
this.nodes.input.value = '';
|
||||
return this.clear();
|
||||
},
|
||||
count: function() {
|
||||
@ -8416,7 +8493,7 @@
|
||||
return this.nodes.input.alt = count;
|
||||
},
|
||||
reload: function(focus) {
|
||||
$.globalEval('Recaptcha.reload(); Recaptcha.should_focus = false;');
|
||||
$.globalEval('if (window.Recaptcha.type === "image") {\n window.Recaptcha.reload();\n} else {\n window.Recaptcha.switch_type("image");\n}\nwindow.Recaptcha.should_focus = false;');
|
||||
if (focus) {
|
||||
return this.nodes.input.focus();
|
||||
}
|
||||
@ -8440,7 +8517,7 @@
|
||||
if (d.cookie.indexOf('pass_enabled=1') >= 0) {
|
||||
return;
|
||||
}
|
||||
if (!(this.isEnabled = !!$.id('g-recaptcha'))) {
|
||||
if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
if (this.noscript = Conf['Force Noscript Captcha'] || !$.hasClass(doc, 'js-enabled')) {
|
||||
@ -8475,6 +8552,16 @@
|
||||
$.addClass(QR.nodes.el, 'has-captcha', 'captcha-v2');
|
||||
$.after(QR.nodes.com.parentNode, root);
|
||||
$.on(counter, 'click', this.toggle.bind(this));
|
||||
$.on(counter, 'keydown', (function(_this) {
|
||||
return function(e) {
|
||||
if (Keybinds.keyCode(e) !== 'Space') {
|
||||
return;
|
||||
}
|
||||
_this.toggle();
|
||||
e.preventDefault();
|
||||
return e.stopPropagation();
|
||||
};
|
||||
})(this));
|
||||
return $.on(window, 'captcha:success', (function(_this) {
|
||||
return function() {
|
||||
return $.queueTask(function() {
|
||||
@ -8597,7 +8684,7 @@
|
||||
}
|
||||
},
|
||||
setupIFrame: function(iframe) {
|
||||
Captcha.language.fixIframe(iframe);
|
||||
Captcha.replace.iframe(iframe);
|
||||
$.addClass(QR.nodes.el, 'captcha-open');
|
||||
if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) {
|
||||
QR.nodes.el.style.top = null;
|
||||
@ -13912,19 +13999,21 @@
|
||||
if (!Header.areNotificationsEnabled) {
|
||||
return;
|
||||
}
|
||||
notif = new Notification(post.info.nameBlock + " replied to you", {
|
||||
body: post.info.commentDisplay,
|
||||
icon: Favicon.logo
|
||||
});
|
||||
notif.onclick = function() {
|
||||
Header.scrollToIfNeeded(post.nodes.root, true);
|
||||
return window.focus();
|
||||
};
|
||||
return notif.onshow = function() {
|
||||
return setTimeout(function() {
|
||||
return notif.close();
|
||||
}, 7 * $.SECOND);
|
||||
};
|
||||
try {
|
||||
notif = new Notification(post.info.nameBlock + " replied to you", {
|
||||
body: post.info.commentDisplay,
|
||||
icon: Favicon.logo
|
||||
});
|
||||
notif.onclick = function() {
|
||||
Header.scrollToIfNeeded(post.nodes.root, true);
|
||||
return window.focus();
|
||||
};
|
||||
return notif.onshow = function() {
|
||||
return setTimeout(function() {
|
||||
return notif.close();
|
||||
}, 7 * $.SECOND);
|
||||
};
|
||||
} catch (_error) {}
|
||||
},
|
||||
onUpdate: function(e) {
|
||||
if (!e.detail[404]) {
|
||||
@ -15905,21 +15994,18 @@
|
||||
};
|
||||
|
||||
Report = {
|
||||
css: "noscript > div, noscript > div > div {\n" +
|
||||
" height: 545px !important;\n" +
|
||||
"}\n" +
|
||||
"noscript > div > div > div:first-child, noscript iframe {\n" +
|
||||
" height: 423px !important;\n" +
|
||||
"}\n" +
|
||||
":root:not(.js-enabled) #g-recaptcha {\n" +
|
||||
css: ":root:not(.js-enabled) #captchaContainerAlt {\n" +
|
||||
" height: auto;\n" +
|
||||
"}\n" +
|
||||
"noscript > iframe, #recaptcha_challenge_field {\n" +
|
||||
" width: 500px;\n" +
|
||||
"}",
|
||||
init: function() {
|
||||
var match;
|
||||
if (!(/\bmode=report\b/.test(location.search) && (match = location.search.match(/\bno=(\d+)/)))) {
|
||||
return;
|
||||
}
|
||||
Captcha.language.fixPage();
|
||||
Captcha.replace.init();
|
||||
this.postID = +match[1];
|
||||
return $.ready(this.ready);
|
||||
},
|
||||
@ -15928,9 +16014,6 @@
|
||||
if (Conf['Archive Report']) {
|
||||
Report.archive();
|
||||
}
|
||||
if (Conf['Use Recaptcha v2 in Reports']) {
|
||||
Report.captchaV2();
|
||||
}
|
||||
if (Conf['Use Recaptcha v2 in Reports'] && $.hasClass(doc, 'js-enabled')) {
|
||||
return new MutationObserver(function() {
|
||||
return Report.fit('.gc-bubbleDefault');
|
||||
@ -15943,25 +16026,6 @@
|
||||
return Report.fit('body');
|
||||
}
|
||||
},
|
||||
captchaV2: function() {
|
||||
var container, lang, old, script, url;
|
||||
if (!(old = $.id('captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
container = $.el('div', {
|
||||
className: 'g-recaptcha'
|
||||
});
|
||||
container.dataset.sitekey = '6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc';
|
||||
$.replace(old, container);
|
||||
url = 'https://www.google.com/recaptcha/api.js';
|
||||
if (lang = Conf['captchaLanguage'].trim()) {
|
||||
url += "?hl=" + (encodeURIComponent(lang));
|
||||
}
|
||||
script = $.el('script', {
|
||||
src: url
|
||||
});
|
||||
return $.add(d.head, script);
|
||||
},
|
||||
fit: function(selector) {
|
||||
var dy, el;
|
||||
if (!(el = $(selector, doc))) {
|
||||
@ -16830,19 +16894,6 @@
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (location.hostname === 'www.4chan.org') {
|
||||
$.onExists(d.documentElement, 'body', false, function() {
|
||||
return $.addStyle(Main.cssWWW);
|
||||
});
|
||||
Conf = {
|
||||
'captchaLanguage': Config.captchaLanguage
|
||||
};
|
||||
$.get(Conf, function(items) {
|
||||
$.extend(Conf, items);
|
||||
return Captcha.language.fixPage();
|
||||
});
|
||||
return;
|
||||
}
|
||||
g.threads = new SimpleDict();
|
||||
g.posts = new SimpleDict();
|
||||
pathname = location.pathname.split('/');
|
||||
@ -16911,10 +16962,13 @@
|
||||
},
|
||||
initFeatures: function() {
|
||||
var err, feature, k, len1, name, pathname, ref, ref1, ref2;
|
||||
if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org') {
|
||||
if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org' || ref === 'www.4chan.org') {
|
||||
$.globalEval('document.documentElement.classList.add("js-enabled");');
|
||||
}
|
||||
switch (location.hostname) {
|
||||
case 'www.4chan.org':
|
||||
Captcha.replace.init();
|
||||
return;
|
||||
case 'a.4cdn.org':
|
||||
return;
|
||||
case 'sys.4chan.org':
|
||||
@ -16974,6 +17028,9 @@
|
||||
},
|
||||
initStyle: function() {
|
||||
var keyboard, ref;
|
||||
if (location.hostname === 'www.4chan.org') {
|
||||
$.addStyle(Main.cssWWW);
|
||||
}
|
||||
if (!Main.isThisPageLegit() || $.hasClass(doc, 'fourchan-x')) {
|
||||
return;
|
||||
}
|
||||
@ -17802,15 +17859,6 @@
|
||||
" 0% {transform:rotate(0deg);}\n" +
|
||||
" 100% {transform:rotate(359deg);}\n" +
|
||||
"}\n" +
|
||||
"noscript > div, noscript > div > div {\n" +
|
||||
" height: 545px !important;\n" +
|
||||
"}\n" +
|
||||
"noscript > div > div > div:first-child, noscript iframe {\n" +
|
||||
" height: 423px !important;\n" +
|
||||
"}\n" +
|
||||
":root:not(.js-enabled) #g-recaptcha {\n" +
|
||||
" height: auto;\n" +
|
||||
"}\n" +
|
||||
"/* General */\n" +
|
||||
".dialog {\n" +
|
||||
" border: 1px solid;\n" +
|
||||
@ -17920,6 +17968,9 @@
|
||||
":root:not(.js-enabled) #postForm {\n" +
|
||||
" display: table;\n" +
|
||||
"}\n" +
|
||||
"#captchaContainerAlt td:nth-child(2) {\n" +
|
||||
" display: table-cell !important;\n" +
|
||||
"}\n" +
|
||||
"/* Anti-autoplay */\n" +
|
||||
"audio.controls-added {\n" +
|
||||
" display: block;\n" +
|
||||
@ -20217,19 +20268,10 @@
|
||||
" font-family: sans-serif !important;\n" +
|
||||
" text-shadow: 1px 1px 1px rgba(0,74,153,0.6);\n" +
|
||||
"}",
|
||||
cssWWW: "noscript > div, noscript > div > div {\n" +
|
||||
" height: 545px !important;\n" +
|
||||
"}\n" +
|
||||
"noscript > div > div > div:first-child, noscript iframe {\n" +
|
||||
" height: 423px !important;\n" +
|
||||
"}\n" +
|
||||
":root:not(.js-enabled) #g-recaptcha {\n" +
|
||||
" height: auto;\n" +
|
||||
"}\n" +
|
||||
"#captcha-cnt {\n" +
|
||||
cssWWW: "#captcha-cnt {\n" +
|
||||
" height: auto;\n" +
|
||||
"}",
|
||||
features: [['Polyfill', Polyfill], ['Captcha Language', Captcha.language], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash]]
|
||||
features: [['Polyfill', Polyfill], ['Captcha Replacement', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash]]
|
||||
};
|
||||
|
||||
Main.init();
|
||||
|
||||
Binary file not shown.
@ -1,7 +1,7 @@
|
||||
// Generated by CoffeeScript
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.11.1.3
|
||||
// @version 1.11.2.0
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -241,12 +241,12 @@
|
||||
'Hide Original Post Form': [true, 'Hide the normal post form.', 1],
|
||||
'Cooldown': [true, 'Indicate the remaining time before posting again.', 1],
|
||||
'Posting Success Notifications': [true, 'Show notifications on successful post creation or file uploading.', 1],
|
||||
'Use Recaptcha v1': [false, 'Use the old text version of Recaptcha.', 1],
|
||||
'Force Noscript Captcha': [false, 'Use the non-Javascript fallback captcha in the QR even if Javascript is enabled.', 1],
|
||||
'Auto-load captcha': [false, 'Automatically load the captcha in the QR even if your post is empty.', 1],
|
||||
'Post on Captcha Completion': [false, 'Submit the post immediately when the captcha is completed.', 1],
|
||||
'Bottom QR Link': [true, 'Places a link on the bottom of threads to open the QR.', 1],
|
||||
'Captcha Fixes': [true, 'Make captcha easier to use, especially with the keyboard.'],
|
||||
'Use Recaptcha v1': [false, 'Use the old text version of Recaptcha.'],
|
||||
'Use Recaptcha v2 in Reports': [false, 'Use the image selection captcha in the report window.']
|
||||
},
|
||||
'Quote Links': {
|
||||
@ -298,7 +298,7 @@
|
||||
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",
|
||||
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",
|
||||
comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g\n# Filter posts with 10 or more quote links:\n#/(?:>>\\d(?:(?!>>\\d)[^])*){10}/",
|
||||
flag: '',
|
||||
filename: '',
|
||||
dimensions: "# Highlight potential wallpapers:\n#/1920x1080/;op:yes;highlight;top:no;boards:w,wg",
|
||||
@ -410,7 +410,7 @@
|
||||
doc = d.documentElement;
|
||||
|
||||
g = {
|
||||
VERSION: '1.11.1.3',
|
||||
VERSION: '1.11.2.0',
|
||||
NAMESPACE: '4chan X.',
|
||||
boards: {}
|
||||
};
|
||||
@ -1522,7 +1522,6 @@
|
||||
};
|
||||
|
||||
Post.prototype.collect = function() {
|
||||
this.kill();
|
||||
g.posts.rm(this.fullID);
|
||||
this.thread.posts.rm(this);
|
||||
return this.board.posts.rm(this);
|
||||
@ -6955,24 +6954,26 @@
|
||||
return alert(el.textContent);
|
||||
}
|
||||
} else if (d.hidden || !(focusOverride || d.hasFocus())) {
|
||||
notif = new Notification(el.textContent, {
|
||||
body: el.textContent,
|
||||
icon: Favicon.logo
|
||||
});
|
||||
notif.onclick = function() {
|
||||
return window.focus();
|
||||
};
|
||||
if (typeof chrome !== "undefined" && chrome !== null) {
|
||||
notif.onclose = function() {
|
||||
return notice.close();
|
||||
try {
|
||||
notif = new Notification(el.textContent, {
|
||||
body: el.textContent,
|
||||
icon: Favicon.logo
|
||||
});
|
||||
notif.onclick = function() {
|
||||
return window.focus();
|
||||
};
|
||||
return notif.onshow = function() {
|
||||
return setTimeout(function() {
|
||||
notif.onclose = null;
|
||||
return notif.close();
|
||||
}, 7 * $.SECOND);
|
||||
};
|
||||
}
|
||||
if (typeof chrome !== "undefined" && chrome !== null) {
|
||||
notif.onclose = function() {
|
||||
return notice.close();
|
||||
};
|
||||
return notif.onshow = function() {
|
||||
return setTimeout(function() {
|
||||
notif.onclose = null;
|
||||
return notif.close();
|
||||
}, 7 * $.SECOND);
|
||||
};
|
||||
}
|
||||
} catch (_error) {}
|
||||
}
|
||||
},
|
||||
notifications: [],
|
||||
@ -7819,33 +7820,6 @@
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.language = {
|
||||
init: function() {
|
||||
if (!(Conf['captchaLanguage'].trim() && d.cookie.indexOf('pass_enabled=1') < 0 && !Conf['Hide Original Post Form'])) {
|
||||
return;
|
||||
}
|
||||
return $.onExists(doc, '#captchaFormPart', true, function(node) {
|
||||
return $.onExists(node, 'iframe', true, Captcha.language.fixIframe);
|
||||
});
|
||||
},
|
||||
fixPage: function() {
|
||||
if (!(Conf['captchaLanguage'].trim() && d.cookie.indexOf('pass_enabled=1') < 0)) {
|
||||
return;
|
||||
}
|
||||
return $.onExists(doc, 'iframe', true, Captcha.language.fixIframe);
|
||||
},
|
||||
fixIframe: function(el) {
|
||||
var lang, src;
|
||||
if (!(lang = Conf['captchaLanguage'].trim())) {
|
||||
return;
|
||||
}
|
||||
src = /[?&]hl=/.test(el.src) ? el.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent(lang)) : el.src + ("&hl=" + (encodeURIComponent(lang)));
|
||||
if (el.src !== src) {
|
||||
return el.src = src;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.noscript = {
|
||||
lifetime: 30 * $.MINUTE,
|
||||
init: function() {
|
||||
@ -7853,7 +7827,7 @@
|
||||
if (d.cookie.indexOf('pass_enabled=1') >= 0) {
|
||||
return;
|
||||
}
|
||||
if (!(this.isEnabled = !!$.id('g-recaptcha'))) {
|
||||
if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
container = $.el('div', {
|
||||
@ -8181,24 +8155,97 @@
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.v1 = {
|
||||
Captcha.replace = {
|
||||
init: function() {
|
||||
var captchaContainer, imgContainer, input, script;
|
||||
var jsEnabled;
|
||||
if (!(d.cookie.indexOf('pass_enabled=1') < 0)) {
|
||||
return;
|
||||
}
|
||||
if (location.hostname === 'boards.4chan.org' && Conf['Hide Original Post Form']) {
|
||||
return;
|
||||
}
|
||||
jsEnabled = $.hasClass(doc, 'js-enabled');
|
||||
if (location.hostname === 'sys.4chan.org' && Conf['Use Recaptcha v2 in Reports'] && jsEnabled) {
|
||||
$.ready(Captcha.replace.v2);
|
||||
return;
|
||||
}
|
||||
if (Conf['Use Recaptcha v1'] && jsEnabled && location.hostname !== 'www.4chan.org') {
|
||||
$.ready(Captcha.replace.v1);
|
||||
return;
|
||||
}
|
||||
if (Conf['captchaLanguage'].trim()) {
|
||||
if (location.hostname === 'boards.4chan.org') {
|
||||
return $.onExists(doc, '#captchaFormPart', true, function(node) {
|
||||
return $.onExists(node, 'iframe', true, Captcha.replace.iframe);
|
||||
});
|
||||
} else {
|
||||
return $.onExists(doc, 'iframe', true, Captcha.replace.iframe);
|
||||
}
|
||||
}
|
||||
},
|
||||
v1: function() {
|
||||
var form, link;
|
||||
if (!$.id('g-recaptcha')) {
|
||||
return;
|
||||
}
|
||||
Captcha.v1.replace();
|
||||
if (link = $.id('form-link')) {
|
||||
return $.on(link, 'click', function() {
|
||||
return Captcha.v1.create();
|
||||
});
|
||||
} else if (location.hostname === 'boards.4chan.org') {
|
||||
form = $.id('postForm');
|
||||
return form.addEventListener('focus', (function() {
|
||||
return Captcha.v1.create();
|
||||
}), true);
|
||||
} else {
|
||||
return Captcha.v1.create();
|
||||
}
|
||||
},
|
||||
v2: function() {
|
||||
var container, lang, old, script, url;
|
||||
if (!(old = $.id('captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
container = $.el('div', {
|
||||
className: 'g-recaptcha'
|
||||
});
|
||||
$.extend(container.dataset, {
|
||||
sitekey: '6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc',
|
||||
tabindex: 3
|
||||
});
|
||||
$.replace(old, container);
|
||||
url = 'https://www.google.com/recaptcha/api.js';
|
||||
if (lang = Conf['captchaLanguage'].trim()) {
|
||||
url += "?hl=" + (encodeURIComponent(lang));
|
||||
}
|
||||
script = $.el('script', {
|
||||
src: url
|
||||
});
|
||||
return $.add(d.head, script);
|
||||
},
|
||||
iframe: function(el) {
|
||||
var lang, src;
|
||||
if (!(lang = Conf['captchaLanguage'].trim())) {
|
||||
return;
|
||||
}
|
||||
src = /[?&]hl=/.test(el.src) ? el.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent(lang)) : el.src + ("&hl=" + (encodeURIComponent(lang)));
|
||||
if (el.src !== src) {
|
||||
return el.src = src;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.v1 = {
|
||||
blank: "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='57'/>",
|
||||
init: function() {
|
||||
var imgContainer, input;
|
||||
if (d.cookie.indexOf('pass_enabled=1') >= 0) {
|
||||
return;
|
||||
}
|
||||
if (!(this.isEnabled = !!$.id('g-recaptcha'))) {
|
||||
if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
script = $.el('script', {
|
||||
src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js'
|
||||
});
|
||||
$.add(d.head, script);
|
||||
captchaContainer = $.el('div', {
|
||||
id: 'captchaContainer',
|
||||
hidden: true
|
||||
});
|
||||
$.add(d.body, captchaContainer);
|
||||
imgContainer = $.el('div', {
|
||||
className: 'captcha-img',
|
||||
title: 'Reload reCAPTCHA'
|
||||
@ -8230,13 +8277,36 @@
|
||||
return QR.captcha.clear();
|
||||
});
|
||||
$.sync('captchas', this.sync);
|
||||
new MutationObserver(this.afterSetup).observe($.id('captchaContainer'), {
|
||||
childList: true
|
||||
});
|
||||
this.beforeSetup();
|
||||
if (Conf['Auto-load captcha']) {
|
||||
return this.setup();
|
||||
this.setup();
|
||||
}
|
||||
new MutationObserver(this.afterSetup).observe($.id('captchaContainerAlt'), {
|
||||
childList: true
|
||||
});
|
||||
return this.afterSetup();
|
||||
},
|
||||
replace: function() {
|
||||
var container, old;
|
||||
if (this.script) {
|
||||
return;
|
||||
}
|
||||
if (!(this.script = $('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', d.head))) {
|
||||
this.script = $.el('script', {
|
||||
src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js'
|
||||
});
|
||||
$.add(d.head, this.script);
|
||||
}
|
||||
if (old = $.id('g-recaptcha')) {
|
||||
container = $.el('div', {
|
||||
id: 'captchaContainerAlt'
|
||||
});
|
||||
return $.replace(old, container);
|
||||
}
|
||||
},
|
||||
create: function() {
|
||||
this.replace();
|
||||
return $.globalEval('(function() {\n var container = document.getElementById("captchaContainerAlt");\n if (container.firstChild) return;\n var options = {\n theme: "clean",\n tabindex: {"boards.4chan.org": 5, "sys.4chan.org": 3}[location.hostname]\n };\n if (window.Recaptcha) {\n window.Recaptcha.create("6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc", container, options);\n } else {\n var script = document.head.querySelector(\'script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]\');\n script.addEventListener(\'load\', function() {\n window.Recaptcha.create("6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc", container, options);\n }, false);\n }\n})();');
|
||||
},
|
||||
cb: {
|
||||
focus: function() {
|
||||
@ -8247,6 +8317,7 @@
|
||||
var img, input, ref;
|
||||
ref = this.nodes, img = ref.img, input = ref.input;
|
||||
img.parentNode.hidden = true;
|
||||
img.src = this.blank;
|
||||
input.value = '';
|
||||
input.placeholder = 'Focus to load reCAPTCHA';
|
||||
this.count();
|
||||
@ -8267,10 +8338,10 @@
|
||||
onNewPost: function() {},
|
||||
onPostChange: function() {},
|
||||
setup: function(focus, force) {
|
||||
if (!(this.isEnabled && (this.needed() || force))) {
|
||||
if (!(this.isEnabled && (force || this.needed()))) {
|
||||
return;
|
||||
}
|
||||
$.globalEval('(function() {\n var captchaContainer = document.getElementById("captchaContainer");\n if (captchaContainer.firstChild) return;\n function setup() {\n if (window.Recaptcha) {\n Recaptcha.create(recaptchaKey, captchaContainer, {theme: "clean"});\n } else {\n setTimeout(setup, 25);\n }\n }\n setup();\n})()');
|
||||
this.create();
|
||||
if (focus) {
|
||||
return this.nodes.input.focus();
|
||||
}
|
||||
@ -8307,11 +8378,13 @@
|
||||
}
|
||||
},
|
||||
destroy: function() {
|
||||
if (!this.isEnabled) {
|
||||
if (!this.script) {
|
||||
return;
|
||||
}
|
||||
$.globalEval('Recaptcha.destroy()');
|
||||
return this.beforeSetup();
|
||||
$.globalEval('window.Recaptcha.destroy();');
|
||||
if (this.nodes) {
|
||||
return this.beforeSetup();
|
||||
}
|
||||
},
|
||||
sync: function(captchas) {
|
||||
if (captchas == null) {
|
||||
@ -8379,6 +8452,10 @@
|
||||
},
|
||||
load: function() {
|
||||
var challenge, challenge_image;
|
||||
if ($('#captchaContainerAlt[class~="recaptcha_is_showing_audio"]')) {
|
||||
this.nodes.img.src = this.blank;
|
||||
return;
|
||||
}
|
||||
if (!this.nodes.challenge.firstChild) {
|
||||
return;
|
||||
}
|
||||
@ -8389,7 +8466,7 @@
|
||||
challenge = this.nodes.challenge.firstChild.value;
|
||||
this.nodes.img.alt = challenge;
|
||||
this.nodes.img.src = challenge_image.src;
|
||||
this.nodes.input.value = null;
|
||||
this.nodes.input.value = '';
|
||||
return this.clear();
|
||||
},
|
||||
count: function() {
|
||||
@ -8415,7 +8492,7 @@
|
||||
return this.nodes.input.alt = count;
|
||||
},
|
||||
reload: function(focus) {
|
||||
$.globalEval('Recaptcha.reload(); Recaptcha.should_focus = false;');
|
||||
$.globalEval('if (window.Recaptcha.type === "image") {\n window.Recaptcha.reload();\n} else {\n window.Recaptcha.switch_type("image");\n}\nwindow.Recaptcha.should_focus = false;');
|
||||
if (focus) {
|
||||
return this.nodes.input.focus();
|
||||
}
|
||||
@ -8439,7 +8516,7 @@
|
||||
if (d.cookie.indexOf('pass_enabled=1') >= 0) {
|
||||
return;
|
||||
}
|
||||
if (!(this.isEnabled = !!$.id('g-recaptcha'))) {
|
||||
if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
if (this.noscript = Conf['Force Noscript Captcha'] || !$.hasClass(doc, 'js-enabled')) {
|
||||
@ -8474,6 +8551,16 @@
|
||||
$.addClass(QR.nodes.el, 'has-captcha', 'captcha-v2');
|
||||
$.after(QR.nodes.com.parentNode, root);
|
||||
$.on(counter, 'click', this.toggle.bind(this));
|
||||
$.on(counter, 'keydown', (function(_this) {
|
||||
return function(e) {
|
||||
if (Keybinds.keyCode(e) !== 'Space') {
|
||||
return;
|
||||
}
|
||||
_this.toggle();
|
||||
e.preventDefault();
|
||||
return e.stopPropagation();
|
||||
};
|
||||
})(this));
|
||||
return $.on(window, 'captcha:success', (function(_this) {
|
||||
return function() {
|
||||
return $.queueTask(function() {
|
||||
@ -8596,7 +8683,7 @@
|
||||
}
|
||||
},
|
||||
setupIFrame: function(iframe) {
|
||||
Captcha.language.fixIframe(iframe);
|
||||
Captcha.replace.iframe(iframe);
|
||||
$.addClass(QR.nodes.el, 'captcha-open');
|
||||
if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) {
|
||||
QR.nodes.el.style.top = null;
|
||||
@ -13911,19 +13998,21 @@
|
||||
if (!Header.areNotificationsEnabled) {
|
||||
return;
|
||||
}
|
||||
notif = new Notification(post.info.nameBlock + " replied to you", {
|
||||
body: post.info.commentDisplay,
|
||||
icon: Favicon.logo
|
||||
});
|
||||
notif.onclick = function() {
|
||||
Header.scrollToIfNeeded(post.nodes.root, true);
|
||||
return window.focus();
|
||||
};
|
||||
return notif.onshow = function() {
|
||||
return setTimeout(function() {
|
||||
return notif.close();
|
||||
}, 7 * $.SECOND);
|
||||
};
|
||||
try {
|
||||
notif = new Notification(post.info.nameBlock + " replied to you", {
|
||||
body: post.info.commentDisplay,
|
||||
icon: Favicon.logo
|
||||
});
|
||||
notif.onclick = function() {
|
||||
Header.scrollToIfNeeded(post.nodes.root, true);
|
||||
return window.focus();
|
||||
};
|
||||
return notif.onshow = function() {
|
||||
return setTimeout(function() {
|
||||
return notif.close();
|
||||
}, 7 * $.SECOND);
|
||||
};
|
||||
} catch (_error) {}
|
||||
},
|
||||
onUpdate: function(e) {
|
||||
if (!e.detail[404]) {
|
||||
@ -15904,21 +15993,18 @@
|
||||
};
|
||||
|
||||
Report = {
|
||||
css: "noscript > div, noscript > div > div {\n" +
|
||||
" height: 545px !important;\n" +
|
||||
"}\n" +
|
||||
"noscript > div > div > div:first-child, noscript iframe {\n" +
|
||||
" height: 423px !important;\n" +
|
||||
"}\n" +
|
||||
":root:not(.js-enabled) #g-recaptcha {\n" +
|
||||
css: ":root:not(.js-enabled) #captchaContainerAlt {\n" +
|
||||
" height: auto;\n" +
|
||||
"}\n" +
|
||||
"noscript > iframe, #recaptcha_challenge_field {\n" +
|
||||
" width: 500px;\n" +
|
||||
"}",
|
||||
init: function() {
|
||||
var match;
|
||||
if (!(/\bmode=report\b/.test(location.search) && (match = location.search.match(/\bno=(\d+)/)))) {
|
||||
return;
|
||||
}
|
||||
Captcha.language.fixPage();
|
||||
Captcha.replace.init();
|
||||
this.postID = +match[1];
|
||||
return $.ready(this.ready);
|
||||
},
|
||||
@ -15927,9 +16013,6 @@
|
||||
if (Conf['Archive Report']) {
|
||||
Report.archive();
|
||||
}
|
||||
if (Conf['Use Recaptcha v2 in Reports']) {
|
||||
Report.captchaV2();
|
||||
}
|
||||
if (Conf['Use Recaptcha v2 in Reports'] && $.hasClass(doc, 'js-enabled')) {
|
||||
return new MutationObserver(function() {
|
||||
return Report.fit('.gc-bubbleDefault');
|
||||
@ -15942,25 +16025,6 @@
|
||||
return Report.fit('body');
|
||||
}
|
||||
},
|
||||
captchaV2: function() {
|
||||
var container, lang, old, script, url;
|
||||
if (!(old = $.id('captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
container = $.el('div', {
|
||||
className: 'g-recaptcha'
|
||||
});
|
||||
container.dataset.sitekey = '6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc';
|
||||
$.replace(old, container);
|
||||
url = 'https://www.google.com/recaptcha/api.js';
|
||||
if (lang = Conf['captchaLanguage'].trim()) {
|
||||
url += "?hl=" + (encodeURIComponent(lang));
|
||||
}
|
||||
script = $.el('script', {
|
||||
src: url
|
||||
});
|
||||
return $.add(d.head, script);
|
||||
},
|
||||
fit: function(selector) {
|
||||
var dy, el;
|
||||
if (!(el = $(selector, doc))) {
|
||||
@ -16829,19 +16893,6 @@
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (location.hostname === 'www.4chan.org') {
|
||||
$.onExists(d.documentElement, 'body', false, function() {
|
||||
return $.addStyle(Main.cssWWW);
|
||||
});
|
||||
Conf = {
|
||||
'captchaLanguage': Config.captchaLanguage
|
||||
};
|
||||
$.get(Conf, function(items) {
|
||||
$.extend(Conf, items);
|
||||
return Captcha.language.fixPage();
|
||||
});
|
||||
return;
|
||||
}
|
||||
g.threads = new SimpleDict();
|
||||
g.posts = new SimpleDict();
|
||||
pathname = location.pathname.split('/');
|
||||
@ -16910,10 +16961,13 @@
|
||||
},
|
||||
initFeatures: function() {
|
||||
var err, feature, k, len1, name, pathname, ref, ref1, ref2;
|
||||
if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org') {
|
||||
if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org' || ref === 'www.4chan.org') {
|
||||
$.globalEval('document.documentElement.classList.add("js-enabled");');
|
||||
}
|
||||
switch (location.hostname) {
|
||||
case 'www.4chan.org':
|
||||
Captcha.replace.init();
|
||||
return;
|
||||
case 'a.4cdn.org':
|
||||
return;
|
||||
case 'sys.4chan.org':
|
||||
@ -16973,6 +17027,9 @@
|
||||
},
|
||||
initStyle: function() {
|
||||
var keyboard, ref;
|
||||
if (location.hostname === 'www.4chan.org') {
|
||||
$.addStyle(Main.cssWWW);
|
||||
}
|
||||
if (!Main.isThisPageLegit() || $.hasClass(doc, 'fourchan-x')) {
|
||||
return;
|
||||
}
|
||||
@ -17801,15 +17858,6 @@
|
||||
" 0% {transform:rotate(0deg);}\n" +
|
||||
" 100% {transform:rotate(359deg);}\n" +
|
||||
"}\n" +
|
||||
"noscript > div, noscript > div > div {\n" +
|
||||
" height: 545px !important;\n" +
|
||||
"}\n" +
|
||||
"noscript > div > div > div:first-child, noscript iframe {\n" +
|
||||
" height: 423px !important;\n" +
|
||||
"}\n" +
|
||||
":root:not(.js-enabled) #g-recaptcha {\n" +
|
||||
" height: auto;\n" +
|
||||
"}\n" +
|
||||
"/* General */\n" +
|
||||
".dialog {\n" +
|
||||
" border: 1px solid;\n" +
|
||||
@ -17919,6 +17967,9 @@
|
||||
":root:not(.js-enabled) #postForm {\n" +
|
||||
" display: table;\n" +
|
||||
"}\n" +
|
||||
"#captchaContainerAlt td:nth-child(2) {\n" +
|
||||
" display: table-cell !important;\n" +
|
||||
"}\n" +
|
||||
"/* Anti-autoplay */\n" +
|
||||
"audio.controls-added {\n" +
|
||||
" display: block;\n" +
|
||||
@ -20216,19 +20267,10 @@
|
||||
" font-family: sans-serif !important;\n" +
|
||||
" text-shadow: 1px 1px 1px rgba(0,74,153,0.6);\n" +
|
||||
"}",
|
||||
cssWWW: "noscript > div, noscript > div > div {\n" +
|
||||
" height: 545px !important;\n" +
|
||||
"}\n" +
|
||||
"noscript > div > div > div:first-child, noscript iframe {\n" +
|
||||
" height: 423px !important;\n" +
|
||||
"}\n" +
|
||||
":root:not(.js-enabled) #g-recaptcha {\n" +
|
||||
" height: auto;\n" +
|
||||
"}\n" +
|
||||
"#captcha-cnt {\n" +
|
||||
cssWWW: "#captcha-cnt {\n" +
|
||||
" height: auto;\n" +
|
||||
"}",
|
||||
features: [['Polyfill', Polyfill], ['Captcha Language', Captcha.language], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash]]
|
||||
features: [['Polyfill', Polyfill], ['Captcha Replacement', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash]]
|
||||
};
|
||||
|
||||
Main.init();
|
||||
|
||||
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.11.1.3
|
||||
// @version 1.11.2.0
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
// Generated by CoffeeScript
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.11.1.3
|
||||
// @version 1.11.2.0
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -242,12 +242,12 @@
|
||||
'Hide Original Post Form': [true, 'Hide the normal post form.', 1],
|
||||
'Cooldown': [true, 'Indicate the remaining time before posting again.', 1],
|
||||
'Posting Success Notifications': [true, 'Show notifications on successful post creation or file uploading.', 1],
|
||||
'Use Recaptcha v1': [false, 'Use the old text version of Recaptcha.', 1],
|
||||
'Force Noscript Captcha': [false, 'Use the non-Javascript fallback captcha in the QR even if Javascript is enabled.', 1],
|
||||
'Auto-load captcha': [false, 'Automatically load the captcha in the QR even if your post is empty.', 1],
|
||||
'Post on Captcha Completion': [false, 'Submit the post immediately when the captcha is completed.', 1],
|
||||
'Bottom QR Link': [true, 'Places a link on the bottom of threads to open the QR.', 1],
|
||||
'Captcha Fixes': [true, 'Make captcha easier to use, especially with the keyboard.'],
|
||||
'Use Recaptcha v1': [false, 'Use the old text version of Recaptcha.'],
|
||||
'Use Recaptcha v2 in Reports': [false, 'Use the image selection captcha in the report window.']
|
||||
},
|
||||
'Quote Links': {
|
||||
@ -299,7 +299,7 @@
|
||||
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",
|
||||
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",
|
||||
comment: "# Filter Stallman copypasta on /g/:\n#/what you\'re refer+ing to as linux/i;boards:g\n# Filter posts with 10 or more quote links:\n#/(?:>>\\d(?:(?!>>\\d)[^])*){10}/",
|
||||
flag: '',
|
||||
filename: '',
|
||||
dimensions: "# Highlight potential wallpapers:\n#/1920x1080/;op:yes;highlight;top:no;boards:w,wg",
|
||||
@ -411,7 +411,7 @@
|
||||
doc = d.documentElement;
|
||||
|
||||
g = {
|
||||
VERSION: '1.11.1.3',
|
||||
VERSION: '1.11.2.0',
|
||||
NAMESPACE: '4chan X.',
|
||||
boards: {}
|
||||
};
|
||||
@ -1523,7 +1523,6 @@
|
||||
};
|
||||
|
||||
Post.prototype.collect = function() {
|
||||
this.kill();
|
||||
g.posts.rm(this.fullID);
|
||||
this.thread.posts.rm(this);
|
||||
return this.board.posts.rm(this);
|
||||
@ -6956,24 +6955,26 @@
|
||||
return alert(el.textContent);
|
||||
}
|
||||
} else if (d.hidden || !(focusOverride || d.hasFocus())) {
|
||||
notif = new Notification(el.textContent, {
|
||||
body: el.textContent,
|
||||
icon: Favicon.logo
|
||||
});
|
||||
notif.onclick = function() {
|
||||
return window.focus();
|
||||
};
|
||||
if (typeof chrome !== "undefined" && chrome !== null) {
|
||||
notif.onclose = function() {
|
||||
return notice.close();
|
||||
try {
|
||||
notif = new Notification(el.textContent, {
|
||||
body: el.textContent,
|
||||
icon: Favicon.logo
|
||||
});
|
||||
notif.onclick = function() {
|
||||
return window.focus();
|
||||
};
|
||||
return notif.onshow = function() {
|
||||
return setTimeout(function() {
|
||||
notif.onclose = null;
|
||||
return notif.close();
|
||||
}, 7 * $.SECOND);
|
||||
};
|
||||
}
|
||||
if (typeof chrome !== "undefined" && chrome !== null) {
|
||||
notif.onclose = function() {
|
||||
return notice.close();
|
||||
};
|
||||
return notif.onshow = function() {
|
||||
return setTimeout(function() {
|
||||
notif.onclose = null;
|
||||
return notif.close();
|
||||
}, 7 * $.SECOND);
|
||||
};
|
||||
}
|
||||
} catch (_error) {}
|
||||
}
|
||||
},
|
||||
notifications: [],
|
||||
@ -7820,33 +7821,6 @@
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.language = {
|
||||
init: function() {
|
||||
if (!(Conf['captchaLanguage'].trim() && d.cookie.indexOf('pass_enabled=1') < 0 && !Conf['Hide Original Post Form'])) {
|
||||
return;
|
||||
}
|
||||
return $.onExists(doc, '#captchaFormPart', true, function(node) {
|
||||
return $.onExists(node, 'iframe', true, Captcha.language.fixIframe);
|
||||
});
|
||||
},
|
||||
fixPage: function() {
|
||||
if (!(Conf['captchaLanguage'].trim() && d.cookie.indexOf('pass_enabled=1') < 0)) {
|
||||
return;
|
||||
}
|
||||
return $.onExists(doc, 'iframe', true, Captcha.language.fixIframe);
|
||||
},
|
||||
fixIframe: function(el) {
|
||||
var lang, src;
|
||||
if (!(lang = Conf['captchaLanguage'].trim())) {
|
||||
return;
|
||||
}
|
||||
src = /[?&]hl=/.test(el.src) ? el.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent(lang)) : el.src + ("&hl=" + (encodeURIComponent(lang)));
|
||||
if (el.src !== src) {
|
||||
return el.src = src;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.noscript = {
|
||||
lifetime: 30 * $.MINUTE,
|
||||
init: function() {
|
||||
@ -7854,7 +7828,7 @@
|
||||
if (d.cookie.indexOf('pass_enabled=1') >= 0) {
|
||||
return;
|
||||
}
|
||||
if (!(this.isEnabled = !!$.id('g-recaptcha'))) {
|
||||
if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
container = $.el('div', {
|
||||
@ -8182,24 +8156,97 @@
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.v1 = {
|
||||
Captcha.replace = {
|
||||
init: function() {
|
||||
var captchaContainer, imgContainer, input, script;
|
||||
var jsEnabled;
|
||||
if (!(d.cookie.indexOf('pass_enabled=1') < 0)) {
|
||||
return;
|
||||
}
|
||||
if (location.hostname === 'boards.4chan.org' && Conf['Hide Original Post Form']) {
|
||||
return;
|
||||
}
|
||||
jsEnabled = $.hasClass(doc, 'js-enabled');
|
||||
if (location.hostname === 'sys.4chan.org' && Conf['Use Recaptcha v2 in Reports'] && jsEnabled) {
|
||||
$.ready(Captcha.replace.v2);
|
||||
return;
|
||||
}
|
||||
if (Conf['Use Recaptcha v1'] && jsEnabled && location.hostname !== 'www.4chan.org') {
|
||||
$.ready(Captcha.replace.v1);
|
||||
return;
|
||||
}
|
||||
if (Conf['captchaLanguage'].trim()) {
|
||||
if (location.hostname === 'boards.4chan.org') {
|
||||
return $.onExists(doc, '#captchaFormPart', true, function(node) {
|
||||
return $.onExists(node, 'iframe', true, Captcha.replace.iframe);
|
||||
});
|
||||
} else {
|
||||
return $.onExists(doc, 'iframe', true, Captcha.replace.iframe);
|
||||
}
|
||||
}
|
||||
},
|
||||
v1: function() {
|
||||
var form, link;
|
||||
if (!$.id('g-recaptcha')) {
|
||||
return;
|
||||
}
|
||||
Captcha.v1.replace();
|
||||
if (link = $.id('form-link')) {
|
||||
return $.on(link, 'click', function() {
|
||||
return Captcha.v1.create();
|
||||
});
|
||||
} else if (location.hostname === 'boards.4chan.org') {
|
||||
form = $.id('postForm');
|
||||
return form.addEventListener('focus', (function() {
|
||||
return Captcha.v1.create();
|
||||
}), true);
|
||||
} else {
|
||||
return Captcha.v1.create();
|
||||
}
|
||||
},
|
||||
v2: function() {
|
||||
var container, lang, old, script, url;
|
||||
if (!(old = $.id('captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
container = $.el('div', {
|
||||
className: 'g-recaptcha'
|
||||
});
|
||||
$.extend(container.dataset, {
|
||||
sitekey: '6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc',
|
||||
tabindex: 3
|
||||
});
|
||||
$.replace(old, container);
|
||||
url = 'https://www.google.com/recaptcha/api.js';
|
||||
if (lang = Conf['captchaLanguage'].trim()) {
|
||||
url += "?hl=" + (encodeURIComponent(lang));
|
||||
}
|
||||
script = $.el('script', {
|
||||
src: url
|
||||
});
|
||||
return $.add(d.head, script);
|
||||
},
|
||||
iframe: function(el) {
|
||||
var lang, src;
|
||||
if (!(lang = Conf['captchaLanguage'].trim())) {
|
||||
return;
|
||||
}
|
||||
src = /[?&]hl=/.test(el.src) ? el.src.replace(/([?&]hl=)[^&]*/, '$1' + encodeURIComponent(lang)) : el.src + ("&hl=" + (encodeURIComponent(lang)));
|
||||
if (el.src !== src) {
|
||||
return el.src = src;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.v1 = {
|
||||
blank: "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='57'/>",
|
||||
init: function() {
|
||||
var imgContainer, input;
|
||||
if (d.cookie.indexOf('pass_enabled=1') >= 0) {
|
||||
return;
|
||||
}
|
||||
if (!(this.isEnabled = !!$.id('g-recaptcha'))) {
|
||||
if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
script = $.el('script', {
|
||||
src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js'
|
||||
});
|
||||
$.add(d.head, script);
|
||||
captchaContainer = $.el('div', {
|
||||
id: 'captchaContainer',
|
||||
hidden: true
|
||||
});
|
||||
$.add(d.body, captchaContainer);
|
||||
imgContainer = $.el('div', {
|
||||
className: 'captcha-img',
|
||||
title: 'Reload reCAPTCHA'
|
||||
@ -8231,13 +8278,36 @@
|
||||
return QR.captcha.clear();
|
||||
});
|
||||
$.sync('captchas', this.sync);
|
||||
new MutationObserver(this.afterSetup).observe($.id('captchaContainer'), {
|
||||
childList: true
|
||||
});
|
||||
this.beforeSetup();
|
||||
if (Conf['Auto-load captcha']) {
|
||||
return this.setup();
|
||||
this.setup();
|
||||
}
|
||||
new MutationObserver(this.afterSetup).observe($.id('captchaContainerAlt'), {
|
||||
childList: true
|
||||
});
|
||||
return this.afterSetup();
|
||||
},
|
||||
replace: function() {
|
||||
var container, old;
|
||||
if (this.script) {
|
||||
return;
|
||||
}
|
||||
if (!(this.script = $('script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]', d.head))) {
|
||||
this.script = $.el('script', {
|
||||
src: '//www.google.com/recaptcha/api/js/recaptcha_ajax.js'
|
||||
});
|
||||
$.add(d.head, this.script);
|
||||
}
|
||||
if (old = $.id('g-recaptcha')) {
|
||||
container = $.el('div', {
|
||||
id: 'captchaContainerAlt'
|
||||
});
|
||||
return $.replace(old, container);
|
||||
}
|
||||
},
|
||||
create: function() {
|
||||
this.replace();
|
||||
return $.globalEval('(function() {\n var container = document.getElementById("captchaContainerAlt");\n if (container.firstChild) return;\n var options = {\n theme: "clean",\n tabindex: {"boards.4chan.org": 5, "sys.4chan.org": 3}[location.hostname]\n };\n if (window.Recaptcha) {\n window.Recaptcha.create("6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc", container, options);\n } else {\n var script = document.head.querySelector(\'script[src="//www.google.com/recaptcha/api/js/recaptcha_ajax.js"]\');\n script.addEventListener(\'load\', function() {\n window.Recaptcha.create("6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc", container, options);\n }, false);\n }\n})();');
|
||||
},
|
||||
cb: {
|
||||
focus: function() {
|
||||
@ -8248,6 +8318,7 @@
|
||||
var img, input, ref;
|
||||
ref = this.nodes, img = ref.img, input = ref.input;
|
||||
img.parentNode.hidden = true;
|
||||
img.src = this.blank;
|
||||
input.value = '';
|
||||
input.placeholder = 'Focus to load reCAPTCHA';
|
||||
this.count();
|
||||
@ -8268,10 +8339,10 @@
|
||||
onNewPost: function() {},
|
||||
onPostChange: function() {},
|
||||
setup: function(focus, force) {
|
||||
if (!(this.isEnabled && (this.needed() || force))) {
|
||||
if (!(this.isEnabled && (force || this.needed()))) {
|
||||
return;
|
||||
}
|
||||
$.globalEval('(function() {\n var captchaContainer = document.getElementById("captchaContainer");\n if (captchaContainer.firstChild) return;\n function setup() {\n if (window.Recaptcha) {\n Recaptcha.create(recaptchaKey, captchaContainer, {theme: "clean"});\n } else {\n setTimeout(setup, 25);\n }\n }\n setup();\n})()');
|
||||
this.create();
|
||||
if (focus) {
|
||||
return this.nodes.input.focus();
|
||||
}
|
||||
@ -8308,11 +8379,13 @@
|
||||
}
|
||||
},
|
||||
destroy: function() {
|
||||
if (!this.isEnabled) {
|
||||
if (!this.script) {
|
||||
return;
|
||||
}
|
||||
$.globalEval('Recaptcha.destroy()');
|
||||
return this.beforeSetup();
|
||||
$.globalEval('window.Recaptcha.destroy();');
|
||||
if (this.nodes) {
|
||||
return this.beforeSetup();
|
||||
}
|
||||
},
|
||||
sync: function(captchas) {
|
||||
if (captchas == null) {
|
||||
@ -8380,6 +8453,10 @@
|
||||
},
|
||||
load: function() {
|
||||
var challenge, challenge_image;
|
||||
if ($('#captchaContainerAlt[class~="recaptcha_is_showing_audio"]')) {
|
||||
this.nodes.img.src = this.blank;
|
||||
return;
|
||||
}
|
||||
if (!this.nodes.challenge.firstChild) {
|
||||
return;
|
||||
}
|
||||
@ -8390,7 +8467,7 @@
|
||||
challenge = this.nodes.challenge.firstChild.value;
|
||||
this.nodes.img.alt = challenge;
|
||||
this.nodes.img.src = challenge_image.src;
|
||||
this.nodes.input.value = null;
|
||||
this.nodes.input.value = '';
|
||||
return this.clear();
|
||||
},
|
||||
count: function() {
|
||||
@ -8416,7 +8493,7 @@
|
||||
return this.nodes.input.alt = count;
|
||||
},
|
||||
reload: function(focus) {
|
||||
$.globalEval('Recaptcha.reload(); Recaptcha.should_focus = false;');
|
||||
$.globalEval('if (window.Recaptcha.type === "image") {\n window.Recaptcha.reload();\n} else {\n window.Recaptcha.switch_type("image");\n}\nwindow.Recaptcha.should_focus = false;');
|
||||
if (focus) {
|
||||
return this.nodes.input.focus();
|
||||
}
|
||||
@ -8440,7 +8517,7 @@
|
||||
if (d.cookie.indexOf('pass_enabled=1') >= 0) {
|
||||
return;
|
||||
}
|
||||
if (!(this.isEnabled = !!$.id('g-recaptcha'))) {
|
||||
if (!(this.isEnabled = !!$('#g-recaptcha, #captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
if (this.noscript = Conf['Force Noscript Captcha'] || !$.hasClass(doc, 'js-enabled')) {
|
||||
@ -8475,6 +8552,16 @@
|
||||
$.addClass(QR.nodes.el, 'has-captcha', 'captcha-v2');
|
||||
$.after(QR.nodes.com.parentNode, root);
|
||||
$.on(counter, 'click', this.toggle.bind(this));
|
||||
$.on(counter, 'keydown', (function(_this) {
|
||||
return function(e) {
|
||||
if (Keybinds.keyCode(e) !== 'Space') {
|
||||
return;
|
||||
}
|
||||
_this.toggle();
|
||||
e.preventDefault();
|
||||
return e.stopPropagation();
|
||||
};
|
||||
})(this));
|
||||
return $.on(window, 'captcha:success', (function(_this) {
|
||||
return function() {
|
||||
return $.queueTask(function() {
|
||||
@ -8597,7 +8684,7 @@
|
||||
}
|
||||
},
|
||||
setupIFrame: function(iframe) {
|
||||
Captcha.language.fixIframe(iframe);
|
||||
Captcha.replace.iframe(iframe);
|
||||
$.addClass(QR.nodes.el, 'captcha-open');
|
||||
if (QR.nodes.el.getBoundingClientRect().bottom > doc.clientHeight) {
|
||||
QR.nodes.el.style.top = null;
|
||||
@ -13912,19 +13999,21 @@
|
||||
if (!Header.areNotificationsEnabled) {
|
||||
return;
|
||||
}
|
||||
notif = new Notification(post.info.nameBlock + " replied to you", {
|
||||
body: post.info.commentDisplay,
|
||||
icon: Favicon.logo
|
||||
});
|
||||
notif.onclick = function() {
|
||||
Header.scrollToIfNeeded(post.nodes.root, true);
|
||||
return window.focus();
|
||||
};
|
||||
return notif.onshow = function() {
|
||||
return setTimeout(function() {
|
||||
return notif.close();
|
||||
}, 7 * $.SECOND);
|
||||
};
|
||||
try {
|
||||
notif = new Notification(post.info.nameBlock + " replied to you", {
|
||||
body: post.info.commentDisplay,
|
||||
icon: Favicon.logo
|
||||
});
|
||||
notif.onclick = function() {
|
||||
Header.scrollToIfNeeded(post.nodes.root, true);
|
||||
return window.focus();
|
||||
};
|
||||
return notif.onshow = function() {
|
||||
return setTimeout(function() {
|
||||
return notif.close();
|
||||
}, 7 * $.SECOND);
|
||||
};
|
||||
} catch (_error) {}
|
||||
},
|
||||
onUpdate: function(e) {
|
||||
if (!e.detail[404]) {
|
||||
@ -15905,21 +15994,18 @@
|
||||
};
|
||||
|
||||
Report = {
|
||||
css: "noscript > div, noscript > div > div {\n" +
|
||||
" height: 545px !important;\n" +
|
||||
"}\n" +
|
||||
"noscript > div > div > div:first-child, noscript iframe {\n" +
|
||||
" height: 423px !important;\n" +
|
||||
"}\n" +
|
||||
":root:not(.js-enabled) #g-recaptcha {\n" +
|
||||
css: ":root:not(.js-enabled) #captchaContainerAlt {\n" +
|
||||
" height: auto;\n" +
|
||||
"}\n" +
|
||||
"noscript > iframe, #recaptcha_challenge_field {\n" +
|
||||
" width: 500px;\n" +
|
||||
"}",
|
||||
init: function() {
|
||||
var match;
|
||||
if (!(/\bmode=report\b/.test(location.search) && (match = location.search.match(/\bno=(\d+)/)))) {
|
||||
return;
|
||||
}
|
||||
Captcha.language.fixPage();
|
||||
Captcha.replace.init();
|
||||
this.postID = +match[1];
|
||||
return $.ready(this.ready);
|
||||
},
|
||||
@ -15928,9 +16014,6 @@
|
||||
if (Conf['Archive Report']) {
|
||||
Report.archive();
|
||||
}
|
||||
if (Conf['Use Recaptcha v2 in Reports']) {
|
||||
Report.captchaV2();
|
||||
}
|
||||
if (Conf['Use Recaptcha v2 in Reports'] && $.hasClass(doc, 'js-enabled')) {
|
||||
return new MutationObserver(function() {
|
||||
return Report.fit('.gc-bubbleDefault');
|
||||
@ -15943,25 +16026,6 @@
|
||||
return Report.fit('body');
|
||||
}
|
||||
},
|
||||
captchaV2: function() {
|
||||
var container, lang, old, script, url;
|
||||
if (!(old = $.id('captchaContainerAlt'))) {
|
||||
return;
|
||||
}
|
||||
container = $.el('div', {
|
||||
className: 'g-recaptcha'
|
||||
});
|
||||
container.dataset.sitekey = '6Ldp2bsSAAAAAAJ5uyx_lx34lJeEpTLVkP5k04qc';
|
||||
$.replace(old, container);
|
||||
url = 'https://www.google.com/recaptcha/api.js';
|
||||
if (lang = Conf['captchaLanguage'].trim()) {
|
||||
url += "?hl=" + (encodeURIComponent(lang));
|
||||
}
|
||||
script = $.el('script', {
|
||||
src: url
|
||||
});
|
||||
return $.add(d.head, script);
|
||||
},
|
||||
fit: function(selector) {
|
||||
var dy, el;
|
||||
if (!(el = $(selector, doc))) {
|
||||
@ -16830,19 +16894,6 @@
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (location.hostname === 'www.4chan.org') {
|
||||
$.onExists(d.documentElement, 'body', false, function() {
|
||||
return $.addStyle(Main.cssWWW);
|
||||
});
|
||||
Conf = {
|
||||
'captchaLanguage': Config.captchaLanguage
|
||||
};
|
||||
$.get(Conf, function(items) {
|
||||
$.extend(Conf, items);
|
||||
return Captcha.language.fixPage();
|
||||
});
|
||||
return;
|
||||
}
|
||||
g.threads = new SimpleDict();
|
||||
g.posts = new SimpleDict();
|
||||
pathname = location.pathname.split('/');
|
||||
@ -16911,10 +16962,13 @@
|
||||
},
|
||||
initFeatures: function() {
|
||||
var err, feature, k, len1, name, pathname, ref, ref1, ref2;
|
||||
if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org') {
|
||||
if ((ref = location.hostname) === 'boards.4chan.org' || ref === 'sys.4chan.org' || ref === 'www.4chan.org') {
|
||||
$.globalEval('document.documentElement.classList.add("js-enabled");');
|
||||
}
|
||||
switch (location.hostname) {
|
||||
case 'www.4chan.org':
|
||||
Captcha.replace.init();
|
||||
return;
|
||||
case 'a.4cdn.org':
|
||||
return;
|
||||
case 'sys.4chan.org':
|
||||
@ -16974,6 +17028,9 @@
|
||||
},
|
||||
initStyle: function() {
|
||||
var keyboard, ref;
|
||||
if (location.hostname === 'www.4chan.org') {
|
||||
$.addStyle(Main.cssWWW);
|
||||
}
|
||||
if (!Main.isThisPageLegit() || $.hasClass(doc, 'fourchan-x')) {
|
||||
return;
|
||||
}
|
||||
@ -17802,15 +17859,6 @@
|
||||
" 0% {transform:rotate(0deg);}\n" +
|
||||
" 100% {transform:rotate(359deg);}\n" +
|
||||
"}\n" +
|
||||
"noscript > div, noscript > div > div {\n" +
|
||||
" height: 545px !important;\n" +
|
||||
"}\n" +
|
||||
"noscript > div > div > div:first-child, noscript iframe {\n" +
|
||||
" height: 423px !important;\n" +
|
||||
"}\n" +
|
||||
":root:not(.js-enabled) #g-recaptcha {\n" +
|
||||
" height: auto;\n" +
|
||||
"}\n" +
|
||||
"/* General */\n" +
|
||||
".dialog {\n" +
|
||||
" border: 1px solid;\n" +
|
||||
@ -17920,6 +17968,9 @@
|
||||
":root:not(.js-enabled) #postForm {\n" +
|
||||
" display: table;\n" +
|
||||
"}\n" +
|
||||
"#captchaContainerAlt td:nth-child(2) {\n" +
|
||||
" display: table-cell !important;\n" +
|
||||
"}\n" +
|
||||
"/* Anti-autoplay */\n" +
|
||||
"audio.controls-added {\n" +
|
||||
" display: block;\n" +
|
||||
@ -20217,19 +20268,10 @@
|
||||
" font-family: sans-serif !important;\n" +
|
||||
" text-shadow: 1px 1px 1px rgba(0,74,153,0.6);\n" +
|
||||
"}",
|
||||
cssWWW: "noscript > div, noscript > div > div {\n" +
|
||||
" height: 545px !important;\n" +
|
||||
"}\n" +
|
||||
"noscript > div > div > div:first-child, noscript iframe {\n" +
|
||||
" height: 423px !important;\n" +
|
||||
"}\n" +
|
||||
":root:not(.js-enabled) #g-recaptcha {\n" +
|
||||
" height: auto;\n" +
|
||||
"}\n" +
|
||||
"#captcha-cnt {\n" +
|
||||
cssWWW: "#captcha-cnt {\n" +
|
||||
" height: auto;\n" +
|
||||
"}",
|
||||
features: [['Polyfill', Polyfill], ['Captcha Language', Captcha.language], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash]]
|
||||
features: [['Polyfill', Polyfill], ['Captcha Replacement', Captcha.replace], ['Redirect', Redirect], ['Header', Header], ['Catalog Links', CatalogLinks], ['Settings', Settings], ['Index Generator', Index], ['Disable Autoplay', AntiAutoplay], ['Announcement Hiding', PSAHiding], ['Fourchan thingies', Fourchan], ['Color User IDs', IDColor], ['Highlight by User ID', IDHighlight], ['Custom CSS', CustomCSS], ['Linkify', Linkify], ['Reveal Spoilers', RemoveSpoilers], ['Resurrect Quotes', Quotify], ['Filter', Filter], ['Thread Hiding Buttons', ThreadHiding], ['Reply Hiding Buttons', PostHiding], ['Recursive', Recursive], ['Strike-through Quotes', QuoteStrikeThrough], ['Quick Reply', QR], ['Menu', Menu], ['Index Generator (Menu)', Index.menu], ['Report Link', ReportLink], ['Thread Hiding (Menu)', ThreadHiding.menu], ['Reply Hiding (Menu)', PostHiding.menu], ['Delete Link', DeleteLink], ['Filter (Menu)', Filter.menu], ['Download Link', DownloadLink], ['Archive Link', ArchiveLink], ['Quote Inlining', QuoteInline], ['Quote Previewing', QuotePreview], ['Quote Backlinks', QuoteBacklink], ['Mark Quotes of You', QuoteYou], ['Mark OP Quotes', QuoteOP], ['Mark Cross-thread Quotes', QuoteCT], ['Anonymize', Anonymize], ['Time Formatting', Time], ['Relative Post Dates', RelativeDates], ['File Info Formatting', FileInfo], ['Fappe Tyme', FappeTyme], ['Gallery', Gallery], ['Gallery (menu)', Gallery.menu], ['Sauce', Sauce], ['Image Expansion', ImageExpand], ['Image Expansion (Menu)', ImageExpand.menu], ['Reveal Spoiler Thumbnails', RevealSpoilers], ['Image Loading', ImageLoader], ['Image Hover', ImageHover], ['Volume Control', Volume], ['WEBM Metadata', Metadata], ['Comment Expansion', ExpandComment], ['Thread Expansion', ExpandThread], ['Thread Excerpt', ThreadExcerpt], ['Favicon', Favicon], ['Unread', Unread], ['Quote Threading', QuoteThreading], ['Thread Stats', ThreadStats], ['Thread Updater', ThreadUpdater], ['Thread Watcher', ThreadWatcher], ['Thread Watcher (Menu)', ThreadWatcher.menu], ['Mark New IPs', MarkNewIPs], ['Index Navigation', Nav], ['Keybinds', Keybinds], ['Banner', Banner], ['Flash Features', Flash]]
|
||||
};
|
||||
|
||||
Main.init();
|
||||
|
||||
Binary file not shown.
@ -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/4chan-X-beta.crx' version='1.11.1.3' />
|
||||
<updatecheck codebase='https://ccd0.github.io/4chan-x/builds/4chan-X-beta.crx' version='1.11.2.0' />
|
||||
</app>
|
||||
</gupdate>
|
||||
|
||||
|
||||
@ -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/4chan-X.crx' version='1.11.1.3' />
|
||||
<updatecheck codebase='https://ccd0.github.io/4chan-x/builds/4chan-X.crx' version='1.11.2.0' />
|
||||
</app>
|
||||
</gupdate>
|
||||
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
||||
"meta": {
|
||||
"name": "4chan X",
|
||||
"version": "1.11.1.3",
|
||||
"date": "2015-06-26T07:35:52.988Z",
|
||||
"version": "1.11.2.0",
|
||||
"date": "2015-06-30T02:36:36.193Z",
|
||||
"repo": "https://github.com/ccd0/4chan-x/",
|
||||
"page": "https://github.com/ccd0/4chan-x",
|
||||
"downloads": "https://ccd0.github.io/4chan-x/builds/",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user