diff --git a/Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h b/Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h index c117b430e0..cdb1566b73 100644 --- a/Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h +++ b/Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h @@ -159,6 +159,8 @@ #include #include #include +#include +#include #include #include #include @@ -407,6 +409,7 @@ ADD_WINDOW_OBJECT_INTERFACE(HTMLOListElement) \ ADD_WINDOW_OBJECT_INTERFACE(HTMLOptGroupElement) \ ADD_WINDOW_OBJECT_INTERFACE(HTMLOptionElement) \ + ADD_WINDOW_OBJECT_INTERFACE(HTMLOptionsCollection) \ ADD_WINDOW_OBJECT_INTERFACE(HTMLOutputElement) \ ADD_WINDOW_OBJECT_INTERFACE(HTMLParagraphElement) \ ADD_WINDOW_OBJECT_INTERFACE(HTMLParamElement) \ diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 3b31f94a9e..232c313415 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -172,6 +172,7 @@ set(SOURCES HTML/HTMLObjectElement.cpp HTML/HTMLOptGroupElement.cpp HTML/HTMLOptionElement.cpp + HTML/HTMLOptionsCollection.cpp HTML/HTMLOutputElement.cpp HTML/HTMLParagraphElement.cpp HTML/HTMLParamElement.cpp @@ -522,6 +523,7 @@ libweb_js_wrapper(HTML/HTMLObjectElement) libweb_js_wrapper(HTML/HTMLOListElement) libweb_js_wrapper(HTML/HTMLOptGroupElement) libweb_js_wrapper(HTML/HTMLOptionElement) +libweb_js_wrapper(HTML/HTMLOptionsCollection) libweb_js_wrapper(HTML/HTMLOutputElement) libweb_js_wrapper(HTML/HTMLParagraphElement) libweb_js_wrapper(HTML/HTMLParamElement) diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index c9245d456d..3dcbffa507 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -199,6 +199,7 @@ class HTMLObjectElement; class HTMLOListElement; class HTMLOptGroupElement; class HTMLOptionElement; +class HTMLOptionsCollection; class HTMLOutputElement; class HTMLParagraphElement; class HTMLParamElement; @@ -446,6 +447,7 @@ class HTMLObjectElementWrapper; class HTMLOListElementWrapper; class HTMLOptGroupElementWrapper; class HTMLOptionElementWrapper; +class HTMLOptionsCollectionWrapper; class HTMLOutputElementWrapper; class HTMLParagraphElementWrapper; class HTMLParamElementWrapper; diff --git a/Userland/Libraries/LibWeb/HTML/HTMLOptionsCollection.cpp b/Userland/Libraries/LibWeb/HTML/HTMLOptionsCollection.cpp new file mode 100644 index 0000000000..7e5484506a --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/HTMLOptionsCollection.cpp @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2022, the SerenityOS developers. + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +namespace Web::HTML { + +HTMLOptionsCollection::HTMLOptionsCollection(DOM::ParentNode& root, Function filter) + : DOM::HTMLCollection(root, move(filter)) +{ +} + +} diff --git a/Userland/Libraries/LibWeb/HTML/HTMLOptionsCollection.h b/Userland/Libraries/LibWeb/HTML/HTMLOptionsCollection.h new file mode 100644 index 0000000000..1d2bfcd2c5 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/HTMLOptionsCollection.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022, the SerenityOS developers. + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace Web::HTML { + +class HTMLOptionsCollection final : public DOM::HTMLCollection { +public: + using WrapperType = Bindings::HTMLOptionsCollectionWrapper; + + static NonnullRefPtr create(DOM::ParentNode& root, Function filter) + { + return adopt_ref(*new HTMLOptionsCollection(root, move(filter))); + } + +protected: + HTMLOptionsCollection(DOM::ParentNode& root, Function filter); +}; + +} + +namespace Web::Bindings { + +HTMLOptionsCollectionWrapper* wrap(JS::GlobalObject&, HTML::HTMLOptionsCollection&); + +} diff --git a/Userland/Libraries/LibWeb/HTML/HTMLOptionsCollection.idl b/Userland/Libraries/LibWeb/HTML/HTMLOptionsCollection.idl new file mode 100644 index 0000000000..ae33079903 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/HTMLOptionsCollection.idl @@ -0,0 +1,12 @@ +#import +#import +#import + +[Exposed=Window] +interface HTMLOptionsCollection : HTMLCollection { + // [CEReactions] attribute unsigned long length; // shadows inherited length + // [CEReactions] setter undefined (unsigned long index, HTMLOptionElement? option); + // [CEReactions] undefined add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null); + // [CEReactions] undefined remove(long index); + // attribute long selectedIndex; +};