Supposedly actually fix file upload on Firefox.

This commit is contained in:
Nicolas Stepien 2012-01-22 05:10:48 +01:00
parent 239ea5180f
commit c2bd74260b
2 changed files with 47 additions and 22 deletions

View File

@ -1538,7 +1538,7 @@
return $.add(d.body, qr.el);
},
submit: function(e) {
var bb, blob, captcha, captchas, challenge, err, m, now, reply, response;
var captcha, captchas, challenge, err, file, m, now, post, reader, reply, response;
if (e != null) e.preventDefault();
qr.message.send({
abort: true
@ -1574,28 +1574,36 @@
$.id('autohide').checked = true;
qr.hide();
}
if (engine === 'gecko' && reply.file) {
bb = new MozBlobBuilder();
bb.append(reply.file);
blob = bb.getBlob(reply.file.type);
}
return qr.message.send({
post = {
board: g.BOARD,
resto: g.THREAD_ID || $('select', qr.el).value,
name: reply.name,
email: reply.email,
sub: reply.sub,
com: reply.com,
upfile: blob || reply.file,
upfile: 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
});
};
if (engine === 'gecko' && reply.file) {
file = {};
reader = new FileReader();
reader.onload = function() {
file.buffer = this.result;
file.type = reply.file.type;
post.upfile = file;
return qr.message.send(post);
};
reader.readAsArrayBuffer(reply.file);
return;
}
return qr.message.send(post);
},
response: function(e) {
var reply, sage;
log(e, qr.ajax);
log(e);
return;
if (!(conf['Persistent QR'] || qr.replies.length > 1)) qr.close();
sage = /sage/i.test(reply.email);
@ -1635,7 +1643,7 @@
return postMessage(data, '*');
},
receive: function(data) {
var form, name, url, val, _ref;
var bb, form, name, url, val, _ref;
if (data.abort) {
if ((_ref = qr.ajax) != null) _ref.abort();
return;
@ -1644,6 +1652,11 @@
if (data.mode === 'regist') {
url = "http://sys.4chan.org/" + data.board + "/post?" + (Date.now());
delete data.board;
if (engine === 'gecko' && data.upfile) {
bb = new MozBlobBuilder();
bb.append(data.upfile.buffer);
data.upfile = bb.getBlob(data.upfile.type);
}
form = new FormData();
for (name in data) {
val = data[name];

View File

@ -1192,29 +1192,37 @@ qr =
$.id('autohide').checked = true
qr.hide()
if engine is 'gecko' and reply.file
# https://bugzilla.mozilla.org/show_bug.cgi?id=673742
# We plan to allow postMessaging Files and FileLists across origins,
# that just needs a more in depth security review.
bb = new MozBlobBuilder()
bb.append reply.file
blob = bb.getBlob reply.file.type
qr.message.send
post =
board: g.BOARD
resto: g.THREAD_ID or $('select', qr.el).value
name: reply.name
email: reply.email
sub: reply.sub
com: reply.com
upfile: blob or reply.file
upfile: 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
if engine is 'gecko' and reply.file
# https://bugzilla.mozilla.org/show_bug.cgi?id=673742
# We plan to allow postMessaging Files and FileLists across origins,
# that just needs a more in depth security review.
file = {}
reader = new FileReader()
reader.onload = ->
file.buffer = @result
file.type = reply.file.type
post.upfile = file
qr.message.send post
reader.readAsArrayBuffer reply.file
return
qr.message.send post
response: (e) ->
log e, qr.ajax
log e
return
# successful posting/error handling
@ -1265,6 +1273,10 @@ qr =
# fool CloudFlare's cache to hopefully avoid connection errors
url = "http://sys.4chan.org/#{data.board}/post?#{Date.now()}"
delete data.board
if engine is 'gecko' and data.upfile
bb = new MozBlobBuilder()
bb.append data.upfile.buffer
data.upfile = bb.getBlob data.upfile.type
form = new FormData()
for name, val of data
form.append name, val if val