Auto merge of #10510 - frewsxcv:rowindex, r=KiChjang

Implement `rowIndex` property on `<tr>`.

Part of https://github.com/servo/servo/issues/10509.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10510)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2016-04-13 04:25:20 +05:30
commit 9fb5703c6d
5 changed files with 31 additions and 45 deletions

View file

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

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 {

View file

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