auto merge of #2072 : brunoabinader/servo/domimpl-createdocument, r=Ms2ger

Spec:
http://dom.spec.whatwg.org/#dom-domimplementation-createdocument

Closes #1509.
This commit is contained in:
bors-servo 2014-04-21 15:58:27 -04:00
commit f864d21212
3 changed files with 63 additions and 3 deletions

View file

@ -8,7 +8,7 @@ use dom::bindings::js::JS;
use dom::bindings::utils::{Reflector, Reflectable, reflect_dom_object};
use dom::bindings::error::{Fallible, InvalidCharacter, NamespaceError};
use dom::bindings::utils::{QName, Name, InvalidXMLName, xml_name_type};
use dom::document::{Document, HTMLDocument};
use dom::document::{Document, HTMLDocument, NonHTMLDocument};
use dom::documenttype::DocumentType;
use dom::htmlbodyelement::HTMLBodyElement;
use dom::htmlheadelement::HTMLHeadElement;
@ -63,6 +63,42 @@ impl DOMImplementation {
}
}
// http://dom.spec.whatwg.org/#dom-domimplementation-createdocument
pub fn CreateDocument(&self, namespace: Option<DOMString>, qname: DOMString,
maybe_doctype: Option<JS<DocumentType>>) -> Fallible<JS<Document>> {
// Step 1.
let doc = Document::new(&self.owner, None, NonHTMLDocument, None);
let mut doc_node: JS<Node> = NodeCast::from(&doc);
// Step 2-3.
let maybe_elem = if qname.is_empty() {
None
} else {
match doc.get().CreateElementNS(&doc, namespace, qname) {
Err(error) => return Err(error),
Ok(elem) => Some(elem)
}
};
// Step 4.
match maybe_doctype {
None => (),
Some(ref doctype) => assert!(doc_node.AppendChild(&mut NodeCast::from(doctype)).is_ok())
}
// Step 5.
match maybe_elem {
None => (),
Some(ref elem) => assert!(doc_node.AppendChild(&mut NodeCast::from(elem)).is_ok())
}
// Step 6.
// FIXME: https://github.com/mozilla/servo/issues/1522
// Step 7.
Ok(doc)
}
// http://dom.spec.whatwg.org/#dom-domimplementation-createhtmldocument
pub fn CreateHTMLDocument(&self, title: Option<DOMString>) -> JS<Document> {
// Step 1-2.

View file

@ -17,10 +17,10 @@ interface DOMImplementation {
[Creator, Throws]
DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId,
DOMString systemId);
/*[Throws]
[Creator, Throws]
Document createDocument(DOMString? namespace,
[TreatNullAs=EmptyString] DOMString qualifiedName,
optional DocumentType? doctype = null);*/
optional DocumentType? doctype = null);
[Creator]
Document createHTMLDocument(optional DOMString title);
};