mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Implement createCaption and deleteCaption on HTMLTableElement
Update web-platform-tests expected data
This commit is contained in:
parent
78792cced2
commit
e24a867ab6
8 changed files with 59 additions and 51 deletions
|
@ -14,7 +14,7 @@ use dom::eventtarget::{EventTarget, EventTargetTypeId};
|
||||||
use dom::element::ElementTypeId;
|
use dom::element::ElementTypeId;
|
||||||
use dom::htmlelement::{HTMLElement, HTMLElementTypeId};
|
use dom::htmlelement::{HTMLElement, HTMLElementTypeId};
|
||||||
use dom::htmltablecaptionelement::HTMLTableCaptionElement;
|
use dom::htmltablecaptionelement::HTMLTableCaptionElement;
|
||||||
use dom::node::{Node, NodeHelpers, NodeTypeId};
|
use dom::node::{Node, NodeHelpers, NodeTypeId, document_from_node};
|
||||||
use dom::virtualmethods::VirtualMethods;
|
use dom::virtualmethods::VirtualMethods;
|
||||||
|
|
||||||
use util::str::{self, DOMString, LengthOrPercentageOrAuto};
|
use util::str::{self, DOMString, LengthOrPercentageOrAuto};
|
||||||
|
@ -80,11 +80,34 @@ impl<'a> HTMLTableElementMethods for &'a HTMLTableElement {
|
||||||
let node = NodeCast::from_ref(self);
|
let node = NodeCast::from_ref(self);
|
||||||
|
|
||||||
if let Some(ref caption) = self.GetCaption() {
|
if let Some(ref caption) = self.GetCaption() {
|
||||||
assert!(node.RemoveChild(NodeCast::from_ref(caption.r())).is_ok());
|
NodeCast::from_ref(caption.r()).remove_self();
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(caption) = new_caption {
|
if let Some(caption) = new_caption {
|
||||||
assert!(node.AppendChild(NodeCast::from_ref(caption)).is_ok());
|
assert!(node.InsertBefore(NodeCast::from_ref(caption),
|
||||||
|
node.GetFirstChild().as_ref().map(|n| n.r())).is_ok());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://html.spec.whatwg.org/multipage/#dom-table-createcaption
|
||||||
|
fn CreateCaption(self) -> Root<HTMLElement> {
|
||||||
|
let caption = match self.GetCaption() {
|
||||||
|
Some(caption) => caption,
|
||||||
|
None => {
|
||||||
|
let caption = HTMLTableCaptionElement::new("caption".to_owned(),
|
||||||
|
None,
|
||||||
|
document_from_node(self).r());
|
||||||
|
self.SetCaption(Some(caption.r()));
|
||||||
|
caption
|
||||||
|
}
|
||||||
|
};
|
||||||
|
HTMLElementCast::from_root(caption)
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://html.spec.whatwg.org/multipage/#dom-table-deletecaption
|
||||||
|
fn DeleteCaption(self) {
|
||||||
|
if let Some(caption) = self.GetCaption() {
|
||||||
|
NodeCast::from_ref(caption.r()).remove_self();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,8 +6,8 @@
|
||||||
// https://www.whatwg.org/html/#htmltableelement
|
// https://www.whatwg.org/html/#htmltableelement
|
||||||
interface HTMLTableElement : HTMLElement {
|
interface HTMLTableElement : HTMLElement {
|
||||||
attribute HTMLTableCaptionElement? caption;
|
attribute HTMLTableCaptionElement? caption;
|
||||||
//HTMLElement createCaption();
|
HTMLElement createCaption();
|
||||||
//void deleteCaption();
|
void deleteCaption();
|
||||||
// attribute HTMLTableSectionElement? tHead;
|
// attribute HTMLTableSectionElement? tHead;
|
||||||
//HTMLElement createTHead();
|
//HTMLElement createTHead();
|
||||||
//void deleteTHead();
|
//void deleteTHead();
|
||||||
|
|
|
@ -4566,12 +4566,6 @@
|
||||||
[HTMLTableElement interface: existence and properties of interface object]
|
[HTMLTableElement interface: existence and properties of interface object]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[HTMLTableElement interface: operation createCaption()]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[HTMLTableElement interface: operation deleteCaption()]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[HTMLTableElement interface: attribute tHead]
|
[HTMLTableElement interface: attribute tHead]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -4638,12 +4632,6 @@
|
||||||
[HTMLTableElement interface: attribute cellSpacing]
|
[HTMLTableElement interface: attribute cellSpacing]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[HTMLTableElement interface: document.createElement("table") must inherit property "createCaption" with the proper type (1)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[HTMLTableElement interface: document.createElement("table") must inherit property "deleteCaption" with the proper type (2)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[HTMLTableElement interface: document.createElement("table") must inherit property "tHead" with the proper type (3)]
|
[HTMLTableElement interface: document.createElement("table") must inherit property "tHead" with the proper type (3)]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,5 @@
|
||||||
[caption_001.html]
|
[caption_001.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
[setting caption on a table]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[caption of the third table element should be null]
|
[caption of the third table element should be null]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
[caption-methods.html]
|
|
||||||
type: testharness
|
|
||||||
[createCaption method returns the first caption element child of the table]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[createCaption method creates a new caption and inserts it as the first node of the table element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[deleteCaption method removes the first caption element child of the table element]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
[delete-caption.html]
|
|
||||||
type: testharness
|
|
||||||
[deleteCaption() delete only caption on table]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[deleteCaption() returns undefined]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[deleteCaption()]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[deleteCaption() does not throw any exceptions when called on a table without a caption]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[deleteCaption() does not delete captions in descendent tables]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[deleteCaption() handles captions from different namespaces]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
table.caption = caption;
|
table.caption = caption;
|
||||||
|
|
||||||
assert_equals(caption.parentNode, table);
|
assert_equals(caption.parentNode, table);
|
||||||
|
assert_equals(table.firstChild, caption);
|
||||||
assert_equals(table.caption.innerHTML, "new caption");
|
assert_equals(table.caption.innerHTML, "new caption");
|
||||||
|
|
||||||
captions = table.getElementsByTagName('caption');
|
captions = table.getElementsByTagName('caption');
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="log"></div>
|
<div id="log"></div>
|
||||||
|
<table id="table0" style="display:none">
|
||||||
|
</table>
|
||||||
<table id="table1" style="display:none">
|
<table id="table1" style="display:none">
|
||||||
<caption id="caption1">caption</caption>
|
<caption id="caption1">caption</caption>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -19,6 +21,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<table id="table2" style="display:none">
|
<table id="table2" style="display:none">
|
||||||
|
<foo:caption>caption</foo:caption>
|
||||||
<tr>
|
<tr>
|
||||||
<td>cell</td>
|
<td>cell</td>
|
||||||
<td>cell</td>
|
<td>cell</td>
|
||||||
|
@ -31,7 +34,18 @@
|
||||||
<td>cell</td>
|
<td>cell</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
<table id="table4" style="display:none">
|
||||||
|
</table>
|
||||||
<script>
|
<script>
|
||||||
|
test(function () {
|
||||||
|
var table0 = document.getElementById('table0');
|
||||||
|
var caption = document.createElementNS("foo", "caption");
|
||||||
|
table0.appendChild(caption);
|
||||||
|
var table0FirstNode = table0.firstChild;
|
||||||
|
var testCaption = table0.createCaption();
|
||||||
|
assert_not_equals(testCaption, table0FirstNode);
|
||||||
|
assert_equals(testCaption, table0.firstChild);
|
||||||
|
}, "createCaption method creates new caption if existing caption is not in html namespace")
|
||||||
test(function () {
|
test(function () {
|
||||||
var table1 = document.getElementById('table1');
|
var table1 = document.getElementById('table1');
|
||||||
var testCaption = table1.createCaption();
|
var testCaption = table1.createCaption();
|
||||||
|
@ -45,12 +59,28 @@
|
||||||
assert_true(test2Caption instanceof HTMLTableCaptionElement);
|
assert_true(test2Caption instanceof HTMLTableCaptionElement);
|
||||||
assert_equals(table2FirstNode, test2Caption);
|
assert_equals(table2FirstNode, test2Caption);
|
||||||
}, "createCaption method creates a new caption and inserts it as the first node of the table element")
|
}, "createCaption method creates a new caption and inserts it as the first node of the table element")
|
||||||
|
test(function () {
|
||||||
|
var table = document.createElement('table');
|
||||||
|
assert_equals(table.createCaption(), table.createCaption());
|
||||||
|
}, "createCaption will not create new caption if one exists")
|
||||||
|
test(function () {
|
||||||
|
var table = document.createElementNS("http://www.w3.org/1999/xhtml", "foo:table")
|
||||||
|
var caption = table.createCaption();
|
||||||
|
assert_equals(caption.prefix, null);
|
||||||
|
}, "createCaption will not copy table's prefix")
|
||||||
test(function () {
|
test(function () {
|
||||||
var table3 = document.getElementById('table3');
|
var table3 = document.getElementById('table3');
|
||||||
assert_equals(table3.caption.textContent, "caption 3");
|
assert_equals(table3.caption.textContent, "caption 3");
|
||||||
table3.deleteCaption();
|
table3.deleteCaption();
|
||||||
assert_equals(table3.caption, null);
|
assert_equals(table3.caption, null);
|
||||||
}, "deleteCaption method removes the first caption element child of the table element")
|
}, "deleteCaption method removes the first caption element child of the table element")
|
||||||
|
test(function () {
|
||||||
|
var table4 = document.getElementById('table4');
|
||||||
|
var caption = document.createElementNS("foo", "caption");
|
||||||
|
table4.appendChild(caption);
|
||||||
|
table4.deleteCaption();
|
||||||
|
assert_equals(caption.parentNode, table4);
|
||||||
|
}, "deleteCaption method not remove caption that is not in html namespace")
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue