aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/document.rs19
-rw-r--r--components/script/page.rs20
2 files changed, 22 insertions, 17 deletions
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index cccb2658d40..9a547c98efd 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -171,6 +171,7 @@ pub trait DocumentHelpers<'a> {
fn unregister_named_element(self, to_unregister: JSRef<Element>, id: Atom);
fn register_named_element(self, element: JSRef<Element>, id: Atom);
fn load_anchor_href(self, href: DOMString);
+ fn find_fragment_node(self, fragid: DOMString) -> Option<Temporary<Element>>;
}
impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> {
@@ -276,6 +277,24 @@ impl<'a> DocumentHelpers<'a> for JSRef<'a, Document> {
let window = self.window.root();
window.load_url(href);
}
+
+ /// Attempt to find a named element in this page's document.
+ fn find_fragment_node(self, fragid: DOMString) -> Option<Temporary<Element>> {
+ match self.GetElementById(fragid.clone()) {
+ Some(node) => Some(node),
+ None => {
+ let doc_node: JSRef<Node> = NodeCast::from_ref(self);
+ let mut anchors = doc_node.traverse_preorder()
+ .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| {
+ attr.deref().value().as_slice() == fragid.as_slice()
+ })
+ }).map(|node| Temporary::from_rooted(ElementCast::to_ref(node).unwrap()))
+ }
+ }
+ }
}
impl Document {
diff --git a/components/script/page.rs b/components/script/page.rs
index b25be6122bb..f3d54a421ae 100644
--- a/components/script/page.rs
+++ b/components/script/page.rs
@@ -2,15 +2,14 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-use dom::attr::AttrHelpers;
use dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods;
-use dom::bindings::codegen::InheritTypes::{NodeCast, ElementCast};
+use dom::bindings::codegen::InheritTypes::NodeCast;
use dom::bindings::js::{MutNullableJS, JS, JSRef, Temporary};
use dom::bindings::js::OptionalRootable;
use dom::bindings::trace::{Traceable, Untraceable};
use dom::bindings::utils::GlobalStaticData;
use dom::document::{Document, DocumentHelpers};
-use dom::element::{Element, AttributeHandlers};
+use dom::element::Element;
use dom::node::{Node, NodeHelpers};
use dom::window::Window;
use layout_interface::{DocumentDamage, ReflowForDisplay};
@@ -393,20 +392,7 @@ impl Page {
/// Attempt to find a named element in this page's document.
pub fn find_fragment_node(&self, fragid: DOMString) -> Option<Temporary<Element>> {
let document = self.frame().as_ref().unwrap().document.root();
- match document.deref().GetElementById(fragid.to_string()) {
- Some(node) => Some(node),
- None => {
- let doc_node: JSRef<Node> = NodeCast::from_ref(*document);
- let mut anchors = doc_node.traverse_preorder()
- .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| {
- attr.deref().value().as_slice() == fragid.as_slice()
- })
- }).map(|node| Temporary::from_rooted(ElementCast::to_ref(node).unwrap()))
- }
- }
+ document.find_fragment_node(fragid)
}
pub fn hit_test(&self, point: &Point2D<f32>) -> Option<UntrustedNodeAddress> {