Send reply to the iframe. Don't alert in qr.error if the tab is visible.

This commit is contained in:
Nicolas Stepien 2012-01-21 21:15:09 +01:00
parent 385a5c6ee1
commit 48e8b33f6c
2 changed files with 100 additions and 14 deletions

View File

@ -1249,7 +1249,9 @@
error: function(err) {
$('.error', qr.el).textContent = err;
qr.open();
return alert(err);
if (d.hidden || d.oHidden || d.mozHidden || d.webkitHidden) {
return alert(err);
}
},
cleanError: function() {
return $('.error', qr.el).textContent = null;
@ -1432,8 +1434,10 @@
if (!(response = this.input.value)) return;
captchas = $.get('captchas', []);
now = Date.now();
while (captchas[0].time < now) {
captchas.shift();
if (captchas.length) {
while (captchas[0].time < now) {
captchas.shift();
}
}
length = captchas.push({
challenge: this.challenge.firstChild.value,
@ -1529,13 +1533,51 @@
return $.add(d.body, qr.el);
},
submit: function(e) {
var captcha, captchas, challenge, err, len, m, now, reply, response, resto;
if (e != null) e.preventDefault();
if (g.dead) return;
if (conf['Auto Hide QR']) {
reply = qr.replies[0];
if (!(reply.com || reply.file)) {
err = 'Error: No file selected.';
} else {
captchas = $.get('captchas', []);
if (len = captchas.length) {
now = Date.now();
while (captchas[0].time < now) {
captchas.shift();
}
}
if (captcha = captchas.shift()) {
challenge = captcha.challenge;
response = captcha.response;
} else {
challenge = qr.captcha.img.alt;
if (response = qr.captcha.input.value) qr.captcha.reload();
}
$.set('captchas', captchas);
qr.captcha.count(captchas.length);
if (!response) err = 'Error: No valid captcha.';
}
if (err) {
qr.error(err);
return;
}
qr.cleanError();
if (conf['Auto Hide QR'] && qr.replies.length === 1) {
$.id('autohide').checked = true;
qr.hide();
}
return qr.cleanError();
return qr.message.send({
resto: g.REPLY ? g.THREAD_ID : (resto = $('select').value !== 'new') ? resto : void 0,
name: reply.name,
email: reply.email,
sub: reply.sub,
com: reply.com,
file: reply.file,
mode: 'regist',
pwd: (m = d.cookie.match(/4chan_pass=([^;]+)/)) ? decodeURIComponent(m[1]) : $('input[name=pwd]').value,
recaptcha_challenge_field: challenge,
recaptcha_response_field: response
});
},
response: function(e) {
var reply, sage;

View File

@ -910,7 +910,7 @@ qr =
error: (err) ->
$('.error', qr.el).textContent = err
qr.open()
alert err
alert err if d.hidden or d.oHidden or d.mozHidden or d.webkitHidden
cleanError: ->
$('.error', qr.el).textContent = null
@ -1064,8 +1064,9 @@ qr =
captchas = $.get 'captchas', []
# remove old captchas
now = Date.now()
while captchas[0].time < now
captchas.shift()
if captchas.length
while captchas[0].time < now
captchas.shift()
length = captchas.push
challenge: @challenge.firstChild.value
response: response
@ -1153,12 +1154,55 @@ qr =
submit: (e) ->
e?.preventDefault()
return if g.dead
if conf['Auto Hide QR'] # and only one post (left) to submit
reply = qr.replies[0]
# prevent errors
unless reply.com or reply.file
err = 'Error: No file selected.'
else
# get oldest valid captcha
captchas = $.get 'captchas', []
if len = captchas.length
# remove old captchas
now = Date.now()
while captchas[0].time < now
captchas.shift()
if captcha = captchas.shift()
challenge = captcha.challenge
response = captcha.response
else
challenge = qr.captcha.img.alt
if response = qr.captcha.input.value then qr.captcha.reload()
$.set 'captchas', captchas
qr.captcha.count captchas.length
unless response
err = 'Error: No valid captcha.'
# more error prevention ?
if err
qr.error err
return
qr.cleanError()
if conf['Auto Hide QR'] and qr.replies.length is 1
$.id('autohide').checked = true
qr.hide()
qr.cleanError()
# magical xhr2
qr.message.send
resto:
if g.REPLY
g.THREAD_ID
else if resto = $('select').value isnt 'new'
resto
name: reply.name
email: reply.email
sub: reply.sub
com: reply.com
file: reply.file
mode: 'regist'
pwd: if m = d.cookie.match(/4chan_pass=([^;]+)/) then decodeURIComponent m[1] else $('input[name=pwd]').value
recaptcha_challenge_field: challenge
recaptcha_response_field: response
response: (e) ->
log e
@ -1199,7 +1243,7 @@ qr =
$.rm script
send: (data) ->
data.changeContext = true
data.qr = true
data.qr = true
postMessage data, '*'
receive: (data) ->
log 'receive', location.hostname, data