mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-06 17:11:51 +00:00
LibWeb/HTML: Implement report_validity
Some checks are pending
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
Some checks are pending
CI / Lagom (x86_64, Fuzzers_CI, false, ubuntu-24.04, Linux, Clang) (push) Waiting to run
CI / Lagom (arm64, Sanitizer_CI, false, macos-15, macOS, Clang) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, false, ubuntu-24.04, Linux, GNU) (push) Waiting to run
CI / Lagom (x86_64, Sanitizer_CI, true, ubuntu-24.04, Linux, Clang) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (arm64, macos-15, macOS, macOS-universal2) (push) Waiting to run
Package the js repl as a binary artifact / build-and-package (x86_64, ubuntu-24.04, Linux, Linux-x86_64) (push) Waiting to run
Run test262 and test-wasm / run_and_update_results (push) Waiting to run
Lint Code / lint (push) Waiting to run
Label PRs with merge conflicts / auto-labeler (push) Waiting to run
Push notes / build (push) Waiting to run
This implements the previously stubbed out `report_validity` method. The specification is not very clear on how to exactly report the validity. For now, we bring the first visible invalid control into view and focus it. In the future, however, it would make sense to support more complex scenarios and be more aligned with the other implementations.
This commit is contained in:
parent
296d9d74d8
commit
5c578b6057
Notes:
github-actions[bot]
2025-05-13 21:40:10 +00:00
Author: https://github.com/skyz1
Commit: 5c578b6057
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/4578
Reviewed-by: https://github.com/Psychpsyo
Reviewed-by: https://github.com/shannonbooth ✅
11 changed files with 363 additions and 7 deletions
|
@ -13,6 +13,7 @@
|
|||
#include <LibWeb/DOM/Event.h>
|
||||
#include <LibWeb/DOM/Position.h>
|
||||
#include <LibWeb/DOM/SelectionchangeEventDispatching.h>
|
||||
#include <LibWeb/HTML/Focus.h>
|
||||
#include <LibWeb/HTML/FormAssociatedElement.h>
|
||||
#include <LibWeb/HTML/HTMLButtonElement.h>
|
||||
#include <LibWeb/HTML/HTMLDataListElement.h>
|
||||
|
@ -248,6 +249,36 @@ bool FormAssociatedElement::check_validity_steps()
|
|||
return true;
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#report-validity-steps
|
||||
bool FormAssociatedElement::report_validity_steps()
|
||||
{
|
||||
// 1. If element is a candidate for constraint validation and does not satisfy its constraints, then:
|
||||
if (is_candidate_for_constraint_validation() && !satisfies_its_constraints()) {
|
||||
auto& element = form_associated_element_to_html_element();
|
||||
// 1. Let report be the result of firing an event named invalid at element, with the cancelable attribute initialized to true.
|
||||
auto report = element.dispatch_event(DOM::Event::create(element.realm(), EventNames::invalid, { .cancelable = true }));
|
||||
|
||||
// 2. If report is true, then report the problems with the constraints of this element to the user. When reporting the problem with the constraints to the user,
|
||||
// the user agent may run the focusing steps for element, and may change the scrolling position of the document, or perform some other action that brings
|
||||
// element to the user's attention. User agents may report more than one constraint violation, if element suffers from multiple problems at once.
|
||||
// FIXME: Does this align with other browsers?
|
||||
if (report && element.check_visibility({})) {
|
||||
run_focusing_steps(&element);
|
||||
DOM::ScrollIntoViewOptions scroll_options;
|
||||
scroll_options.block = Bindings::ScrollLogicalPosition::Nearest;
|
||||
scroll_options.inline_ = Bindings::ScrollLogicalPosition::Nearest;
|
||||
scroll_options.behavior = Bindings::ScrollBehavior::Instant;
|
||||
(void)element.scroll_into_view(scroll_options);
|
||||
}
|
||||
|
||||
// 3. Return false.
|
||||
return false;
|
||||
}
|
||||
|
||||
// 2. Return true.
|
||||
return true;
|
||||
}
|
||||
|
||||
// https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#candidate-for-constraint-validation
|
||||
bool FormAssociatedElement::is_candidate_for_constraint_validation() const
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue