2025-02-07 08:27:19 +00:00
|
|
|
document.addEventListener("DOMContentLoaded", function () {
|
2025-02-02 11:30:04 +00:00
|
|
|
const dropzone = document.querySelector('html');
|
2025-02-07 10:25:13 +00:00
|
|
|
const targetContainer = document.querySelector('.dropzone')
|
2025-02-02 11:30:04 +00:00
|
|
|
|
2025-02-07 10:25:13 +00:00
|
|
|
if (targetContainer != null) {
|
|
|
|
console.log("target ready")
|
2025-02-07 09:19:20 +00:00
|
|
|
const target = targetContainer.dataset.target;
|
2025-02-06 22:35:51 +00:00
|
|
|
|
2025-02-07 09:19:20 +00:00
|
|
|
const progressDialog = document.querySelector('#upload_progress_dialog')
|
|
|
|
const progressBar = document.querySelector('#upload_progress')
|
2025-02-02 11:30:04 +00:00
|
|
|
|
2025-02-07 09:19:20 +00:00
|
|
|
dropzone.addEventListener('dragover', (e) => {
|
|
|
|
e.preventDefault();
|
|
|
|
dropzone.classList.add('dragactive');
|
|
|
|
});
|
2025-02-02 11:30:04 +00:00
|
|
|
|
2025-02-07 09:19:20 +00:00
|
|
|
dropzone.addEventListener('dragleave', (e) => {
|
|
|
|
dropzone.classList.remove('dragactive');
|
|
|
|
});
|
2025-02-02 11:30:04 +00:00
|
|
|
|
2025-02-07 09:19:20 +00:00
|
|
|
dropzone.addEventListener('drop', (e) => {
|
|
|
|
e.preventDefault();
|
|
|
|
dropzone.classList.remove('dragactive');
|
2025-02-06 22:35:51 +00:00
|
|
|
|
2025-02-07 09:19:20 +00:00
|
|
|
// Handle dropped files
|
|
|
|
const files = e.dataTransfer.files;
|
|
|
|
if (files.length > 0) {
|
|
|
|
console.log('Files dropped:', files);
|
2025-02-06 22:35:51 +00:00
|
|
|
|
2025-02-07 09:19:20 +00:00
|
|
|
for (const file of files) {
|
|
|
|
// show progress dialog
|
|
|
|
// warning: this way the progress dialog is shown for each file individually
|
|
|
|
progressDialog.showModal();
|
|
|
|
const formData = new FormData();
|
|
|
|
formData.append('file', file);
|
2025-02-06 22:35:51 +00:00
|
|
|
|
2025-02-07 09:19:20 +00:00
|
|
|
const xhr = new XMLHttpRequest();
|
|
|
|
xhr.upload.addEventListener("progress", (event) => {
|
|
|
|
if (event.lengthComputable) {
|
|
|
|
// console.log("upload progress:", event.loaded / event.total);
|
|
|
|
progressBar.value = 100.0 * event.loaded / event.total;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
xhr.addEventListener("progress", (event) => {
|
|
|
|
if (event.lengthComputable) {
|
|
|
|
// console.log("download progress:", event.loaded / event.total);
|
|
|
|
progressBar.value = event.loaded / event.total;
|
|
|
|
}
|
|
|
|
});
|
|
|
|
xhr.addEventListener("load", (event) => {
|
|
|
|
console.log(xhr.readyState, xhr.status)
|
|
|
|
progressDialog.close();
|
|
|
|
let res = JSON.parse(xhr.response);
|
|
|
|
window.location = res.redirect;
|
|
|
|
});
|
2025-02-06 22:35:51 +00:00
|
|
|
|
2025-02-07 09:19:20 +00:00
|
|
|
xhr.addEventListener("error", event => {
|
|
|
|
progressDialog.close();
|
|
|
|
alert("An error occurred.")
|
|
|
|
});
|
|
|
|
xhr.addEventListener("abort", event => {
|
|
|
|
progressDialog.close();
|
|
|
|
alert("Upload has been cancelled.")
|
|
|
|
});
|
|
|
|
|
|
|
|
let url;
|
|
|
|
|
|
|
|
if (target === "document") url = '/upload?target=document';
|
|
|
|
else if (target === "limbo") url = '/upload?target=limbo';
|
|
|
|
else if (target.matches("document-[a-zA-Z0-9]")) url = '/upload?target=' + target;
|
|
|
|
|
|
|
|
xhr.open('POST', url, false);
|
|
|
|
xhr.send(formData);
|
|
|
|
}
|
2025-02-07 08:27:19 +00:00
|
|
|
}
|
2025-02-07 09:19:20 +00:00
|
|
|
});
|
|
|
|
}
|
2025-02-02 11:30:04 +00:00
|
|
|
});
|