mirror of
https://github.com/servo/servo.git
synced 2025-06-20 15:18:58 +01:00
Implement Document::head()
Implementation details according to the specification below: http://www.whatwg.org/specs/web-apps/current-work/#dom-document-head This patch is for: https://github.com/mozilla/servo/issues/1465
This commit is contained in:
parent
608ee006ab
commit
17b35d52ff
4 changed files with 48 additions and 5 deletions
|
@ -101,7 +101,7 @@ partial interface Document {
|
||||||
attribute DOMString title;
|
attribute DOMString title;
|
||||||
// attribute DOMString dir;
|
// attribute DOMString dir;
|
||||||
attribute HTMLElement? body;
|
attribute HTMLElement? body;
|
||||||
//(HTML only)readonly attribute HTMLHeadElement? head;
|
readonly attribute HTMLHeadElement? head;
|
||||||
//(HTML only)readonly attribute HTMLCollection images;
|
//(HTML only)readonly attribute HTMLCollection images;
|
||||||
//(HTML only)readonly attribute HTMLCollection embeds;
|
//(HTML only)readonly attribute HTMLCollection embeds;
|
||||||
//(HTML only)readonly attribute HTMLCollection plugins;
|
//(HTML only)readonly attribute HTMLCollection plugins;
|
||||||
|
|
|
@ -303,6 +303,15 @@ impl Document {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// http://www.whatwg.org/specs/web-apps/current-work/#dom-document-head
|
||||||
|
pub fn GetHead(&self) -> Option<AbstractNode> {
|
||||||
|
self.get_html_element().and_then(|root| {
|
||||||
|
root.traverse_preorder().find(|child| {
|
||||||
|
child.type_id() == ElementNodeTypeId(HTMLHeadElementTypeId)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
pub fn GetBody(&self, _: AbstractDocument) -> Option<AbstractNode> {
|
pub fn GetBody(&self, _: AbstractDocument) -> Option<AbstractNode> {
|
||||||
match self.get_html_element() {
|
match self.get_html_element() {
|
||||||
None => None,
|
None => None,
|
||||||
|
|
|
@ -34,12 +34,11 @@ impl HTMLDocument {
|
||||||
|
|
||||||
impl HTMLDocument {
|
impl HTMLDocument {
|
||||||
pub fn GetHead(&self) -> Option<AbstractNode> {
|
pub fn GetHead(&self) -> Option<AbstractNode> {
|
||||||
match self.parent.GetDocumentElement() {
|
self.parent.GetDocumentElement().and_then(|root| {
|
||||||
None => None,
|
root.traverse_preorder().find(|child| {
|
||||||
Some(root) => root.traverse_preorder().find(|child| {
|
|
||||||
child.type_id() == ElementNodeTypeId(HTMLHeadElementTypeId)
|
child.type_id() == ElementNodeTypeId(HTMLHeadElementTypeId)
|
||||||
})
|
})
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn Images(&self) -> @mut HTMLCollection {
|
pub fn Images(&self) -> @mut HTMLCollection {
|
||||||
|
|
35
src/test/html/content/test_document_head.html
Normal file
35
src/test/html/content/test_document_head.html
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<script src="harness.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
// test1: existing document's head
|
||||||
|
{
|
||||||
|
isnot(document.head, null, "test1-0, existing document's head");
|
||||||
|
is_a(document.head, HTMLHeadElement, "test1-1, exising document's head");
|
||||||
|
is(document.head && document.head.tagName, "HEAD", "test1-2, existing document's head");
|
||||||
|
}
|
||||||
|
|
||||||
|
// test2: append head to a new document
|
||||||
|
{
|
||||||
|
let new_document = new Document();
|
||||||
|
new_document.appendChild(new_document.createElement("html"));
|
||||||
|
let new_head = new_document.createElement("head");
|
||||||
|
|
||||||
|
isnot(new_head, null, "test2-0, append head to a new document");
|
||||||
|
is_a(new_head, HTMLHeadElement, "test2-1, append head to a new document");
|
||||||
|
is(new_head && new_head.tagName, "HEAD", "test2-2, append head to a new document");
|
||||||
|
|
||||||
|
// Document::head is read-only.
|
||||||
|
new_document.head = new_head;
|
||||||
|
is(new_document.head, null, "test2-3, append head to a new document");
|
||||||
|
|
||||||
|
new_document.documentElement.appendChild(new_head);
|
||||||
|
is(new_document.head, new_head, "test2-4, append head to a new document");
|
||||||
|
}
|
||||||
|
|
||||||
|
finish();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Add table
Add a link
Reference in a new issue