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> |