mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 04:28:13 +00:00
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 :^)
This commit is contained in:
parent
46c0d0f7ae
commit
4fa270d81f
1 changed files with 36 additions and 0 deletions
|
@ -4,13 +4,49 @@
|
||||||
* SPDX-License-Identifier: BSD-2-Clause
|
* SPDX-License-Identifier: BSD-2-Clause
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <LibWeb/DOM/Document.h>
|
||||||
#include <LibWeb/HTML/HTMLButtonElement.h>
|
#include <LibWeb/HTML/HTMLButtonElement.h>
|
||||||
|
#include <LibWeb/HTML/HTMLFormElement.h>
|
||||||
|
|
||||||
namespace Web::HTML {
|
namespace Web::HTML {
|
||||||
|
|
||||||
HTMLButtonElement::HTMLButtonElement(DOM::Document& document, DOM::QualifiedName qualified_name)
|
HTMLButtonElement::HTMLButtonElement(DOM::Document& document, DOM::QualifiedName qualified_name)
|
||||||
: FormAssociatedElement(document, move(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()
|
HTMLButtonElement::~HTMLButtonElement()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue