aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/domimplementation.rs
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno.d@partner.samsung.com>2014-01-17 09:50:36 -0400
committerBruno de Oliveira Abinader <bruno.d@partner.samsung.com>2014-01-20 15:20:23 -0400
commita58838e14ba83e89a6414480322033cca8e9606d (patch)
tree6cd93e0c641eb02d2b3e0ae149936ba7e2df4fd9 /src/components/script/dom/domimplementation.rs
parent733162e217739f5a01d580ff57c5e592a74e000d (diff)
downloadservo-a58838e14ba83e89a6414480322033cca8e9606d.tar.gz
servo-a58838e14ba83e89a6414480322033cca8e9606d.zip
Implement DOMImplementation::createHTMLDocument
Spec: http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument Closes #1510.
Diffstat (limited to 'src/components/script/dom/domimplementation.rs')
-rw-r--r--src/components/script/dom/domimplementation.rs64
1 files changed, 63 insertions, 1 deletions
diff --git a/src/components/script/dom/domimplementation.rs b/src/components/script/dom/domimplementation.rs
index cee3f1957e0..2cbed7cdfee 100644
--- a/src/components/script/dom/domimplementation.rs
+++ b/src/components/script/dom/domimplementation.rs
@@ -6,8 +6,15 @@ use dom::bindings::codegen::DOMImplementationBinding;
use dom::bindings::utils::{DOMString, Reflector, Reflectable, reflect_dom_object};
use dom::bindings::utils::{Fallible, InvalidCharacter, NamespaceError};
use dom::bindings::utils::{QName, Name, InvalidXMLName, xml_name_type};
+use dom::document::{AbstractDocument, HTML, HTMLDocumentTypeId};
use dom::documenttype::DocumentType;
-use dom::node::AbstractNode;
+use dom::htmldocument::HTMLDocument;
+use dom::htmlbodyelement::HTMLBodyElement;
+use dom::htmlheadelement::HTMLHeadElement;
+use dom::htmlhtmlelement::HTMLHtmlElement;
+use dom::htmltitleelement::HTMLTitleElement;
+use dom::node::{AbstractNode, DocumentNodeTypeId};
+use dom::text::Text;
use dom::window::Window;
pub struct DOMImplementation {
@@ -52,4 +59,59 @@ impl DOMImplementation {
QName => Ok(DocumentType::new(qname, Some(pubid), Some(sysid), self.owner.Document()))
}
}
+
+ // http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument
+ pub fn CreateHTMLDocument(&self, title: Option<DOMString>) -> AbstractDocument {
+ // Step 1.
+ let abstract_doc = HTMLDocument::new(self.owner);
+ assert!(abstract_doc.document().doctype == HTML);
+
+ let abstract_node = AbstractNode::from_document(abstract_doc);
+ assert!(abstract_node.type_id() == DocumentNodeTypeId(HTMLDocumentTypeId));
+
+ // Step 2.
+ // FIXME: https://github.com/mozilla/servo/pull/1519
+
+ {
+ // Step 3.
+ let doc_type = DocumentType::new(~"html", None, None, abstract_doc);
+ abstract_node.AppendChild(doc_type);
+ }
+
+ {
+ // Step 4.
+ let doc_html = HTMLHtmlElement::new(~"html", abstract_doc);
+ abstract_node.AppendChild(doc_html);
+
+ {
+ // Step 5.
+ let doc_head = HTMLHeadElement::new(~"head", abstract_doc);
+ doc_html.AppendChild(doc_head);
+
+ // Step 6.
+ match title {
+ None => (),
+ Some(title_str) => {
+ // Step 6.1.
+ let doc_title = HTMLTitleElement::new(~"title", abstract_doc);
+ doc_head.AppendChild(doc_title);
+
+ // Step 6.2.
+ let title_text = Text::new(title_str, abstract_doc);
+ doc_title.AppendChild(title_text);
+ }
+ }
+ }
+
+ // Step 7.
+ let doc_body = HTMLBodyElement::new(~"body", abstract_doc);
+ doc_html.AppendChild(doc_body);
+ }
+
+ // Step 8.
+ // FIXME: https://github.com/mozilla/servo/issues/1522
+
+ // Step 9.
+ abstract_doc
+ }
}