Bladeren bron

LibWeb: Implement HTMLButtonElement.type

Luke Wilde 3 jaren geleden
bovenliggende
commit
29f9947ff9

+ 33 - 0
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);
+}
+
 }
 }

+ 15 - 0
Userland/Libraries/LibWeb/HTML/HTMLButtonElement.h

@@ -10,6 +10,11 @@
 
 
 namespace Web::HTML {
 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 {
 class HTMLButtonElement final : public FormAssociatedElement {
 public:
 public:
     using WrapperType = Bindings::HTMLButtonElementWrapper;
     using WrapperType = Bindings::HTMLButtonElementWrapper;
@@ -17,6 +22,16 @@ public:
     HTMLButtonElement(DOM::Document&, DOM::QualifiedName);
     HTMLButtonElement(DOM::Document&, DOM::QualifiedName);
     virtual ~HTMLButtonElement() override;
     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
     // ^FormAssociatedElement
     // https://html.spec.whatwg.org/multipage/forms.html#category-listed
     // https://html.spec.whatwg.org/multipage/forms.html#category-listed
     virtual bool is_listed() const override { return true; }
     virtual bool is_listed() const override { return true; }

+ 1 - 0
Userland/Libraries/LibWeb/HTML/HTMLButtonElement.idl

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