diff --git a/components/script/dom/nodeiterator.rs b/components/script/dom/nodeiterator.rs index 0a37dfc3125b..33e630bd8cf4 100644 --- a/components/script/dom/nodeiterator.rs +++ b/components/script/dom/nodeiterator.rs @@ -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, + reference_node: MutNullableJS, 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> { + self.reference_node.get() + } + + // https://dom.spec.whatwg.org/#dom-nodeiterator-previousnode + fn PreviousNode(self) -> Fallible>> { + self.prev_node() + } + + // https://dom.spec.whatwg.org/#dom-nodeiterator-nextnode + fn NextNode(self) -> Fallible>> { + self.next_node() + } +} + +/* +trait PrivateNodeIteratorHelpers { + //fn accept_node(self, node: JSRef) -> Fallible; +} +*/ +pub trait NodeIteratorHelpers { + fn next_node(self) -> Fallible>>; + fn prev_node(self) -> Fallible>>; } +impl<'a> NodeIteratorHelpers for JSRef<'a, NodeIterator> { + // https://dom.spec.whatwg.org/#dom-nodeiterator-nextnode + fn next_node(self) -> Fallible>> { + Ok(None) + } + + // https://dom.spec.whatwg.org/#dom-nodeiterator-previousnode + fn prev_node(self) -> Fallible>> { + Ok(None) + } + +} + + #[jstraceable] pub enum Filter { None, diff --git a/components/script/dom/webidls/NodeIterator.webidl b/components/script/dom/webidls/NodeIterator.webidl index f1b08c32a142..6c25bf224f34 100644 --- a/components/script/dom/webidls/NodeIterator.webidl +++ b/components/script/dom/webidls/NodeIterator.webidl @@ -14,8 +14,8 @@ interface NodeIterator { [Constant] readonly attribute Node root; - // [Pure] - // readonly attribute Node? referenceNode; + [Pure] + readonly attribute Node? referenceNode; // [Pure] // readonly attribute boolean pointerBeforeReferenceNode; [Constant] @@ -23,10 +23,10 @@ interface NodeIterator { [Constant] readonly attribute NodeFilter? filter; - // [Throws] - // Node? nextNode(); - // [Throws] - // Node? previousNode(); + [Throws] + Node? nextNode(); + [Throws] + Node? previousNode(); // void detach(); };