LibWeb: Implement HTMLButtonElement.type

This commit is contained in:
Luke Wilde 2022-03-01 21:06:29 +00:00 committed by Andreas Kling
parent 432d496ed6
commit 29f9947ff9
Notes: sideshowbarker 2024-07-17 18:05:00 +09:00
3 changed files with 49 additions and 0 deletions

View file

@ -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);
}
}

View file

@ -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; }

View file

@ -6,5 +6,6 @@ interface HTMLButtonElement : HTMLElement {
[Reflect=formtarget] attribute DOMString formTarget;
[Reflect] attribute DOMString name;
[Reflect] attribute DOMString value;
[CEReactions] attribute DOMString type;
};