auto merge of #4280 : Ms2ger/servo/cleanup-node, r=jdm

This commit is contained in:
bors-servo 2014-12-08 13:55:08 -07:00
commit 368d6dc6bf

View file

@ -756,15 +756,12 @@ impl<'a> NodeHelpers<'a> for JSRef<'a, Node> {
// Step 3. // Step 3.
Ok(ref selectors) => { Ok(ref selectors) => {
let root = self.ancestors().last().unwrap_or(self.clone()); let root = self.ancestors().last().unwrap_or(self.clone());
for node in root.traverse_preorder() { Ok(root.traverse_preorder()
if node.is_element() && matches(selectors, &node, &mut None) { .filter_map(ElementCast::to_ref)
let elem: JSRef<Element> = ElementCast::to_ref(node).unwrap(); .find(|element| matches(selectors, &NodeCast::from_ref(*element), &mut None))
return Ok(Some(Temporary::from_rooted(elem))); .map(Temporary::from_rooted))
}
}
} }
} }
Ok(None)
} }
/// Get an iterator over all nodes which match a set of selectors /// Get an iterator over all nodes which match a set of selectors
@ -869,11 +866,9 @@ impl<'a> NodeHelpers<'a> for JSRef<'a, Node> {
publicId: "".to_string(), publicId: "".to_string(),
systemId: "".to_string(), systemId: "".to_string(),
attrs: if self.is_element() { attrs: match ElementCast::to_ref(self) {
let elem: JSRef<Element> = ElementCast::to_ref(self).unwrap(); Some(element) => element.summarize(),
elem.summarize() None => vec!(),
} else {
vec!()
}, },
isDocumentElement: isDocumentElement:
@ -1583,13 +1578,11 @@ impl Node {
}.root(); }.root();
// Step 3. // Step 3.
let document = if copy.is_document() { let document = match DocumentCast::to_ref(*copy) {
let doc: JSRef<Document> = DocumentCast::to_ref(*copy).unwrap(); Some(doc) => doc,
JS::from_rooted(doc).root() None => *document,
} else {
JS::from_rooted(*document).root()
}; };
assert!(&*copy.owner_doc().root() == &*document); assert!(*copy.owner_doc().root() == document);
// Step 4 (some data already copied in step 2). // Step 4 (some data already copied in step 2).
match node.type_id() { match node.type_id() {
@ -1622,7 +1615,7 @@ impl Node {
// Step 6. // Step 6.
if clone_children == CloneChildren { if clone_children == CloneChildren {
for child in node.children() { for child in node.children() {
let child_copy = Node::clone(child, Some(*document), clone_children).root(); let child_copy = Node::clone(child, Some(document), clone_children).root();
let _inserted_node = Node::pre_insert(*child_copy, *copy, None); let _inserted_node = Node::pre_insert(*child_copy, *copy, None);
} }
} }
@ -1738,16 +1731,11 @@ impl<'a> NodeMethods for JSRef<'a, Node> {
// http://dom.spec.whatwg.org/#dom-node-childnodes // http://dom.spec.whatwg.org/#dom-node-childnodes
fn ChildNodes(self) -> Temporary<NodeList> { fn ChildNodes(self) -> Temporary<NodeList> {
match self.child_list.get() { self.child_list.or_init(|| {
None => (), let doc = self.owner_doc().root();
Some(list) => return list, let window = doc.window().root();
} NodeList::new_child_list(*window, self)
})
let doc = self.owner_doc().root();
let window = doc.window().root();
let child_list = NodeList::new_child_list(*window, self);
self.child_list.assign(Some(child_list));
self.child_list.get().unwrap()
} }
// http://dom.spec.whatwg.org/#dom-node-firstchild // http://dom.spec.whatwg.org/#dom-node-firstchild
@ -2001,34 +1989,33 @@ impl<'a> NodeMethods for JSRef<'a, Node> {
fn Normalize(self) { fn Normalize(self) {
let mut prev_text = None; let mut prev_text = None;
for child in self.children() { for child in self.children() {
if child.is_text() { match TextCast::to_ref(child) {
let characterdata: JSRef<CharacterData> = CharacterDataCast::to_ref(child).unwrap(); Some(text) => {
if characterdata.Length() == 0 { let characterdata: JSRef<CharacterData> = CharacterDataCast::from_ref(text);
self.remove_child(child); if characterdata.Length() == 0 {
} else { self.remove_child(child);
match prev_text { } else {
Some(text_node) => { match prev_text {
let prev_characterdata: JSRef<CharacterData> = CharacterDataCast::to_ref(text_node).unwrap(); Some(text_node) => {
let _ = prev_characterdata.AppendData(characterdata.Data()); let prev_characterdata: JSRef<CharacterData> = CharacterDataCast::from_ref(text_node);
self.remove_child(child); let _ = prev_characterdata.AppendData(characterdata.Data());
}, self.remove_child(child);
None => prev_text = Some(child) },
None => prev_text = Some(text)
}
} }
},
None => {
child.Normalize();
prev_text = None;
} }
} else {
child.Normalize();
prev_text = None;
} }
} }
} }
// http://dom.spec.whatwg.org/#dom-node-clonenode // http://dom.spec.whatwg.org/#dom-node-clonenode
fn CloneNode(self, deep: bool) -> Temporary<Node> { fn CloneNode(self, deep: bool) -> Temporary<Node> {
match deep { Node::clone(self, None, if deep { CloneChildren } else { DoNotCloneChildren })
true => Node::clone(self, None, CloneChildren),
false => Node::clone(self, None, DoNotCloneChildren)
}
} }
// http://dom.spec.whatwg.org/#dom-node-isequalnode // http://dom.spec.whatwg.org/#dom-node-isequalnode
@ -2291,9 +2278,7 @@ impl<'a> style::TNode<'a, JSRef<'a, Element>> for JSRef<'a, Node> {
} }
fn as_element(self) -> JSRef<'a, Element> { fn as_element(self) -> JSRef<'a, Element> {
let elem: Option<JSRef<'a, Element>> = ElementCast::to_ref(self); ElementCast::to_ref(self).unwrap()
assert!(elem.is_some());
elem.unwrap()
} }
fn match_attr(self, attr: &style::AttrSelector, test: |&str| -> bool) -> bool { fn match_attr(self, attr: &style::AttrSelector, test: |&str| -> bool) -> bool {
@ -2318,9 +2303,7 @@ impl<'a> style::TNode<'a, JSRef<'a, Element>> for JSRef<'a, Node> {
} }
fn is_html_element_in_html_document(self) -> bool { fn is_html_element_in_html_document(self) -> bool {
let elem: Option<JSRef<'a, Element>> = ElementCast::to_ref(self); self.as_element().html_element_in_html_document()
assert!(elem.is_some());
elem.unwrap().html_element_in_html_document()
} }
fn has_changed(self) -> bool { self.get_has_changed() } fn has_changed(self) -> bool { self.get_has_changed() }