HTMLLegendElement.cpp [plain text]
#include "config.h"
#include "HTMLLegendElement.h"
#include "HTMLFieldSetElement.h"
#include "HTMLFormControlElement.h"
#include "HTMLNames.h"
#include "NodeTraversal.h"
#include <wtf/StdLibExtras.h>
namespace WebCore {
using namespace HTMLNames;
inline HTMLLegendElement::HTMLLegendElement(const QualifiedName& tagName, Document* document)
: HTMLElement(tagName, document)
{
ASSERT(hasTagName(legendTag));
}
PassRefPtr<HTMLLegendElement> HTMLLegendElement::create(const QualifiedName& tagName, Document* document)
{
return adoptRef(new HTMLLegendElement(tagName, document));
}
HTMLFormControlElement* HTMLLegendElement::associatedControl()
{
Element* fieldset = parentElement();
while (fieldset && !fieldset->hasTagName(fieldsetTag))
fieldset = fieldset->parentElement();
if (!fieldset)
return 0;
Element* element = fieldset;
while ((element = ElementTraversal::next(element, fieldset))) {
if (element->isFormControlElement())
return static_cast<HTMLFormControlElement*>(element);
}
return 0;
}
void HTMLLegendElement::focus(bool, FocusDirection direction)
{
if (isFocusable())
Element::focus(true, direction);
if (HTMLFormControlElement* control = associatedControl())
control->focus(false, direction);
}
void HTMLLegendElement::accessKeyAction(bool sendMouseEvents)
{
if (HTMLFormControlElement* control = associatedControl())
control->accessKeyAction(sendMouseEvents);
}
HTMLFormElement* HTMLLegendElement::virtualForm() const
{
ContainerNode* fieldset = parentNode();
if (!fieldset || !fieldset->hasTagName(fieldsetTag))
return 0;
return static_cast<HTMLFieldSetElement*>(fieldset)->form();
}
}