aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/element.rs
diff options
context:
space:
mode:
authorChris Paris <cap@chrisparis.org>2015-02-19 17:43:24 -1000
committerChris Paris <cap@chrisparis.org>2015-03-18 12:17:56 -1000
commita5d6c6a1fc60975b4901914c183624a13f496c4c (patch)
tree9a69e62ac618b8889757c68dfe6ec2c10e1fca0d /components/script/dom/element.rs
parenta5217556072390131f41a7a4cd07e8eb5a671d06 (diff)
downloadservo-a5d6c6a1fc60975b4901914c183624a13f496c4c.tar.gz
servo-a5d6c6a1fc60975b4901914c183624a13f496c4c.zip
Serialize using html5ever
Diffstat (limited to 'components/script/dom/element.rs')
-rw-r--r--components/script/dom/element.rs26
1 files changed, 22 insertions, 4 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index d8ebb804c87..1e8d786cb6f 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -40,14 +40,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::virtualmethods::{VirtualMethods, vtable_for};
@@ -60,6 +59,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;
@@ -68,6 +71,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;
@@ -424,6 +428,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> {
@@ -569,6 +574,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 {
@@ -1114,11 +1132,11 @@ 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 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