aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-04-13 04:25:20 +0530
committerbors-servo <lbergstrom+bors@mozilla.com>2016-04-13 04:25:20 +0530
commit9fb5703c6dff0680aca32c50599f1782662d093c (patch)
tree2d56ddcd1a84e9cd6ad0a4e677a0b58204b6e3f4 /components/script
parent155e4052d150179ea8423a7ea626a84e25409718 (diff)
parent23eb15c820e6792fdbd7f6d8b9648aeb945a4286 (diff)
downloadservo-9fb5703c6dff0680aca32c50599f1782662d093c.tar.gz
servo-9fb5703c6dff0680aca32c50599f1782662d093c.zip
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 -->
Diffstat (limited to 'components/script')
-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]