Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement DOMImplementation::createHTMLDocument #1523

Merged
merged 1 commit into from Jan 20, 2014
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Implement DOMImplementation::createHTMLDocument

  • Loading branch information
brunoabinader committed Jan 20, 2014
commit a58838e14ba83e89a6414480322033cca8e9606d

This file was deleted.

@@ -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
}
}
@@ -21,6 +21,6 @@ interface DOMImplementation {
Document createDocument(DOMString? namespace,
[TreatNullAs=EmptyString] DOMString qualifiedName,
optional DocumentType? doctype = null);*/
/*[Throws]
Document createHTMLDocument(optional DOMString title);*/
[Creator]
Document createHTMLDocument(optional DOMString title);
};
@@ -22,6 +22,36 @@
is_a(doctype && doctype, DocumentType, "test2-2, createDocumentType");
}

// test3: createHTMLDocument
{
var htmldoc = document.implementation.createHTMLDocument("example title");
isnot(htmldoc, null, "test3-0, createHTMLDocument");
is_a(htmldoc, Document, "test3-1, createHTMLDocument");
is_a(htmldoc, HTMLDocument, "test3-2, createHTMLDocument");
is(htmldoc.childNodes.length, 2, "test3-3, createHTMLDocument");

is_a(htmldoc.doctype && htmldoc.doctype, DocumentType, "test3-4, createHTMLDocument");
is(htmldoc.doctype.name, "html", "test3-5, createHTMLDocument");

is_a(htmldoc.documentElement && htmldoc.documentElement, HTMLHtmlElement, "test3-6, createHTMLDocument");
is(htmldoc.documentElement.childNodes.length, 2, "test3-7, createHTMLDocument");
is(htmldoc.documentElement.tagName, "HTML", "test3-8, createHTMLDocument");

is_a(htmldoc.head && htmldoc.head, HTMLHeadElement, "test3-9, createHTMLDocument");
is(htmldoc.head.tagName, "HEAD", "test3-10, createHTMLDocument");
is(htmldoc.head, htmldoc.documentElement.childNodes[0], "test3-11, createHTMLDocument");
is(htmldoc.head.childNodes.length, 1, "test3-12, createHTMLDocument");

is_a(htmldoc.head.childNodes[0], HTMLTitleElement, "test3-13, createHTMLDocument");
is(htmldoc.head.childNodes[0].tagName, "TITLE", "test3-14, createHTMLDocument");
is(htmldoc.title, "example title", "test3-15, createHTMLDocument");

is_a(htmldoc.body && htmldoc.body, HTMLBodyElement, "test3-16, createHTMLDocument");
is(htmldoc.body.tagName, "BODY", "test3-17, createHTMLDocument");
is(htmldoc.body, htmldoc.documentElement.childNodes[1], "test3-18, createHTMLDocument");
is(htmldoc.body.childNodes.length, 0, "test3-19, createHTMLDocument");
}

finish();
</script>
</head>
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.