Release 4chan X v1.11.0.6.
This commit is contained in:
parent
29fe77e7f6
commit
c83b2167da
@ -4,6 +4,12 @@ The links to individual versions below are to copies of the script with the upda
|
||||
|
||||
## v1.11.0
|
||||
|
||||
**v1.11.0.6** *(2015-06-20)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.6/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.6/builds/4chan-X-noupdate.crx "Chromium version")]
|
||||
- Support toggling images in the captcha with the number keys (as arranged in the numpad) and the UIOJKLM,. keys.
|
||||
- Arrow key navigation now works in noscript captcha.
|
||||
- Various captcha-related improvements/bugfixes.
|
||||
- Support space bar, numbers in numpad, comma, and space in keybinds.
|
||||
|
||||
**v1.11.0.5** *(2015-06-20)* - [[Firefox](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.5/builds/4chan-X-noupdate.user.js "Firefox version")] [[Chromium](https://raw.githubusercontent.com/ccd0/4chan-x/1.11.0.5/builds/4chan-X-noupdate.crx "Chromium version")]
|
||||
- Add `Captcha Language` setting in the `Advanced` panel.
|
||||
- Minor bugfixes.
|
||||
|
||||
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name 4chan X beta
|
||||
// @version 1.11.0.5
|
||||
// @version 1.11.0.6
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
// Generated by CoffeeScript
|
||||
// ==UserScript==
|
||||
// @name 4chan X beta
|
||||
// @version 1.11.0.5
|
||||
// @version 1.11.0.6
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -400,7 +400,7 @@
|
||||
doc = d.documentElement;
|
||||
|
||||
g = {
|
||||
VERSION: '1.11.0.5',
|
||||
VERSION: '1.11.0.6',
|
||||
NAMESPACE: '4chan X.',
|
||||
boards: {}
|
||||
};
|
||||
@ -2057,7 +2057,7 @@
|
||||
function Connection(target1, origin1, cb1) {
|
||||
this.target = target1;
|
||||
this.origin = origin1;
|
||||
this.cb = cb1;
|
||||
this.cb = cb1 != null ? cb1 : {};
|
||||
this.onMessage = bind(this.onMessage, this);
|
||||
this.send = bind(this.send, this);
|
||||
$.on(window, 'message', this.onMessage);
|
||||
@ -6833,11 +6833,13 @@
|
||||
QR.hasFocus = d.activeElement && QR.nodes.el.contains(d.activeElement);
|
||||
QR.nodes.el.classList.toggle('focus', QR.hasFocus);
|
||||
}
|
||||
if (QR.inCaptcha()) {
|
||||
QR.scrollY = window.scrollY;
|
||||
return $.on(d, 'scroll', QR.scrollLock);
|
||||
} else {
|
||||
return $.off(d, 'scroll', QR.scrollLock);
|
||||
if (QR.captcha.isEnabled && !QR.captcha.noscript) {
|
||||
if (QR.inCaptcha()) {
|
||||
QR.scrollY = window.scrollY;
|
||||
return $.on(d, 'scroll', QR.scrollLock);
|
||||
} else {
|
||||
return $.off(d, 'scroll', QR.scrollLock);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
@ -7616,6 +7618,7 @@
|
||||
Captcha = {};
|
||||
|
||||
Captcha.fixes = {
|
||||
imageKeys: '789456123uiojklm'.split('').concat(['Comma', 'Period']),
|
||||
css: '.rc-imageselect-target > div:focus {\n outline: 2px solid #4a90e2;\n}\n.rc-button-default:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}',
|
||||
cssNoscript: '.fbc-payload-imageselect {\n position: relative;\n}\n.fbc-payload-imageselect > label {\n position: absolute;\n display: block;\n height: 93.3px;\n width: 93.3px;\n}\nlabel[data-row="0"] {top: 0px;}\nlabel[data-row="1"] {top: 93.3px;}\nlabel[data-row="2"] {top: 186.6px;}\nlabel[data-col="0"] {left: 0px;}\nlabel[data-col="1"] {left: 93.3px;}\nlabel[data-col="2"] {left: 186.6px;}',
|
||||
init: function() {
|
||||
@ -7656,8 +7659,15 @@
|
||||
return $.on(d, 'keydown', this.keybinds.bind(this));
|
||||
},
|
||||
initNoscript: function() {
|
||||
this.noscript = true;
|
||||
this.images = $$('.fbc-payload-imageselect > input');
|
||||
if (!this.images.length) {
|
||||
return;
|
||||
}
|
||||
$.addStyle(this.cssNoscript);
|
||||
return this.addLabels();
|
||||
this.addLabels();
|
||||
$.on(d, 'keydown', this.keybinds.bind(this));
|
||||
return $.on($('.fbc-imageselect-challenge > form'), 'submit', this.checkForm.bind(this));
|
||||
},
|
||||
fixImages: function() {
|
||||
var img, k, len1, ref;
|
||||
@ -7667,13 +7677,16 @@
|
||||
img = ref[k];
|
||||
img.tabIndex = 0;
|
||||
}
|
||||
if (this.images.length) {
|
||||
return this.addTooltips(this.images);
|
||||
}
|
||||
},
|
||||
addLabels: function() {
|
||||
var checkbox, i, imageSelect, label, labels;
|
||||
imageSelect = $('.fbc-payload-imageselect');
|
||||
labels = (function() {
|
||||
var k, len1, ref, results;
|
||||
ref = $$('input', imageSelect);
|
||||
ref = this.images;
|
||||
results = [];
|
||||
for (i = k = 0, len1 = ref.length; k < len1; i = ++k) {
|
||||
checkbox = ref[i];
|
||||
@ -7686,37 +7699,54 @@
|
||||
results.push(label);
|
||||
}
|
||||
return results;
|
||||
})();
|
||||
return $.add(imageSelect, labels);
|
||||
}).call(this);
|
||||
$.add(imageSelect, labels);
|
||||
return this.addTooltips(labels);
|
||||
},
|
||||
addTooltips: function(nodes) {
|
||||
var i, k, len1, node;
|
||||
for (i = k = 0, len1 = nodes.length; k < len1; i = ++k) {
|
||||
node = nodes[i];
|
||||
node.title = this.imageKeys[i] + " or " + (this.imageKeys[i + 9][0].toUpperCase()) + this.imageKeys[i + 9].slice(1);
|
||||
}
|
||||
},
|
||||
checkForm: function(e) {
|
||||
var checkbox, k, len1, n, ref;
|
||||
n = 0;
|
||||
ref = this.images;
|
||||
for (k = 0, len1 = ref.length; k < len1; k++) {
|
||||
checkbox = ref[k];
|
||||
if (checkbox.checked) {
|
||||
n++;
|
||||
}
|
||||
}
|
||||
if (n === 0) {
|
||||
return e.preventDefault();
|
||||
}
|
||||
},
|
||||
keybinds: function(e) {
|
||||
var dx, reload, verify, x;
|
||||
if (!(this.images && doc.contains(this.images[0]) && d.activeElement)) {
|
||||
var dx, i, key, reload, verify, x;
|
||||
if (!(this.images && doc.contains(this.images[0]))) {
|
||||
return;
|
||||
}
|
||||
reload = $.id('recaptcha-reload-button');
|
||||
verify = $.id('recaptcha-verify-button');
|
||||
reload = $('#recaptcha-reload-button, .fbc-button-reload');
|
||||
verify = $('#recaptcha-verify-button, .fbc-button-verify > input');
|
||||
x = this.images.indexOf(d.activeElement);
|
||||
if (x < 0) {
|
||||
if (!$('.rc-controls').contains(d.activeElement)) {
|
||||
return;
|
||||
}
|
||||
x = d.activeElement === verify ? 11 : 9;
|
||||
}
|
||||
if (e.keyCode === 32 && x < 9) {
|
||||
key = Keybinds.keyCode(e);
|
||||
if (!this.noscript && key === 'Space' && x < 9) {
|
||||
this.images[x].click();
|
||||
e.preventDefault();
|
||||
return e.stopPropagation();
|
||||
} else if ((i = this.imageKeys.indexOf(key)) >= 0) {
|
||||
this.images[i % 9].click();
|
||||
verify.focus();
|
||||
} else if (dx = {
|
||||
38: 9,
|
||||
40: 3,
|
||||
37: 11,
|
||||
39: 1,
|
||||
73: 9,
|
||||
75: 3,
|
||||
74: 11,
|
||||
76: 1
|
||||
}[e.keyCode]) {
|
||||
'Up': 9,
|
||||
'Down': 3,
|
||||
'Left': 11,
|
||||
'Right': 1
|
||||
}[key]) {
|
||||
x = (x + dx) % 12;
|
||||
if (x === 10) {
|
||||
x = dx === 11 ? 9 : 11;
|
||||
@ -7725,9 +7755,11 @@
|
||||
9: reload,
|
||||
11: verify
|
||||
}[x]).focus();
|
||||
e.preventDefault();
|
||||
return e.stopPropagation();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
return e.stopPropagation();
|
||||
}
|
||||
};
|
||||
|
||||
@ -7758,40 +7790,6 @@
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.noscript = {
|
||||
initFrame: function() {
|
||||
var cb, conn, img, ref, ref1;
|
||||
conn = new Connection(window.parent, location.protocol + "//boards.4chan.org", {
|
||||
response: function(response) {
|
||||
$.id('response').value = response;
|
||||
return $('.fbc-challenge > form').submit();
|
||||
}
|
||||
});
|
||||
conn.send({
|
||||
token: (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0,
|
||||
error: (ref1 = $('.fbc-error')) != null ? ref1.textContent : void 0
|
||||
});
|
||||
if (!(img = $('.fbc-payload > img'))) {
|
||||
return;
|
||||
}
|
||||
cb = function() {
|
||||
var canvas;
|
||||
canvas = $.el('canvas');
|
||||
canvas.width = img.width;
|
||||
canvas.height = img.height;
|
||||
canvas.getContext('2d').drawImage(img, 0, 0);
|
||||
return conn.send({
|
||||
challenge: canvas.toDataURL()
|
||||
});
|
||||
};
|
||||
if (img.complete) {
|
||||
return cb();
|
||||
} else {
|
||||
return $.on(img, 'load', cb);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.v2 = {
|
||||
lifetime: 2 * $.MINUTE,
|
||||
init: function() {
|
||||
@ -7810,6 +7808,7 @@
|
||||
};
|
||||
})(this)
|
||||
});
|
||||
$.addClass(QR.nodes.el, 'noscript-captcha');
|
||||
}
|
||||
this.captchas = [];
|
||||
$.get('captchas', [], function(arg) {
|
||||
@ -7841,6 +7840,15 @@
|
||||
};
|
||||
})(this));
|
||||
},
|
||||
initFrame: function() {
|
||||
var conn, ref, token;
|
||||
if (token = (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0) {
|
||||
conn = new Connection(window.parent, location.protocol + "//boards.4chan.org");
|
||||
return conn.send({
|
||||
token: token
|
||||
});
|
||||
}
|
||||
},
|
||||
shouldFocus: false,
|
||||
timeouts: {},
|
||||
postsCount: 0,
|
||||
@ -8004,7 +8012,7 @@
|
||||
}
|
||||
},
|
||||
save: function(pasted, token) {
|
||||
var base1, focus, ref, ref1;
|
||||
var base1, focus, ref;
|
||||
$.forceSync('captchas');
|
||||
this.captchas.push({
|
||||
response: token || $('textarea', this.nodes.container).value,
|
||||
@ -8012,7 +8020,7 @@
|
||||
});
|
||||
$.set('captchas', this.captchas);
|
||||
this.count();
|
||||
focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && ((ref1 = d.activeElement.src) != null ? ref1.slice(0, 38) : void 0) === 'https://www.google.com/recaptcha/api2/';
|
||||
focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && /https?:\/\/www\.google\.com\/recaptcha\//.test(d.activeElement.src);
|
||||
if (this.needed()) {
|
||||
if (focus) {
|
||||
if (QR.cooldown.auto || Conf['Post on Captcha Completion']) {
|
||||
@ -14876,6 +14884,8 @@
|
||||
return 'Enter';
|
||||
case 27:
|
||||
return 'Esc';
|
||||
case 32:
|
||||
return 'Space';
|
||||
case 37:
|
||||
return 'Left';
|
||||
case 38:
|
||||
@ -14884,9 +14894,15 @@
|
||||
return 'Right';
|
||||
case 40:
|
||||
return 'Down';
|
||||
case 188:
|
||||
return 'Comma';
|
||||
case 190:
|
||||
return 'Period';
|
||||
default:
|
||||
if ((48 <= kc && kc <= 57) || (65 <= kc && kc <= 90)) {
|
||||
return String.fromCharCode(kc).toLowerCase();
|
||||
} else if ((96 <= kc && kc <= 105)) {
|
||||
return String.fromCharCode(kc - 48).toLowerCase();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
@ -16126,7 +16142,7 @@
|
||||
if (location.hostname === 'www.google.com') {
|
||||
if (location.pathname === '/recaptcha/api/fallback') {
|
||||
$.ready(function() {
|
||||
return Captcha.noscript.initFrame();
|
||||
return Captcha.v2.initFrame();
|
||||
});
|
||||
}
|
||||
$.get('Captcha Fixes', true, function(arg) {
|
||||
|
||||
Binary file not shown.
@ -1,7 +1,7 @@
|
||||
// Generated by CoffeeScript
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.11.0.5
|
||||
// @version 1.11.0.6
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -399,7 +399,7 @@
|
||||
doc = d.documentElement;
|
||||
|
||||
g = {
|
||||
VERSION: '1.11.0.5',
|
||||
VERSION: '1.11.0.6',
|
||||
NAMESPACE: '4chan X.',
|
||||
boards: {}
|
||||
};
|
||||
@ -2056,7 +2056,7 @@
|
||||
function Connection(target1, origin1, cb1) {
|
||||
this.target = target1;
|
||||
this.origin = origin1;
|
||||
this.cb = cb1;
|
||||
this.cb = cb1 != null ? cb1 : {};
|
||||
this.onMessage = bind(this.onMessage, this);
|
||||
this.send = bind(this.send, this);
|
||||
$.on(window, 'message', this.onMessage);
|
||||
@ -6832,11 +6832,13 @@
|
||||
QR.hasFocus = d.activeElement && QR.nodes.el.contains(d.activeElement);
|
||||
QR.nodes.el.classList.toggle('focus', QR.hasFocus);
|
||||
}
|
||||
if (QR.inCaptcha()) {
|
||||
QR.scrollY = window.scrollY;
|
||||
return $.on(d, 'scroll', QR.scrollLock);
|
||||
} else {
|
||||
return $.off(d, 'scroll', QR.scrollLock);
|
||||
if (QR.captcha.isEnabled && !QR.captcha.noscript) {
|
||||
if (QR.inCaptcha()) {
|
||||
QR.scrollY = window.scrollY;
|
||||
return $.on(d, 'scroll', QR.scrollLock);
|
||||
} else {
|
||||
return $.off(d, 'scroll', QR.scrollLock);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
@ -7615,6 +7617,7 @@
|
||||
Captcha = {};
|
||||
|
||||
Captcha.fixes = {
|
||||
imageKeys: '789456123uiojklm'.split('').concat(['Comma', 'Period']),
|
||||
css: '.rc-imageselect-target > div:focus {\n outline: 2px solid #4a90e2;\n}\n.rc-button-default:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}',
|
||||
cssNoscript: '.fbc-payload-imageselect {\n position: relative;\n}\n.fbc-payload-imageselect > label {\n position: absolute;\n display: block;\n height: 93.3px;\n width: 93.3px;\n}\nlabel[data-row="0"] {top: 0px;}\nlabel[data-row="1"] {top: 93.3px;}\nlabel[data-row="2"] {top: 186.6px;}\nlabel[data-col="0"] {left: 0px;}\nlabel[data-col="1"] {left: 93.3px;}\nlabel[data-col="2"] {left: 186.6px;}',
|
||||
init: function() {
|
||||
@ -7655,8 +7658,15 @@
|
||||
return $.on(d, 'keydown', this.keybinds.bind(this));
|
||||
},
|
||||
initNoscript: function() {
|
||||
this.noscript = true;
|
||||
this.images = $$('.fbc-payload-imageselect > input');
|
||||
if (!this.images.length) {
|
||||
return;
|
||||
}
|
||||
$.addStyle(this.cssNoscript);
|
||||
return this.addLabels();
|
||||
this.addLabels();
|
||||
$.on(d, 'keydown', this.keybinds.bind(this));
|
||||
return $.on($('.fbc-imageselect-challenge > form'), 'submit', this.checkForm.bind(this));
|
||||
},
|
||||
fixImages: function() {
|
||||
var img, k, len1, ref;
|
||||
@ -7666,13 +7676,16 @@
|
||||
img = ref[k];
|
||||
img.tabIndex = 0;
|
||||
}
|
||||
if (this.images.length) {
|
||||
return this.addTooltips(this.images);
|
||||
}
|
||||
},
|
||||
addLabels: function() {
|
||||
var checkbox, i, imageSelect, label, labels;
|
||||
imageSelect = $('.fbc-payload-imageselect');
|
||||
labels = (function() {
|
||||
var k, len1, ref, results;
|
||||
ref = $$('input', imageSelect);
|
||||
ref = this.images;
|
||||
results = [];
|
||||
for (i = k = 0, len1 = ref.length; k < len1; i = ++k) {
|
||||
checkbox = ref[i];
|
||||
@ -7685,37 +7698,54 @@
|
||||
results.push(label);
|
||||
}
|
||||
return results;
|
||||
})();
|
||||
return $.add(imageSelect, labels);
|
||||
}).call(this);
|
||||
$.add(imageSelect, labels);
|
||||
return this.addTooltips(labels);
|
||||
},
|
||||
addTooltips: function(nodes) {
|
||||
var i, k, len1, node;
|
||||
for (i = k = 0, len1 = nodes.length; k < len1; i = ++k) {
|
||||
node = nodes[i];
|
||||
node.title = this.imageKeys[i] + " or " + (this.imageKeys[i + 9][0].toUpperCase()) + this.imageKeys[i + 9].slice(1);
|
||||
}
|
||||
},
|
||||
checkForm: function(e) {
|
||||
var checkbox, k, len1, n, ref;
|
||||
n = 0;
|
||||
ref = this.images;
|
||||
for (k = 0, len1 = ref.length; k < len1; k++) {
|
||||
checkbox = ref[k];
|
||||
if (checkbox.checked) {
|
||||
n++;
|
||||
}
|
||||
}
|
||||
if (n === 0) {
|
||||
return e.preventDefault();
|
||||
}
|
||||
},
|
||||
keybinds: function(e) {
|
||||
var dx, reload, verify, x;
|
||||
if (!(this.images && doc.contains(this.images[0]) && d.activeElement)) {
|
||||
var dx, i, key, reload, verify, x;
|
||||
if (!(this.images && doc.contains(this.images[0]))) {
|
||||
return;
|
||||
}
|
||||
reload = $.id('recaptcha-reload-button');
|
||||
verify = $.id('recaptcha-verify-button');
|
||||
reload = $('#recaptcha-reload-button, .fbc-button-reload');
|
||||
verify = $('#recaptcha-verify-button, .fbc-button-verify > input');
|
||||
x = this.images.indexOf(d.activeElement);
|
||||
if (x < 0) {
|
||||
if (!$('.rc-controls').contains(d.activeElement)) {
|
||||
return;
|
||||
}
|
||||
x = d.activeElement === verify ? 11 : 9;
|
||||
}
|
||||
if (e.keyCode === 32 && x < 9) {
|
||||
key = Keybinds.keyCode(e);
|
||||
if (!this.noscript && key === 'Space' && x < 9) {
|
||||
this.images[x].click();
|
||||
e.preventDefault();
|
||||
return e.stopPropagation();
|
||||
} else if ((i = this.imageKeys.indexOf(key)) >= 0) {
|
||||
this.images[i % 9].click();
|
||||
verify.focus();
|
||||
} else if (dx = {
|
||||
38: 9,
|
||||
40: 3,
|
||||
37: 11,
|
||||
39: 1,
|
||||
73: 9,
|
||||
75: 3,
|
||||
74: 11,
|
||||
76: 1
|
||||
}[e.keyCode]) {
|
||||
'Up': 9,
|
||||
'Down': 3,
|
||||
'Left': 11,
|
||||
'Right': 1
|
||||
}[key]) {
|
||||
x = (x + dx) % 12;
|
||||
if (x === 10) {
|
||||
x = dx === 11 ? 9 : 11;
|
||||
@ -7724,9 +7754,11 @@
|
||||
9: reload,
|
||||
11: verify
|
||||
}[x]).focus();
|
||||
e.preventDefault();
|
||||
return e.stopPropagation();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
return e.stopPropagation();
|
||||
}
|
||||
};
|
||||
|
||||
@ -7757,40 +7789,6 @@
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.noscript = {
|
||||
initFrame: function() {
|
||||
var cb, conn, img, ref, ref1;
|
||||
conn = new Connection(window.parent, location.protocol + "//boards.4chan.org", {
|
||||
response: function(response) {
|
||||
$.id('response').value = response;
|
||||
return $('.fbc-challenge > form').submit();
|
||||
}
|
||||
});
|
||||
conn.send({
|
||||
token: (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0,
|
||||
error: (ref1 = $('.fbc-error')) != null ? ref1.textContent : void 0
|
||||
});
|
||||
if (!(img = $('.fbc-payload > img'))) {
|
||||
return;
|
||||
}
|
||||
cb = function() {
|
||||
var canvas;
|
||||
canvas = $.el('canvas');
|
||||
canvas.width = img.width;
|
||||
canvas.height = img.height;
|
||||
canvas.getContext('2d').drawImage(img, 0, 0);
|
||||
return conn.send({
|
||||
challenge: canvas.toDataURL()
|
||||
});
|
||||
};
|
||||
if (img.complete) {
|
||||
return cb();
|
||||
} else {
|
||||
return $.on(img, 'load', cb);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.v2 = {
|
||||
lifetime: 2 * $.MINUTE,
|
||||
init: function() {
|
||||
@ -7809,6 +7807,7 @@
|
||||
};
|
||||
})(this)
|
||||
});
|
||||
$.addClass(QR.nodes.el, 'noscript-captcha');
|
||||
}
|
||||
this.captchas = [];
|
||||
$.get('captchas', [], function(arg) {
|
||||
@ -7840,6 +7839,15 @@
|
||||
};
|
||||
})(this));
|
||||
},
|
||||
initFrame: function() {
|
||||
var conn, ref, token;
|
||||
if (token = (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0) {
|
||||
conn = new Connection(window.parent, location.protocol + "//boards.4chan.org");
|
||||
return conn.send({
|
||||
token: token
|
||||
});
|
||||
}
|
||||
},
|
||||
shouldFocus: false,
|
||||
timeouts: {},
|
||||
postsCount: 0,
|
||||
@ -8003,7 +8011,7 @@
|
||||
}
|
||||
},
|
||||
save: function(pasted, token) {
|
||||
var base1, focus, ref, ref1;
|
||||
var base1, focus, ref;
|
||||
$.forceSync('captchas');
|
||||
this.captchas.push({
|
||||
response: token || $('textarea', this.nodes.container).value,
|
||||
@ -8011,7 +8019,7 @@
|
||||
});
|
||||
$.set('captchas', this.captchas);
|
||||
this.count();
|
||||
focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && ((ref1 = d.activeElement.src) != null ? ref1.slice(0, 38) : void 0) === 'https://www.google.com/recaptcha/api2/';
|
||||
focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && /https?:\/\/www\.google\.com\/recaptcha\//.test(d.activeElement.src);
|
||||
if (this.needed()) {
|
||||
if (focus) {
|
||||
if (QR.cooldown.auto || Conf['Post on Captcha Completion']) {
|
||||
@ -14875,6 +14883,8 @@
|
||||
return 'Enter';
|
||||
case 27:
|
||||
return 'Esc';
|
||||
case 32:
|
||||
return 'Space';
|
||||
case 37:
|
||||
return 'Left';
|
||||
case 38:
|
||||
@ -14883,9 +14893,15 @@
|
||||
return 'Right';
|
||||
case 40:
|
||||
return 'Down';
|
||||
case 188:
|
||||
return 'Comma';
|
||||
case 190:
|
||||
return 'Period';
|
||||
default:
|
||||
if ((48 <= kc && kc <= 57) || (65 <= kc && kc <= 90)) {
|
||||
return String.fromCharCode(kc).toLowerCase();
|
||||
} else if ((96 <= kc && kc <= 105)) {
|
||||
return String.fromCharCode(kc - 48).toLowerCase();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
@ -16125,7 +16141,7 @@
|
||||
if (location.hostname === 'www.google.com') {
|
||||
if (location.pathname === '/recaptcha/api/fallback') {
|
||||
$.ready(function() {
|
||||
return Captcha.noscript.initFrame();
|
||||
return Captcha.v2.initFrame();
|
||||
});
|
||||
}
|
||||
$.get('Captcha Fixes', true, function(arg) {
|
||||
|
||||
Binary file not shown.
@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.11.0.5
|
||||
// @version 1.11.0.6
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
// Generated by CoffeeScript
|
||||
// ==UserScript==
|
||||
// @name 4chan X
|
||||
// @version 1.11.0.5
|
||||
// @version 1.11.0.6
|
||||
// @minGMVer 1.14
|
||||
// @minFFVer 26
|
||||
// @namespace 4chan-X
|
||||
@ -400,7 +400,7 @@
|
||||
doc = d.documentElement;
|
||||
|
||||
g = {
|
||||
VERSION: '1.11.0.5',
|
||||
VERSION: '1.11.0.6',
|
||||
NAMESPACE: '4chan X.',
|
||||
boards: {}
|
||||
};
|
||||
@ -2057,7 +2057,7 @@
|
||||
function Connection(target1, origin1, cb1) {
|
||||
this.target = target1;
|
||||
this.origin = origin1;
|
||||
this.cb = cb1;
|
||||
this.cb = cb1 != null ? cb1 : {};
|
||||
this.onMessage = bind(this.onMessage, this);
|
||||
this.send = bind(this.send, this);
|
||||
$.on(window, 'message', this.onMessage);
|
||||
@ -6833,11 +6833,13 @@
|
||||
QR.hasFocus = d.activeElement && QR.nodes.el.contains(d.activeElement);
|
||||
QR.nodes.el.classList.toggle('focus', QR.hasFocus);
|
||||
}
|
||||
if (QR.inCaptcha()) {
|
||||
QR.scrollY = window.scrollY;
|
||||
return $.on(d, 'scroll', QR.scrollLock);
|
||||
} else {
|
||||
return $.off(d, 'scroll', QR.scrollLock);
|
||||
if (QR.captcha.isEnabled && !QR.captcha.noscript) {
|
||||
if (QR.inCaptcha()) {
|
||||
QR.scrollY = window.scrollY;
|
||||
return $.on(d, 'scroll', QR.scrollLock);
|
||||
} else {
|
||||
return $.off(d, 'scroll', QR.scrollLock);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
@ -7616,6 +7618,7 @@
|
||||
Captcha = {};
|
||||
|
||||
Captcha.fixes = {
|
||||
imageKeys: '789456123uiojklm'.split('').concat(['Comma', 'Period']),
|
||||
css: '.rc-imageselect-target > div:focus {\n outline: 2px solid #4a90e2;\n}\n.rc-button-default:focus {\n box-shadow: inset 0 0 0 2px #0063d6;\n}',
|
||||
cssNoscript: '.fbc-payload-imageselect {\n position: relative;\n}\n.fbc-payload-imageselect > label {\n position: absolute;\n display: block;\n height: 93.3px;\n width: 93.3px;\n}\nlabel[data-row="0"] {top: 0px;}\nlabel[data-row="1"] {top: 93.3px;}\nlabel[data-row="2"] {top: 186.6px;}\nlabel[data-col="0"] {left: 0px;}\nlabel[data-col="1"] {left: 93.3px;}\nlabel[data-col="2"] {left: 186.6px;}',
|
||||
init: function() {
|
||||
@ -7656,8 +7659,15 @@
|
||||
return $.on(d, 'keydown', this.keybinds.bind(this));
|
||||
},
|
||||
initNoscript: function() {
|
||||
this.noscript = true;
|
||||
this.images = $$('.fbc-payload-imageselect > input');
|
||||
if (!this.images.length) {
|
||||
return;
|
||||
}
|
||||
$.addStyle(this.cssNoscript);
|
||||
return this.addLabels();
|
||||
this.addLabels();
|
||||
$.on(d, 'keydown', this.keybinds.bind(this));
|
||||
return $.on($('.fbc-imageselect-challenge > form'), 'submit', this.checkForm.bind(this));
|
||||
},
|
||||
fixImages: function() {
|
||||
var img, k, len1, ref;
|
||||
@ -7667,13 +7677,16 @@
|
||||
img = ref[k];
|
||||
img.tabIndex = 0;
|
||||
}
|
||||
if (this.images.length) {
|
||||
return this.addTooltips(this.images);
|
||||
}
|
||||
},
|
||||
addLabels: function() {
|
||||
var checkbox, i, imageSelect, label, labels;
|
||||
imageSelect = $('.fbc-payload-imageselect');
|
||||
labels = (function() {
|
||||
var k, len1, ref, results;
|
||||
ref = $$('input', imageSelect);
|
||||
ref = this.images;
|
||||
results = [];
|
||||
for (i = k = 0, len1 = ref.length; k < len1; i = ++k) {
|
||||
checkbox = ref[i];
|
||||
@ -7686,37 +7699,54 @@
|
||||
results.push(label);
|
||||
}
|
||||
return results;
|
||||
})();
|
||||
return $.add(imageSelect, labels);
|
||||
}).call(this);
|
||||
$.add(imageSelect, labels);
|
||||
return this.addTooltips(labels);
|
||||
},
|
||||
addTooltips: function(nodes) {
|
||||
var i, k, len1, node;
|
||||
for (i = k = 0, len1 = nodes.length; k < len1; i = ++k) {
|
||||
node = nodes[i];
|
||||
node.title = this.imageKeys[i] + " or " + (this.imageKeys[i + 9][0].toUpperCase()) + this.imageKeys[i + 9].slice(1);
|
||||
}
|
||||
},
|
||||
checkForm: function(e) {
|
||||
var checkbox, k, len1, n, ref;
|
||||
n = 0;
|
||||
ref = this.images;
|
||||
for (k = 0, len1 = ref.length; k < len1; k++) {
|
||||
checkbox = ref[k];
|
||||
if (checkbox.checked) {
|
||||
n++;
|
||||
}
|
||||
}
|
||||
if (n === 0) {
|
||||
return e.preventDefault();
|
||||
}
|
||||
},
|
||||
keybinds: function(e) {
|
||||
var dx, reload, verify, x;
|
||||
if (!(this.images && doc.contains(this.images[0]) && d.activeElement)) {
|
||||
var dx, i, key, reload, verify, x;
|
||||
if (!(this.images && doc.contains(this.images[0]))) {
|
||||
return;
|
||||
}
|
||||
reload = $.id('recaptcha-reload-button');
|
||||
verify = $.id('recaptcha-verify-button');
|
||||
reload = $('#recaptcha-reload-button, .fbc-button-reload');
|
||||
verify = $('#recaptcha-verify-button, .fbc-button-verify > input');
|
||||
x = this.images.indexOf(d.activeElement);
|
||||
if (x < 0) {
|
||||
if (!$('.rc-controls').contains(d.activeElement)) {
|
||||
return;
|
||||
}
|
||||
x = d.activeElement === verify ? 11 : 9;
|
||||
}
|
||||
if (e.keyCode === 32 && x < 9) {
|
||||
key = Keybinds.keyCode(e);
|
||||
if (!this.noscript && key === 'Space' && x < 9) {
|
||||
this.images[x].click();
|
||||
e.preventDefault();
|
||||
return e.stopPropagation();
|
||||
} else if ((i = this.imageKeys.indexOf(key)) >= 0) {
|
||||
this.images[i % 9].click();
|
||||
verify.focus();
|
||||
} else if (dx = {
|
||||
38: 9,
|
||||
40: 3,
|
||||
37: 11,
|
||||
39: 1,
|
||||
73: 9,
|
||||
75: 3,
|
||||
74: 11,
|
||||
76: 1
|
||||
}[e.keyCode]) {
|
||||
'Up': 9,
|
||||
'Down': 3,
|
||||
'Left': 11,
|
||||
'Right': 1
|
||||
}[key]) {
|
||||
x = (x + dx) % 12;
|
||||
if (x === 10) {
|
||||
x = dx === 11 ? 9 : 11;
|
||||
@ -7725,9 +7755,11 @@
|
||||
9: reload,
|
||||
11: verify
|
||||
}[x]).focus();
|
||||
e.preventDefault();
|
||||
return e.stopPropagation();
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
e.preventDefault();
|
||||
return e.stopPropagation();
|
||||
}
|
||||
};
|
||||
|
||||
@ -7758,40 +7790,6 @@
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.noscript = {
|
||||
initFrame: function() {
|
||||
var cb, conn, img, ref, ref1;
|
||||
conn = new Connection(window.parent, location.protocol + "//boards.4chan.org", {
|
||||
response: function(response) {
|
||||
$.id('response').value = response;
|
||||
return $('.fbc-challenge > form').submit();
|
||||
}
|
||||
});
|
||||
conn.send({
|
||||
token: (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0,
|
||||
error: (ref1 = $('.fbc-error')) != null ? ref1.textContent : void 0
|
||||
});
|
||||
if (!(img = $('.fbc-payload > img'))) {
|
||||
return;
|
||||
}
|
||||
cb = function() {
|
||||
var canvas;
|
||||
canvas = $.el('canvas');
|
||||
canvas.width = img.width;
|
||||
canvas.height = img.height;
|
||||
canvas.getContext('2d').drawImage(img, 0, 0);
|
||||
return conn.send({
|
||||
challenge: canvas.toDataURL()
|
||||
});
|
||||
};
|
||||
if (img.complete) {
|
||||
return cb();
|
||||
} else {
|
||||
return $.on(img, 'load', cb);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Captcha.v2 = {
|
||||
lifetime: 2 * $.MINUTE,
|
||||
init: function() {
|
||||
@ -7810,6 +7808,7 @@
|
||||
};
|
||||
})(this)
|
||||
});
|
||||
$.addClass(QR.nodes.el, 'noscript-captcha');
|
||||
}
|
||||
this.captchas = [];
|
||||
$.get('captchas', [], function(arg) {
|
||||
@ -7841,6 +7840,15 @@
|
||||
};
|
||||
})(this));
|
||||
},
|
||||
initFrame: function() {
|
||||
var conn, ref, token;
|
||||
if (token = (ref = $('.fbc-verification-token > textarea')) != null ? ref.value : void 0) {
|
||||
conn = new Connection(window.parent, location.protocol + "//boards.4chan.org");
|
||||
return conn.send({
|
||||
token: token
|
||||
});
|
||||
}
|
||||
},
|
||||
shouldFocus: false,
|
||||
timeouts: {},
|
||||
postsCount: 0,
|
||||
@ -8004,7 +8012,7 @@
|
||||
}
|
||||
},
|
||||
save: function(pasted, token) {
|
||||
var base1, focus, ref, ref1;
|
||||
var base1, focus, ref;
|
||||
$.forceSync('captchas');
|
||||
this.captchas.push({
|
||||
response: token || $('textarea', this.nodes.container).value,
|
||||
@ -8012,7 +8020,7 @@
|
||||
});
|
||||
$.set('captchas', this.captchas);
|
||||
this.count();
|
||||
focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && ((ref1 = d.activeElement.src) != null ? ref1.slice(0, 38) : void 0) === 'https://www.google.com/recaptcha/api2/';
|
||||
focus = ((ref = d.activeElement) != null ? ref.nodeName : void 0) === 'IFRAME' && /https?:\/\/www\.google\.com\/recaptcha\//.test(d.activeElement.src);
|
||||
if (this.needed()) {
|
||||
if (focus) {
|
||||
if (QR.cooldown.auto || Conf['Post on Captcha Completion']) {
|
||||
@ -14876,6 +14884,8 @@
|
||||
return 'Enter';
|
||||
case 27:
|
||||
return 'Esc';
|
||||
case 32:
|
||||
return 'Space';
|
||||
case 37:
|
||||
return 'Left';
|
||||
case 38:
|
||||
@ -14884,9 +14894,15 @@
|
||||
return 'Right';
|
||||
case 40:
|
||||
return 'Down';
|
||||
case 188:
|
||||
return 'Comma';
|
||||
case 190:
|
||||
return 'Period';
|
||||
default:
|
||||
if ((48 <= kc && kc <= 57) || (65 <= kc && kc <= 90)) {
|
||||
return String.fromCharCode(kc).toLowerCase();
|
||||
} else if ((96 <= kc && kc <= 105)) {
|
||||
return String.fromCharCode(kc - 48).toLowerCase();
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
@ -16126,7 +16142,7 @@
|
||||
if (location.hostname === 'www.google.com') {
|
||||
if (location.pathname === '/recaptcha/api/fallback') {
|
||||
$.ready(function() {
|
||||
return Captcha.noscript.initFrame();
|
||||
return Captcha.v2.initFrame();
|
||||
});
|
||||
}
|
||||
$.get('Captcha Fixes', true, function(arg) {
|
||||
|
||||
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.0.5' />
|
||||
<updatecheck codebase='https://ccd0.github.io/4chan-x/builds/4chan-X-beta.crx' version='1.11.0.6' />
|
||||
</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.0.5' />
|
||||
<updatecheck codebase='https://ccd0.github.io/4chan-x/builds/4chan-X.crx' version='1.11.0.6' />
|
||||
</app>
|
||||
</gupdate>
|
||||
|
||||
|
||||
@ -3,8 +3,8 @@
|
||||
"description": "Cross-browser userscript for maximum lurking on 4chan.",
|
||||
"meta": {
|
||||
"name": "4chan X",
|
||||
"version": "1.11.0.5",
|
||||
"date": "2015-06-21T00:33:27.540Z",
|
||||
"version": "1.11.0.6",
|
||||
"date": "2015-06-21T06:05:51.745Z",
|
||||
"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