Index: Source/core/dom/ElementTraversal.h |
diff --git a/Source/core/dom/ElementTraversal.h b/Source/core/dom/ElementTraversal.h |
index 6bcf1d1eb48479bcfa229bab7aa4741a47577fd4..2f8ede5aaf8257376e092345d5ad6e83423c571a 100644 |
--- a/Source/core/dom/ElementTraversal.h |
+++ b/Source/core/dom/ElementTraversal.h |
@@ -4,6 +4,7 @@ |
* (C) 2001 Dirk Mueller (mueller@kde.org) |
* Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. |
* Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) |
+ * Copyright (C) 2014 Samsung Electronics. All rights reserved. |
* |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Library General Public |
@@ -30,40 +31,55 @@ |
namespace WebCore { |
-namespace ElementTraversal { |
- |
-// First / Last element child of the node. |
-Element* firstWithin(const Node&); |
-Element* firstWithin(const ContainerNode&); |
-Element* lastWithin(const Node&); |
-Element* lastWithin(const ContainerNode&); |
- |
-// Pre-order traversal skipping non-element nodes. |
-Element* next(const Node&); |
-Element* next(const Node&, const Node* stayWithin); |
-Element* next(const ContainerNode&); |
-Element* next(const ContainerNode&, const Node* stayWithin); |
- |
-// Like next, but skips children. |
-Element* nextSkippingChildren(const Node&); |
-Element* nextSkippingChildren(const Node&, const Node* stayWithin); |
-Element* nextSkippingChildren(const ContainerNode&); |
-Element* nextSkippingChildren(const ContainerNode&, const Node* stayWithin); |
- |
-// Pre-order traversal including the pseudo-elements. |
-Element* previousIncludingPseudo(const Node&, const Node* stayWithin = 0); |
-Element* nextIncludingPseudo(const Node&, const Node* stayWithin = 0); |
-Element* nextIncludingPseudoSkippingChildren(const Node&, const Node* stayWithin = 0); |
- |
-// Utility function to traverse only the element and pseudo-element siblings of a node. |
-Element* pseudoAwarePreviousSibling(const Node&); |
- |
-// Previous / Next sibling. |
-Element* previousSibling(const Node&); |
-Element* nextSibling(const Node&); |
+class ElementTraversal { |
+public: |
+ // First / Last element child of the node. |
+ static Element* firstWithin(const ContainerNode& current) { return firstElementWithinTemplate(current); } |
+ static Element* firstWithin(const Node& current) { return firstElementWithinTemplate(current); } |
+ static Element* lastWithin(const ContainerNode& current) { return lastWithinTemplate(current); } |
+ static Element* lastWithin(const Node& current) { return lastWithinTemplate(current); } |
+ |
+ // Pre-order traversal skipping non-element nodes. |
+ static Element* next(const ContainerNode& current) { return traverseNextElementTemplate(current); } |
+ static Element* next(const Node& current) { return traverseNextElementTemplate(current); } |
+ static Element* next(const ContainerNode& current, const Node* stayWithin) { return traverseNextElementTemplate(current, stayWithin); } |
+ static Element* next(const Node& current, const Node* stayWithin) { return traverseNextElementTemplate(current, stayWithin); } |
+ |
+ // Like next, but skips children. |
+ static Element* nextSkippingChildren(const ContainerNode& current) { return traverseNextElementSkippingChildrenTemplate(current); } |
+ static Element* nextSkippingChildren(const Node& current) { return traverseNextElementSkippingChildrenTemplate(current); } |
+ static Element* nextSkippingChildren(const ContainerNode& current, const Node* stayWithin) { return traverseNextElementSkippingChildrenTemplate(current, stayWithin); } |
+ static Element* nextSkippingChildren(const Node& current, const Node* stayWithin) { return traverseNextElementSkippingChildrenTemplate(current, stayWithin); } |
+ |
+ // Pre-order traversal including the pseudo-elements. |
+ static Element* previousIncludingPseudo(const Node&, const Node* stayWithin = 0); |
+ static Element* nextIncludingPseudo(const Node&, const Node* stayWithin = 0); |
+ static Element* nextIncludingPseudoSkippingChildren(const Node&, const Node* stayWithin = 0); |
+ |
+ // Utility function to traverse only the element and pseudo-element siblings of a node. |
+ static Element* pseudoAwarePreviousSibling(const Node&); |
+ |
+ // Previous / Next sibling. |
+ static Element* previousSibling(const Node&); |
+ static Element* nextSibling(const Node&); |
+ |
+private: |
+ template <class NodeType> |
+ static Element* firstElementWithinTemplate(NodeType&); |
+ template <class NodeType> |
+ static Element* lastWithinTemplate(NodeType&); |
+ template <class NodeType> |
+ static Element* traverseNextElementTemplate(NodeType&); |
+ template <class NodeType> |
+ static Element* traverseNextElementTemplate(NodeType&, const Node* stayWithin); |
+ template <class NodeType> |
+ static Element* traverseNextElementSkippingChildrenTemplate(NodeType&); |
+ template <class NodeType> |
+ static Element* traverseNextElementSkippingChildrenTemplate(NodeType&, const Node* stayWithin); |
+}; |
template <class NodeType> |
-inline Element* firstElementWithinTemplate(NodeType& current) |
+inline Element* ElementTraversal::firstElementWithinTemplate(NodeType& current) |
{ |
// Except for the root containers, only elements can have element children. |
Node* node = current.firstChild(); |
@@ -71,65 +87,53 @@ inline Element* firstElementWithinTemplate(NodeType& current) |
node = node->nextSibling(); |
return toElement(node); |
} |
-inline Element* firstWithin(const ContainerNode& current) { return firstElementWithinTemplate(current); } |
-inline Element* firstWithin(const Node& current) { return firstElementWithinTemplate(current); } |
template <class NodeType> |
-inline Element* lastWithinTemplate(NodeType& current) |
+inline Element* ElementTraversal::lastWithinTemplate(NodeType& current) |
{ |
Node* node = current.lastChild(); |
while (node && !node->isElementNode()) |
node = node->previousSibling(); |
return toElement(node); |
} |
-inline Element* lastWithin(const ContainerNode& current) { return lastWithinTemplate(current); } |
-inline Element* lastWithin(const Node& current) { return lastWithinTemplate(current); } |
template <class NodeType> |
-inline Element* traverseNextElementTemplate(NodeType& current) |
+inline Element* ElementTraversal::traverseNextElementTemplate(NodeType& current) |
{ |
Node* node = NodeTraversal::next(current); |
while (node && !node->isElementNode()) |
node = NodeTraversal::nextSkippingChildren(*node); |
return toElement(node); |
} |
-inline Element* next(const ContainerNode& current) { return traverseNextElementTemplate(current); } |
-inline Element* next(const Node& current) { return traverseNextElementTemplate(current); } |
template <class NodeType> |
-inline Element* traverseNextElementTemplate(NodeType& current, const Node* stayWithin) |
+inline Element* ElementTraversal::traverseNextElementTemplate(NodeType& current, const Node* stayWithin) |
{ |
Node* node = NodeTraversal::next(current, stayWithin); |
while (node && !node->isElementNode()) |
node = NodeTraversal::nextSkippingChildren(*node, stayWithin); |
return toElement(node); |
} |
-inline Element* next(const ContainerNode& current, const Node* stayWithin) { return traverseNextElementTemplate(current, stayWithin); } |
-inline Element* next(const Node& current, const Node* stayWithin) { return traverseNextElementTemplate(current, stayWithin); } |
template <class NodeType> |
-inline Element* traverseNextElementSkippingChildrenTemplate(NodeType& current) |
+inline Element* ElementTraversal::traverseNextElementSkippingChildrenTemplate(NodeType& current) |
{ |
Node* node = NodeTraversal::nextSkippingChildren(current); |
while (node && !node->isElementNode()) |
node = NodeTraversal::nextSkippingChildren(*node); |
return toElement(node); |
} |
-inline Element* nextSkippingChildren(const ContainerNode& current) { return traverseNextElementSkippingChildrenTemplate(current); } |
-inline Element* nextSkippingChildren(const Node& current) { return traverseNextElementSkippingChildrenTemplate(current); } |
template <class NodeType> |
-inline Element* traverseNextElementSkippingChildrenTemplate(NodeType& current, const Node* stayWithin) |
+inline Element* ElementTraversal::traverseNextElementSkippingChildrenTemplate(NodeType& current, const Node* stayWithin) |
{ |
Node* node = NodeTraversal::nextSkippingChildren(current, stayWithin); |
while (node && !node->isElementNode()) |
node = NodeTraversal::nextSkippingChildren(*node, stayWithin); |
return toElement(node); |
} |
-inline Element* nextSkippingChildren(const ContainerNode& current, const Node* stayWithin) { return traverseNextElementSkippingChildrenTemplate(current, stayWithin); } |
-inline Element* nextSkippingChildren(const Node& current, const Node* stayWithin) { return traverseNextElementSkippingChildrenTemplate(current, stayWithin); } |
-inline Element* previousIncludingPseudo(const Node& current, const Node* stayWithin) |
+inline Element* ElementTraversal::previousIncludingPseudo(const Node& current, const Node* stayWithin) |
{ |
Node* node = NodeTraversal::previousIncludingPseudo(current, stayWithin); |
while (node && !node->isElementNode()) |
@@ -137,7 +141,7 @@ inline Element* previousIncludingPseudo(const Node& current, const Node* stayWit |
return toElement(node); |
} |
-inline Element* nextIncludingPseudo(const Node& current, const Node* stayWithin) |
+inline Element* ElementTraversal::nextIncludingPseudo(const Node& current, const Node* stayWithin) |
{ |
Node* node = NodeTraversal::nextIncludingPseudo(current, stayWithin); |
while (node && !node->isElementNode()) |
@@ -145,7 +149,7 @@ inline Element* nextIncludingPseudo(const Node& current, const Node* stayWithin) |
return toElement(node); |
} |
-inline Element* nextIncludingPseudoSkippingChildren(const Node& current, const Node* stayWithin) |
+inline Element* ElementTraversal::nextIncludingPseudoSkippingChildren(const Node& current, const Node* stayWithin) |
{ |
Node* node = NodeTraversal::nextIncludingPseudoSkippingChildren(current, stayWithin); |
while (node && !node->isElementNode()) |
@@ -153,7 +157,7 @@ inline Element* nextIncludingPseudoSkippingChildren(const Node& current, const N |
return toElement(node); |
} |
-inline Element* pseudoAwarePreviousSibling(const Node& current) |
+inline Element* ElementTraversal::pseudoAwarePreviousSibling(const Node& current) |
{ |
Node* node = current.pseudoAwarePreviousSibling(); |
while (node && !node->isElementNode()) |
@@ -161,7 +165,7 @@ inline Element* pseudoAwarePreviousSibling(const Node& current) |
return toElement(node); |
} |
-inline Element* previousSibling(const Node& current) |
+inline Element* ElementTraversal::previousSibling(const Node& current) |
{ |
Node* node = current.previousSibling(); |
while (node && !node->isElementNode()) |
@@ -169,7 +173,7 @@ inline Element* previousSibling(const Node& current) |
return toElement(node); |
} |
-inline Element* nextSibling(const Node& current) |
+inline Element* ElementTraversal::nextSibling(const Node& current) |
{ |
Node* node = current.nextSibling(); |
while (node && !node->isElementNode()) |
@@ -177,8 +181,6 @@ inline Element* nextSibling(const Node& current) |
return toElement(node); |
} |
-} |
- |
-} |
+} // namespace WebCore |
#endif |