obscreen/data_jpl/www/js/dragdrop.js
2024-08-24 21:20:22 +02:00

92 lines
3.3 KiB
JavaScript

jQuery(function ($) {
const main = function () {
fileUpload();
};
const fileUpload = function () {
$('.btn-super-upload').each(function () {
const $button = $(this);
const $input = $(this).find('input[type=file]');
$input.fileupload({
url: $(this).attr('data-route'),
dropZone: $('body'),
formData: {},
singleFileUploads: false,
dataType: 'json',
add: function (e, data) {
const $alert = $('.alert-danger');
const $bar = $button.find('.progress-bar');
$bar.css('width', '0%');
$button.addClass('uploading').removeClass('btn-info btn-super-upload').addClass('btn-naked btn-super-upload-busy');
$alert.addClass('hidden').text('');
data.submit();
},
progressall: function (e, data) {
const progress = parseInt(data.loaded / data.total * 100, 10);
const $bar = $button.find('.progress-bar');
const $percent = $button.find('.percent');
$bar.css('width', progress + '%');
$percent.text(progress + '%');
},
always: function (e, data) {
const response = data._response.jqXHR;
$button.removeClass('uploading').removeClass('btn-naked btn-super-upload-busy').addClass('btn-info btn-super-upload');
if (response.status != 200) {
const $alert = $('.alert-danger').removeClass('hidden');
if (response.status == 413) {
$alert.text(l.js_common_http_error_413);
} else {
$alert.text(l.js_common_http_error_occured.replace('%code%', response.status));
}
} else {
document.location.reload();
}
}
});
});
};
main();
$(document).on('click', '.btn-super-upload', function (e) {
$(this).find('input[type=file]')[0].click();
});
$(document).on('dragenter', 'body', function () {
$(this).addClass('dragenter');
return false;
});
$(document).on('dragover', 'body', function (e) {
e.preventDefault();
e.stopPropagation();
$(this).addClass('dragover');
return false;
});
$(document).on('dragleave', 'body', function (e) {
e.preventDefault();
e.stopPropagation();
$(this).removeClass('dragenter dragover');
return false;
});
$(document).on('drop', 'body', function (e) {
e.preventDefault();
e.stopPropagation();
$(this).removeClass('dragenter dragover');
const $dz = $('.dropzone:visible');
if (isset($dz.attr('data-handle-drop') && $dz.attr('data-handle-drop') === '1')) {
const $inputTarget = $("#" + $dz.attr('data-related-input'));
const droppedFiles = e.originalEvent.dataTransfer.files;
$inputTarget.prop("files", droppedFiles).trigger('change');
}
return false;
});
});