summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/HTML/HTMLButtonElement.cpp
diff options
context:
space:
mode:
authorLuke Wilde <lukew@serenityos.org>2022-03-01 21:12:32 +0000
committerAndreas Kling <kling@serenityos.org>2022-03-01 23:19:41 +0100
commit4fa270d81f0fcb64c5df7d5206d592e9ca801ffb (patch)
tree756b1ca857e8c3839ba7313640fd23dd237be98f /Userland/Libraries/LibWeb/HTML/HTMLButtonElement.cpp
parent46c0d0f7aeaaa3fd727048ac067b4f7cef837013 (diff)
downloadserenity-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.cpp36
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()