| Index: Source/core/dom/ElementTraversal.h
|
| diff --git a/Source/core/dom/ElementTraversal.h b/Source/core/dom/ElementTraversal.h
|
| index c5a39068ce5c6abc6801fbee57fdc919c7cd1865..8ab8374aa0ced3dc37c73ce5ecd46d17a4d5f049 100644
|
| --- a/Source/core/dom/ElementTraversal.h
|
| +++ b/Source/core/dom/ElementTraversal.h
|
| @@ -34,6 +34,7 @@ namespace blink {
|
| template <class ElementType>
|
| class Traversal {
|
| public:
|
| + using TraversalNodeType = ElementType;
|
| // First or last ElementType child of the node.
|
| static ElementType* firstChild(const ContainerNode& current) { return firstChildTemplate(current); }
|
| static ElementType* firstChild(const Node& current) { return firstChildTemplate(current); }
|
| @@ -94,6 +95,10 @@ public:
|
| template <class MatchFunc>
|
| static ElementType* nextSibling(const Node&, MatchFunc);
|
|
|
| + static TraversalRange<TraversalChildrenIterator<Traversal<ElementType>>> childrenOf(Node&);
|
| + static TraversalRange<TraversalDescendantIterator<Traversal<ElementType>>> descendantsOf(Node&);
|
| + static TraversalRange<TraversalNextIterator<Traversal<ElementType>>> from(Node&);
|
| +
|
| private:
|
| template <class NodeType>
|
| static ElementType* firstChildTemplate(NodeType&);
|
| @@ -113,6 +118,24 @@ private:
|
|
|
| typedef Traversal<Element> ElementTraversal;
|
|
|
| +template <class ElementType>
|
| +inline TraversalRange<TraversalChildrenIterator<Traversal<ElementType>>> Traversal<ElementType>::childrenOf(Node& start)
|
| +{
|
| + return TraversalRange<TraversalChildrenIterator<Traversal<ElementType>>>(start);
|
| +};
|
| +
|
| +template <class ElementType>
|
| +inline TraversalRange<TraversalDescendantIterator<Traversal<ElementType>>> Traversal<ElementType>::descendantsOf(Node& root)
|
| +{
|
| + return TraversalRange<TraversalDescendantIterator<Traversal<ElementType>>>(root);
|
| +};
|
| +
|
| +template <class ElementType>
|
| +inline TraversalRange<TraversalNextIterator<Traversal<ElementType>>> Traversal<ElementType>::from(Node& start)
|
| +{
|
| + return TraversalRange<TraversalNextIterator<Traversal<ElementType>>>(start);
|
| +};
|
| +
|
| // Specialized for pure Element to exploit the fact that Elements parent is always either another Element or the root.
|
| template <>
|
| template <class NodeType>
|
|
|