return (bytes / 1024 / 1024).toFixed(2);
}
-function trackupload(input) {
- if (!input.value) {
- return true; // default form action
- }
+function enablesubmit(form) {
+ let submit = form.querySelector('input[type="submit"]:disabled');
+ if (!submit) return;
+ submit.disabled = false;
+}
+function trackupload(input) {
var progress = document.getElementById('progress');
if (!progress) {
progress = document.createElement('DIV');
else {
progress.textContent = 'fout';
progress.innerHTML += ': <small>' + e.target.responseText + '</small>';
+ enablesubmit(input.form);
}
progress.style.width = '100%';
input.parentNode.removeChild(cancel);
}, false);
ajax.addEventListener('error', function (e) {
progress.textContent = 'mislukt: ' + e.target.responseText;
+ enablesubmit(input.form);
}, false);
ajax.addEventListener('abort', function (e) {
progress.textContent = 'afgebroken';
input.parentNode.removeChild(cancel);
input.parentNode.removeChild(progress.parentNode);
+ enablesubmit(input.form);
}, false);
ajax.open('POST', input.form.action);
cancel.onclick = function () { ajax.abort() };
cancel.style.float = 'left';
input.parentNode.insertBefore(cancel, progress.parentNode);
- return false;
}
document.addEventListener('DOMContentLoaded', e => {
- for (let row of document.forms[0].elements) {
- if (row.type == 'file') {
- row.form.onsubmit = () => {
- return trackupload(row);
- };
- }
+ for (let form of document.forms) {
+ form.addEventListener('submit', e => {
+ if (e.explicitOriginalTarget) {
+ e.explicitOriginalTarget.disabled = true;
+ }
+ if (upload = e.target.querySelector('input[type="file"]')) {
+ if (upload.value) {
+ e.preventDefault();
+ trackupload(upload);
+ }
+ }
+ });
}
});