RFR: JDK-8186466: Fix accessibility and other minor issues in java.base

Jonathan Gibbons jonathan.gibbons at oracle.com
Sat Aug 19 20:51:13 UTC 2017

On 8/19/17 11:34 AM, Martin Buchholz wrote:
> Your explanation is so awesome it seems it should be preserved in a 
> javadoc style guide somewhere.
One we can sort out the "Java Style Guidelines", I would like to write 
such a guide as you suggest.
> There are refactorings that make logical sense ("subtables"?)  but 
> lose readability in practice.
> I'm happy with what you have, but as always have suggestions:
> - I would use centered text for "*First Element (Head)"*; that would 
> be consistent with jdk9 formatting, and consistent with the html 
> default "header text is centered".
> 139 * <th id="Insert" rowspan="4" style="text-align:left; 
> vertical-align:top">Insert</th>
> I might have chosen centered here as well.

I'll make those two changes for you.
> On Sat, Aug 19, 2017 at 9:10 AM, Jonathan Gibbons 
> <jonathan.gibbons at oracle.com <mailto:jonathan.gibbons at oracle.com>> wrote:
>     On 8/18/17 6:35 PM, Martin Buchholz wrote:
>>     Thanks as usual for the modern html lessons.  Looks good.
>>     Things I wonder about:
>>     - I expected to find scope= attributes in BlockingDeque.java
>>     tables. TIL about colgroup and rowgroup.  (or does headers=...
>>     make that redundant?)
>>     - I see "font-style: italic" but that seems rather low-level and
>>     I expected something higher level.
>>     - I was surprised by
>>     178 * <th id="peek" style="font-weight:normal;
>>     text-align:left">{@link #peek() peek()}</th>179 * <td
>>     headers="Examine BDeque peek">{@link #peekFirst() peekFirst()}</td>
>>     because these two cells are "parallel" and so I expected them to
>>     have similar definitions.  I can see they are "related" and the
>>     headers= makes that clear, but it still feels slightly wrong to
>>     make one of them a <th> and the other a <td>.
>     Hi Martin,
>     We're dealing with the intersection of rules and standards here. I
>     personally agree with your queasiness about the distinction
>     between th/td for "similar" cells but ...
>     The general intent is that every data cell (td) in a table has to
>     identify the header cells (th) that provide details about the row
>     and column in which that data cell appears. This implies that
>     every column has header cells that describe the column and that
>     every row has header cells that define the row. There's also an
>     implication of uniqueness. The header cells for each row/column in
>     the table must be unique.
>     There are two alternative ways to associate data cells with header
>     cells.
>     1. The "easiest" way, for most tables, is to put scope={row,col}
>     etc on the header cells.
>     2. The more flexible way, for complex tables, is to put id= on
>     header cells and headers="list-of-ids" on data cells.
>     In HTML 4, the rules were more lax about the distinction between
>     header cells and data cells. In HTML 5, the rules are more strict.
>     In HTML, you can only put scope=row|col on a header (th) cell, and
>     the headers attribute on a data cell (td) can only refer to ids on
>     header cells (th). This is the reason that so many tables
>     throughout these changes have had data cells converted to header
>     cells, which in turn leads to using styles to get/retain the
>     desired visual presentation.
>     Now for BlockingDequeue, as here:
>     http://cr.openjdk.java.net/~jjg/8186466/api.00/java/util/concurrent/BlockingDeque.html
>     <http://cr.openjdk.java.net/%7Ejjg/8186466/api.00/java/util/concurrent/BlockingDeque.html>
>     It's really two tables in one: an upper table, for "First Element
>     (Head)" and a lower table, for "Last Element (Tail)". It's not a
>     candidate for using the scope attribute because of the split
>     nature of the table. With reference to a similarly structured
>     table elsewhere in the API, I was advised by an expert in Oracle's
>     Accessibility Office that some screen readers would read all the
>     column headers for a cell, and not just those that might visually
>     seem to be applicable. So, with the simple solution ruled out,
>     there were 3 possibilities for this table.
>     1. Split it into two tables. That might work OK for this table,
>     because of the similar content, but the general problem of using
>     distinct tables is that to have the tables use the same widths,
>     you generally have to fix the widths, as compared to letting the
>     tables be sized automatically. If you don't specify widths, the
>     tables will generally end up with different geometries leading to
>     unaligned columns and/or a ragged right edge.
>     2. Move the subheaders (the First Element and Last Element cells)
>     to a new column on the left, with appropriate rowspan attributes,
>     and remove the second row of the italic headings. Then, the table
>     becomes simple enough to use scope=row|col, at the cost of making
>     the table wider. That would probably work in this case, but it
>     would conflict with the pattern of Insert/Remove/Examine cells in
>     the first column, as in other tables in related classes.
>     3. Use the headers attribute instead of the scope attribute.
>     Although it leads to more complex markup, it has the advantage of
>     preserving the authors' original layout.
>     As for your comment about using style="font-weight:italic"... You
>     say it seems low level and you expected something higher level. In
>     this case, the higher level you are looking for is that the
>     enclosing HTML tag was changed from <td> to <th>. But
>     "unfortunately", the default style for a <th> is bold text, and so
>     I changed it to italic using a style attribute, to preserve the
>     original presentation. It would be wrong to use <i> (See
>     https://www.w3.org/International/questions/qa-b-and-i-tags
>     <https://www.w3.org/International/questions/qa-b-and-i-tags> ) and
>     somewhat wrong to use <em> because that would indicate that these
>     headings are to be emphasized more than other headings. If the
>     entire page was a standalone HTML document, this would be a
>     classic use of a table-specific style, setting an id on the table
>     node, and then providing out-of-line style info in either a
>     <style> node in the <head>, or in an associated stylesheet. With
>     such a mechanism, we could "move" all style declarations out of
>     the flow of semantic content ... which is the way that HTML5 is
>     intended to be used. But this is javadoc, and we don't (yet) have
>     any such ability, although you can be sure that it has triggered
>     discussions about how we can improve the use of styles in javadoc
>     comments.
>     As an aside, I note that there are some places in the W3C website
>     that hint at the possibility of being able to use <style>
>     anywhere, and not just in <head>. Were that true, that would be
>     wonderful and would simplify the use of styles in javadoc
>     comments. My best guess is that this was considered in early
>     versions of HTML5, and is even supported by some browsers, but our
>     general rule is to follow the rules in the official W3C
>     specification of HTML, and not any examples in wiki pages or
>     tutorials.
>     Back on BlockingDequeue, if you would prefer me to change the code
>     to use one of the other options (1,2,3) listed above, I will do so.
>     -- Jon

More information about the core-libs-dev mailing list