diff options
author | Simon Wanner <skyrising@pvpctutorials.de> | 2022-03-16 13:08:12 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-03-16 14:25:09 +0100 |
commit | deef2911e909b5f6004f959ac8793746dd74a699 (patch) | |
tree | 30ab3c5450978852dde43d9445d3130328bced83 /Userland/Libraries | |
parent | 624527f15ecef66b4b6ba4821e6c9e112cd81e99 (diff) | |
download | serenity-deef2911e909b5f6004f959ac8793746dd74a699.zip |
LibWeb: Expose HTMLSelectElement::options
Use the stub implementation of HTMLOptionsCollection to expose the
`option` children of `select` elements.
This fixes a JS error on openstreetmap.org, which occured when JQuery
code tried to access `options.length`:
https://github.com/jquery/jquery/blob/main/src/attributes/val.js#L121
Diffstat (limited to 'Userland/Libraries')
-rw-r--r-- | Userland/Libraries/LibWeb/HTML/HTMLSelectElement.cpp | 16 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/HTML/HTMLSelectElement.h | 6 | ||||
-rw-r--r-- | Userland/Libraries/LibWeb/HTML/HTMLSelectElement.idl | 2 |
3 files changed, 24 insertions, 0 deletions
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.cpp index 4cfa72a0ee..0f5e7fb4b2 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.cpp @@ -6,6 +6,7 @@ */ #include <LibWeb/HTML/HTMLFormElement.h> +#include <LibWeb/HTML/HTMLOptionElement.h> #include <LibWeb/HTML/HTMLSelectElement.h> namespace Web::HTML { @@ -19,4 +20,19 @@ HTMLSelectElement::~HTMLSelectElement() { } +// https://html.spec.whatwg.org/multipage/form-elements.html#dom-select-options +RefPtr<HTMLOptionsCollection> const& HTMLSelectElement::options() +{ + if (!m_options) { + m_options = HTMLOptionsCollection::create(*this, [](DOM::Element const& element) { + // https://html.spec.whatwg.org/multipage/form-elements.html#concept-select-option-list + // The list of options for a select element consists of all the option element children of + // the select element, and all the option element children of all the optgroup element children + // of the select element, in tree order. + return is<HTMLOptionElement>(element); + }); + } + return m_options; +} + } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.h b/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.h index e26d0e2bef..b59ef5c2d6 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.h @@ -10,6 +10,7 @@ #include <LibWeb/HTML/FormAssociatedElement.h> #include <LibWeb/HTML/HTMLElement.h> +#include <LibWeb/HTML/HTMLOptionsCollection.h> namespace Web::HTML { @@ -20,6 +21,8 @@ public: HTMLSelectElement(DOM::Document&, DOM::QualifiedName); virtual ~HTMLSelectElement() override; + RefPtr<HTMLOptionsCollection> const& options(); + // ^FormAssociatedElement // https://html.spec.whatwg.org/multipage/forms.html#category-listed virtual bool is_listed() const override { return true; } @@ -36,6 +39,9 @@ public: // ^HTMLElement // https://html.spec.whatwg.org/multipage/forms.html#category-label virtual bool is_labelable() const override { return true; } + +private: + RefPtr<HTMLOptionsCollection> m_options; }; } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.idl b/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.idl index ddbfc31f69..6a2a348242 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.idl +++ b/Userland/Libraries/LibWeb/HTML/HTMLSelectElement.idl @@ -1,9 +1,11 @@ #import <HTML/HTMLElement.idl> +#import <HTML/HTMLOptionsCollection.idl> interface HTMLSelectElement : HTMLElement { [Reflect] attribute boolean disabled; [Reflect] attribute boolean multiple; [Reflect] attribute boolean required; + [SameObject] readonly attribute HTMLOptionsCollection options; }; |