diff options
author | Luke Wilde <lukew@serenityos.org> | 2022-03-01 21:12:32 +0000 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2022-03-01 23:19:41 +0100 |
commit | 4fa270d81f0fcb64c5df7d5206d592e9ca801ffb (patch) | |
tree | 756b1ca857e8c3839ba7313640fd23dd237be98f /Userland/Libraries/LibWeb/HTML/HTMLButtonElement.cpp | |
parent | 46c0d0f7aeaaa3fd727048ac067b4f7cef837013 (diff) | |
download | serenity-4fa270d81f0fcb64c5df7d5206d592e9ca801ffb.zip |
LibWeb: Implement <button>'s activation behaviour
This allows us to submit forms from <button> elements and not just
<input type="submit">
This allows Discord to progress past the username registration :^)
Diffstat (limited to 'Userland/Libraries/LibWeb/HTML/HTMLButtonElement.cpp')
-rw-r--r-- | Userland/Libraries/LibWeb/HTML/HTMLButtonElement.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
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 <LibWeb/DOM/Document.h> #include <LibWeb/HTML/HTMLButtonElement.h> +#include <LibWeb/HTML/HTMLFormElement.h> 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() |