mirror of
https://github.com/servo/servo.git
synced 2025-06-20 15:18:58 +01:00
auto merge of #1582 : saneyuki/servo/1569, r=Ms2ger
retry: #1581 this will fix #1569
This commit is contained in:
commit
6c63de1c03
1 changed files with 27 additions and 17 deletions
|
@ -111,6 +111,14 @@ impl Drop for Node {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// suppress observers flag
|
||||||
|
/// http://dom.spec.whatwg.org/#concept-node-insert
|
||||||
|
/// http://dom.spec.whatwg.org/#concept-node-remove
|
||||||
|
enum SuppressObserver {
|
||||||
|
Suppressed,
|
||||||
|
Unsuppressed
|
||||||
|
}
|
||||||
|
|
||||||
/// Encapsulates the abstract layout data.
|
/// Encapsulates the abstract layout data.
|
||||||
pub struct LayoutData {
|
pub struct LayoutData {
|
||||||
priv chan: Option<LayoutChan>,
|
priv chan: Option<LayoutChan>,
|
||||||
|
@ -1040,7 +1048,7 @@ impl Node {
|
||||||
fn adopt(node: AbstractNode, document: AbstractDocument) {
|
fn adopt(node: AbstractNode, document: AbstractDocument) {
|
||||||
// Step 1.
|
// Step 1.
|
||||||
match node.parent_node() {
|
match node.parent_node() {
|
||||||
Some(parent) => Node::remove(node, parent, false),
|
Some(parent) => Node::remove(node, parent, Unsuppressed),
|
||||||
None => (),
|
None => (),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1186,7 +1194,7 @@ impl Node {
|
||||||
Node::adopt(node, parent.node().owner_doc());
|
Node::adopt(node, parent.node().owner_doc());
|
||||||
|
|
||||||
// Step 10.
|
// Step 10.
|
||||||
Node::insert(node, parent, referenceChild, false);
|
Node::insert(node, parent, referenceChild, Unsuppressed);
|
||||||
|
|
||||||
// Step 11.
|
// Step 11.
|
||||||
return Ok(node)
|
return Ok(node)
|
||||||
|
@ -1196,7 +1204,7 @@ impl Node {
|
||||||
fn insert(node: AbstractNode,
|
fn insert(node: AbstractNode,
|
||||||
parent: AbstractNode,
|
parent: AbstractNode,
|
||||||
child: Option<AbstractNode>,
|
child: Option<AbstractNode>,
|
||||||
suppress_observers: bool) {
|
suppress_observers: SuppressObserver) {
|
||||||
// XXX assert owner_doc
|
// XXX assert owner_doc
|
||||||
// Step 1-3: ranges.
|
// Step 1-3: ranges.
|
||||||
// Step 4.
|
// Step 4.
|
||||||
|
@ -1210,7 +1218,7 @@ impl Node {
|
||||||
match node.type_id() {
|
match node.type_id() {
|
||||||
DocumentFragmentNodeTypeId => {
|
DocumentFragmentNodeTypeId => {
|
||||||
for c in node.children() {
|
for c in node.children() {
|
||||||
Node::remove(c, node, true);
|
Node::remove(c, node, Suppressed);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => (),
|
_ => (),
|
||||||
|
@ -1224,10 +1232,13 @@ impl Node {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 9.
|
// Step 9.
|
||||||
if !suppress_observers {
|
match suppress_observers {
|
||||||
for node in nodes.iter() {
|
Unsuppressed => {
|
||||||
node.node_inserted();
|
for node in nodes.iter() {
|
||||||
|
node.node_inserted();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Suppressed => ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1253,12 +1264,12 @@ impl Node {
|
||||||
|
|
||||||
// Step 4.
|
// Step 4.
|
||||||
for child in parent.children() {
|
for child in parent.children() {
|
||||||
Node::remove(child, parent, true);
|
Node::remove(child, parent, Suppressed);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 5.
|
// Step 5.
|
||||||
match node {
|
match node {
|
||||||
Some(node) => Node::insert(node, parent, None, true),
|
Some(node) => Node::insert(node, parent, None, Suppressed),
|
||||||
None => (),
|
None => (),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1281,14 +1292,14 @@ impl Node {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 2.
|
// Step 2.
|
||||||
Node::remove(child, parent, false);
|
Node::remove(child, parent, Unsuppressed);
|
||||||
|
|
||||||
// Step 3.
|
// Step 3.
|
||||||
Ok(child)
|
Ok(child)
|
||||||
}
|
}
|
||||||
|
|
||||||
// http://dom.spec.whatwg.org/#concept-node-remove
|
// http://dom.spec.whatwg.org/#concept-node-remove
|
||||||
fn remove(node: AbstractNode, parent: AbstractNode, suppress_observers: bool) {
|
fn remove(node: AbstractNode, parent: AbstractNode, suppress_observers: SuppressObserver) {
|
||||||
assert!(node.parent_node() == Some(parent));
|
assert!(node.parent_node() == Some(parent));
|
||||||
|
|
||||||
// Step 1-5: ranges.
|
// Step 1-5: ranges.
|
||||||
|
@ -1298,8 +1309,9 @@ impl Node {
|
||||||
node.mut_node().flags.set_is_in_doc(false);
|
node.mut_node().flags.set_is_in_doc(false);
|
||||||
|
|
||||||
// Step 9.
|
// Step 9.
|
||||||
if !suppress_observers {
|
match suppress_observers {
|
||||||
node.node_removed();
|
Suppressed => (),
|
||||||
|
Unsuppressed => node.node_removed(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1455,13 +1467,11 @@ impl Node {
|
||||||
Node::adopt(node, parent.node().owner_doc());
|
Node::adopt(node, parent.node().owner_doc());
|
||||||
|
|
||||||
{
|
{
|
||||||
let suppress_observers = true;
|
|
||||||
|
|
||||||
// Step 10.
|
// Step 10.
|
||||||
Node::remove(child, parent, suppress_observers);
|
Node::remove(child, parent, Suppressed);
|
||||||
|
|
||||||
// Step 11.
|
// Step 11.
|
||||||
Node::insert(node, parent, reference_child, suppress_observers);
|
Node::insert(node, parent, reference_child, Suppressed);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 12-14.
|
// Step 12-14.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue