fix(runtime): handle clicked form submitters
req: convention/004
This commit is contained in:
@@ -394,6 +394,16 @@
|
||||
navigate(nav);
|
||||
return;
|
||||
}
|
||||
if (name === "click") {
|
||||
const submitter = closestInRoot(event.target, root, "button[type=submit], input[type=submit], button:not([type])");
|
||||
const form = submitter && submitter.closest("form");
|
||||
if (form && root.contains(form) && handleId(form)) {
|
||||
if (form.reportValidity && !form.reportValidity()) return;
|
||||
event.preventDefault();
|
||||
schedule(form, "submit");
|
||||
return;
|
||||
}
|
||||
}
|
||||
const el = closestInRoot(event.target, root, `[${HID}], [data-slhx-boost] form`);
|
||||
if (!el || defaultEvent(el) !== name) return;
|
||||
event.preventDefault();
|
||||
|
||||
@@ -17,6 +17,16 @@ fn runtime_handles_get_forms_without_request_body() {
|
||||
assert!(source.contains("if (method === \"GET\") url.search = urlEncoded(data).toString()"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn runtime_clicking_submitter_schedules_form_submit() {
|
||||
// req: convention/004
|
||||
let source = slhx_js::RUNTIME_JS;
|
||||
|
||||
assert!(source.contains("button[type=submit], input[type=submit], button:not([type])"));
|
||||
assert!(source.contains("form.reportValidity && !form.reportValidity()"));
|
||||
assert!(source.contains("schedule(form, \"submit\")"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn runtime_supports_queued_request_policy() {
|
||||
let source = slhx_js::RUNTIME_JS;
|
||||
|
||||
Reference in New Issue
Block a user