diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/htmltableelement.rs | 7 | ||||
-rw-r--r-- | components/script/dom/htmltablerowelement.rs | 23 | ||||
-rw-r--r-- | components/script/dom/webidls/HTMLTableRowElement.webidl | 2 |
3 files changed, 31 insertions, 1 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] |