Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(251)

Unified Diff: sky/engine/core/dom/Node.cpp

Issue 924203002: Morph the APIs for Node, ParentNode, and Element closer to the specs (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Less ref Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sky/engine/core/dom/Node.cpp
diff --git a/sky/engine/core/dom/Node.cpp b/sky/engine/core/dom/Node.cpp
index 6ff1d2c4ee935c46e4b4327b91585d8c90026f4b..fa6330ce55dbbe01f610cd41665748ebd53becda 100644
--- a/sky/engine/core/dom/Node.cpp
+++ b/sky/engine/core/dom/Node.cpp
@@ -379,6 +379,61 @@ PassRefPtr<Node> Node::appendChild(PassRefPtr<Node> newChild, ExceptionState& ex
return nullptr;
}
+Element* Node::previousElementSibling()
+{
+ return ElementTraversal::previousSibling(*this);
+}
+
+Element* Node::nextElementSibling()
+{
+ return ElementTraversal::nextSibling(*this);
+}
+
+void Node::newInsertBefore(Vector<RefPtr<Node>>& nodes, ExceptionState& es)
+{
+ RefPtr<Node> protect(this);
+ for (auto& node : nodes) {
+ ContainerNode* parent = parentNode();
+ if (!parent)
+ return;
+ parent->insertBefore(node.release(), this, es);
+ if (es.had_exception())
+ return;
+ }
+}
+
+void Node::newInsertAfter(Vector<RefPtr<Node>>& nodes, ExceptionState& es)
+{
+ RefPtr<Node> protect(this);
+ ScriptForbiddenScope scope;
+ Node* refNode = this;
+ for (auto& node : nodes) {
+ ContainerNode* parent = refNode->parentNode();
esprehn 2015/02/14 01:50:08 You don't need to keep checking parent node like t
+ if (!parent)
+ return;
+ Node* nextRefNode = node.get()
+ parent->insertBefore(node.release(), refNode, es);
+ if (es.had_exception())
+ return;
+ refNode = nextRefNode;
+ }
+}
+
+void Node::replaceWith(Vector<RefPtr<Node>>& nodes, ExceptionState& es)
+{
+ if (RefPtr<Node> next = m_next) {
+ remove(es);
+ if (es.had_exception())
+ return;
+ next->newInsertBefore(nodes, es);
+ } else if (RefPtr<ContainerNode> parent = parentNode()) {
+ remove(es);
+ if (es.had_exception())
+ return;
+ parent->append(nodes, es);
+ }
esprehn 2015/02/14 01:50:08 RefPtr<Node> parent = this->parent(); RefPtr<Node>
esprehn 2015/02/14 01:51:06 Sorry that's parent->insertBefore(this, next);
abarth-chromium 2015/02/14 02:30:53 We're trying to insert |nodes|, not |this|. Also,
esprehn 2015/02/14 02:37:43 Why not a loop then? RefPtr<Node> parent = this->
+}
+
void Node::remove(ExceptionState& exceptionState)
{
if (ContainerNode* parent = parentNode())
@@ -862,7 +917,7 @@ Document* Node::ownerDocument() const
return doc == this ? 0 : doc;
}
-ContainerNode* Node::ownerScope() const
+ContainerNode* Node::owner() const
{
if (inDocument())
return &treeScope().rootNode();

Powered by Google App Engine
This is Rietveld 408576698