mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
Cleanup Document.find_fragment_node.
This commit is contained in:
parent
76d1d78cc0
commit
c96018152f
1 changed files with 11 additions and 7 deletions
|
@ -12,7 +12,7 @@ use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
|
||||||
use dom::bindings::codegen::InheritTypes::{DocumentDerived, EventCast, HTMLElementCast};
|
use dom::bindings::codegen::InheritTypes::{DocumentDerived, EventCast, HTMLElementCast};
|
||||||
use dom::bindings::codegen::InheritTypes::{HTMLHeadElementCast, TextCast, ElementCast};
|
use dom::bindings::codegen::InheritTypes::{HTMLHeadElementCast, TextCast, ElementCast};
|
||||||
use dom::bindings::codegen::InheritTypes::{DocumentTypeCast, HTMLHtmlElementCast, NodeCast};
|
use dom::bindings::codegen::InheritTypes::{DocumentTypeCast, HTMLHtmlElementCast, NodeCast};
|
||||||
use dom::bindings::codegen::InheritTypes::EventTargetCast;
|
use dom::bindings::codegen::InheritTypes::{EventTargetCast, HTMLAnchorElementCast};
|
||||||
use dom::bindings::codegen::InheritTypes::{HTMLAnchorElementDerived, HTMLAppletElementDerived};
|
use dom::bindings::codegen::InheritTypes::{HTMLAnchorElementDerived, HTMLAppletElementDerived};
|
||||||
use dom::bindings::codegen::InheritTypes::{HTMLAreaElementDerived, HTMLEmbedElementDerived};
|
use dom::bindings::codegen::InheritTypes::{HTMLAreaElementDerived, HTMLEmbedElementDerived};
|
||||||
use dom::bindings::codegen::InheritTypes::{HTMLFormElementDerived, HTMLImageElementDerived};
|
use dom::bindings::codegen::InheritTypes::{HTMLFormElementDerived, HTMLImageElementDerived};
|
||||||
|
@ -36,6 +36,7 @@ use dom::element::{HTMLHtmlElementTypeId, HTMLHeadElementTypeId, HTMLTitleElemen
|
||||||
use dom::element::{HTMLBodyElementTypeId, HTMLFrameSetElementTypeId};
|
use dom::element::{HTMLBodyElementTypeId, HTMLFrameSetElementTypeId};
|
||||||
use dom::event::Event;
|
use dom::event::Event;
|
||||||
use dom::eventtarget::{EventTarget, NodeTargetTypeId, EventTargetHelpers};
|
use dom::eventtarget::{EventTarget, NodeTargetTypeId, EventTargetHelpers};
|
||||||
|
use dom::htmlanchorelement::HTMLAnchorElement;
|
||||||
use dom::htmlcollection::{HTMLCollection, CollectionFilter};
|
use dom::htmlcollection::{HTMLCollection, CollectionFilter};
|
||||||
use dom::htmlelement::HTMLElement;
|
use dom::htmlelement::HTMLElement;
|
||||||
use dom::htmlheadelement::HTMLHeadElement;
|
use dom::htmlheadelement::HTMLHeadElement;
|
||||||
|
@ -279,19 +280,22 @@ impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Attempt to find a named element in this page's document.
|
/// Attempt to find a named element in this page's document.
|
||||||
|
/// https://html.spec.whatwg.org/multipage/#the-indicated-part-of-the-document
|
||||||
fn find_fragment_node(self, fragid: DOMString) -> Option<Temporary<Element>> {
|
fn find_fragment_node(self, fragid: DOMString) -> Option<Temporary<Element>> {
|
||||||
match self.GetElementById(fragid.clone()) {
|
match self.GetElementById(fragid.clone()) {
|
||||||
Some(node) => Some(node),
|
Some(node) => Some(node),
|
||||||
None => {
|
None => {
|
||||||
let doc_node: JSRef<Node> = NodeCast::from_ref(self);
|
let check_anchor = |&node: &JSRef<HTMLAnchorElement>| {
|
||||||
let mut anchors = doc_node.traverse_preorder()
|
let elem: JSRef<Element> = ElementCast::from_ref(node);
|
||||||
.filter(|node| node.is_anchor_element());
|
|
||||||
anchors.find(|node| {
|
|
||||||
let elem: JSRef<Element> = ElementCast::to_ref(*node).unwrap();
|
|
||||||
elem.get_attribute(ns!(""), "name").root().map_or(false, |attr| {
|
elem.get_attribute(ns!(""), "name").root().map_or(false, |attr| {
|
||||||
attr.deref().value().as_slice() == fragid.as_slice()
|
attr.deref().value().as_slice() == fragid.as_slice()
|
||||||
})
|
})
|
||||||
}).map(|node| Temporary::from_rooted(ElementCast::to_ref(node).unwrap()))
|
};
|
||||||
|
let doc_node: JSRef<Node> = NodeCast::from_ref(self);
|
||||||
|
doc_node.traverse_preorder()
|
||||||
|
.filter_map(|node| HTMLAnchorElementCast::to_ref(node))
|
||||||
|
.find(check_anchor)
|
||||||
|
.map(|node| Temporary::from_rooted(ElementCast::from_ref(node)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue