diff --git a/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.cpp
index bd791c70d6..1a19cba601 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.cpp
@@ -4,13 +4,49 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
+#include
#include
+#include
namespace Web::HTML {
HTMLButtonElement::HTMLButtonElement(DOM::Document& document, DOM::QualifiedName qualified_name)
: FormAssociatedElement(document, move(qualified_name))
{
+ // https://html.spec.whatwg.org/multipage/form-elements.html#the-button-element:activation-behaviour
+ activation_behavior = [this](auto&) {
+ // 1. If element is disabled, then return.
+ if (!enabled())
+ return;
+
+ // 2. If element does not have a form owner, then return.
+ if (!form())
+ return;
+
+ // 3. If element's node document is not fully active, then return.
+ if (!this->document().is_fully_active())
+ return;
+
+ // 4. Switch on element's type attribute's state:
+ switch (type_state()) {
+ case TypeAttributeState::Submit:
+ // Submit Button
+ // Submit element's form owner from element.
+ form()->submit_form(this);
+ break;
+ case TypeAttributeState::Reset:
+ // Reset Button
+ // FIXME: Reset element's form owner.
+ TODO();
+ break;
+ case TypeAttributeState::Button:
+ // Button
+ // Do nothing.
+ break;
+ default:
+ VERIFY_NOT_REACHED();
+ }
+ };
}
HTMLButtonElement::~HTMLButtonElement()