Implement rowIndex property on <tr>.

Part of https://github.com/servo/servo/issues/10509.
This commit is contained in:
Corey Farwell 2016-04-10 12:04:57 -04:00
parent ea97c89055
commit 23eb15c820
5 changed files with 31 additions and 45 deletions

View file

@ -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 {