diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-04-13 19:33:26 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2016-04-13 19:33:26 +0530 |
commit | 9053721a328f904909c40e8ca4a5348faa0d59ad (patch) | |
tree | 239a5300ad2de14473161f20e32360054c51418a | |
parent | 3ad1b9134f17803f04ac94754e640e7f876799d8 (diff) | |
parent | 0ee95218481bc7105ac03237199b7584c1678356 (diff) | |
download | servo-9053721a328f904909c40e8ca4a5348faa0d59ad.tar.gz servo-9053721a328f904909c40e8ca4a5348faa0d59ad.zip |
Auto merge of #10558 - frewsxcv:tr-SectionRowIndex, r=KiChjang
Implement `sectionRowIndex` property on `<tr>`.
Fixes 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/10558)
<!-- Reviewable:end -->
5 files changed, 29 insertions, 76 deletions
diff --git a/components/script/dom/htmltableelement.rs b/components/script/dom/htmltableelement.rs index efcc24f4370..4ea908675b1 100644 --- a/components/script/dom/htmltableelement.rs +++ b/components/script/dom/htmltableelement.rs @@ -118,13 +118,6 @@ 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 c6d532a0323..bb83e00b0db 100644 --- a/components/script/dom/htmltablerowelement.rs +++ b/components/script/dom/htmltablerowelement.rs @@ -4,7 +4,9 @@ use cssparser::RGBA; use dom::attr::AttrValue; +use dom::bindings::codegen::Bindings::HTMLTableElementBinding::HTMLTableElementMethods; use dom::bindings::codegen::Bindings::HTMLTableRowElementBinding::{self, HTMLTableRowElementMethods}; +use dom::bindings::codegen::Bindings::HTMLTableSectionElementBinding::HTMLTableSectionElementMethods; use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods; use dom::bindings::error::{ErrorResult, Fallible}; use dom::bindings::inheritance::Castable; @@ -54,6 +56,14 @@ impl HTMLTableRowElement { document, HTMLTableRowElementBinding::Wrap) } + + /// Determine the index for this `HTMLTableRowElement` within the given + /// `HTMLCollection`. Returns `-1` if not found within collection. + fn row_index(&self, collection: Root<HTMLCollection>) -> i32 { + collection.elements_iter() + .position(|elem| (&elem as &Element) == self.upcast()) + .map_or(-1, |i| i as i32) + } } impl HTMLTableRowElementMethods for HTMLTableRowElement { @@ -97,7 +107,7 @@ impl HTMLTableRowElementMethods for HTMLTableRowElement { None => return -1, }; if let Some(table) = parent.downcast::<HTMLTableElement>() { - return table.row_index(self).map_or(-1, |i| i as i32); + return self.row_index(table.Rows()); } if !parent.is::<HTMLTableSectionElement>() { return -1; @@ -107,8 +117,23 @@ impl HTMLTableRowElementMethods for HTMLTableRowElement { None => return -1, }; grandparent.downcast::<HTMLTableElement>() - .and_then(|table| table.row_index(self)) - .map_or(-1, |i| i as i32) + .map_or(-1, |table| self.row_index(table.Rows())) + } + + // https://html.spec.whatwg.org/multipage/#dom-tr-sectionrowindex + fn SectionRowIndex(&self) -> i32 { + let parent = match self.upcast::<Node>().GetParentNode() { + Some(parent) => parent, + None => return -1, + }; + let collection = if let Some(table) = parent.downcast::<HTMLTableElement>() { + table.Rows() + } else if let Some(table_section) = parent.downcast::<HTMLTableSectionElement>() { + table_section.Rows() + } else { + return -1; + }; + self.row_index(collection) } } diff --git a/components/script/dom/webidls/HTMLTableRowElement.webidl b/components/script/dom/webidls/HTMLTableRowElement.webidl index 05d339aba3f..fe6c93e6be5 100644 --- a/components/script/dom/webidls/HTMLTableRowElement.webidl +++ b/components/script/dom/webidls/HTMLTableRowElement.webidl @@ -6,7 +6,7 @@ // https://html.spec.whatwg.org/multipage/#htmltablerowelement interface HTMLTableRowElement : HTMLElement { readonly attribute long rowIndex; - //readonly attribute long sectionRowIndex; + readonly attribute long sectionRowIndex; readonly attribute HTMLCollection cells; [Throws] HTMLElement insertCell(optional long index = -1); diff --git a/tests/wpt/metadata/html/dom/interfaces.html.ini b/tests/wpt/metadata/html/dom/interfaces.html.ini index ee5faa808dd..5af57f14c88 100644 --- a/tests/wpt/metadata/html/dom/interfaces.html.ini +++ b/tests/wpt/metadata/html/dom/interfaces.html.ini @@ -4308,9 +4308,6 @@ [HTMLTableSectionElement interface: document.createElement("tfoot") must inherit property "vAlign" with the proper type (6)] expected: FAIL - [HTMLTableRowElement interface: attribute sectionRowIndex] - expected: FAIL - [HTMLTableRowElement interface: attribute align] expected: FAIL @@ -4323,9 +4320,6 @@ [HTMLTableRowElement interface: attribute vAlign] expected: FAIL - [HTMLTableRowElement interface: document.createElement("tr") must inherit property "sectionRowIndex" with the proper type (1)] - expected: FAIL - [HTMLTableRowElement interface: document.createElement("tr") must inherit property "align" with the proper type (5)] expected: FAIL diff --git a/tests/wpt/metadata/html/semantics/tabular-data/the-tr-element/sectionRowIndex.html.ini b/tests/wpt/metadata/html/semantics/tabular-data/the-tr-element/sectionRowIndex.html.ini deleted file mode 100644 index 11bf47c819b..00000000000 --- a/tests/wpt/metadata/html/semantics/tabular-data/the-tr-element/sectionRowIndex.html.ini +++ /dev/null @@ -1,59 +0,0 @@ -[sectionRowIndex.html] - type: testharness - [Row in thead in HTML] - expected: FAIL - - [Row in implicit tbody in HTML] - expected: FAIL - - [Other row in implicit tbody in HTML] - expected: FAIL - - [Row in explicit tbody in HTML] - expected: FAIL - - [Row in tfoot in HTML] - expected: FAIL - - [Row in thead in nested table in HTML] - expected: FAIL - - [Row in implicit tbody in nested table in HTML] - expected: FAIL - - [Row in explicit tbody in nested table in HTML] - expected: FAIL - - [Row in script-created table] - expected: FAIL - - [Row in script-created div in table] - expected: FAIL - - [Row in script-created thead in table] - expected: FAIL - - [Row in script-created tbody in table] - expected: FAIL - - [Row in script-created tfoot in table] - expected: FAIL - - [Row in script-created tr in tbody in table] - expected: FAIL - - [Row in script-created td in tr in tbody in table] - expected: FAIL - - [Row in script-created nested table] - expected: FAIL - - [Row in script-created thead in nested table] - expected: FAIL - - [Row in script-created tbody in nested table] - expected: FAIL - - [Row in script-created tfoot in nested table] - expected: FAIL - |