diff options
author | Chris Paris <cap@chrisparis.org> | 2015-04-01 16:10:43 -1000 |
---|---|---|
committer | Chris Paris <cap@chrisparis.org> | 2015-04-06 12:59:54 -1000 |
commit | f76a137344dfcc78d4d7c01dced36dad3591e35e (patch) | |
tree | 5f4452a7ec3480aa89e29db4fc4c758bdb2ed733 /components | |
parent | 6422f3857430a50a320bf004023988a1d0c22273 (diff) | |
download | servo-f76a137344dfcc78d4d7c01dced36dad3591e35e.tar.gz servo-f76a137344dfcc78d4d7c01dced36dad3591e35e.zip |
Produce output of fragment parsing in &mut RootedVec<JS<Node>> argument
Diffstat (limited to 'components')
-rw-r--r-- | components/script/dom/node.rs | 16 | ||||
-rw-r--r-- | components/script/parse/html.rs | 11 |
2 files changed, 15 insertions, 12 deletions
diff --git a/components/script/dom/node.rs b/components/script/dom/node.rs index 3b49ba01ba9..7cd01875b15 100644 --- a/components/script/dom/node.rs +++ b/components/script/dom/node.rs @@ -936,16 +936,16 @@ impl<'a> NodeHelpers<'a> for JSRef<'a, Node> { fn parse_fragment(self, markup: DOMString) -> Fallible<Temporary<DocumentFragment>> { let context_node: JSRef<Node> = NodeCast::from_ref(self); let context_document = document_from_node(self).root(); - let new_children = - if context_document.r().is_html_document() { - parse_html_fragment(context_node, markup) - } else { - // FIXME: XML case - unimplemented!() - }; + let mut new_children: RootedVec<JS<Node>> = RootedVec::new(); + if context_document.r().is_html_document() { + parse_html_fragment(context_node, markup, &mut new_children); + } else { + // FIXME: XML case + unimplemented!(); + } let fragment = DocumentFragment::new(context_document.r()).root(); let fragment_node: JSRef<Node> = NodeCast::from_ref(fragment.r()); - for node in new_children { + for node in new_children.iter() { fragment_node.AppendChild(node.root().r()).unwrap(); } Ok(Temporary::from_rooted(fragment.r())) diff --git a/components/script/parse/html.rs b/components/script/parse/html.rs index f6cf86bf122..2aecd9264e9 100644 --- a/components/script/parse/html.rs +++ b/components/script/parse/html.rs @@ -12,6 +12,7 @@ use dom::bindings::codegen::InheritTypes::{DocumentTypeCast, TextCast, CommentCa use dom::bindings::codegen::InheritTypes::ProcessingInstructionCast; use dom::bindings::codegen::InheritTypes::HTMLFormElementDerived; use dom::bindings::js::{JS, JSRef, Temporary, OptionalRootable, Root}; +use dom::bindings::trace::RootedVec; use dom::comment::Comment; use dom::document::{Document, DocumentHelpers}; use dom::document::{DocumentSource, IsHTMLDocument}; @@ -331,7 +332,9 @@ pub fn parse_html(document: JSRef<Document>, } // https://html.spec.whatwg.org/multipage/syntax.html#parsing-html-fragments -pub fn parse_html_fragment(context_node: JSRef<Node>, input: DOMString) -> Vec<Temporary<Node>> { +pub fn parse_html_fragment(context_node: JSRef<Node>, + input: DOMString, + output: &mut RootedVec<JS<Node>>) { let window = window_from_node(context_node).root(); let context_document = document_from_node(context_node).root(); let url = context_document.r().url(); @@ -357,7 +360,7 @@ pub fn parse_html_fragment(context_node: JSRef<Node>, input: DOMString) -> Vec<T // Step 14. let root_element = document.r().GetDocumentElement().expect("no document element").root(); let root_node: JSRef<Node> = NodeCast::from_ref(root_element.r()); - root_node.children() - .map(|node| Temporary::from_rooted(node)) - .collect() + for child in root_node.children() { + output.push(JS::from_rooted(child)); + } } |