From 1bdce2e9cf65f3a43c014265fc992c38ba7253bf Mon Sep 17 00:00:00 2001 From: Stefan Schallerl Date: Fri, 7 Feb 2025 10:19:20 +0100 Subject: [PATCH] Adds upload target selection. Currently there's "document" and "limbo", while "document-extId" is not yet ready. --- public/filemure.js | 117 +++++++++++++++++++++++++-------------------- 1 file changed, 64 insertions(+), 53 deletions(-) diff --git a/public/filemure.js b/public/filemure.js index b0e0ff9..1e66832 100644 --- a/public/filemure.js +++ b/public/filemure.js @@ -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); + } } - } - }); + }); + } }); \ No newline at end of file