aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/htmltableelement.rs7
-rw-r--r--components/script/dom/htmltablerowelement.rs23
-rw-r--r--components/script/dom/webidls/HTMLTableRowElement.webidl2
-rw-r--r--tests/wpt/metadata/html/dom/interfaces.html.ini6
-rw-r--r--tests/wpt/metadata/html/semantics/tabular-data/the-tr-element/rowIndex.html.ini38
5 files changed, 31 insertions, 45 deletions
diff --git a/components/script/dom/htmltableelement.rs b/components/script/dom/htmltableelement.rs
index 4ea908675b1..efcc24f4370 100644
--- a/components/script/dom/htmltableelement.rs
+++ b/components/script/dom/htmltableelement.rs
@@ -118,6 +118,13 @@ impl HTMLTableElement {
thead.upcast::<Node>().remove_self();
}
}
+
+ /// Determine the row index for the given `HTMLTableRowElement`.
+ pub fn row_index(&self, row_elem: &HTMLTableRowElement) -> Option<usize> {
+ self.Rows()
+ .elements_iter()
+ .position(|elem| (&elem as &Element) == row_elem.upcast::<Element>())
+ }
}
impl HTMLTableElementMethods for HTMLTableElement {
diff --git a/components/script/dom/htmltablerowelement.rs b/components/script/dom/htmltablerowelement.rs
index be0a9c9f5fb..c6d532a0323 100644
--- a/components/script/dom/htmltablerowelement.rs
+++ b/components/script/dom/htmltablerowelement.rs
@@ -14,7 +14,9 @@ use dom::element::{Element, RawLayoutElementHelpers};
use dom::htmlcollection::{CollectionFilter, HTMLCollection};
use dom::htmlelement::HTMLElement;
use dom::htmltabledatacellelement::HTMLTableDataCellElement;
+use dom::htmltableelement::HTMLTableElement;
use dom::htmltableheadercellelement::HTMLTableHeaderCellElement;
+use dom::htmltablesectionelement::HTMLTableSectionElement;
use dom::node::{Node, window_from_node};
use dom::virtualmethods::VirtualMethods;
use string_cache::Atom;
@@ -87,6 +89,27 @@ impl HTMLTableRowElementMethods for HTMLTableRowElement {
|| self.Cells(),
|n| n.is::<HTMLTableDataCellElement>())
}
+
+ // https://html.spec.whatwg.org/multipage/#dom-tr-rowindex
+ fn RowIndex(&self) -> i32 {
+ let parent = match self.upcast::<Node>().GetParentNode() {
+ Some(parent) => parent,
+ None => return -1,
+ };
+ if let Some(table) = parent.downcast::<HTMLTableElement>() {
+ return table.row_index(self).map_or(-1, |i| i as i32);
+ }
+ if !parent.is::<HTMLTableSectionElement>() {
+ return -1;
+ }
+ let grandparent = match parent.upcast::<Node>().GetParentNode() {
+ Some(parent) => parent,
+ None => return -1,
+ };
+ grandparent.downcast::<HTMLTableElement>()
+ .and_then(|table| table.row_index(self))
+ .map_or(-1, |i| i as i32)
+ }
}
pub trait HTMLTableRowElementLayoutHelpers {
diff --git a/components/script/dom/webidls/HTMLTableRowElement.webidl b/components/script/dom/webidls/HTMLTableRowElement.webidl
index 66538630c9d..05d339aba3f 100644
--- a/components/script/dom/webidls/HTMLTableRowElement.webidl
+++ b/components/script/dom/webidls/HTMLTableRowElement.webidl
@@ -5,7 +5,7 @@
// https://html.spec.whatwg.org/multipage/#htmltablerowelement
interface HTMLTableRowElement : HTMLElement {
- //readonly attribute long rowIndex;
+ readonly attribute long rowIndex;
//readonly attribute long sectionRowIndex;
readonly attribute HTMLCollection cells;
[Throws]
diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini
index ad15bbeb91c..45ee46c1a54 100644
--- a/tests/wpt/metadata/html/dom/interfaces.html.ini
+++ b/tests/wpt/metadata/html/dom/interfaces.html.ini
@@ -4311,9 +4311,6 @@
[HTMLTableSectionElement interface: document.createElement("tfoot") must inherit property "vAlign" with the proper type (6)]
expected: FAIL
- [HTMLTableRowElement interface: attribute rowIndex]
- expected: FAIL
-
[HTMLTableRowElement interface: attribute sectionRowIndex]
expected: FAIL
@@ -4329,9 +4326,6 @@
[HTMLTableRowElement interface: attribute vAlign]
expected: FAIL
- [HTMLTableRowElement interface: document.createElement("tr") must inherit property "rowIndex" with the proper type (0)]
- expected: FAIL
-
[HTMLTableRowElement interface: document.createElement("tr") must inherit property "sectionRowIndex" with the proper type (1)]
expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/tabular-data/the-tr-element/rowIndex.html.ini b/tests/wpt/metadata/html/semantics/tabular-data/the-tr-element/rowIndex.html.ini
deleted file mode 100644
index 040144197ea..00000000000
--- a/tests/wpt/metadata/html/semantics/tabular-data/the-tr-element/rowIndex.html.ini
+++ /dev/null
@@ -1,38 +0,0 @@
-[rowIndex.html]
- type: testharness
- [HTMLTableRowElement.rowIndex]
- expected: FAIL
-
- [HTMLTableRowElement.rowIndex 1]
- expected: FAIL
-
- [HTMLTableRowElement.rowIndex 2]
- expected: FAIL
-
- [HTMLTableRowElement.rowIndex 3]
- expected: FAIL
-
- [HTMLTableRowElement.rowIndex 4]
- expected: FAIL
-
- [HTMLTableRowElement.rowIndex 5]
- expected: FAIL
-
- [HTMLTableRowElement.rowIndex 6]
- expected: FAIL
-
- [HTMLTableRowElement.rowIndex 7]
- expected: FAIL
-
- [HTMLTableRowElement.rowIndex 8]
- expected: FAIL
-
- [HTMLTableRowElement.rowIndex 9]
- expected: FAIL
-
- [HTMLTableRowElement.rowIndex 10]
- expected: FAIL
-
- [HTMLTableRowElement.rowIndex 11]
- expected: FAIL
-