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, 2008, 2009, 2010, 2011, 2012, 2013 Appl e Inc. All rights reserved. | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Appl e Inc. All rights reserved. |
| 6 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) | 6 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) |
| 7 * Copyright (C) 2014 Samsung Electronics. All rights reserved. | 7 * Copyright (C) 2014 Samsung Electronics. All rights reserved. |
| 8 * | 8 * |
| 9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
| 10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 38 static ElementType* firstChild(const ContainerNode& current) { return firstC hildTemplate(current); } | 38 static ElementType* firstChild(const ContainerNode& current) { return firstC hildTemplate(current); } |
| 39 static ElementType* firstChild(const Node& current) { return firstChildTempl ate(current); } | 39 static ElementType* firstChild(const Node& current) { return firstChildTempl ate(current); } |
| 40 static ElementType* lastChild(const ContainerNode& current) { return lastChi ldTemplate(current); } | 40 static ElementType* lastChild(const ContainerNode& current) { return lastChi ldTemplate(current); } |
| 41 static ElementType* lastChild(const Node& current) { return lastChildTemplat e(current); } | 41 static ElementType* lastChild(const Node& current) { return lastChildTemplat e(current); } |
| 42 | 42 |
| 43 // First ElementType ancestor of the node. | 43 // First ElementType ancestor of the node. |
| 44 static ElementType* firstAncestor(const Node& current); | 44 static ElementType* firstAncestor(const Node& current); |
| 45 static ElementType* firstAncestorOrSelf(Node& current) { return firstAncesto rOrSelfTemplate(current); } | 45 static ElementType* firstAncestorOrSelf(Node& current) { return firstAncesto rOrSelfTemplate(current); } |
| 46 static ElementType* firstAncestorOrSelf(Element& current) { return firstAnce storOrSelfTemplate(current); } | 46 static ElementType* firstAncestorOrSelf(Element& current) { return firstAnce storOrSelfTemplate(current); } |
| 47 | 47 |
| 48 // First or last ElementType descendant of the node. | 48 // First or last ElementType descendant of the node. |
|
Inactive
2014/04/09 23:14:29
BTW, the comment here clearly says we are supposed
| |
| 49 // For Elements firstWithin() is always the same as firstChild(). | 49 // For Elements firstWithin() is always the same as firstChild(). |
| 50 static ElementType* firstWithin(const ContainerNode& current) { return first WithinTemplate(current); } | 50 static ElementType* firstWithin(const ContainerNode& current) { return first WithinTemplate(current); } |
| 51 static ElementType* firstWithin(const Node& current) { return firstWithinTem plate(current); } | 51 static ElementType* firstWithin(const Node& current) { return firstWithinTem plate(current); } |
| 52 static ElementType* lastWithin(const ContainerNode& current) { return lastWi thinTemplate(current); } | 52 static ElementType* lastWithin(const ContainerNode& current) { return lastWi thinTemplate(current); } |
| 53 static ElementType* lastWithin(const Node& current) { return lastWithinTempl ate(current); } | 53 static ElementType* lastWithin(const Node& current) { return lastWithinTempl ate(current); } |
| 54 | 54 |
| 55 // Pre-order traversal skipping non-element nodes. | 55 // Pre-order traversal skipping non-element nodes. |
| 56 static ElementType* next(const ContainerNode& current) { return nextTemplate (current); } | 56 static ElementType* next(const ContainerNode& current) { return nextTemplate (current); } |
| 57 static ElementType* next(const Node& current) { return nextTemplate(current) ; } | 57 static ElementType* next(const Node& current) { return nextTemplate(current) ; } |
| 58 static ElementType* next(const ContainerNode& current, const Node* stayWithi n) { return nextTemplate(current, stayWithin); } | 58 static ElementType* next(const ContainerNode& current, const Node* stayWithi n) { return nextTemplate(current, stayWithin); } |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 112 template <class NodeType> | 112 template <class NodeType> |
| 113 inline Element* Traversal<Element>::firstWithinTemplate(NodeType& current) | 113 inline Element* Traversal<Element>::firstWithinTemplate(NodeType& current) |
| 114 { | 114 { |
| 115 return firstChildTemplate(current); | 115 return firstChildTemplate(current); |
| 116 } | 116 } |
| 117 | 117 |
| 118 template <> | 118 template <> |
| 119 template <class NodeType> | 119 template <class NodeType> |
| 120 inline Element* Traversal<Element>::lastWithinTemplate(NodeType& current) | 120 inline Element* Traversal<Element>::lastWithinTemplate(NodeType& current) |
| 121 { | 121 { |
| 122 return lastChildTemplate(current); | 122 Node* node = NodeTraversal::lastWithin(current); |
|
Inactive
2014/04/09 23:19:07
Also see that WebKit is doing the same thing that
| |
| 123 while (node && !node->isElementNode()) | |
| 124 node = NodeTraversal::previous(*node, ¤t); | |
| 125 return toElement(node); | |
| 123 } | 126 } |
| 124 | 127 |
| 125 template <> | 128 template <> |
| 126 template <class NodeType> | 129 template <class NodeType> |
| 127 inline Element* Traversal<Element>::nextTemplate(NodeType& current) | 130 inline Element* Traversal<Element>::nextTemplate(NodeType& current) |
| 128 { | 131 { |
| 129 Node* node = NodeTraversal::next(current); | 132 Node* node = NodeTraversal::next(current); |
| 130 while (node && !node->isElementNode()) | 133 while (node && !node->isElementNode()) |
| 131 node = NodeTraversal::nextSkippingChildren(*node); | 134 node = NodeTraversal::nextSkippingChildren(*node); |
| 132 return toElement(node); | 135 return toElement(node); |
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 331 { | 334 { |
| 332 Node* node = current.nextSibling(); | 335 Node* node = current.nextSibling(); |
| 333 while (node && !isElementOfType<const ElementType>(*node)) | 336 while (node && !isElementOfType<const ElementType>(*node)) |
| 334 node = node->nextSibling(); | 337 node = node->nextSibling(); |
| 335 return toElement<ElementType>(node); | 338 return toElement<ElementType>(node); |
| 336 } | 339 } |
| 337 | 340 |
| 338 } // namespace WebCore | 341 } // namespace WebCore |
| 339 | 342 |
| 340 #endif | 343 #endif |
| OLD | NEW |