OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * Copyright (C) 2004, 2005, 2006, 2010 Apple Inc. All rights reserved. | 5 * Copyright (C) 2004, 2005, 2006, 2010 Apple Inc. All rights reserved. |
6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) | 6 * (C) 2006 Alexey Proskuryakov (ap@nypop.com) |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 27 matching lines...) Expand all Loading... |
38 : HTMLFormControlElement(tagName, document, form) | 38 : HTMLFormControlElement(tagName, document, form) |
39 { | 39 { |
40 ASSERT(hasTagName(fieldsetTag)); | 40 ASSERT(hasTagName(fieldsetTag)); |
41 } | 41 } |
42 | 42 |
43 PassRefPtr<HTMLFieldSetElement> HTMLFieldSetElement::create(const QualifiedName&
tagName, Document* document, HTMLFormElement* form) | 43 PassRefPtr<HTMLFieldSetElement> HTMLFieldSetElement::create(const QualifiedName&
tagName, Document* document, HTMLFormElement* form) |
44 { | 44 { |
45 return adoptRef(new HTMLFieldSetElement(tagName, document, form)); | 45 return adoptRef(new HTMLFieldSetElement(tagName, document, form)); |
46 } | 46 } |
47 | 47 |
| 48 void HTMLFieldSetElement::invalidateDisabledStateUnder(Element* base) |
| 49 { |
| 50 for (Node* currentNode = base->traverseNextNode(base); currentNode; currentN
ode = currentNode->traverseNextNode(base)) { |
| 51 if (currentNode && currentNode->isElementNode() && toElement(currentNode
)->isFormControlElement()) |
| 52 static_cast<HTMLFormControlElement*>(currentNode)->ancestorDisabledS
tateWasChanged(); |
| 53 } |
| 54 } |
| 55 |
48 void HTMLFieldSetElement::disabledAttributeChanged() | 56 void HTMLFieldSetElement::disabledAttributeChanged() |
49 { | 57 { |
50 // This element must be updated before the style of nodes in its subtree get
s recalculated. | 58 // This element must be updated before the style of nodes in its subtree get
s recalculated. |
51 HTMLFormControlElement::disabledAttributeChanged(); | 59 HTMLFormControlElement::disabledAttributeChanged(); |
| 60 invalidateDisabledStateUnder(this); |
| 61 } |
52 | 62 |
53 for (Node* currentNode = this->traverseNextNode(this); currentNode; currentN
ode = currentNode->traverseNextNode(this)) { | 63 void HTMLFieldSetElement::childrenChanged(bool changedByParser, Node* beforeChan
ge, Node* afterChange, int childCountDelta) |
54 if (currentNode && currentNode->isElementNode() && toElement(currentNode
)->isFormControlElement()) | 64 { |
55 static_cast<HTMLFormControlElement*>(currentNode)->ancestorDisabledS
tateWasChanged(); | 65 HTMLFormControlElement::childrenChanged(changedByParser, beforeChange, after
Change, childCountDelta); |
| 66 for (Element* element = firstElementChild(); element; element = element->nex
tElementSibling()) { |
| 67 if (element->hasTagName(legendTag)) |
| 68 invalidateDisabledStateUnder(element); |
56 } | 69 } |
57 } | 70 } |
58 | 71 |
59 bool HTMLFieldSetElement::supportsFocus() const | 72 bool HTMLFieldSetElement::supportsFocus() const |
60 { | 73 { |
61 return HTMLElement::supportsFocus(); | 74 return HTMLElement::supportsFocus(); |
62 } | 75 } |
63 | 76 |
64 const AtomicString& HTMLFieldSetElement::formControlType() const | 77 const AtomicString& HTMLFieldSetElement::formControlType() const |
65 { | 78 { |
66 DEFINE_STATIC_LOCAL(const AtomicString, fieldset, ("fieldset")); | 79 DEFINE_STATIC_LOCAL(const AtomicString, fieldset, ("fieldset")); |
67 return fieldset; | 80 return fieldset; |
68 } | 81 } |
69 | 82 |
70 RenderObject* HTMLFieldSetElement::createRenderer(RenderArena* arena, RenderStyl
e*) | 83 RenderObject* HTMLFieldSetElement::createRenderer(RenderArena* arena, RenderStyl
e*) |
71 { | 84 { |
72 return new (arena) RenderFieldset(this); | 85 return new (arena) RenderFieldset(this); |
73 } | 86 } |
74 | 87 |
75 HTMLLegendElement* HTMLFieldSetElement::legend() const | 88 HTMLLegendElement* HTMLFieldSetElement::legend() const |
76 { | 89 { |
77 for (Element* node = firstElementChild(); node; node = node->nextElementSibl
ing()) { | 90 for (Element* node = firstElementChild(); node; node = node->nextElementSibl
ing()) { |
78 if (node->hasTagName(legendTag)) | 91 if (node->hasTagName(legendTag)) |
79 return static_cast<HTMLLegendElement*>(node); | 92 return static_cast<HTMLLegendElement*>(node); |
80 } | 93 } |
81 return 0; | 94 return 0; |
82 } | 95 } |
83 | 96 |
84 } // namespace | 97 } // namespace |
OLD | NEW |