Re: [whatwg] ARIA semantics of implied rows

On Fri, Sep 26, 2014 at 3:01 PM, Tab Atkins Jr. <jackalmage@gmail.com>
wrote:

> On Fri, Sep 26, 2014 at 11:39 AM, Daniel Trebbien <dtrebbien@gmail.com>
> wrote:
> > On Fri, Sep 26, 2014 at 2:09 PM, Anne van Kesteren <annevk@annevk.nl>
> wrote:
> >> On Fri, Sep 26, 2014 at 7:59 PM, Daniel Trebbien <dtrebbien@gmail.com>
> >> wrote:
> >> > One issue is that the ARIA semantics for "implied rows" are not
> defined.
> >>
> >> I'm not sure I understand why ARIA would come into play at all when it
> >> comes to tables. Weren't tables "accessible" (I realize it has always
> >> been somewhat hard to convey them properly) long before ARIA existed?
> >>
> >
> > The issue is that, as far as I can tell, HTML 4.01 does not support
> > "implied rows":
> > http://www.w3.org/TR/html401/struct/tables.html
> > This is new to HTML5.
>
> No, HTML4 supported this; it probably didn't actually have any
> normative text around it, but browsers certainly supported having a
> rowspan go past the end of the explicit rows.
>


That's true.  Browsers supported this.  What I mean is that HTML4 didn't
have normative specification of this, but HTML5 does.

I guess what I wanted to clarify is that when a browser exposes a table to
the operating system's accessibility layer which screen readers use to
announce the content of a web page, the model of the table in the
accessibility layer should match the HTML5 table model.

Using the Accessibility Inspector tool on Mac and the Inspect tool on
Windows, I am seeing that browsers are currently not exposing the implied
rows.  Chrome, Firefox, Safari, and Internet Explorer are only exposing 6
rows for the example.

Using the example table HTML in Chrome for Mac, Chrome is not exposing to
Mac's accessibility hierarchy the 15 rows of the table, but only 6 rows;
there are only 6 "AXRow" children of the "AXTable".  With Accessibility
Inspector I see that the "AXCell" corresponding to the first cell in the
first row has the AXColumnIndexRange attribute set to loc=0, len=3 and the
AXRowIndexRange attribute set to loc=0, len=10 (which are correct).
However, when I navigate to the "Row 11, Column 1" cell, VoiceOver
announces "row 2 of 6 Row 11, Column 1".

If I modify the example HTML to insert empty TR elements for each of the 9
implied rows:

<table id="theTable" border="1">
  <tbody>
    <tr>
      <td rowspan="10" colspan="3">These are the first 10 rows.</td>
    </tr>
    <tr></tr>
    <tr></tr>
    <tr></tr>
    <tr></tr>
    <tr></tr>
    <tr></tr>
    <tr></tr>
    <tr></tr>
    <tr></tr>
  </tbody>
  <tbody>
    <tr>
      <td>Row 11, Column 1</td>
      <td>Row 11, Column 2</td>
      <td>Row 11, Column 3</td>
    </tr>
    <tr>
      <td>Row 12, Column 1</td>
      <td>Row 12, Column 2</td>
      <td>Row 12, Column 3</td>
    </tr>
    <tr>
      <td>Row 13, Column 1</td>
      <td>Row 13, Column 2</td>
      <td>Row 13, Column 3</td>
    </tr>
    <tr>
      <td>Row 14, Column 1</td>
      <td>Row 14, Column 2</td>
      <td>Row 14, Column 3</td>
    </tr>
    <tr>
      <td>Row 15, Column 1</td>
      <td>Row 15, Column 2</td>
      <td>Row 15, Column 3</td>
    </tr>
  </tbody>
</table>

.. then when I navigate to the "Row 11, Column 1" cell, VoiceOver announces
"row 11 of 15 Row 11, Column 1".  Also, Chrome then exposes 15 "AXRow"
children of the "AXTable".

Using the original example in Internet Explorer 11, IE11 is exposing only 6
rows like Chrome, Safari, and Firefox; with the Windows SDK Inspect tool, I
see that the UIA_TableControlTypeId has the Grid.RowCount attribute set to
6.  Switching on Narrator, when I navigate to the "Row 11, Column 1" cell,
Narrator announces "Row 11, Column 1. Column 1 row 2 item".  Using the
modified HTML containing the 9 empty TR elements, the Grid.RowCount
attribute is set to 15 and Narrator will announce "Row 11, Column 1. Column
1 row 11 item" for the "Row 11, Column 1" cell.

I am fairly certain that the model of the table that browsers expose to the
accessibility layer should match the HTML5 table model, but I wanted to
confirm.  Also, I wanted to ask what the ARIA semantics of the implied rows
are.

For example, suppose I have this (admittedly contrived):

<table border="1">
  <tbody>
    <tr aria-selected="true" role="row">
      <td rowspan="5">Spans 5</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr aria-disabled="true" role="presentation">
      <td rowspan="4">Spans 4</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr aria-hidden="true" role="row">
      <td rowspan="3">Spans 3</td>
      <td>&nbsp;</td>
    </tr>
    <tr aria-busy="true" role="presentation">
      <td rowspan="2">Spans 2</td>
    </tr>
  </tbody>
</table>

There is 1 implied row in this example, but what are the ARIA state
attributes of this implied row?  Is it selected and/or disabled and/or
hidden and/or busy?  What is the implied row's role?  There should probably
be a requirement that ARIA roles and state should be consistent.

Received on Friday, 26 September 2014 20:47:20 UTC