1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 09:48:11 +00:00

LibWeb: Implement implicit submission of HTMLFormElement

This commit is contained in:
Timothy Flynn 2024-01-31 13:26:01 -05:00 committed by Andrew Kaster
parent a17074422e
commit 5d1657f57f
5 changed files with 229 additions and 4 deletions

View file

@ -0,0 +1,94 @@
<form id="defaultButton">
<input />
<button>PASS</button>
</form>
<form id="defaultButtonAsInput">
<input />
<input type="submit" value="PASS" />
</form>
<form id="defaultButtonIsSecond">
<input />
<button type="button">FAIL</button>
<button>PASS</button>
<button type="button">FAIL</button>
</form>
<form id="defaultButtonIsLast">
<input />
<button type="button">FAIL</button>
<button type="button">FAIL</button>
<button>PASS</button>
</form>
<button form="defaultButtonIsBeforeForm">PASS</button>
<form id="defaultButtonIsBeforeForm">
<input />
</form>
<form id="defaultButtonIsAfterForm">
<input />
</form>
<button form="defaultButtonIsAfterForm">PASS</button>
<form id="defaultButtonIsDynamicallyInserted">
<input />
<button>FAIL</button>
</form>
<form id="defaultButtonIsDisabled">
<input />
<button disabled>FAIL</button>
</form>
<form id="noButton">
<input />
</form>
<form id="noDefaultButton">
<input />
<button type="button">FAIL</button>
</form>
<form id="excessiveBlockingElements1">
<input />
<input />
</form>
<form id="excessiveBlockingElements2">
<input />
<input type="time" />
</form>
<script src="../include.js"></script>
<script>
let handledEvent = false;
const enterTextAndSubmitForm = form => {
const input = form.querySelector("input");
handledEvent = false;
internals.sendText(input, "wfh :^)");
internals.commitText();
println(`${form.id}: handledEvent=${handledEvent}`);
};
test(() => {
const button = document.createElement("button");
button.setAttribute("form", "defaultButtonIsDynamicallyInserted");
button.innerText = "PASS";
const dynamicForm = document.getElementById("defaultButtonIsDynamicallyInserted");
dynamicForm.insertBefore(button, dynamicForm.elements[0]);
document.querySelectorAll("form").forEach(form => {
form.addEventListener("submit", event => {
event.preventDefault();
println(`${form.id}: submit`);
handledEvent = true;
});
for (const element of form.elements) {
element.addEventListener("click", () => {
const text = element.value || element.innerText;
println(`${form.id}: click button=${text}`);
handledEvent = true;
});
}
enterTextAndSubmitForm(form);
});
});
</script>