This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
(() => {
|
||||
const formSelector = "form[data-submit-once]";
|
||||
|
||||
function progressIndicator() {
|
||||
return document.getElementById("submit-progress");
|
||||
}
|
||||
|
||||
function resetForm(form) {
|
||||
form.removeAttribute("aria-busy");
|
||||
delete form.dataset.submitting;
|
||||
|
||||
const button = form.querySelector("[data-submit-button]");
|
||||
if (!button) {
|
||||
return;
|
||||
}
|
||||
button.disabled = false;
|
||||
button.removeAttribute("aria-disabled");
|
||||
if (button.dataset.idleLabel) {
|
||||
button.textContent = button.dataset.idleLabel;
|
||||
delete button.dataset.idleLabel;
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener("submit", (event) => {
|
||||
const form = event.target.closest(formSelector);
|
||||
if (!form) {
|
||||
return;
|
||||
}
|
||||
if (form.dataset.submitting === "true") {
|
||||
event.preventDefault();
|
||||
return;
|
||||
}
|
||||
|
||||
form.dataset.submitting = "true";
|
||||
form.setAttribute("aria-busy", "true");
|
||||
|
||||
const button = event.submitter || form.querySelector("[data-submit-button]");
|
||||
if (button) {
|
||||
button.dataset.idleLabel = button.textContent;
|
||||
button.textContent = form.dataset.submittingLabel || "Posting…";
|
||||
button.disabled = true;
|
||||
button.setAttribute("aria-disabled", "true");
|
||||
}
|
||||
|
||||
const progress = progressIndicator();
|
||||
if (progress) {
|
||||
progress.hidden = false;
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener("pageshow", () => {
|
||||
document.querySelectorAll(formSelector).forEach(resetForm);
|
||||
const progress = progressIndicator();
|
||||
if (progress) {
|
||||
progress.hidden = true;
|
||||
}
|
||||
});
|
||||
})();
|
||||
Reference in New Issue
Block a user