summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/HTMLFieldSetElement.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-06-01 10:36:58 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-06-01 10:36:58 +0200
commitb1e9e47fa11f608ae16bc07f97a2acf95bf80272 (patch)
treec88c45e80c9c44506e7cdf9a3bb39ebf82a8cd5b /Source/WebCore/html/HTMLFieldSetElement.cpp
parentbe01689f43cf6882cf670d33df49ead1f570c53a (diff)
downloadqtwebkit-b1e9e47fa11f608ae16bc07f97a2acf95bf80272.tar.gz
Imported WebKit commit 499c84c99aa98e9870fa7eaa57db476c6d160d46 (http://svn.webkit.org/repository/webkit/trunk@119200)
Weekly update :). Particularly relevant changes for Qt are the use of the WebCore image decoders and direct usage of libpng/libjpeg if available in the system.
Diffstat (limited to 'Source/WebCore/html/HTMLFieldSetElement.cpp')
-rw-r--r--Source/WebCore/html/HTMLFieldSetElement.cpp72
1 files changed, 68 insertions, 4 deletions
diff --git a/Source/WebCore/html/HTMLFieldSetElement.cpp b/Source/WebCore/html/HTMLFieldSetElement.cpp
index 8a240c024..c0b07e867 100644
--- a/Source/WebCore/html/HTMLFieldSetElement.cpp
+++ b/Source/WebCore/html/HTMLFieldSetElement.cpp
@@ -24,9 +24,11 @@
#include "config.h"
#include "HTMLFieldSetElement.h"
-#include "HTMLLegendElement.h"
+#include "HTMLFormCollection.h"
+#include "HTMLLegendElement.h"
#include "HTMLNames.h"
+#include "HTMLObjectElement.h"
#include "RenderFieldset.h"
#include <wtf/StdLibExtras.h>
@@ -45,14 +47,27 @@ PassRefPtr<HTMLFieldSetElement> HTMLFieldSetElement::create(const QualifiedName&
return adoptRef(new HTMLFieldSetElement(tagName, document, form));
}
+void HTMLFieldSetElement::invalidateDisabledStateUnder(Element* base)
+{
+ for (Node* node = base->firstChild(); node; node = node->traverseNextNode(base)) {
+ if (node->isElementNode() && toElement(node)->isFormControlElement())
+ static_cast<HTMLFormControlElement*>(node)->ancestorDisabledStateWasChanged();
+ }
+}
+
void HTMLFieldSetElement::disabledAttributeChanged()
{
// This element must be updated before the style of nodes in its subtree gets recalculated.
HTMLFormControlElement::disabledAttributeChanged();
+ invalidateDisabledStateUnder(this);
+}
- for (Node* currentNode = this; currentNode; currentNode = currentNode->traverseNextNode(this)) {
- if (currentNode && currentNode->isElementNode() && toElement(currentNode)->isFormControlElement())
- static_cast<HTMLFormControlElement*>(currentNode)->setNeedsStyleRecalc();
+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);
}
}
@@ -81,4 +96,53 @@ HTMLLegendElement* HTMLFieldSetElement::legend() const
return 0;
}
+HTMLCollection* HTMLFieldSetElement::elements()
+{
+ if (!m_elementsCollection)
+ m_elementsCollection = HTMLFormCollection::create(this);
+ return m_elementsCollection.get();
+}
+
+void HTMLFieldSetElement::refreshElementsIfNeeded() const
+{
+ uint64_t docVersion = document()->domTreeVersion();
+ if (m_documentVersion == docVersion)
+ return;
+
+ m_documentVersion = docVersion;
+
+ m_associatedElements.clear();
+
+ for (Node* node = firstChild(); node; node = node->traverseNextNode(this)) {
+ if (!node->isElementNode())
+ continue;
+
+ if (node->hasTagName(objectTag)) {
+ m_associatedElements.append(static_cast<HTMLObjectElement*>(node));
+ continue;
+ }
+
+ if (!toElement(node)->isFormControlElement())
+ continue;
+
+ m_associatedElements.append(static_cast<HTMLFormControlElement*>(node));
+ }
+}
+
+const Vector<FormAssociatedElement*>& HTMLFieldSetElement::associatedElements() const
+{
+ refreshElementsIfNeeded();
+ return m_associatedElements;
+}
+
+unsigned HTMLFieldSetElement::length() const
+{
+ refreshElementsIfNeeded();
+ unsigned len = 0;
+ for (unsigned i = 0; i < m_associatedElements.size(); ++i)
+ if (m_associatedElements[i]->isEnumeratable())
+ ++len;
+ return len;
+}
+
} // namespace