On Thu, 30 Jun 2022 15:14:40 GMT, Hannes Wallnöfer <hann...@openjdk.org> wrote:
> Please review an enhancement to the preview page to add a list of preview > features and allow users to explore the preview APIs by feature. > > While the changes for the enhancement itself are not overly complex, the work > entailed a moderate cleanup of other summary API lists (Deprecated and New > API pages) as well as a few unrelated summary pages that happened to share > some of the CSS classes and HTML structure. > > The change itself starts with a new internal > `jdk.internal.javac.PreviewFeature.JEP` annotation interface to add JEP > information to the nearby `jdk.internal.javac.PreviewFeature.Feature` enum. > This JEP information is retrieved by new methods in the javadoc `Utils` class > and then fetched by `PreviewAPIListBuilder` which passes it on to > `PreviewListWriter`. > > The superclass of `PreviewListWriter` and other API summary writer classes, > `SummaryListWriter`, gets a new `addContentSelectors(Content)` method to add > the checkboxes to show/hide various parts of the page content. The class is > also now abstract as this and other methods do not have useful > implementations in the base class. > > Another change to `SummaryListWriter` is that `pageMode`, `description`, > `headContent` and `titleKey` are no longer fields in the class but rather > sent to the `generateSummaryListFile` method as parameters since they are > mostly just used locally in that method. On the other hand, the associated > Builder is used in many places and previously had to be retrieved from the > configuration object or passed around as parameter, so that is now set as a > final field in `SummaryListWriter`. > > Finally, a few words about changes in CSS and HTML: The "Contents" list > containing various kinds of elements in the API list was previously contained > in the `<div class="header">` element that also contains the page header, and > the stylesheet used the `.header ul` selector to style the list. Now that > the checkboxes separate the page header from the contents list it felt wrong > to put all this in the header div (most other pages only use the div for the > header itself). I also didn't like the indirect CSS selector too much, > `.header ul` is not very indicative of what it applies to. > > I therefore decided to create a new dedicated CSS class for the contents list > called `contents-list`, and move the `<ul>` element out of the header div. > Apart from the summary API pages, this change also affects the "Constant > Values" page as well as the top and package level "Tree" (class hierarchy) > pages. I made sure the contents list in these pages look the same as before. > > The list items in the contents list now each have an `id` attribute to allow > hiding the list item if no content for the element kind is currently > selected/visible. The value of the `id` attribute uses the format > `contents-<element-kind>`. > > There is one additional CSS class called `preview-feature-list` used for the > list of preview feature JEPs. > > Demo output for the new preview page as well as other pages is available here: > http://cr.openjdk.java.net/~hannesw/8287597/api.03/preview-list.html Mostly excellent. There are some minor comments inline. There are more "English phrases" (recognized as "strings with words separated by spaces") than I expected, at least some of which will end up in generated docs. But that being said, I guess this is a JDK-only feature, and we don't translate the source going into our API docs. src/java.base/share/classes/jdk/internal/javac/PreviewFeature.java line 91: > 89: /** JEP number */ > 90: int number() default 0; > 91: /** JEP title */ suggest noting the format (i.e. plain text, not HTML, not a resource key) src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/SummaryListWriter.java line 164: > 162: protected void addIndexLink(HtmlId id, String headingKey, Content > content) { > 163: var li = HtmlTree.LI(links.createLink(id, > 164: > contents.getContent(headingKey))).setId(HtmlId.of("contents-" + id.name())); Suggest adding a comment that `"contents-" + id` appears in the JavaScript code as well. You presumably can't change one without the other (and can't use a common function across the language barrier.) src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/standard.properties line 125: > 123: doclet.Preview_API=Preview API > 124: doclet.Preview_API_Checkbox_Label=Show preview API for: > 125: doclet.Preview_JEP_URL=https://openjdk.java.net/jeps/{0} Use `openjdk.org` src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/stylesheet.css line 243: > 241: } > 242: ul.contents-list li { > 243: font-size: 13px; Do these values have to be normalized into `.em` units, to align with new themes? src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/Utils.java line 1346: > 1344: * @return the map of PreviewFeature.JEP annotation element values, > or an empty map > 1345: */ > 1346: public Map<? extends ExecutableElement, ? extends AnnotationValue> > getJepInfo(String feature) { This method should borderline be in `Workarounds.java` because you are accessing javac internal features, even if only reflectively. ------------- PR: https://git.openjdk.org/jdk/pull/9336