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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 , m_documentVersion(0) | 42 , m_documentVersion(0) |
43 { | 43 { |
44 ScriptWrappable::init(this); | 44 ScriptWrappable::init(this); |
45 } | 45 } |
46 | 46 |
47 PassRefPtr<HTMLFieldSetElement> HTMLFieldSetElement::create(Document& document,
HTMLFormElement* form) | 47 PassRefPtr<HTMLFieldSetElement> HTMLFieldSetElement::create(Document& document,
HTMLFormElement* form) |
48 { | 48 { |
49 return adoptRef(new HTMLFieldSetElement(document, form)); | 49 return adoptRef(new HTMLFieldSetElement(document, form)); |
50 } | 50 } |
51 | 51 |
52 void HTMLFieldSetElement::invalidateDisabledStateUnder(Element* base) | 52 void HTMLFieldSetElement::invalidateDisabledStateUnder(Element& base) |
53 { | 53 { |
54 for (Element* element = ElementTraversal::firstWithin(base); element; elemen
t = ElementTraversal::next(*element, base)) { | 54 for (Element* element = ElementTraversal::firstWithin(base); element; elemen
t = ElementTraversal::next(*element, &base)) { |
55 if (element->isFormControlElement()) | 55 if (element->isFormControlElement()) |
56 toHTMLFormControlElement(element)->ancestorDisabledStateWasChanged()
; | 56 toHTMLFormControlElement(element)->ancestorDisabledStateWasChanged()
; |
57 } | 57 } |
58 } | 58 } |
59 | 59 |
60 void HTMLFieldSetElement::disabledAttributeChanged() | 60 void HTMLFieldSetElement::disabledAttributeChanged() |
61 { | 61 { |
62 // This element must be updated before the style of nodes in its subtree get
s recalculated. | 62 // This element must be updated before the style of nodes in its subtree get
s recalculated. |
63 HTMLFormControlElement::disabledAttributeChanged(); | 63 HTMLFormControlElement::disabledAttributeChanged(); |
64 invalidateDisabledStateUnder(this); | 64 invalidateDisabledStateUnder(*this); |
65 } | 65 } |
66 | 66 |
67 void HTMLFieldSetElement::childrenChanged(bool changedByParser, Node* beforeChan
ge, Node* afterChange, int childCountDelta) | 67 void HTMLFieldSetElement::childrenChanged(bool changedByParser, Node* beforeChan
ge, Node* afterChange, int childCountDelta) |
68 { | 68 { |
69 HTMLFormControlElement::childrenChanged(changedByParser, beforeChange, after
Change, childCountDelta); | 69 HTMLFormControlElement::childrenChanged(changedByParser, beforeChange, after
Change, childCountDelta); |
70 for (Element* element = ElementTraversal::firstWithin(this); element; elemen
t = ElementTraversal::nextSkippingChildren(element, this)) { | 70 for (Element* element = ElementTraversal::firstWithin(*this); element; eleme
nt = ElementTraversal::nextSkippingChildren(element, this)) { |
71 if (element->hasTagName(legendTag)) | 71 if (element->hasTagName(legendTag)) |
72 invalidateDisabledStateUnder(element); | 72 invalidateDisabledStateUnder(*element); |
73 } | 73 } |
74 } | 74 } |
75 | 75 |
76 bool HTMLFieldSetElement::supportsFocus() const | 76 bool HTMLFieldSetElement::supportsFocus() const |
77 { | 77 { |
78 return HTMLElement::supportsFocus(); | 78 return HTMLElement::supportsFocus(); |
79 } | 79 } |
80 | 80 |
81 const AtomicString& HTMLFieldSetElement::formControlType() const | 81 const AtomicString& HTMLFieldSetElement::formControlType() const |
82 { | 82 { |
83 DEFINE_STATIC_LOCAL(const AtomicString, fieldset, ("fieldset", AtomicString:
:ConstructFromLiteral)); | 83 DEFINE_STATIC_LOCAL(const AtomicString, fieldset, ("fieldset", AtomicString:
:ConstructFromLiteral)); |
84 return fieldset; | 84 return fieldset; |
85 } | 85 } |
86 | 86 |
87 RenderObject* HTMLFieldSetElement::createRenderer(RenderStyle*) | 87 RenderObject* HTMLFieldSetElement::createRenderer(RenderStyle*) |
88 { | 88 { |
89 return new RenderFieldset(this); | 89 return new RenderFieldset(this); |
90 } | 90 } |
91 | 91 |
92 HTMLLegendElement* HTMLFieldSetElement::legend() const | 92 HTMLLegendElement* HTMLFieldSetElement::legend() const |
93 { | 93 { |
94 for (Element* child = ElementTraversal::firstWithin(this); child; child = El
ementTraversal::nextSkippingChildren(child, this)) { | 94 for (Element* child = ElementTraversal::firstWithin(*this); child; child = E
lementTraversal::nextSkippingChildren(child, this)) { |
95 if (child->hasTagName(legendTag)) | 95 if (child->hasTagName(legendTag)) |
96 return toHTMLLegendElement(child); | 96 return toHTMLLegendElement(child); |
97 } | 97 } |
98 return 0; | 98 return 0; |
99 } | 99 } |
100 | 100 |
101 PassRefPtr<HTMLCollection> HTMLFieldSetElement::elements() | 101 PassRefPtr<HTMLCollection> HTMLFieldSetElement::elements() |
102 { | 102 { |
103 return ensureCachedHTMLCollection(FormControls); | 103 return ensureCachedHTMLCollection(FormControls); |
104 } | 104 } |
105 | 105 |
106 void HTMLFieldSetElement::refreshElementsIfNeeded() const | 106 void HTMLFieldSetElement::refreshElementsIfNeeded() const |
107 { | 107 { |
108 uint64_t docVersion = document().domTreeVersion(); | 108 uint64_t docVersion = document().domTreeVersion(); |
109 if (m_documentVersion == docVersion) | 109 if (m_documentVersion == docVersion) |
110 return; | 110 return; |
111 | 111 |
112 m_documentVersion = docVersion; | 112 m_documentVersion = docVersion; |
113 | 113 |
114 m_associatedElements.clear(); | 114 m_associatedElements.clear(); |
115 | 115 |
116 for (Element* element = ElementTraversal::firstWithin(this); element; elemen
t = ElementTraversal::next(*element, this)) { | 116 for (Element* element = ElementTraversal::firstWithin(*this); element; eleme
nt = ElementTraversal::next(*element, this)) { |
117 if (element->hasTagName(objectTag)) { | 117 if (element->hasTagName(objectTag)) { |
118 m_associatedElements.append(toHTMLObjectElement(element)); | 118 m_associatedElements.append(toHTMLObjectElement(element)); |
119 continue; | 119 continue; |
120 } | 120 } |
121 | 121 |
122 if (!element->isFormControlElement()) | 122 if (!element->isFormControlElement()) |
123 continue; | 123 continue; |
124 | 124 |
125 m_associatedElements.append(toHTMLFormControlElement(element)); | 125 m_associatedElements.append(toHTMLFormControlElement(element)); |
126 } | 126 } |
127 } | 127 } |
128 | 128 |
129 const Vector<FormAssociatedElement*>& HTMLFieldSetElement::associatedElements()
const | 129 const Vector<FormAssociatedElement*>& HTMLFieldSetElement::associatedElements()
const |
130 { | 130 { |
131 refreshElementsIfNeeded(); | 131 refreshElementsIfNeeded(); |
132 return m_associatedElements; | 132 return m_associatedElements; |
133 } | 133 } |
134 | 134 |
135 unsigned HTMLFieldSetElement::length() const | 135 unsigned HTMLFieldSetElement::length() const |
136 { | 136 { |
137 refreshElementsIfNeeded(); | 137 refreshElementsIfNeeded(); |
138 unsigned len = 0; | 138 unsigned len = 0; |
139 for (unsigned i = 0; i < m_associatedElements.size(); ++i) | 139 for (unsigned i = 0; i < m_associatedElements.size(); ++i) |
140 if (m_associatedElements[i]->isEnumeratable()) | 140 if (m_associatedElements[i]->isEnumeratable()) |
141 ++len; | 141 ++len; |
142 return len; | 142 return len; |
143 } | 143 } |
144 | 144 |
145 } // namespace | 145 } // namespace |
OLD | NEW |