Chromium Code Reviews| 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, 2007, 2010 Apple Inc. All rights reserved. | 5 * Copyright (C) 2004, 2005, 2006, 2007, 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 19 matching lines...) Expand all Loading... | |
| 30 #include "core/dom/ElementTraversal.h" | 30 #include "core/dom/ElementTraversal.h" |
| 31 #include "core/editing/FrameSelection.h" | 31 #include "core/editing/FrameSelection.h" |
| 32 #include "core/events/MouseEvent.h" | 32 #include "core/events/MouseEvent.h" |
| 33 #include "core/frame/LocalFrame.h" | 33 #include "core/frame/LocalFrame.h" |
| 34 #include "core/html/FormAssociatedElement.h" | 34 #include "core/html/FormAssociatedElement.h" |
| 35 | 35 |
| 36 namespace blink { | 36 namespace blink { |
| 37 | 37 |
| 38 using namespace HTMLNames; | 38 using namespace HTMLNames; |
| 39 | 39 |
| 40 inline HTMLLabelElement::HTMLLabelElement(Document& document) | 40 inline HTMLLabelElement::HTMLLabelElement(Document& document, HTMLFormElement* f orm) |
| 41 : HTMLElement(labelTag, document) | 41 : HTMLElement(labelTag, document) |
| 42 { | 42 { |
| 43 FormAssociatedElement::associateByParser(form); | |
| 43 } | 44 } |
| 44 | 45 |
| 45 DEFINE_NODE_FACTORY(HTMLLabelElement) | 46 PassRefPtrWillBeRawPtr<HTMLLabelElement> HTMLLabelElement::create(Document& docu ment, HTMLFormElement* form) |
| 47 { | |
| 48 RefPtrWillBeRawPtr<HTMLLabelElement> labelElement = adoptRefWillBeNoop(new H TMLLabelElement(document, form)); | |
| 49 return labelElement.release(); | |
| 50 } | |
| 46 | 51 |
| 47 bool HTMLLabelElement::rendererIsFocusable() const | 52 bool HTMLLabelElement::rendererIsFocusable() const |
| 48 { | 53 { |
| 49 HTMLLabelElement* that = const_cast<HTMLLabelElement*>(this); | 54 HTMLLabelElement* that = const_cast<HTMLLabelElement*>(this); |
| 50 return that->isContentEditable(); | 55 return that->isContentEditable(); |
| 51 } | 56 } |
| 52 | 57 |
| 53 LabelableElement* HTMLLabelElement::control() const | 58 LabelableElement* HTMLLabelElement::control() const |
| 54 { | 59 { |
| 55 const AtomicString& controlId = getAttribute(forAttr); | 60 const AtomicString& controlId = getAttribute(forAttr); |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 67 if (Element* element = treeScope().getElementById(controlId)) { | 72 if (Element* element = treeScope().getElementById(controlId)) { |
| 68 if (isLabelableElement(*element) && toLabelableElement(*element).support Labels()) | 73 if (isLabelableElement(*element) && toLabelableElement(*element).support Labels()) |
| 69 return toLabelableElement(element); | 74 return toLabelableElement(element); |
| 70 } | 75 } |
| 71 | 76 |
| 72 return 0; | 77 return 0; |
| 73 } | 78 } |
| 74 | 79 |
| 75 HTMLFormElement* HTMLLabelElement::formOwner() const | 80 HTMLFormElement* HTMLLabelElement::formOwner() const |
| 76 { | 81 { |
| 77 return FormAssociatedElement::findAssociatedForm(this); | 82 return !fastGetAttribute(formAttr).isNull() ? FormAssociatedElement::findAss ociatedForm(this) : FormAssociatedElement::form(); |
|
keishi
2014/09/16 01:59:19
I think we shouldn't need to use findAssociatedFor
spartha
2014/09/17 11:02:18
Done.
| |
| 78 } | 83 } |
| 79 | 84 |
| 80 void HTMLLabelElement::setActive(bool down) | 85 void HTMLLabelElement::setActive(bool down) |
| 81 { | 86 { |
| 82 if (down == active()) | 87 if (down == active()) |
| 83 return; | 88 return; |
| 84 | 89 |
| 85 // Update our status first. | 90 // Update our status first. |
| 86 HTMLElement::setActive(down); | 91 HTMLElement::setActive(down); |
| 87 | 92 |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 190 } | 195 } |
| 191 | 196 |
| 192 void HTMLLabelElement::updateLabel(TreeScope& scope, const AtomicString& oldForA ttributeValue, const AtomicString& newForAttributeValue) | 197 void HTMLLabelElement::updateLabel(TreeScope& scope, const AtomicString& oldForA ttributeValue, const AtomicString& newForAttributeValue) |
| 193 { | 198 { |
| 194 if (!inDocument()) | 199 if (!inDocument()) |
| 195 return; | 200 return; |
| 196 | 201 |
| 197 if (oldForAttributeValue == newForAttributeValue) | 202 if (oldForAttributeValue == newForAttributeValue) |
| 198 return; | 203 return; |
| 199 | 204 |
| 205 HTMLElement* label = this; | |
| 200 if (!oldForAttributeValue.isEmpty()) | 206 if (!oldForAttributeValue.isEmpty()) |
| 201 scope.removeLabel(oldForAttributeValue, toHTMLLabelElement(this)); | 207 scope.removeLabel(oldForAttributeValue, toHTMLLabelElement(label)); |
|
keishi
2014/09/16 01:59:19
I think we don't need to use toHTMLLabelElement an
spartha
2014/09/17 11:02:18
Done.
| |
| 202 if (!newForAttributeValue.isEmpty()) | 208 if (!newForAttributeValue.isEmpty()) |
| 203 scope.addLabel(newForAttributeValue, toHTMLLabelElement(this)); | 209 scope.addLabel(newForAttributeValue, toHTMLLabelElement(label)); |
| 204 } | 210 } |
| 205 | 211 |
| 206 void HTMLLabelElement::attributeWillChange(const QualifiedName& name, const Atom icString& oldValue, const AtomicString& newValue) | 212 void HTMLLabelElement::attributeWillChange(const QualifiedName& name, const Atom icString& oldValue, const AtomicString& newValue) |
| 207 { | 213 { |
| 208 if (name == HTMLNames::forAttr) { | 214 if (name == HTMLNames::forAttr) { |
| 209 TreeScope& scope = treeScope(); | 215 TreeScope& scope = treeScope(); |
| 210 if (scope.shouldCacheLabelsByForAttribute()) | 216 if (scope.shouldCacheLabelsByForAttribute()) |
| 211 updateLabel(scope, oldValue, newValue); | 217 updateLabel(scope, oldValue, newValue); |
| 212 } | 218 } |
| 213 HTMLElement::attributeWillChange(name, oldValue, newValue); | 219 HTMLElement::attributeWillChange(name, oldValue, newValue); |
| 214 } | 220 } |
| 215 | 221 |
| 216 Node::InsertionNotificationRequest HTMLLabelElement::insertedInto(ContainerNode* insertionPoint) | 222 Node::InsertionNotificationRequest HTMLLabelElement::insertedInto(ContainerNode* insertionPoint) |
| 217 { | 223 { |
| 218 InsertionNotificationRequest result = HTMLElement::insertedInto(insertionPoi nt); | 224 InsertionNotificationRequest result = HTMLElement::insertedInto(insertionPoi nt); |
| 225 FormAssociatedElement::insertedInto(insertionPoint); | |
| 219 if (insertionPoint->isInTreeScope()) { | 226 if (insertionPoint->isInTreeScope()) { |
| 220 TreeScope& scope = insertionPoint->treeScope(); | 227 TreeScope& scope = insertionPoint->treeScope(); |
| 221 if (scope == treeScope() && scope.shouldCacheLabelsByForAttribute()) | 228 if (scope == treeScope() && scope.shouldCacheLabelsByForAttribute()) |
| 222 updateLabel(scope, nullAtom, fastGetAttribute(forAttr)); | 229 updateLabel(scope, nullAtom, fastGetAttribute(forAttr)); |
| 223 } | 230 } |
| 224 return result; | 231 return result; |
| 225 } | 232 } |
| 226 | 233 |
| 227 void HTMLLabelElement::removedFrom(ContainerNode* insertionPoint) | 234 void HTMLLabelElement::removedFrom(ContainerNode* insertionPoint) |
| 228 { | 235 { |
| 229 if (insertionPoint->isInTreeScope() && treeScope() == document()) { | 236 if (insertionPoint->isInTreeScope() && treeScope() == document()) { |
| 230 TreeScope& treeScope = insertionPoint->treeScope(); | 237 TreeScope& treeScope = insertionPoint->treeScope(); |
| 231 if (treeScope.shouldCacheLabelsByForAttribute()) | 238 if (treeScope.shouldCacheLabelsByForAttribute()) |
| 232 updateLabel(treeScope, fastGetAttribute(forAttr), nullAtom); | 239 updateLabel(treeScope, fastGetAttribute(forAttr), nullAtom); |
| 233 } | 240 } |
| 234 HTMLElement::removedFrom(insertionPoint); | 241 HTMLElement::removedFrom(insertionPoint); |
| 242 FormAssociatedElement::removedFrom(insertionPoint); | |
| 243 } | |
| 244 | |
| 245 void HTMLLabelElement::trace(Visitor* visitor) | |
| 246 { | |
| 247 HTMLElement::trace(visitor); | |
| 248 FormAssociatedElement::trace(visitor); | |
| 235 } | 249 } |
| 236 | 250 |
| 237 } // namespace | 251 } // namespace |
| OLD | NEW |