summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Wanner <skyrising@pvpctutorials.de>2022-03-16 13:08:12 +0100
committerAndreas Kling <kling@serenityos.org>2022-03-16 14:25:09 +0100
commitdeef2911e909b5f6004f959ac8793746dd74a699 (patch)
tree30ab3c5450978852dde43d9445d3130328bced83
parent624527f15ecef66b4b6ba4821e6c9e112cd81e99 (diff)
downloadserenity-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
-rw-r--r--Userland/Libraries/LibWeb/HTML/HTMLSelectElement.cpp16
-rw-r--r--Userland/Libraries/LibWeb/HTML/HTMLSelectElement.h6
-rw-r--r--Userland/Libraries/LibWeb/HTML/HTMLSelectElement.idl2
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;
};