login/pass: error messages below page title
[minimedit.git] / progress.js
index e59422de841e879c2c176475e2896796c6d3c7c8..601fec0c57f65afb0bc281b5634dab3eb37307ed 100644 (file)
@@ -2,6 +2,12 @@ function showsize(bytes) {
        return (bytes / 1024 / 1024).toFixed(2);
 }
 
+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) {
@@ -26,22 +32,25 @@ function trackupload(input) {
                if (e.target.status == 200) {
                        progress.textContent = 'voltooid';
                        progress.innerHTML += ' <small>(' + showsize(input.files[0].size) + ' MB)</small>';
-                       input.value = '';
+                       window.location.assign(e.target.response);
                }
                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);
@@ -56,12 +65,17 @@ function trackupload(input) {
 }
 
 document.addEventListener('DOMContentLoaded', e => {
-       for (let row of document.forms[0].elements) {
-               if (row.type == 'file') {
-                       row.form.onsubmit = () => {
-                               trackupload(row);
-                               return false;
-                       };
-               }
+       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);
+                               }
+                       }
+               });
        }
 });