diff options
-rw-r--r-- | components/script/dom/element.rs | 22 | ||||
-rw-r--r-- | components/script/parse/html.rs | 16 |
2 files changed, 12 insertions, 26 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 37bf2d2ca23..cc3a6304eb3 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -1172,11 +1172,10 @@ impl<'a> ElementMethods for JSRef<'a, Element> { } fn SetInnerHTML(self, value: DOMString) -> Fallible<()> { - // 1. Let fragment be the result of invoking the fragment parsing algorithm - // with the new value as markup, and the context object as the context element. - // 2. Replace all with fragment within the context object. let context_node: JSRef<Node> = NodeCast::from_ref(self); + // Step 1. let frag = try!(context_node.parse_fragment(value)); + // Step 2. Node::replace_all(Some(NodeCast::from_ref(frag.root().r())), context_node); Ok(()) } @@ -1188,22 +1187,18 @@ impl<'a> ElementMethods for JSRef<'a, Element> { fn SetOuterHTML(self, value: DOMString) -> Fallible<()> { let context_document = document_from_node(self).root(); let context_node: JSRef<Node> = NodeCast::from_ref(self); - // 1. Let parent be the context object's parent. + // Step 1. let context_parent = match context_node.parent_node() { - // 2. If parent is null, terminate these steps. + // Step 2. None => return Ok(()), Some(parent) => parent.root() }; let parent: Root<Node> = match context_parent.r().type_id() { - // 3. If parent is a Document, throw a DOMException - // with name "NoModificationAllowedError" exception. + // Step 3. NodeTypeId::Document => return Err(NoModificationAllowed), - // 4. If parent is a DocumentFragment, let parent be a new Element with - // body as its local name, - // The HTML namespace as its namespace, and - // The context object's node document as its node document. + // Step 4. NodeTypeId::DocumentFragment => { let body_elem = Element::create(QualName::new(ns!(HTML), atom!(body)), None, context_document.r(), @@ -1214,10 +1209,9 @@ impl<'a> ElementMethods for JSRef<'a, Element> { _ => context_node.parent_node().unwrap().root() }; - // 5. Let fragment be the result of invoking the fragment parsing algorithm with - // the new value as markup, and parent as the context element. - // 6. Replace the context object with fragment within the context object's parent. + // Step 5. let frag = try!(parent.r().parse_fragment(value)); + // Step 6. try!(context_parent.r().ReplaceChild(NodeCast::from_ref(frag.root().r()), context_node)); Ok(()) diff --git a/components/script/parse/html.rs b/components/script/parse/html.rs index ad8c56ba613..f6cf86bf122 100644 --- a/components/script/parse/html.rs +++ b/components/script/parse/html.rs @@ -336,24 +336,16 @@ pub fn parse_html_fragment(context_node: JSRef<Node>, input: DOMString) -> Vec<T let context_document = document_from_node(context_node).root(); let url = context_document.r().url(); - // 1. Create a new Document node, and mark it as being an HTML document. + // Step 1. let document = Document::new(window.r(), Some(url.clone()), IsHTMLDocument::HTMLDocument, None, None, DocumentSource::FromParser).root(); - // 2. If the node document of the context element is in quirks mode, - // then let the Document be in quirks mode. Otherwise, - // the node document of the context element is in limited-quirks mode, - // then let the Document be in limited-quirks mode. Otherwise, - // leave the Document in no-quirks mode. + // Step 2. document.r().set_quirks_mode(context_document.r().quirks_mode()); - // 11. Set the parser's form element pointer to the nearest node to - // the context element that is a form element (going straight up - // the ancestor chain, and including the element itself, if it - // is a form element), if any. (If there is no such form element, - // the form element pointer keeps its initial value, null.) + // Step 11. let form = context_node.inclusive_ancestors() .find(|element| element.is_htmlformelement()); let fragment_context = FragmentContext { @@ -362,7 +354,7 @@ pub fn parse_html_fragment(context_node: JSRef<Node>, input: DOMString) -> Vec<T }; parse_html(document.r(), HTMLInput::InputString(input), &url, Some(fragment_context)); - // "14. Return the child nodes of root, in tree order." + // 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() |