56 lines
2 KiB
JavaScript
56 lines
2 KiB
JavaScript
function fileSize(size) {
|
|
var i = Math.floor(Math.log(size) / Math.log(1024));
|
|
return (size / Math.pow(1024, i)).toFixed(2) * 1 + ['B', 'kB', 'MB', 'GB', 'TB'][i];
|
|
}
|
|
function updateTracker() {
|
|
var size = 0;
|
|
var upbtn = document.getElementById("uploadbutton");
|
|
var tracker = document.getElementById("upload_size_tracker");
|
|
var lockbtn = false;
|
|
|
|
// check that each individual file is less than the max file size
|
|
document.querySelectorAll("#large_upload_form input[type='file']").forEach((input) => {
|
|
var cancelbtn = document.getElementById("cancel"+input.id);
|
|
var toobig = false;
|
|
if (input.files.length) {
|
|
if(cancelbtn) cancelbtn.style.visibility = 'visible';
|
|
for (var i = 0; i < input.files.length; i++) {
|
|
size += input.files[i].size + 1024; // extra buffer for metadata
|
|
if (window.shm_max_size > 0 && input.files[i].size > window.shm_max_size) {
|
|
toobig = true;
|
|
}
|
|
}
|
|
if (toobig) {
|
|
lockbtn = true;
|
|
input.style = 'color:red';
|
|
} else {
|
|
input.style = 'color:initial';
|
|
}
|
|
} else {
|
|
if(cancelbtn) cancelbtn.style.visibility = 'hidden';
|
|
input.style = 'color:initial';
|
|
}
|
|
});
|
|
|
|
// check that the total is less than the max total size
|
|
if (size) {
|
|
tracker.innerText = fileSize(size);
|
|
if (window.shm_max_total_size > 0 && size > window.shm_max_total_size) {
|
|
lockbtn = true;
|
|
tracker.style = 'color:red';
|
|
} else {
|
|
tracker.style = 'color:initial';
|
|
}
|
|
} else {
|
|
tracker.innerText = '0MB';
|
|
}
|
|
upbtn.disabled = lockbtn;
|
|
}
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
if(document.getElementById("upload_size_tracker")) {
|
|
document.querySelectorAll("#large_upload_form input[type='file']").forEach((el) => {
|
|
el.addEventListener('change', updateTracker);
|
|
});
|
|
updateTracker();
|
|
}
|
|
});
|