[upload] give filesize-tracker script some polish
This commit is contained in:
56
ext/upload/script.js
Normal file
56
ext/upload/script.js
Normal file
@ -0,0 +1,56 @@
|
||||
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;
|
||||
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();
|
||||
}
|
||||
});
|
Reference in New Issue
Block a user