Hi Jon,

The patch looks good to me. 

Regarding changes (or lack of changes) in the stylesheet: I think it is ok to 
not adapt header font size, but there is a font-style:italic rule for h3 
headers which I think is problematic. That rule has moved from details heading 
to member heading in type pages, except that it is overwritten *sometimes* but 
not always by the following rule:

ul.blockList ul.blockList ul.blockList li.blockList h3 {
    font-style:normal;
}

That rule for some reason does not apply to the last member in each category 
(i.e. the last field, constructor, method of a type), so that those member 
headers are displayed in italic font. 

I think the proper solution would be to move the font-style:italic rule from h3 
to h2 (so summary and details headings would still be displayed in italic), but 
I’m not quite sure how that might affect other pages.

Hannes



> Am 25.01.2019 um 02:24 schrieb Jonathan Gibbons <jonathan.gibb...@oracle.com>:
> 
> This is a fix for the long-standing problems concerning "gaps" (and related 
> problems) in the headings (h1..h6 tags) in generated pages, that show up as 
> accessibility issues.
> 
> The problem was initially reported in the context of <h1> being missing from 
> the documentation pages for type declarations. In the course of the work, an 
> additional problem was discovered in the set of headings used in the 
> serialized-form page. This fix should address all such problems.
> 
> The fix comes in various parts.
> 
> src/ changes ...
> 
> 1. Most headings are generated using constants defined in a poorly-named 
> class called HtmlConstants, in a poorly-chosen package (html.markup.) The 
> constants are not very well defined, and it is hard to determine which 
> constant should be used in which context. In particular, there are cases 
> where the same constant is used in different contexts that should require 
> different heading levels, and that helps contribute to the root cause of the 
> problem. So, the constants are moved and reorganized into a new class 
> specifically for heading constants (Headings.java), using nested classes to 
> group the constants for each page. There are two notable nested classes, one 
> for type declarations and another for the serialized-form page, which are the 
> two kinds of pages with the most complex heading structure, and (not 
> surprisingly) the most bugs.  Additional nested classes are added for other 
> notable contexts, even if they only have a singleton entry. This will allow 
> those contexts to be extended if the need arises. Within the 
> Headings.TypeDeclaration class, the headings are adjusted to start from h1 
> instead of h2, which is the root of the fix to the issue. Iwent back and 
> forth on the naming of the constants ... should they end in _HEADING or not? 
> I tries both with and without. Right now, I left the names long; it works OK.
> 
> 2. With the headings removed from HtmlConstants, the remaining constants are 
> mostly a set of "marker comments" and a single constant for the default 
> charset. The constant for the default charset is moved to the one class where 
> it is used (HtmlConfiguration), leaving the HtmlConstants file to be renamed 
> to MarkerComments.java, since that is all that remain.
> 
> 3. Most of the remaining changes in the src/ directory are just updates to 
> use the new reorganized Headings. There was one complication that occurred in 
> two files, where the sequence of headings depended on whether or not the user 
> provided options on the command line! Both instances are in files related to 
> the "Frames" feature, which is scheduled for removal soon, and so I just 
> "hacked" a solution to use the right header depending on the circumstances. 
> If we were not planning to remove support for frames, it might have been 
> worth figuring a different solution to the generated output, but that did not 
> seem like a worthwhile effort.
> 
> test/ changes ...
> 
> As was to be expected, changing the headings for type declarations broke a 
> number of tests which included a heading as part of their golden output. 
> Since it is not easy to discern the correct values in all cases in all files 
> just by looking at the fragments of code, the dominant most important test is 
> the first change in JavadocTester, to globally enable by default the recently 
> added accessibility checker, which checks for missing headings.  With that 
> check enabled, it was possible to iterate between fixing tests and fixing 
> source code, to ensure that there are no longer any missing headings.
> 
> While in JavadocTester, I did some cosmetic cleanup to the doc comments in 
> that file.
> 
> One problem area was the Serialized Form page, which was visibly OK on the 
> screen, but structurally bad when you looked at the headings. (i.e. CSS was 
> papering over the problem.) For this problem, it was useful to add another 
> new feature to JavadocTester, to print out a filtered view of just the 
> headings in a page. While the check for missing headings finds many problems, 
> it doesn't find all. For example, if a page should have headings "H1 H2 H3" 
> but actually has "H1 H2 H2" that will pass the "missing headings" test, even 
> though the page is logically incorrect. The new ShowHeadings feature in 
> JavadocTester helps to expose such problems by making it easy to (manually) 
> verify the hierarchy of headings in a file.
> 
> stylesheet changes ...
> 
> The standard javadoc stylesheet uses almost-global settings for the font size 
> and style of the 6 levels of headings. For the most part, these settings are 
> used across all pages. (The exceptions are for the index files in the frames 
> feature, which, as has already been noted, is going away sometime soon.)  The 
> one additional visual cue for headings is the occasional use of a grey 
> background for headings, which does vary depending on the context (i.e. page 
> and heading-level.)
> 
> The only change to the stylesheet at this point is to ensure that the grey 
> background is used in the same positions as before ... typically for the 
> heading that precedes a list of elements, such as a list of members in a 
> class. The global settings for the font size and style are (intentionally) 
> not modified in this changeset.  This means that the appearance of headings 
> is generally consistent across all kinds of pages, although there are some 
> visual changes in some of the generated pages . We could revisit that if 
> necessary to get the same appearance as before, meaning that we would be 
> visually inconsistent between different kinds of pages. If so, that should be 
> a different cleanup task. I note that it would be a CSS-only task; I believe 
> there is enough info in the HTML that no further changes to the generated 
> HTML would be necessary.
> 
> In various discussions regarding this feature, concerns were expressed that 
> "<h1> is too big".  Given the existing definitions within the standard 
> stylesheet, this does not seem to be a problem in practice.
> 
> 
> Review tips:
> 
> * Start by looking at how HtmlConstants was converted into Headings and 
> MarkerComments
> * For tests, start by looking at JavadocTester
> * For the mundane changes to tests, you may find it worth looking at the 
> patch files instead of the side-by-side diffs
> 
> -- Jon
> 
> JBS: https://bugs.openjdk.java.net/browse/JDK-8215307
> Webrev: http://cr.openjdk.java.net/~jjg/8215307/webrev.00/
> 

Reply via email to