From 14b85e0e600ce21f1355c772372001c8bf65202a Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Thu, 13 Feb 2014 10:10:49 +0530 Subject: Make find_fragment_node a method of Page. --- src/components/script/script_task.rs | 39 ++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 20 deletions(-) (limited to 'src/components/script/script_task.rs') diff --git a/src/components/script/script_task.rs b/src/components/script/script_task.rs index dcee911c46a..a585c320ad9 100644 --- a/src/components/script/script_task.rs +++ b/src/components/script/script_task.rs @@ -405,6 +405,23 @@ impl Page { } } + fn find_fragment_node(&self, fragid: ~str) -> Option> { + let document = self.frame().get_ref().document.clone(); + match document.get().GetElementById(fragid.to_owned()) { + Some(node) => Some(node), + None => { + let doc_node: JS = NodeCast::from(&document); + let mut anchors = doc_node.traverse_preorder().filter(|node| node.is_anchor_element()); + anchors.find(|node| { + let elem: JS = ElementCast::to(node).unwrap(); + elem.get_attribute(Null, "name").map_or(false, |attr| { + attr.get().value_ref() == fragid + }) + }).map(|node| ElementCast::to(&node).unwrap()) + } + } + } + pub fn initialize_js_info(&self, js_context: Rc, global: *JSObject) { assert!(global.is_not_null()); @@ -896,30 +913,12 @@ impl ScriptTask { let _ = wintarget.get_mut().dispatch_event_with_target(&winclone, Some(doctarget), &mut event); let mut fragment_node = page.fragment_node.borrow_mut(); - *fragment_node = fragment.map_or(None, |fragid| self.find_fragment_node(page, fragid)); + *fragment_node = fragment.map_or(None, |fragid| page.find_fragment_node(fragid)); let ConstellationChan(ref chan) = self.constellation_chan; chan.send(LoadCompleteMsg(page.id, url)); } - fn find_fragment_node(&self, page: &Page, fragid: ~str) -> Option> { - let frame = page.frame(); - let document = frame.get_ref().document.clone(); - match document.get().GetElementById(fragid.to_owned()) { - Some(node) => Some(node), - None => { - let doc_node: JS = NodeCast::from(&document); - let mut anchors = doc_node.traverse_preorder().filter(|node| node.is_anchor_element()); - anchors.find(|node| { - let elem: JS = ElementCast::to(node).unwrap(); - elem.get_attribute(Null, "name").map_or(false, |attr| { - attr.get().value_ref() == fragid - }) - }).map(|node| ElementCast::to(&node).unwrap()) - } - } - } - fn scroll_fragment_point(&self, pipeline_id: PipelineId, page: &Page, node: JS) { let (chan, port) = channel(); let node: JS = NodeCast::from(&node); @@ -1122,7 +1121,7 @@ impl ScriptTask { let url = parse_url(href.get().value_ref(), base_url); if click_frag { - match self.find_fragment_node(page, url.fragment.unwrap()) { + match page.find_fragment_node(url.fragment.unwrap()) { Some(node) => self.scroll_fragment_point(page.id, page, node), None => {} } -- cgit v1.2.3