diff options
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 - |