From 8c3b8fe3d48617bda8204c33149db0ae3e94014c Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Sun, 11 Nov 2012 14:31:49 -0800 Subject: [PATCH] css, submodules: Implement named-ancestor-node --- src/rust-css | 2 +- src/rust-netsurfcss | 2 +- src/servo/css/select_handler.rs | 25 ++++++++++++++++++++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/rust-css b/src/rust-css index 7f9bd3c32ba..3bbe4ed4fc3 160000 --- a/src/rust-css +++ b/src/rust-css @@ -1 +1 @@ -Subproject commit 7f9bd3c32baae72bec864085e81df7773542f790 +Subproject commit 3bbe4ed4fc3d642e1e651ff3d8123c9dca626c22 diff --git a/src/rust-netsurfcss b/src/rust-netsurfcss index 6f7633390e7..cb49f5f7b4a 160000 --- a/src/rust-netsurfcss +++ b/src/rust-netsurfcss @@ -1 +1 @@ -Subproject commit 6f7633390e76a08ee2bb43fafdbe8ba5d0890896 +Subproject commit cb49f5f7b4ae92c70b374b544d6e3f5ab1e3da26 diff --git a/src/servo/css/select_handler.rs b/src/servo/css/select_handler.rs index 02a583e2a08..0ac1ba30b1c 100644 --- a/src/servo/css/select_handler.rs +++ b/src/servo/css/select_handler.rs @@ -40,7 +40,30 @@ impl NodeSelectHandler: SelectHandler { tree::parent(&NodeTree, node) } + // TODO: Use a Bloom filter. + fn named_ancestor_node(node: &Node, name: &str) -> Option { + let mut node = *node; + loop { + let parent = tree::parent(&NodeTree, &node); + match parent { + Some(parent) => { + let mut found = false; + do parent.read |data| { + if name == node_name(data) { + found = true; + } + } + if found { + return Some(parent); + } + node = parent; + } + None => return None + } + } + } + fn node_is_root(node: &Node) -> bool { self.parent_node(node).is_none() } -} \ No newline at end of file +}