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 () {
|
||||
const dropzone = document.querySelector('html');
|
||||
const targetContainer = document.querySelector('#dropzone')
|
||||
|
||||
let progressDialog = document.querySelector('#upload_progress_dialog')
|
||||
let progressBar = document.querySelector('#upload_progress')
|
||||
if (targetContainer !== null) {
|
||||
const target = targetContainer.dataset.target;
|
||||
|
||||
dropzone.addEventListener('dragover', (e) => {
|
||||
e.preventDefault();
|
||||
dropzone.classList.add('dragactive');
|
||||
});
|
||||
const progressDialog = document.querySelector('#upload_progress_dialog')
|
||||
const progressBar = document.querySelector('#upload_progress')
|
||||
|
||||
dropzone.addEventListener('dragleave', (e) => {
|
||||
dropzone.classList.remove('dragactive');
|
||||
});
|
||||
dropzone.addEventListener('dragover', (e) => {
|
||||
e.preventDefault();
|
||||
dropzone.classList.add('dragactive');
|
||||
});
|
||||
|
||||
dropzone.addEventListener('drop', (e) => {
|
||||
e.preventDefault();
|
||||
dropzone.classList.remove('dragactive');
|
||||
dropzone.addEventListener('dragleave', (e) => {
|
||||
dropzone.classList.remove('dragactive');
|
||||
});
|
||||
|
||||
// Handle dropped files
|
||||
const files = e.dataTransfer.files;
|
||||
if (files.length > 0) {
|
||||
console.log('Files dropped:', files);
|
||||
dropzone.addEventListener('drop', (e) => {
|
||||
e.preventDefault();
|
||||
dropzone.classList.remove('dragactive');
|
||||
|
||||
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);
|
||||
// Handle dropped files
|
||||
const files = e.dataTransfer.files;
|
||||
if (files.length > 0) {
|
||||
console.log('Files dropped:', files);
|
||||
|
||||
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;
|
||||
});
|
||||
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);
|
||||
|
||||
xhr.addEventListener("error", event => {
|
||||
progressDialog.close();
|
||||
alert("An error occurred.")
|
||||
});
|
||||
xhr.addEventListener("abort", event => {
|
||||
progressDialog.close();
|
||||
alert("Upload has been cancelled.")
|
||||
});
|
||||
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;
|
||||
});
|
||||
|
||||
xhr.open('POST', '/upload?target=document', false);
|
||||
xhr.send(formData);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
Loading…
Reference in a new issue