diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-03-18 18:06:49 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-03-18 18:06:49 -0600 |
commit | 1236280bea969cb3e92b27868db418be016c64a5 (patch) | |
tree | 74a17e4cb4a60dce4f0485d671ce7ee1efd3f26e /components/script/dom/element.rs | |
parent | b2fb06d6e25d6728d6000c283ed1dab1e8bfabb1 (diff) | |
parent | a5d6c6a1fc60975b4901914c183624a13f496c4c (diff) | |
download | servo-1236280bea969cb3e92b27868db418be016c64a5.tar.gz servo-1236280bea969cb3e92b27868db418be016c64a5.zip |
auto merge of #5029 : ChrisParis/servo/h5e-serialize, r=jdm
Fixes https://github.com/servo/servo/issues/3713. Depends on https://github.com/servo/html5ever/pull/100 and https://github.com/servo/html5ever/pull/101.
Diffstat (limited to 'components/script/dom/element.rs')
-rw-r--r-- | components/script/dom/element.rs | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index da9d4691f2b..3d7ddff05a5 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -44,14 +44,13 @@ use dom::htmlbodyelement::{HTMLBodyElement, HTMLBodyElementHelpers}; use dom::htmlcollection::HTMLCollection; use dom::htmlelement::HTMLElementTypeId; use dom::htmlinputelement::{HTMLInputElement, RawLayoutHTMLInputElementHelpers, HTMLInputElementHelpers}; -use dom::htmlserializer::serialize; use dom::htmltableelement::{HTMLTableElement, HTMLTableElementHelpers}; use dom::htmltablecellelement::{HTMLTableCellElement, HTMLTableCellElementHelpers}; use dom::htmltablerowelement::{HTMLTableRowElement, HTMLTableRowElementHelpers}; use dom::htmltablesectionelement::{HTMLTableSectionElement, HTMLTableSectionElementHelpers}; use dom::htmltextareaelement::{HTMLTextAreaElement, RawLayoutHTMLTextAreaElementHelpers}; use dom::node::{CLICK_IN_PROGRESS, LayoutNodeHelpers, Node, NodeHelpers, NodeTypeId}; -use dom::node::{NodeIterator, document_from_node, NodeDamage}; +use dom::node::{document_from_node, NodeDamage}; use dom::node::{window_from_node}; use dom::nodelist::NodeList; use dom::servohtmlparser::FragmentContext; @@ -66,6 +65,10 @@ use style; use util::namespace; use util::str::{DOMString, LengthOrPercentageOrAuto}; +use html5ever::serialize; +use html5ever::serialize::SerializeOpts; +use html5ever::serialize::TraversalScope; +use html5ever::serialize::TraversalScope::{IncludeNode, ChildrenOnly}; use html5ever::tree_builder::{NoQuirks, LimitedQuirks, Quirks}; use cssparser::RGBA; @@ -74,6 +77,7 @@ use std::borrow::{IntoCow, ToOwned}; use std::cell::{Ref, RefMut}; use std::default::Default; use std::mem; +use std::old_io::{MemWriter, Writer}; use std::sync::Arc; use string_cache::{Atom, Namespace, QualName}; use url::UrlParser; @@ -430,6 +434,7 @@ pub trait ElementHelpers<'a> { fn update_inline_style(self, property_decl: PropertyDeclaration, style_priority: StylePriority); fn get_inline_style_declaration(self, property: &Atom) -> Option<PropertyDeclaration>; fn get_important_inline_style_declaration(self, property: &Atom) -> Option<PropertyDeclaration>; + fn serialize(self, traversal_scope: TraversalScope) -> Fallible<DOMString>; } impl<'a> ElementHelpers<'a> for JSRef<'a, Element> { @@ -575,6 +580,19 @@ impl<'a> ElementHelpers<'a> for JSRef<'a, Element> { .map(|decl| decl.clone()) }) } + + fn serialize(self, traversal_scope: TraversalScope) -> Fallible<DOMString> { + let node: JSRef<Node> = NodeCast::from_ref(self); + let mut writer = MemWriter::new(); + match serialize(&mut writer, &node, + SerializeOpts { + traversal_scope: traversal_scope, + .. Default::default() + }) { + Ok(()) => Ok(String::from_utf8(writer.into_inner()).unwrap()), + Err(_) => panic!("Cannot serialize element"), + } + } } pub trait AttributeHandlers { @@ -1120,7 +1138,7 @@ impl<'a> ElementMethods for JSRef<'a, Element> { fn GetInnerHTML(self) -> Fallible<DOMString> { //XXX TODO: XML case - Ok(serialize(&mut NodeIterator::new(NodeCast::from_ref(self), false, false))) + self.serialize(ChildrenOnly) } fn SetInnerHTML(self, value: DOMString) -> Fallible<()> { @@ -1176,7 +1194,7 @@ impl<'a> ElementMethods for JSRef<'a, Element> { } fn GetOuterHTML(self) -> Fallible<DOMString> { - Ok(serialize(&mut NodeIterator::new(NodeCast::from_ref(self), true, false))) + self.serialize(IncludeNode) } // http://dom.spec.whatwg.org/#dom-parentnode-children |