8202959: Rearrange the top and bottom navigation bar in the javadoc generated pages

Co-authored-by: Bhavesh Patel <bhavesh.x.patel@oracle.com>
Reviewed-by: darcy, jjg
This commit is contained in:
Jonathan Gibbons 2018-06-28 15:46:27 -07:00
parent 736e57146d
commit 3ae58c7fdc
16 changed files with 126 additions and 155 deletions

View File

@ -85,16 +85,13 @@ public class AllClassesFrameWriter extends HtmlDocletWriter {
* "allclasses-frame.html" file. Generate the file in the current or the
* destination directory.
*
* @param indexBuilder IndexBuilder object for all classes index.
* @param configuration the configuration for this javadoc run
* @throws DocFileIOException
*/
public static void generate(HtmlConfiguration configuration,
IndexBuilder indexBuilder) throws DocFileIOException {
if (configuration.frames) {
generate(configuration, indexBuilder, DocPaths.ALLCLASSES_FRAME, true);
generate(configuration, indexBuilder, DocPaths.ALLCLASSES_NOFRAME, false);
} else {
generate(configuration, indexBuilder, DocPaths.ALLCLASSES, false);
}
}

View File

@ -375,23 +375,6 @@ public class HelpWriter extends HtmlDocletWriter {
ul.addContent(htmlTree);
}
// All Classes
Content allclassesHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
contents.allClassesLabel);
htmlTree = (configuration.allowTag(HtmlTag.SECTION))
? HtmlTree.SECTION(allclassesHead)
: HtmlTree.LI(HtmlStyle.blockList, allclassesHead);
Content allClassesBody = contents.getContent("doclet.help.all_classes.body",
links.createLink(DocPaths.AllClasses(configuration.frames),
resources.getText("doclet.All_Classes")));
Content allclassesPara = HtmlTree.P(allClassesBody);
htmlTree.addContent(allclassesPara);
if (configuration.allowTag(HtmlTag.SECTION)) {
ul.addContent(HtmlTree.LI(HtmlStyle.blockList, htmlTree));
} else {
ul.addContent(htmlTree);
}
// Serialized Form
Content sHead = HtmlTree.HEADING(HtmlConstants.CONTENT_HEADING,
contents.serializedForm);

View File

@ -106,23 +106,17 @@ public class Navigation {
}
enum Position {
BOTTOM("allclasses_navbar_bottom", HtmlConstants.START_OF_BOTTOM_NAVBAR, HtmlConstants.END_OF_BOTTOM_NAVBAR),
TOP("allclasses_navbar_top", HtmlConstants.START_OF_TOP_NAVBAR, HtmlConstants.END_OF_TOP_NAVBAR);
BOTTOM(HtmlConstants.START_OF_BOTTOM_NAVBAR, HtmlConstants.END_OF_BOTTOM_NAVBAR),
TOP(HtmlConstants.START_OF_TOP_NAVBAR, HtmlConstants.END_OF_TOP_NAVBAR);
final String allClassesLinkId;
final Content startOfNav;
final Content endOfNav;
Position(String allClassesLinkId, Content startOfNav, Content endOfNav) {
this.allClassesLinkId = allClassesLinkId;
Position(Content startOfNav, Content endOfNav) {
this.startOfNav = startOfNav;
this.endOfNav = endOfNav;
}
String allClassesLinkId() {
return allClassesLinkId;
}
Content startOfNav() {
return startOfNav;
}
@ -130,20 +124,6 @@ public class Navigation {
Content endOfNav() {
return endOfNav;
}
Script allClassesLinkScript() {
return new Script("<!--\n"
+ " allClassesLink = document.getElementById(")
.appendStringLiteral(allClassesLinkId)
.append(");\n"
+ " if(window==top) {\n"
+ " allClassesLink.style.display = \"block\";\n"
+ " }\n"
+ " else {\n"
+ " allClassesLink.style.display = \"none\";\n"
+ " }\n"
+ " //-->\n");
}
}
/**
@ -971,13 +951,6 @@ public class Navigation {
tree.addContent(HtmlTree.LI(noFramesContent));
}
private void addNavLinkClassIndex(Content tree) {
Content allClassesContent = links.createLink(pathToRoot.resolve(
DocPaths.AllClasses(configuration.frames)),
contents.allClassesLabel, "", "");
tree.addContent(HtmlTree.LI(allClassesContent));
}
private void addSearch(Content tree) {
String searchValueId = "search";
String reset = "reset";
@ -990,16 +963,6 @@ public class Navigation {
tree.addContent(ulSearch);
}
private void addAllClassesLinkScript(Content tree, boolean top) {
Content div = HtmlTree.DIV(top
? Position.TOP.allClassesLinkScript().asContent()
: Position.BOTTOM.allClassesLinkScript().asContent());
Content div_noscript = HtmlTree.DIV(contents.noScriptMessage);
Content noScript = HtmlTree.NOSCRIPT(div_noscript);
div.addContent(noScript);
tree.addContent(div);
}
private void addFixedNavScript(Content tree) {
tree.addContent(FIXED_NAV_SCRIPT.asContent());
}
@ -1046,26 +1009,6 @@ public class Navigation {
}
HtmlTree subDiv = new HtmlTree(HtmlTag.DIV);
subDiv.setStyle(HtmlStyle.subNav);
HtmlTree ulFrames = new HtmlTree(HtmlTag.UL);
ulFrames.setStyle(HtmlStyle.navList);
if (!configuration.nonavbar) {
if (configuration.frames) {
addNavShowLists(ulFrames);
addNavHideLists(ulFrames);
}
}
subDiv.addContent(ulFrames);
HtmlTree ulAllClasses = new HtmlTree(HtmlTag.UL);
ulAllClasses.setStyle(HtmlStyle.navList);
ulAllClasses.addAttr(HtmlAttr.ID, top
? Position.TOP.allClassesLinkId()
: Position.BOTTOM.allClassesLinkId());
addNavLinkClassIndex(ulAllClasses);
subDiv.addContent(ulAllClasses);
if (top && configuration.createindex) {
addSearch(subDiv);
}
addAllClassesLinkScript(subDiv, top);
HtmlTree div = new HtmlTree(HtmlTag.DIV);
// Add the summary links if present.
HtmlTree ulNavSummary = new HtmlTree(HtmlTag.UL);
@ -1077,10 +1020,22 @@ public class Navigation {
ulNavDetail.setStyle(HtmlStyle.subNavList);
addDetailLinks(ulNavDetail);
div.addContent(ulNavDetail);
HtmlTree ulFrames = new HtmlTree(HtmlTag.UL);
ulFrames.setStyle(HtmlStyle.navList);
if (!configuration.nonavbar) {
if (configuration.frames) {
addNavShowLists(ulFrames);
addNavHideLists(ulFrames);
}
}
div.addContent(ulFrames);
subDiv.addContent(div);
subDiv.addContent(queue.poll());
if (top && configuration.createindex) {
addSearch(subDiv);
}
if (top) {
fixedNavDiv.addContent(subDiv);
fixedNavDiv.addContent(queue.poll());
fixedNavDiv.addContent(Position.TOP.endOfNav());
tree.addContent(fixedNavDiv);
HtmlTree paddingDiv = HtmlTree.DIV(HtmlStyle.navPadding, Contents.SPACE);
@ -1088,6 +1043,7 @@ public class Navigation {
addFixedNavScript(tree);
} else {
tree.addContent(subDiv);
tree.addContent(queue.poll());
tree.addContent(Position.BOTTOM.endOfNav());
}
return tree;

View File

@ -168,8 +168,6 @@ doclet.help.frames.head=\
Frames/No Frames
doclet.help.frames.body=\
These links show and hide the HTML frames. All pages are available with or without frames.
doclet.help.all_classes.body=\
The {0} link shows all classes and interfaces except non-static nested types.
doclet.help.serial_form.body=\
Each serializable or externalizable class has a description of its serialization fields and \
methods. This information is of interest to re-implementors, not to developers using the API. \

View File

@ -191,6 +191,9 @@ sup {
padding:0 0 5px 6px;
text-transform:uppercase;
}
.subNav .navList {
padding-top:5px;
}
ul.navList, ul.subNavList {
float:left;
margin:0 25px 0 0;
@ -220,6 +223,7 @@ ul.navListSearch li label {
ul.subNavList li {
list-style:none;
float:left;
padding-top:10px;
}
.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited {
color:#FFFFFF;
@ -784,6 +788,7 @@ ul.ui-autocomplete li {
padding-left:20px;
position:relative;
right:-18px;
width:400px;
}
#reset {
background-color: rgb(255,255,255);

View File

@ -51,6 +51,7 @@ public class WindowTitles extends JavadocTester {
"-sourcepath", testSrc,
"p1", "p2");
checkExit(Exit.OK);
checkFiles(false, "allclasses-noframe.html");
checkTitle("overview-summary.html", "Overview");
checkTitle("overview-tree.html", "Class Hierarchy");
@ -61,7 +62,6 @@ public class WindowTitles extends JavadocTester {
checkTitle("p1/package-use.html", "Uses of Package p1");
checkTitle("p1/C1.html", "C1");
checkTitle("allclasses-frame.html", "All Classes");
checkTitle("allclasses-noframe.html", "All Classes");
checkTitle("constant-values.html", "Constant Field Values");
checkTitle("deprecated-list.html", "Deprecated List");
checkTitle("serialized-form.html", "Serialized Form");

View File

@ -287,24 +287,19 @@ public class TestFramesNoFrames extends JavadocTester {
private void checkAllClassesFiles() {
// these files are only generated in frames mode
checkFiles(frames,
"allclasses-frame.html",
"allclasses-noframe.html");
"allclasses-frame.html");
// this file is only generated when not in frames mode
checkFiles(!frames,
checkFiles(false,
"allclasses.html");
checkFiles(false,
"allclasses-noframe.html");
if (frames) {
checkOutput("allclasses-frame.html", true,
classes.stream()
.map(c -> "title=\"class in " + packagePart(c) + "\" target=\"classFrame\">" + classPart(c) + "</a>")
.toArray(String[]::new));
checkOutput("allclasses-noframe.html", false,
"target=\"classFrame\">");
} else {
checkOutput("allclasses.html", false,
"target=\"classFrame\">");
}
}

View File

@ -45,6 +45,7 @@ public class TestGeneratedBy extends JavadocTester {
"-sourcepath", testSrc,
"pkg");
checkExit(Exit.OK);
checkFiles(false, "allclasses-noframe.html");
checkTimestamps(true);
}
@ -57,6 +58,7 @@ public class TestGeneratedBy extends JavadocTester {
"-sourcepath", testSrc,
"pkg");
checkExit(Exit.OK);
checkFiles(false, "allclasses-noframe.html");
checkTimestamps(false);
}
@ -67,7 +69,6 @@ public class TestGeneratedBy extends JavadocTester {
"pkg/package-summary.html",
"pkg/package-frame.html",
"pkg/package-tree.html",
"allclasses-noframe.html",
"constant-values.html",
"allclasses-frame.html",
"overview-tree.html",

View File

@ -117,14 +117,6 @@ public class TestHtmlVersion extends JavadocTester {
+ "<ul>\n"
+ "<li>");
// Test for allclasses-noframe page
checkOutput("allclasses-noframe.html", true,
"<!DOCTYPE HTML>",
"<meta name=\"dc.created\"",
"<main role=\"main\" class=\"indexContainer\">\n"
+ "<ul>\n"
+ "<li>");
// Test for overview-summary page
checkOutput("overview-summary.html", true,
"<!DOCTYPE HTML>",
@ -655,14 +647,6 @@ public class TestHtmlVersion extends JavadocTester {
+ "<ul>\n"
+ "<li>");
// Negated test for allclasses-noframe page
checkOutput("allclasses-noframe.html", false,
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
"<meta name=\"date\"",
"<div class=\"indexContainer\">\n"
+ "<ul>\n"
+ "<li>");
// Negated test for overview-summary page
checkOutput("overview-summary.html", false,
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
@ -1088,14 +1072,6 @@ public class TestHtmlVersion extends JavadocTester {
+ "<ul>\n"
+ "<li>");
// Test for allclasses-noframe page
checkOutput("allclasses-noframe.html", true,
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
"<meta name=\"date\"",
"<div class=\"indexContainer\">\n"
+ "<ul>\n"
+ "<li>");
// Test for overview-summary page
checkOutput("overview-summary.html", true,
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">",
@ -1539,14 +1515,6 @@ public class TestHtmlVersion extends JavadocTester {
+ "<ul>\n"
+ "<li>");
// Negated test for allclasses-noframe page
checkOutput("allclasses-noframe.html", false,
"<!DOCTYPE HTML>",
"<meta name=\"dc.created\"",
"<main role=\"main\" class=\"indexContainer\">\n"
+ "<ul>\n"
+ "<li>");
// Negated test for overview-summary page
checkOutput("overview-summary.html", false,
"<!DOCTYPE HTML>",

View File

@ -102,7 +102,7 @@ public class TestModuleDirs extends JavadocTester {
+ "<li><a href=\"overview-frame.html\" target=\"packageListFrame\">All&nbsp;Packages</a></li>\n"
+ "<li><a href=\"module-overview-frame.html\" target=\"packageListFrame\">All&nbsp;Modules</a></li>\n"
+ "</ul>\n");
checkOutput("ma-summary.html", true,
checkOutput("ma-summary.html", false,
"<ul class=\"navList\" id=\"allclasses_navbar_top\">\n"
+ "<li><a href=\"allclasses-noframe.html\">All&nbsp;Classes</a></li>\n"
+ "</ul>\n");
@ -145,7 +145,7 @@ public class TestModuleDirs extends JavadocTester {
+ "<li><a href=\"../overview-frame.html\" target=\"packageListFrame\">All&nbsp;Packages</a></li>\n"
+ "<li><a href=\"../module-overview-frame.html\" target=\"packageListFrame\">All&nbsp;Modules</a></li>\n"
+ "</ul>\n");
checkOutput("ma/module-summary.html", true,
checkOutput("ma/module-summary.html", false,
"<ul class=\"navList\" id=\"allclasses_navbar_top\">\n"
+ "<li><a href=\"../allclasses-noframe.html\">All&nbsp;Classes</a></li>\n"
+ "</ul>\n");

View File

@ -1148,7 +1148,8 @@ public class TestModules extends JavadocTester {
"module-overview-frame.html");
checkFiles(true,
"moduleC/module-summary.html",
"allclasses-frame.html",
"allclasses-frame.html");
checkFiles(false,
"allclasses-noframe.html");
}

View File

@ -81,34 +81,73 @@ public class TestModuleNavigation extends JavadocTester {
checkOutput("overview-summary.html", false,
"Prev",
"Next");
"Next",
"All&nbsp;Classes",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_top\");",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");");
checkOutput("m/module-summary.html", false,
"Prev&nbsp;Module",
"Next&nbsp;Module");
"Next&nbsp;Module",
"All&nbsp;Classes",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_top\");",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");");
checkOutput("m2/m2p1/package-summary.html", false,
"Prev&nbsp;Package",
"Next&nbsp;Package");
"Next&nbsp;Package",
"All&nbsp;Classes",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_top\");",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");");
checkOutput("m2/m2p1/Am2.html", false,
"Prev&nbsp;Class",
"Next&nbsp;Class");
"Next&nbsp;Class",
"All&nbsp;Classes",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_top\");",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");");
checkOutput("m2/m2p1/class-use/Am2.html", false,
"Prev",
"Next");
"Next",
"All&nbsp;Classes",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_top\");",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");");
checkOutput("m2/m2p1/package-tree.html", false,
"Prev",
"Next");
"Next",
"All&nbsp;Classes",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_top\");",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");");
checkOutput("deprecated-list.html", false,
"Prev",
"Next");
"Next",
"All&nbsp;Classes",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_top\");",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");");
checkOutput("index-all.html", false,
"Prev",
"Next");
"Next",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_top\");",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");");
}
}

View File

@ -60,6 +60,7 @@ public class TestNavigation extends JavadocTester {
"-sourcepath", testSrc,
"pkg");
checkExit(Exit.OK);
checkSubNav();
checkOutput("pkg/A.html", true,
"<ul class=\"navList\" title=\"Navigation\">\n" +
@ -117,6 +118,7 @@ public class TestNavigation extends JavadocTester {
"-sourcepath", testSrc,
"pkg");
checkExit(Exit.OK);
checkSubNav();
checkOutput("pkg/I.html", true,
// Test for 4664607
@ -156,6 +158,7 @@ public class TestNavigation extends JavadocTester {
"-sourcepath", testSrc,
"pkg");
checkExit(Exit.OK);
checkSubNav();
checkOutput("pkg/A.html", true,
"<!-- ========= END OF TOP NAVBAR ========= -->\n"
@ -189,6 +192,7 @@ public class TestNavigation extends JavadocTester {
"-sourcepath", testSrc,
"pkg");
checkExit(Exit.OK);
checkSubNav();
checkOutput("pkg/A.html", false,
"<!-- ========= END OF TOP NAVBAR ========= -->\n"
@ -221,6 +225,7 @@ public class TestNavigation extends JavadocTester {
"-sourcepath", testSrc,
"pkg");
checkExit(Exit.OK);
checkSubNav();
checkOutput("pkg/A.html", false,
"<!-- ========= END OF TOP NAVBAR ========= -->\n"
@ -329,4 +334,42 @@ public class TestNavigation extends JavadocTester {
"<li>Constr&nbsp;|&nbsp;</li>",
"<li>Method</li>");
}
private void checkSubNav() {
checkOutput("pkg/A.html", false,
"All&nbsp;Classes",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_top\");",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");");
checkOutput("pkg/C.html", false,
"All&nbsp;Classes",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_top\");",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");");
checkOutput("pkg/E.html", false,
"All&nbsp;Classes",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_top\");",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");");
checkOutput("pkg/I.html", false,
"All&nbsp;Classes",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_top\");",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");");
checkOutput("pkg/package-summary.html", false,
"All&nbsp;Classes",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_top\");",
"<script type=\"text/javascript\"><!--\n"
+ " allClassesLink = document.getElementById(\"allclasses_navbar_bottom\");");
}
}

View File

@ -132,6 +132,7 @@ public class TestOrdering extends JavadocTester {
"--frames",
"pkg1");
tester.checkExit(Exit.OK);
tester.checkFiles(false, "allclasses-noframe.html");
checkClassUseOrdering("pkg1/class-use/UsedClass.html");
@ -182,20 +183,6 @@ public class TestOrdering extends JavadocTester {
"<dd><code>iterator</code>&nbsp;in interface&nbsp;<code>java.util.Collection&lt;",
"<dd><code>iterator</code>&nbsp;in interface&nbsp;<code>java.lang.Iterable&lt;");
tester.checkOrder("allclasses-noframe.html",
"pkg1/A.html\" title=\"class in pkg1",
"pkg1/A.C.html\" title=\"class in pkg1",
"pkg1/B.html\" title=\"class in pkg1",
"pkg1/B.A.html\" title=\"class in pkg1",
"pkg1/C1.html\" title=\"class in pkg1",
"pkg1/C2.html\" title=\"class in pkg1",
"pkg1/C3.html\" title=\"class in pkg1",
"pkg1/C4.html\" title=\"class in pkg1",
"pkg1/ImplementsOrdering.html\" title=\"interface in pkg1",
"pkg1/MethodOrder.html\" title=\"class in pkg1",
"pkg1/OverrideOrdering.html\" title=\"class in pkg1",
"pkg1/UsedClass.html\" title=\"class in pkg1");
tester.checkOrder("allclasses-frame.html",
"pkg1/A.html\" title=\"class in pkg1",
"pkg1/A.C.html\" title=\"class in pkg1",

View File

@ -190,7 +190,6 @@ class APITest {
* Standard files generated by processing a documented class pkg.C.
*/
protected static Set<String> standardExpectFiles = new HashSet<>(Arrays.asList(
"allclasses.html",
"allclasses-index.html",
"allpackages-index.html",
"constant-values.html",

View File

@ -190,7 +190,6 @@ class APITest {
* Standard files generated by processing a documented class pkg.C.
*/
protected static Set<String> standardExpectFiles = new HashSet<>(Arrays.asList(
"allclasses.html",
"allclasses-index.html",
"allpackages-index.html",
"constant-values.html",