This source file includes following definitions.
- m_isActivatedSubmit
- create
- setType
- createRenderer
- formControlType
- isPresentationAttribute
- parseAttribute
- defaultEventHandler
- willRespondToMouseClickEvents
- canBeSuccessfulSubmitButton
- isActivatedSubmit
- setActivatedSubmit
- appendFormData
- accessKeyAction
- isURLAttribute
- value
- recalcWillValidate
- isInteractiveContent
- supportsAutofocus
#include "config.h"
#include "core/html/HTMLButtonElement.h"
#include "HTMLNames.h"
#include "core/dom/Attribute.h"
#include "core/events/KeyboardEvent.h"
#include "core/html/FormDataList.h"
#include "core/html/HTMLFormElement.h"
#include "core/rendering/RenderButton.h"
#include "wtf/StdLibExtras.h"
namespace WebCore {
using namespace HTMLNames;
inline HTMLButtonElement::HTMLButtonElement(Document& document, HTMLFormElement* form)
: HTMLFormControlElement(buttonTag, document, form)
, m_type(SUBMIT)
, m_isActivatedSubmit(false)
{
ScriptWrappable::init(this);
}
PassRefPtr<HTMLButtonElement> HTMLButtonElement::create(Document& document, HTMLFormElement* form)
{
return adoptRef(new HTMLButtonElement(document, form));
}
void HTMLButtonElement::setType(const AtomicString& type)
{
setAttribute(typeAttr, type);
}
RenderObject* HTMLButtonElement::createRenderer(RenderStyle*)
{
return new RenderButton(this);
}
const AtomicString& HTMLButtonElement::formControlType() const
{
switch (m_type) {
case SUBMIT: {
DEFINE_STATIC_LOCAL(const AtomicString, submit, ("submit", AtomicString::ConstructFromLiteral));
return submit;
}
case BUTTON: {
DEFINE_STATIC_LOCAL(const AtomicString, button, ("button", AtomicString::ConstructFromLiteral));
return button;
}
case RESET: {
DEFINE_STATIC_LOCAL(const AtomicString, reset, ("reset", AtomicString::ConstructFromLiteral));
return reset;
}
}
ASSERT_NOT_REACHED();
return emptyAtom;
}
bool HTMLButtonElement::isPresentationAttribute(const QualifiedName& name) const
{
if (name == alignAttr) {
return false;
}
return HTMLFormControlElement::isPresentationAttribute(name);
}
void HTMLButtonElement::parseAttribute(const QualifiedName& name, const AtomicString& value)
{
if (name == typeAttr) {
if (equalIgnoringCase(value, "reset"))
m_type = RESET;
else if (equalIgnoringCase(value, "button"))
m_type = BUTTON;
else
m_type = SUBMIT;
setNeedsWillValidateCheck();
} else
HTMLFormControlElement::parseAttribute(name, value);
}
void HTMLButtonElement::defaultEventHandler(Event* event)
{
if (event->type() == EventTypeNames::DOMActivate && !isDisabledFormControl()) {
if (form() && m_type == SUBMIT) {
m_isActivatedSubmit = true;
form()->prepareForSubmission(event);
event->setDefaultHandled();
m_isActivatedSubmit = false;
}
if (form() && m_type == RESET) {
form()->reset();
event->setDefaultHandled();
}
}
if (event->isKeyboardEvent()) {
if (event->type() == EventTypeNames::keydown && toKeyboardEvent(event)->keyIdentifier() == "U+0020") {
setActive(true);
return;
}
if (event->type() == EventTypeNames::keypress) {
switch (toKeyboardEvent(event)->charCode()) {
case '\r':
dispatchSimulatedClick(event);
event->setDefaultHandled();
return;
case ' ':
event->setDefaultHandled();
return;
}
}
if (event->type() == EventTypeNames::keyup && toKeyboardEvent(event)->keyIdentifier() == "U+0020") {
if (active())
dispatchSimulatedClick(event);
event->setDefaultHandled();
return;
}
}
HTMLFormControlElement::defaultEventHandler(event);
}
bool HTMLButtonElement::willRespondToMouseClickEvents()
{
if (!isDisabledFormControl() && form() && (m_type == SUBMIT || m_type == RESET))
return true;
return HTMLFormControlElement::willRespondToMouseClickEvents();
}
bool HTMLButtonElement::canBeSuccessfulSubmitButton() const
{
return m_type == SUBMIT;
}
bool HTMLButtonElement::isActivatedSubmit() const
{
return m_isActivatedSubmit;
}
void HTMLButtonElement::setActivatedSubmit(bool flag)
{
m_isActivatedSubmit = flag;
}
bool HTMLButtonElement::appendFormData(FormDataList& formData, bool)
{
if (m_type != SUBMIT || name().isEmpty() || !m_isActivatedSubmit)
return false;
formData.appendData(name(), value());
return true;
}
void HTMLButtonElement::accessKeyAction(bool sendMouseEvents)
{
focus();
dispatchSimulatedClick(0, sendMouseEvents ? SendMouseUpDownEvents : SendNoEvents);
}
bool HTMLButtonElement::isURLAttribute(const Attribute& attribute) const
{
return attribute.name() == formactionAttr || HTMLFormControlElement::isURLAttribute(attribute);
}
const AtomicString& HTMLButtonElement::value() const
{
return getAttribute(valueAttr);
}
bool HTMLButtonElement::recalcWillValidate() const
{
return m_type == SUBMIT && HTMLFormControlElement::recalcWillValidate();
}
bool HTMLButtonElement::isInteractiveContent() const
{
return true;
}
bool HTMLButtonElement::supportsAutofocus() const
{
return true;
}
}