From 29f9947ff9fc391c2a99352fb5bdf4e7844af4db Mon Sep 17 00:00:00 2001 From: Luke Wilde Date: Tue, 1 Mar 2022 21:06:29 +0000 Subject: [PATCH] LibWeb: Implement HTMLButtonElement.type --- .../LibWeb/HTML/HTMLButtonElement.cpp | 33 +++++++++++++++++++ .../Libraries/LibWeb/HTML/HTMLButtonElement.h | 15 +++++++++ .../LibWeb/HTML/HTMLButtonElement.idl | 1 + 3 files changed, 49 insertions(+) diff --git a/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.cpp index b1926428bcf..bd791c70d62 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.cpp @@ -17,4 +17,37 @@ HTMLButtonElement::~HTMLButtonElement() { } +String HTMLButtonElement::type() const +{ + auto value = attribute(HTML::AttributeNames::type); + +#define __ENUMERATE_HTML_BUTTON_TYPE_ATTRIBUTE(keyword, _) \ + if (value.equals_ignoring_case(#keyword)) \ + return #keyword; + ENUMERATE_HTML_BUTTON_TYPE_ATTRIBUTES +#undef __ENUMERATE_HTML_BUTTON_TYPE_ATTRIBUTE + + // The missing value default and invalid value default are the Submit Button state. + return "submit"; +} + +HTMLButtonElement::TypeAttributeState HTMLButtonElement::type_state() const +{ + auto value = attribute(HTML::AttributeNames::type); + +#define __ENUMERATE_HTML_BUTTON_TYPE_ATTRIBUTE(keyword, state) \ + if (value.equals_ignoring_case(#keyword)) \ + return HTMLButtonElement::TypeAttributeState::state; + ENUMERATE_HTML_BUTTON_TYPE_ATTRIBUTES +#undef __ENUMERATE_HTML_BUTTON_TYPE_ATTRIBUTE + + // The missing value default and invalid value default are the Submit Button state. + return HTMLButtonElement::TypeAttributeState::Submit; +} + +void HTMLButtonElement::set_type(String const& type) +{ + set_attribute(HTML::AttributeNames::type, type); +} + } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.h b/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.h index dd6fbff6871..93e6bc5e09c 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.h +++ b/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.h @@ -10,6 +10,11 @@ namespace Web::HTML { +#define ENUMERATE_HTML_BUTTON_TYPE_ATTRIBUTES \ + __ENUMERATE_HTML_BUTTON_TYPE_ATTRIBUTE(submit, Submit) \ + __ENUMERATE_HTML_BUTTON_TYPE_ATTRIBUTE(reset, Reset) \ + __ENUMERATE_HTML_BUTTON_TYPE_ATTRIBUTE(button, Button) + class HTMLButtonElement final : public FormAssociatedElement { public: using WrapperType = Bindings::HTMLButtonElementWrapper; @@ -17,6 +22,16 @@ public: HTMLButtonElement(DOM::Document&, DOM::QualifiedName); virtual ~HTMLButtonElement() override; + enum class TypeAttributeState { +#define __ENUMERATE_HTML_BUTTON_TYPE_ATTRIBUTE(_, state) state, + ENUMERATE_HTML_BUTTON_TYPE_ATTRIBUTES +#undef __ENUMERATE_HTML_BUTTON_TYPE_ATTRIBUTE + }; + + String type() const; + TypeAttributeState type_state() const; + void set_type(String const&); + // ^FormAssociatedElement // https://html.spec.whatwg.org/multipage/forms.html#category-listed virtual bool is_listed() const override { return true; } diff --git a/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.idl b/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.idl index f49a3be3158..74bad1b1fac 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.idl +++ b/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.idl @@ -6,5 +6,6 @@ interface HTMLButtonElement : HTMLElement { [Reflect=formtarget] attribute DOMString formTarget; [Reflect] attribute DOMString name; [Reflect] attribute DOMString value; + [CEReactions] attribute DOMString type; };