mirror of
https://github.com/servo/servo.git
synced 2025-08-05 05:30:08 +01:00
auto merge of #4280 : Ms2ger/servo/cleanup-node, r=jdm
This commit is contained in:
commit
368d6dc6bf
1 changed files with 38 additions and 55 deletions
|
@ -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() }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue