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()