31 lines
980 B
JavaScript
31 lines
980 B
JavaScript
// retoor <retoor@molodetz.nl>
|
|||
|
|
import { LoadingButton } from "./LoadingButton.js";
|
||
|
|
|
||
|
|
export class FormManager {
|
||
|
|
constructor(dialog) {
|
||
|
|
this.dialog = dialog;
|
||
|
|
document.addEventListener("submit", (event) => this.onSubmit(event), true);
|
||
|
|
}
|
||
|
|
|
||
|
|
async onSubmit(event) {
|
||
|
|
const form = event.target;
|
||
|
|
if (!(form instanceof HTMLFormElement)) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
if (form.dataset.confirm && form.dataset.confirmed !== "1") {
|
||
|
|
event.preventDefault();
|
||
|
|
const accepted = await this.dialog.confirm(form.dataset.confirm);
|
||
|
|
if (accepted) {
|
||
|
|
form.dataset.confirmed = "1";
|
||
|
|
form.requestSubmit(event.submitter || undefined);
|
||
|
|
}
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
const button = event.submitter || form.querySelector("[data-loading]");
|
||
|
|
if (button && button.hasAttribute("data-loading")) {
|
||
|
|
LoadingButton.setLoading(button, true);
|
||
|
|
window.addEventListener("pageshow", () => LoadingButton.setLoading(button, false), { once: true });
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|