mirror of
https://github.com/Dangoware/confetti-box.git
synced 2025-04-19 15:22:57 -05:00
106 lines
3.2 KiB
JavaScript
106 lines
3.2 KiB
JavaScript
let progressBar;
|
|
let progressValue;
|
|
let statusNotifier;
|
|
let uploadedFilesDisplay;
|
|
|
|
let uploadInProgress = false;
|
|
|
|
const TOO_LARGE_TEXT = "File is too large!";
|
|
const ERROR_TEXT = "An error occured!";
|
|
|
|
let CAPABILITIES;
|
|
async function getServerCapabilities() {
|
|
CAPABILITIES = await fetch("info").then((response) => response.json());
|
|
console.log(CAPABILITIES);
|
|
}
|
|
getServerCapabilities();
|
|
|
|
async function formSubmit(form) {
|
|
if (uploadInProgress) {
|
|
return;
|
|
}
|
|
|
|
// Get file size and don't upload if it's too large
|
|
let file_upload = document.getElementById("fileInput");
|
|
let file = file_upload.files[0];
|
|
if (file.size > CAPABILITIES.max_filesize) {
|
|
progressValue.textContent = TOO_LARGE_TEXT;
|
|
console.error(
|
|
"Provided file is too large", file.size, "bytes; max",
|
|
CAPABILITIES.max_filesize, "bytes"
|
|
);
|
|
return;
|
|
}
|
|
|
|
let url = "/upload";
|
|
let request = new XMLHttpRequest();
|
|
request.open('POST', url, true);
|
|
|
|
// Set up the listeners
|
|
request.addEventListener('load', uploadComplete, false);
|
|
request.addEventListener('error', networkErrorHandler, false);
|
|
request.upload.addEventListener('progress', uploadProgress, false);
|
|
|
|
uploadInProgress = true;
|
|
// Create and send FormData
|
|
try {
|
|
request.send(new FormData(form));
|
|
} catch (e) {
|
|
console.error("An error occured while uploading", e);
|
|
}
|
|
|
|
// Reset the form file data since we've successfully submitted it
|
|
form.elements["fileUpload"].value = "";
|
|
}
|
|
|
|
function networkErrorHandler(_err) {
|
|
uploadInProgress = false;
|
|
console.error("A network error occured while uploading");
|
|
progressValue.textContent = "A network error occured!";
|
|
}
|
|
|
|
function uploadComplete(response) {
|
|
let target = response.target;
|
|
|
|
if (target.status === 200) {
|
|
const response = JSON.parse(target.responseText);
|
|
|
|
if (response.status) {
|
|
progressValue.textContent = "Success";
|
|
addToList(response.name, response.url);
|
|
} else {
|
|
console.error("Error uploading", response)
|
|
progressValue.textContent = response.response;
|
|
}
|
|
} else if (target.status === 413) {
|
|
progressValue.textContent = TOO_LARGE_TEXT;
|
|
} else {
|
|
progressValue.textContent = ERROR_TEXT;
|
|
}
|
|
|
|
uploadInProgress = false;
|
|
}
|
|
|
|
function addToList(filename, link) {
|
|
const link_row = uploadedFilesDisplay.appendChild(document.createElement("p"));
|
|
const new_link = link_row.appendChild(document.createElement("a"));
|
|
|
|
new_link.href = link;
|
|
new_link.textContent = filename;
|
|
}
|
|
|
|
function uploadProgress(progress) {
|
|
if (progress.lengthComputable) {
|
|
const progressPercent = Math.floor((progress.loaded / progress.total) * 100);
|
|
progressBar.value = progressPercent;
|
|
progressValue.textContent = progressPercent + "%";
|
|
}
|
|
}
|
|
|
|
document.addEventListener("DOMContentLoaded", function(_event){
|
|
document.getElementById("uploadForm").addEventListener("submit", formSubmit);
|
|
progressBar = document.getElementById("uploadProgress");
|
|
progressValue = document.getElementById("uploadProgressValue");
|
|
statusNotifier = document.getElementById("uploadStatus");
|
|
uploadedFilesDisplay = document.getElementById("uploadedFilesDisplay");
|
|
});
|