mirror of
https://github.com/servo/servo.git
synced 2025-08-04 13:10:20 +01:00
auto merge of #3871 : Ms2ger/servo/node-cleanup, r=Ms2ger
This commit is contained in:
commit
1a3ff8739c
1 changed files with 15 additions and 21 deletions
|
@ -59,7 +59,7 @@ use libc;
|
||||||
use libc::{uintptr_t, c_void};
|
use libc::{uintptr_t, c_void};
|
||||||
use std::cell::{Cell, RefCell, Ref, RefMut};
|
use std::cell::{Cell, RefCell, Ref, RefMut};
|
||||||
use std::default::Default;
|
use std::default::Default;
|
||||||
use std::iter::{Map, Filter, Peekable};
|
use std::iter::{FilterMap, Peekable};
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use style;
|
use style;
|
||||||
use style::ComputedValues;
|
use style::ComputedValues;
|
||||||
|
@ -777,13 +777,7 @@ impl<'a> NodeHelpers<'a> for JSRef<'a, Node> {
|
||||||
|
|
||||||
fn child_elements(self) -> ChildElementIterator<'a> {
|
fn child_elements(self) -> ChildElementIterator<'a> {
|
||||||
self.children()
|
self.children()
|
||||||
.filter(|node| {
|
.filter_map::<JSRef<Element>>(ElementCast::to_ref)
|
||||||
node.is_element()
|
|
||||||
})
|
|
||||||
.map(|node| {
|
|
||||||
let elem: JSRef<Element> = ElementCast::to_ref(node).unwrap();
|
|
||||||
elem.clone()
|
|
||||||
})
|
|
||||||
.peekable()
|
.peekable()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -967,10 +961,12 @@ impl RawLayoutNodeHelpers for Node {
|
||||||
// Iteration and traversal
|
// Iteration and traversal
|
||||||
//
|
//
|
||||||
|
|
||||||
pub type ChildElementIterator<'a> = Peekable<JSRef<'a, Element>,
|
pub type ChildElementIterator<'a> =
|
||||||
Map<'a, JSRef<'a, Node>,
|
Peekable<JSRef<'a, Element>,
|
||||||
JSRef<'a, Element>,
|
FilterMap<'a,
|
||||||
Filter<'a, JSRef<'a, Node>, NodeChildrenIterator<'a>>>>;
|
JSRef<'a, Node>,
|
||||||
|
JSRef<'a, Element>,
|
||||||
|
NodeChildrenIterator<'a>>>;
|
||||||
|
|
||||||
pub struct NodeChildrenIterator<'a> {
|
pub struct NodeChildrenIterator<'a> {
|
||||||
current: Option<JSRef<'a, Node>>,
|
current: Option<JSRef<'a, Node>>,
|
||||||
|
@ -1054,15 +1050,13 @@ impl NodeIterator {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn next_child<'b>(&self, node: JSRef<'b, Node>) -> Option<JSRef<'b, Node>> {
|
fn next_child<'b>(&self, node: JSRef<'b, Node>) -> Option<JSRef<'b, Node>> {
|
||||||
if !self.include_descendants_of_void && node.is_element() {
|
let skip = |element: JSRef<Element>| {
|
||||||
let elem: JSRef<Element> = ElementCast::to_ref(node).unwrap();
|
!self.include_descendants_of_void && element.is_void()
|
||||||
if elem.is_void() {
|
};
|
||||||
None
|
|
||||||
} else {
|
match ElementCast::to_ref(node) {
|
||||||
node.first_child().map(|child| (*child.root()).clone())
|
Some(element) if skip(element) => None,
|
||||||
}
|
_ => node.first_child().map(|child| (*child.root()).clone()),
|
||||||
} else {
|
|
||||||
node.first_child().map(|child| (*child.root()).clone())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue