You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
doushio/client/drop.js

72 lines
1.5 KiB

(function () {
function drop_shita(e) {
e.stopPropagation();
e.preventDefault();
var files = e.dataTransfer.files;
if (!files.length)
return;
if (!postForm) {
with_dom(function () {
if (THREAD)
open_post_box(THREAD);
else {
var $s = $(e.target).closest('section');
if (!$s.length)
return;
open_post_box($s.attr('id'));
}
});
}
else {
var attrs = postForm.model.attributes;
if (attrs.uploading || attrs.uploaded)
return;
}
if (files.length > 1) {
postForm.upload_error('Too many files.');
return;
}
var extra = postForm.prep_upload();
var fd = new FormData();
fd.append('image', files[0]);
for (var k in extra)
fd.append(k, extra[k]);
/* Can't seem to jQuery this shit */
var xhr = new XMLHttpRequest();
xhr.open('POST', image_upload_url());
xhr.setRequestHeader('Accept', 'application/json');
xhr.onreadystatechange = upload_shita;
xhr.send(fd);
postForm.notify_uploading();
}
function upload_shita() {
if (this.readyState != 4 || this.status == 202)
return;
var err = this.responseText;
if (this.status != 500 || !err || err.length > 100)
err = "Couldn't get response.";
postForm.upload_error(err)
}
function stop_drag(e) {
e.stopPropagation();
e.preventDefault();
}
function setup_upload_drop(e) {
function go(nm, f) { e.addEventListener(nm, f, false); }
go('dragenter', stop_drag);
go('dragexit', stop_drag);
go('dragover', stop_drag);
go('drop', drop_shita);
}
setup_upload_drop(document.body);
})();