RFR: 8345555: Improve layout of search results
Hannes Wallnöfer
hannesw at openjdk.org
Mon Feb 17 14:51:48 UTC 2025
Please review an enhancement to JavaDoc search to provide move context and a nicer layout for search results. This adds a new "kind" field to the search index to describes search items, such as "Static method", "Interface, or "System property" etc. Additionally, the drop-down search box uses a new two-column layout for search results to display this information. Previously we always displayed fully qualified names and signatures, now we mostly display simple names except if the user entered a qualified search term.
The screenshot below shows an example of the new layout, you can of course [test the feature yourself](https://cr.openjdk.org/~hannesw/8345555/api.02/) (top-level files only). Note that the change affects moslty the drop-down search menu, the standalone search page was slightly updated to work with the new data but is otherwise unchanged.
<img width="659" alt="Screenshot 2025-02-17 at 14 56 52" src="https://github.com/user-attachments/assets/fb88a839-d3f8-4a27-957a-f1158b3ecff8" />
On the Java side, the feature is implemented by adding a new `IndexItem.Kind` enum class listing all possible kinds of index items, which include API `Element`s, JavaDoc tags and summary pages. The purpose if this enum is to send its `ordinal`s to the browser via JSON where it is used as array index into an array of localized messages. This means that the Java enum and JavaScript array have to be kept in sync manually, but it's relatively rare that new language elements or JavaDoc tags get added so that shouldn't be a problem.
There is a small change in JavaDoc HTML output because "System property" and "External specification" are now kinds of tags and no longer used as descriptions. This means that on index pages they are now listed as "System property in package foo" rather than "Search tag in package foo" with the description "System Tag" added in the next line.
This means that only actual `{@index}` tags can now have a description, which continues to be added as second line in index pages. In search, the description is now appended to the search term separated by "-", wich means that it can also be searched for: https://cr.openjdk.org/~hannesw/8345555/api.02/search.html?q=tool&c=searchTags
On the JavaScript side, changes went a bit further than originally planned. I finally fixed the format of constructors not to show the class name twice, which required some retuning of ranking of search results. I used this occasion to add lots of comments to the code so it will be easier to maintain in the future. Unfortunately things look quite bad on the side of JavaScript testing. We do have a test for the script that relied on Nashorn and later GraalJS. I didn't get GraalJS running with current OpenJDK, and Nashorn doesn't support the modern JavaScript features used by the script. We really need to do something about JavaScript testing. For this change I think it's acceptable because changes are in rendering and ranking and not in core functionality.
On the CSS side, the new drop-down layout makes use of [CSS Subgrid](https://caniuse.com/?search=subgrid) which is relatively new but is a "Baseline" feature as of 2023, which means it is works across Chrome, Edge, Safari and Firefox. I hae tested it on all these browsers including mobile variants and have not encountered any problems.
-------------
Commit messages:
- 8345555: Improve layout of search results
Changes: https://git.openjdk.org/jdk/pull/23666/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=23666&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8345555
Stats: 665 lines in 25 files changed: 330 ins; 72 del; 263 mod
Patch: https://git.openjdk.org/jdk/pull/23666.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/23666/head:pull/23666
PR: https://git.openjdk.org/jdk/pull/23666
More information about the javadoc-dev
mailing list