Local save tweak #30

Merged
mslw merged 3 commits from local-save-tweak into master 2022-07-25 14:31:55 +00:00

View file

@ -2263,15 +2263,17 @@
</div> </div>
<div class="row pt-5">
<button class="btn btn-primary btn-lg btn-block" type="submit" id="submit-button" formaction="https://sfb1451.inm7.de/store-data" formmethod="post" disabled>Daten speichern</button>
</div>
<div class="row pt-5"> <div class="row pt-5">
<!-- Eine lokale Kopie der Formulardaten speichern --> <!-- Eine lokale Kopie der Formulardaten speichern -->
<button class="btn btn-primary btn-lg btn-block" type="button" id="local-save-button">Daten lokal speichern</button> <button class="btn btn-primary btn-lg btn-block" type="button" id="local-save-button">Daten lokal speichern</button>
</div> </div>
<div class="row pt-5">
<button class="btn btn-primary btn-lg btn-block" type="submit" id="submit-button" formaction="https://sfb1451.inm7.de/store-data" formmethod="post" disabled>Daten speichern</button>
</div>
<div class="row pt-5"> <div class="row pt-5">
<!-- Eine lokale Kopie der Formulardaten laden --> <!-- Eine lokale Kopie der Formulardaten laden -->
<input type="file" id="local-load-input" accept=".json" style="display:none"> <input type="file" id="local-load-input" accept=".json" style="display:none">
@ -2338,6 +2340,38 @@
</script> </script>
<script>
const submitButtonUpdater = {
// a global object to track whether the save button can be enabled
// and to toggle its state when needed
// we require data to be validated and only allow submitting after
// the local save has been done
dataValid: false,
dataSaved: false,
update: function () {
let submitButton = document.getElementById("submit-button");
if (this.dataValid && this.dataSaved) {
submitButton.removeAttribute("disabled");
} else {
submitButton.setAttribute("disabled", "");
}
},
setAndUpdate: function (property, value) {
console.assert(
typeof value === "boolean",
"setAndUpdate called with non-boolean value"
);
console.assert(
this.hasOwnProperty(property),
"Unknown property: " + property
);
this[property] = value;
this.update();
},
};
</script>
<script> <script>
function getContentOfElementNamed(name) { function getContentOfElementNamed(name) {
const elementArray = document.getElementsByName(name); const elementArray = document.getElementsByName(name);
@ -2822,14 +2856,13 @@
function updateFingerPrint() { function updateFingerPrint() {
let fingerPrintElement = document.getElementById("finger-print"); let fingerPrintElement = document.getElementById("finger-print");
let entryForm = document.getElementById("entry-form"); let entryForm = document.getElementById("entry-form");
let submitButton = document.getElementById("submit-button");
let hashedStringElement = document.getElementById("hashed-string"); let hashedStringElement = document.getElementById("hashed-string");
let hashValueElement = document.getElementById("hash-value"); let hashValueElement = document.getElementById("hash-value");
let signatureDataElement = document.getElementById("signature-data"); let signatureDataElement = document.getElementById("signature-data");
if (validateForm(entryForm) === false) { if (validateForm(entryForm) === false) {
fingerPrintElement.innerHTML = "Fingerabruck nicht verfügbar, da Eingaben ungültig sind."; fingerPrintElement.innerHTML = "Fingerabruck nicht verfügbar, da Eingaben ungültig sind.";
submitButton.setAttribute("disabled", ""); submitButtonUpdater.setAndUpdate("dataValid", false)
signatureDataElement.setAttribute("disabled", ""); signatureDataElement.setAttribute("disabled", "");
} else { } else {
const contentString = getContentString(); const contentString = getContentString();
@ -2839,11 +2872,11 @@
console.log(hashHex); console.log(hashHex);
fingerPrintElement.innerHTML = hashHex; fingerPrintElement.innerHTML = hashHex;
hashValueElement.value = hashHex; hashValueElement.value = hashHex;
submitButton.removeAttribute("disabled"); submitButtonUpdater.setAndUpdate("dataValid", true)
}).catch(err => { }).catch(err => {
console.log(err); console.log(err);
fingerPrintElement.innerHTML = "Fingerabruck nicht verfügbar: " + err; fingerPrintElement.innerHTML = "Fingerabruck nicht verfügbar: " + err;
submitButton.setAttribute("disabled", ""); submitButtonUpdater.setAndUpdate("dataValid", false)
}); });
} }
} }
@ -3120,6 +3153,9 @@
a.setAttribute("href", URL.createObjectURL(bb)); a.setAttribute("href", URL.createObjectURL(bb));
a.click(); a.click();
a.remove(); a.remove();
// allow submit button to be enabled
submitButtonUpdater.setAndUpdate("dataSaved", true);
return false; return false;
}; };
</script> </script>