Adds upload target selection. Currently there's "document" and "limbo", while "document-extId" is not yet ready.
This commit is contained in:
parent
3d3a5585b0
commit
1bdce2e9cf
1 changed files with 64 additions and 53 deletions
|
@ -1,66 +1,77 @@
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
document.addEventListener("DOMContentLoaded", function () {
|
||||||
const dropzone = document.querySelector('html');
|
const dropzone = document.querySelector('html');
|
||||||
|
const targetContainer = document.querySelector('#dropzone')
|
||||||
|
|
||||||
let progressDialog = document.querySelector('#upload_progress_dialog')
|
if (targetContainer !== null) {
|
||||||
let progressBar = document.querySelector('#upload_progress')
|
const target = targetContainer.dataset.target;
|
||||||
|
|
||||||
dropzone.addEventListener('dragover', (e) => {
|
const progressDialog = document.querySelector('#upload_progress_dialog')
|
||||||
e.preventDefault();
|
const progressBar = document.querySelector('#upload_progress')
|
||||||
dropzone.classList.add('dragactive');
|
|
||||||
});
|
|
||||||
|
|
||||||
dropzone.addEventListener('dragleave', (e) => {
|
dropzone.addEventListener('dragover', (e) => {
|
||||||
dropzone.classList.remove('dragactive');
|
e.preventDefault();
|
||||||
});
|
dropzone.classList.add('dragactive');
|
||||||
|
});
|
||||||
|
|
||||||
dropzone.addEventListener('drop', (e) => {
|
dropzone.addEventListener('dragleave', (e) => {
|
||||||
e.preventDefault();
|
dropzone.classList.remove('dragactive');
|
||||||
dropzone.classList.remove('dragactive');
|
});
|
||||||
|
|
||||||
// Handle dropped files
|
dropzone.addEventListener('drop', (e) => {
|
||||||
const files = e.dataTransfer.files;
|
e.preventDefault();
|
||||||
if (files.length > 0) {
|
dropzone.classList.remove('dragactive');
|
||||||
console.log('Files dropped:', files);
|
|
||||||
|
|
||||||
for (const file of files) {
|
// Handle dropped files
|
||||||
// show progress dialog
|
const files = e.dataTransfer.files;
|
||||||
// warning: this way the progress dialog is shown for each file individually
|
if (files.length > 0) {
|
||||||
progressDialog.showModal();
|
console.log('Files dropped:', files);
|
||||||
const formData = new FormData();
|
|
||||||
formData.append('file', file);
|
|
||||||
|
|
||||||
const xhr = new XMLHttpRequest();
|
for (const file of files) {
|
||||||
xhr.upload.addEventListener("progress", (event) => {
|
// show progress dialog
|
||||||
if (event.lengthComputable) {
|
// warning: this way the progress dialog is shown for each file individually
|
||||||
// console.log("upload progress:", event.loaded / event.total);
|
progressDialog.showModal();
|
||||||
progressBar.value = 100.0 * event.loaded / event.total;
|
const formData = new FormData();
|
||||||
}
|
formData.append('file', file);
|
||||||
});
|
|
||||||
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;
|
|
||||||
});
|
|
||||||
|
|
||||||
xhr.addEventListener("error", event => {
|
const xhr = new XMLHttpRequest();
|
||||||
progressDialog.close();
|
xhr.upload.addEventListener("progress", (event) => {
|
||||||
alert("An error occurred.")
|
if (event.lengthComputable) {
|
||||||
});
|
// console.log("upload progress:", event.loaded / event.total);
|
||||||
xhr.addEventListener("abort", event => {
|
progressBar.value = 100.0 * event.loaded / event.total;
|
||||||
progressDialog.close();
|
}
|
||||||
alert("Upload has been cancelled.")
|
});
|
||||||
});
|
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;
|
||||||
|
});
|
||||||
|
|
||||||
xhr.open('POST', '/upload?target=document', false);
|
xhr.addEventListener("error", event => {
|
||||||
xhr.send(formData);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
});
|
}
|
||||||
});
|
});
|
Loading…
Reference in a new issue