diff --git a/src/components/script/dom/element.rs b/src/components/script/dom/element.rs index 62d591ad46b..d5e3755913b 100644 --- a/src/components/script/dom/element.rs +++ b/src/components/script/dom/element.rs @@ -120,12 +120,12 @@ pub enum ElementTypeId { // Element methods // -impl<'self> ElementLike<'self> for Element { - fn get_local_name(&'self self) -> &'self str { +impl ElementLike for Element { + fn get_local_name<'a>(&'a self) -> &'a str { self.tag_name.as_slice() } - fn get_attr(&'self self, name: &str) -> Option<&'self str> { + fn get_attr<'a>(&'a self, name: &str) -> Option<&'a str> { // FIXME: Need an each() that links lifetimes in Rust. for attr in self.attrs.iter() { // FIXME: only case-insensitive in the HTML namespace (as opposed to SVG, etc.) diff --git a/src/components/script/dom/node.rs b/src/components/script/dom/node.rs index e8b5eb3fc16..d661e9d53d1 100644 --- a/src/components/script/dom/node.rs +++ b/src/components/script/dom/node.rs @@ -25,7 +25,7 @@ use extra::arc::Arc; use js::jsapi::{JSObject, JSContext}; use netsurfcss::util::VoidPtrLike; use newcss::complete::CompleteSelectResults; -use servo_util::tree::{TreeNode, TreeNodeRef}; +use servo_util::tree::{TreeNode, TreeNodeRef, TreeNodeRefAsElement}; use servo_util::range::Range; use gfx::display_list::DisplayList; @@ -156,6 +156,14 @@ impl TreeNodeRef> for AbstractNode { } } +impl TreeNodeRefAsElement, Element> for AbstractNode { + #[inline] + fn with_imm_element_like(self, f: &fn(&Element) -> R) -> R { + self.with_imm_element(f) + } +} + + impl TreeNode> for Node { } impl<'self, View> AbstractNode { diff --git a/src/components/util/tree.rs b/src/components/util/tree.rs index 70f75b5f3c5..42125743f7c 100644 --- a/src/components/util/tree.rs +++ b/src/components/util/tree.rs @@ -250,6 +250,10 @@ pub trait TreeNodeRef: Clone { } } +pub trait TreeNodeRefAsElement: TreeNodeRef { + fn with_imm_element_like(self, f: &fn(&E) -> R) -> R; +} + fn gather>(cur: &Ref, refs: &mut ~[Ref], postorder: bool, prune: &fn(&Ref) -> bool) { // prune shouldn't mutate, so don't clone @@ -326,7 +330,7 @@ pub trait TreeNode> { } -pub trait ElementLike<'self> { - fn get_local_name(&'self self) -> &'self str; - fn get_attr(&'self self, name: &str) -> Option<&'self str>; +pub trait ElementLike { + fn get_local_name<'a>(&'a self) -> &'a str; + fn get_attr<'a>(&'a self, name: &str) -> Option<&'a str>; }