aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/nodeiterator.rs
diff options
context:
space:
mode:
authorJinwoo Song <jinwoo7.song@samsung.com>2015-04-27 18:30:31 +0900
committerJinwoo Song <jinwoo7.song@samsung.com>2015-05-27 16:37:29 +0900
commit2701c264ab3a5fce34c3d925fedced193ecc2d19 (patch)
tree948f560f4e2ad06a17ca283d03a157813c1fa320 /components/script/dom/nodeiterator.rs
parentdf2f8d0636922a7e89895fa61fdba30099cec9ea (diff)
downloadservo-2701c264ab3a5fce34c3d925fedced193ecc2d19.tar.gz
servo-2701c264ab3a5fce34c3d925fedced193ecc2d19.zip
Implement NodeIterator's attributes
- root, whatToShow, and filter
Diffstat (limited to 'components/script/dom/nodeiterator.rs')
-rw-r--r--components/script/dom/nodeiterator.rs70
1 files changed, 64 insertions, 6 deletions
diff --git a/components/script/dom/nodeiterator.rs b/components/script/dom/nodeiterator.rs
index 374fbafab42..0a37dfc3125 100644
--- a/components/script/dom/nodeiterator.rs
+++ b/components/script/dom/nodeiterator.rs
@@ -3,23 +3,81 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::Bindings::NodeIteratorBinding;
+use dom::bindings::codegen::Bindings::NodeIteratorBinding::NodeIteratorMethods;
+use dom::bindings::codegen::Bindings::NodeFilterBinding::NodeFilter;
use dom::bindings::global::GlobalRef;
-use dom::bindings::js::Temporary;
+use dom::bindings::js::{JS, JSRef, Temporary};
use dom::bindings::utils::{Reflector, reflect_dom_object};
+use dom::document::{Document, DocumentHelpers};
+use dom::node::{Node};
#[dom_struct]
pub struct NodeIterator {
- reflector_: Reflector
+ reflector_: Reflector,
+ root_node: JS<Node>,
+ what_to_show: u32,
+ filter: Filter
}
impl NodeIterator {
- fn new_inherited() -> NodeIterator {
+ fn new_inherited(root_node: JSRef<Node>,
+ what_to_show: u32,
+ filter: Filter) -> NodeIterator {
NodeIterator {
- reflector_: Reflector::new()
+ reflector_: Reflector::new(),
+ root_node: JS::from_rooted(root_node),
+ what_to_show: what_to_show,
+ filter: filter
}
}
- pub fn new(global: GlobalRef) -> Temporary<NodeIterator> {
- reflect_dom_object(box NodeIterator::new_inherited(), global, NodeIteratorBinding::Wrap)
+ pub fn new_with_filter(document: JSRef<Document>,
+ root_node: JSRef<Node>,
+ what_to_show: u32,
+ filter: Filter) -> Temporary<NodeIterator> {
+ let window = document.window().root();
+ reflect_dom_object(box NodeIterator::new_inherited(root_node, what_to_show, filter),
+ GlobalRef::Window(window.r()),
+ NodeIteratorBinding::Wrap)
}
+
+ pub fn new(document: JSRef<Document>,
+ root_node: JSRef<Node>,
+ what_to_show: u32,
+ node_filter: Option<NodeFilter>) -> Temporary<NodeIterator> {
+ let filter = match node_filter {
+ None => Filter::None,
+ Some(jsfilter) => Filter::JS(jsfilter)
+ };
+ NodeIterator::new_with_filter(document, root_node, what_to_show, filter)
+ }
+}
+
+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)
+ }
+
+ // https://dom.spec.whatwg.org/#dom-nodeiterator-whattoshow
+ fn WhatToShow(self) -> u32 {
+ self.what_to_show
+ }
+
+ // https://dom.spec.whatwg.org/#dom-nodeiterator-filter
+ fn GetFilter(self) -> Option<NodeFilter> {
+ match self.filter {
+ Filter::None => None,
+ Filter::JS(nf) => Some(nf),
+ Filter::Native(_) => panic!("Cannot convert native node filter to DOM NodeFilter")
+ }
+ }
+
+}
+
+#[jstraceable]
+pub enum Filter {
+ None,
+ Native(fn (node: JSRef<Node>) -> u16),
+ JS(NodeFilter)
}