aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-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
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]