Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement NodeIterator #5981

Merged
merged 5 commits into from May 28, 2015
Merged

Implement Document.createNodeIterator and rebase patch

  • Loading branch information
Jinwoo-Song committed May 27, 2015
commit 4e8005cd5bc033849e16dd3c164f4d4582c61b5c
@@ -58,6 +58,7 @@ use dom::keyboardevent::KeyboardEvent;
use dom::messageevent::MessageEvent;
use dom::node::{self, Node, NodeHelpers, NodeTypeId, CloneChildrenFlag, NodeDamage, window_from_node};
use dom::nodelist::NodeList;
use dom::nodeiterator::NodeIterator;
use dom::text::Text;
use dom::processinginstruction::ProcessingInstruction;
use dom::range::Range;
@@ -1363,6 +1364,12 @@ impl<'a> DocumentMethods for JSRef<'a, Document> {
Range::new_with_doc(self)
}

// https://dom.spec.whatwg.org/#dom-document-createnodeiterator
fn CreateNodeIterator(self, root: JSRef<Node>, whatToShow: u32, filter: Option<NodeFilter>)
-> Temporary<NodeIterator> {
NodeIterator::new(self, root, whatToShow, filter)
}

// https://dom.spec.whatwg.org/#dom-document-createtreewalker
fn CreateTreeWalker(self, root: JSRef<Node>, whatToShow: u32, filter: Option<NodeFilter>)
-> Temporary<TreeWalker> {
@@ -7,18 +7,16 @@ use dom::bindings::codegen::Bindings::NodeIteratorBinding::NodeIteratorMethods;
use dom::bindings::codegen::Bindings::NodeFilterBinding::NodeFilter;
use dom::bindings::error::Fallible;
use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::js::MutNullableJS;
use dom::bindings::js::{JS, JSRef, MutNullableHeap, Temporary, Rootable};
use dom::bindings::utils::{Reflector, reflect_dom_object};
use dom::document::{Document, DocumentHelpers};
use dom::node::{Node};
use std::default::Default;

#[dom_struct]
pub struct NodeIterator {
reflector_: Reflector,
root_node: JS<Node>,
reference_node: MutNullableJS<Node>,
reference_node: MutNullableHeap<JS<Node>>,

This comment has been minimized.

@nox

nox May 8, 2015

Member

AFAICT you never set it to None, so MutHeap would be enough here.

what_to_show: u32,
filter: Filter
}
@@ -30,7 +28,7 @@ impl NodeIterator {
NodeIterator {
reflector_: Reflector::new(),
root_node: JS::from_rooted(root_node),
reference_node: Default::default(),
reference_node: MutNullableHeap::new(Some(JS::from_rooted(root_node))),
what_to_show: what_to_show,
filter: filter
}
@@ -61,7 +59,7 @@ impl NodeIterator {
impl<'a> NodeIteratorMethods for JSRef<'a, NodeIterator> {
// https://dom.spec.whatwg.org/#dom-nodeiterator-root
fn Root(self) -> Temporary<Node> {
Temporary::new(self.root_node)
Temporary::from_rooted(self.root_node)
}

// https://dom.spec.whatwg.org/#dom-nodeiterator-whattoshow
@@ -80,7 +78,7 @@ impl<'a> NodeIteratorMethods for JSRef<'a, NodeIterator> {

// https://dom.spec.whatwg.org/#dom-nodeiterator-referencenode
fn GetReferenceNode(self) -> Option<Temporary<Node>> {
self.reference_node.get()
self.reference_node.get().map(Temporary::from_rooted)
}

// https://dom.spec.whatwg.org/#dom-nodeiterator-previousnode
@@ -58,8 +58,8 @@ interface Document : Node {
Range createRange();

// NodeFilter.SHOW_ALL = 0xFFFFFFFF
// [NewObject]
// NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
[NewObject]
NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
[NewObject]
TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
};
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.