HTMLFieldSetElement.cpp [plain text]
#include "config.h"
#include "HTMLFieldSetElement.h"
#include "HTMLLegendElement.h"
#include "HTMLNames.h"
#include "RenderFieldset.h"
#include <wtf/StdLibExtras.h>
namespace WebCore {
using namespace HTMLNames;
inline HTMLFieldSetElement::HTMLFieldSetElement(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
: HTMLFormControlElement(tagName, document, form)
{
ASSERT(hasTagName(fieldsetTag));
}
PassRefPtr<HTMLFieldSetElement> HTMLFieldSetElement::create(const QualifiedName& tagName, Document* document, HTMLFormElement* form)
{
return adoptRef(new HTMLFieldSetElement(tagName, document, form));
}
void HTMLFieldSetElement::invalidateDisabledStateUnder(Element* base)
{
for (Node* currentNode = base->traverseNextNode(base); currentNode; currentNode = currentNode->traverseNextNode(base)) {
if (currentNode && currentNode->isElementNode() && toElement(currentNode)->isFormControlElement())
static_cast<HTMLFormControlElement*>(currentNode)->ancestorDisabledStateWasChanged();
}
}
void HTMLFieldSetElement::disabledAttributeChanged()
{
HTMLFormControlElement::disabledAttributeChanged();
invalidateDisabledStateUnder(this);
}
void HTMLFieldSetElement::childrenChanged(bool changedByParser, Node* beforeChange, Node* afterChange, int childCountDelta)
{
HTMLFormControlElement::childrenChanged(changedByParser, beforeChange, afterChange, childCountDelta);
for (Element* element = firstElementChild(); element; element = element->nextElementSibling()) {
if (element->hasTagName(legendTag))
invalidateDisabledStateUnder(element);
}
}
bool HTMLFieldSetElement::supportsFocus() const
{
return HTMLElement::supportsFocus();
}
const AtomicString& HTMLFieldSetElement::formControlType() const
{
DEFINE_STATIC_LOCAL(const AtomicString, fieldset, ("fieldset"));
return fieldset;
}
RenderObject* HTMLFieldSetElement::createRenderer(RenderArena* arena, RenderStyle*)
{
return new (arena) RenderFieldset(this);
}
HTMLLegendElement* HTMLFieldSetElement::legend() const
{
for (Element* node = firstElementChild(); node; node = node->nextElementSibling()) {
if (node->hasTagName(legendTag))
return static_cast<HTMLLegendElement*>(node);
}
return 0;
}
}