HTMLLegendElement.cpp [plain text]
#include "config.h"
#include "HTMLLegendElement.h"
#include "ElementIterator.h"
#include "HTMLFieldSetElement.h"
#include "HTMLNames.h"
#include <wtf/IsoMallocInlines.h>
namespace WebCore {
WTF_MAKE_ISO_ALLOCATED_IMPL(HTMLLegendElement);
inline HTMLLegendElement::HTMLLegendElement(const QualifiedName& tagName, Document& document)
: HTMLElement(tagName, document)
{
ASSERT(hasTagName(HTMLNames::legendTag));
}
Ref<HTMLLegendElement> HTMLLegendElement::create(const QualifiedName& tagName, Document& document)
{
return adoptRef(*new HTMLLegendElement(tagName, document));
}
RefPtr<HTMLFormControlElement> HTMLLegendElement::associatedControl()
{
auto enclosingFieldset = ancestorsOfType<HTMLFieldSetElement>(*this).first();
if (!enclosingFieldset)
return nullptr;
return descendantsOfType<HTMLFormControlElement>(*enclosingFieldset).first();
}
void HTMLLegendElement::focus(SelectionRestorationMode restorationMode, FocusDirection direction)
{
if (document().haveStylesheetsLoaded()) {
document().updateLayoutIgnorePendingStylesheets();
if (isFocusable()) {
Element::focus(restorationMode, direction);
return;
}
}
if (auto control = associatedControl())
control->focus(SelectionRestorationMode::SelectAll, direction);
}
bool HTMLLegendElement::accessKeyAction(bool sendMouseEvents)
{
if (auto control = associatedControl())
return control->accessKeyAction(sendMouseEvents);
return false;
}
HTMLFormElement* HTMLLegendElement::form() const
{
auto fieldset = makeRefPtr(parentNode());
if (!is<HTMLFieldSetElement>(fieldset))
return nullptr;
return downcast<HTMLFieldSetElement>(*fieldset).form();
}
}