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 more NodeIterator attribute and methods

Just implement the skelectons
 - referenceNode attribute
 - nextNode() and previousNode()
  • Loading branch information
Jinwoo-Song committed May 27, 2015
commit 0e4c792dc5c061ed2b4faad8619ccb63ba30abfe
@@ -5,16 +5,20 @@
use dom::bindings::codegen::Bindings::NodeIteratorBinding;
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::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>,
what_to_show: u32,
filter: Filter
}
@@ -26,6 +30,7 @@ impl NodeIterator {
NodeIterator {
reflector_: Reflector::new(),
root_node: JS::from_rooted(root_node),
reference_node: Default::default(),
what_to_show: what_to_show,
filter: filter
}
@@ -73,8 +78,46 @@ 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()
}

// https://dom.spec.whatwg.org/#dom-nodeiterator-previousnode
fn PreviousNode(self) -> Fallible<Option<Temporary<Node>>> {
self.prev_node()
}

// https://dom.spec.whatwg.org/#dom-nodeiterator-nextnode
fn NextNode(self) -> Fallible<Option<Temporary<Node>>> {
self.next_node()
}
}

/*
trait PrivateNodeIteratorHelpers {
//fn accept_node(self, node: JSRef<Node>) -> Fallible<u16>;
}
*/
pub trait NodeIteratorHelpers {
fn next_node(self) -> Fallible<Option<Temporary<Node>>>;
fn prev_node(self) -> Fallible<Option<Temporary<Node>>>;
}

impl<'a> NodeIteratorHelpers for JSRef<'a, NodeIterator> {
// https://dom.spec.whatwg.org/#dom-nodeiterator-nextnode
fn next_node(self) -> Fallible<Option<Temporary<Node>>> {
Ok(None)
}

// https://dom.spec.whatwg.org/#dom-nodeiterator-previousnode
fn prev_node(self) -> Fallible<Option<Temporary<Node>>> {
Ok(None)
}

}


#[jstraceable]
pub enum Filter {
None,
@@ -14,19 +14,19 @@
interface NodeIterator {
[Constant]
readonly attribute Node root;
// [Pure]
// readonly attribute Node? referenceNode;
[Pure]
readonly attribute Node? referenceNode;
// [Pure]
// readonly attribute boolean pointerBeforeReferenceNode;
[Constant]
readonly attribute unsigned long whatToShow;
[Constant]
readonly attribute NodeFilter? filter;

// [Throws]
// Node? nextNode();
// [Throws]
// Node? previousNode();
[Throws]
Node? nextNode();
[Throws]
Node? previousNode();

// void detach();
};
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.