Skip to content

Commit 36ef95c

Browse files
committed
Adjust navigation entries
1 parent 8e856b6 commit 36ef95c

File tree

3 files changed

+33
-43
lines changed

3 files changed

+33
-43
lines changed

scaladoc/resources/dotty_res/scripts/ux.js

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,4 @@
11
window.addEventListener("DOMContentLoaded", () => {
2-
var apiNav = document.getElementById("api-nav")
3-
var docsNav = document.getElementById("docs-nav")
4-
5-
var apiNavButton = document.getElementById("api-nav-button")
6-
var docsNavButton = document.getElementById("docs-nav-button")
7-
8-
apiNavButton.addEventListener('click', e => {
9-
if (!apiNav.classList.contains('selected')) {
10-
apiNav.classList.add('selected')
11-
apiNavButton.classList.add('selected')
12-
docsNav.classList.remove('selected')
13-
docsNavButton.classList.remove('selected')
14-
}
15-
})
16-
17-
docsNavButton.addEventListener('click', e => {
18-
if (!docsNav.classList.contains('selected')) {
19-
docsNav.classList.add('selected')
20-
docsNavButton.classList.add('selected')
21-
apiNav.classList.remove('selected')
22-
apiNavButton.classList.remove('selected')
23-
}
24-
})
252

263
var toggler = document.getElementById("leftToggler");
274
if (toggler) {

scaladoc/resources/dotty_res/styles/theme/components/navigation-item.css

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
/* api */
22

3-
.side-menu:not(.selected) {
4-
display: none;
5-
}
6-
73
.side-menu .ni {
84
display: none;
95
}

scaladoc/src/dotty/tools/scaladoc/renderers/HtmlRenderer.scala

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
9999
case None => ""
100100
)
101101

102-
private def buildNavigation(pageLink: Link): ((Boolean, AppliedTag), (Boolean, AppliedTag)) =
102+
private def buildNavigation(pageLink: Link): (Option[(Boolean, Seq[AppliedTag])], Option[(Boolean, Seq[AppliedTag])]) =
103103
def navigationIcon(member: Member) = member match {
104104
case m if m.needsOwnPage => Seq(span(cls := s"micon ${member.kind.name.take(2)}"))
105105
case _ => Nil
@@ -126,20 +126,25 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
126126
)
127127

128128
nav.children.filterNot(_.hidden) match
129-
case Nil => isSelected -> div(cls := s"ni n$nestLevel ${if isSelected || nestLevel == 0 then "expanded" else ""}")(linkHtml())
129+
case Nil => isSelected -> div(cls := s"ni n$nestLevel ${if isSelected then "expanded" else ""}")(linkHtml())
130130
case children =>
131131
val nested = children.map(renderNested(_, nestLevel + 1))
132132
val expanded = nested.exists(_._1) || isSelected
133133
val attr =
134-
if expanded || isSelected || nestLevel == 0 then Seq(cls := s"ni n$nestLevel expanded") else Seq(cls := s"ni n$nestLevel")
134+
if expanded || isSelected then Seq(cls := s"ni n$nestLevel expanded") else Seq(cls := s"ni n$nestLevel")
135135
(isSelected || expanded) -> div(attr)(
136136
linkHtml(expanded, true),
137137
nested.map(_._2)
138138
)
139139

140-
// TODO: The apiNav and docsNav should be optional and based on their existence, the buttons on UI should be active or not.
141-
val apiNav = rootApiPage.fold((false, span(cls := "ni")))(renderNested(_, 0))
142-
val docsNav = rootDocsPage.fold((false, span(cls := "ni")))(renderNested(_, 0))
140+
val isRootApiPageSelected = rootApiPage.fold(false)(_.link.dri == pageLink.dri)
141+
val isDocsApiPageSelected = rootDocsPage.fold(false)(_.link.dri == pageLink.dri)
142+
val apiNav = rootApiPage.map { p => p.children.map(renderNested(_, 0)) match
143+
case entries => (entries.exists(_._1) || isRootApiPageSelected, entries.map(_._2))
144+
}
145+
val docsNav = rootDocsPage.map { p => p.children.map(renderNested(_, 0)) match
146+
case entries => (entries.exists(_._1) || isDocsApiPageSelected, entries.map(_._2))
147+
}
143148

144149
(apiNav, docsNav)
145150

@@ -183,6 +188,8 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
183188
)).dropRight(1)
184189
div(cls := "breadcrumbs container")(innerTags:_*)
185190

191+
val (apiNavOpt, docsNavOpt): (Option[(Boolean, Seq[AppliedTag])], Option[(Boolean, Seq[AppliedTag])]) = buildNavigation(link)
192+
186193
def textFooter: String | AppliedTag =
187194
args.projectFooter.fold("") { f =>
188195
span(id := "footer-text")(
@@ -221,17 +228,27 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
221228
// )
222229
// ),
223230
// div(id := "paneSearch"),
224-
buildNavigation(link) match {
225-
case ((isApiActive, apiNav), (isDocsActive, docsNav)) =>
226-
Seq(
227-
div(cls:= "switcher-container")(
228-
button(id := "docs-nav-button", cls:= s"switcher h100 ${if !isApiActive && isDocsActive then "selected" else ""}")(raw("Docs")),
229-
button(id := "api-nav-button", cls:= s"switcher h100 ${if isApiActive then "selected" else ""}")(raw("API")),
230-
),
231-
nav(id := "api-nav", cls := s"side-menu ${if isApiActive then "selected" else ""}")(apiNav),
232-
nav(id := "docs-nav", cls := s"side-menu ${if !isApiActive && isDocsActive then "selected" else ""}")(docsNav)
231+
Seq(
232+
div(cls:= "switcher-container")(
233+
apiNavOpt match {
234+
case Some(isApiActive, apiNav) =>
235+
Seq(a(id := "api-nav-button", cls:= s"switcher h100 ${if isApiActive then "selected" else ""}", href := pathToPage(link.dri, rootApiPage.get.link.dri))("API"))
236+
case _ => Nil
237+
},
238+
docsNavOpt match {
239+
case Some(isDocsActive, docsNav) =>
240+
Seq(a(id := "docs-nav-button", cls:= s"switcher h100 ${if isDocsActive then "selected" else ""}", href := pathToPage(link.dri, rootDocsPage.get.link.dri))("Docs"))
241+
case _ => Nil
242+
}
243+
),
244+
apiNavOpt
245+
.filter(_._1)
246+
.fold(
247+
nav(id := "docs-nav", cls := s"side-menu")(docsNavOpt.get._2)
248+
)(
249+
apiNav => nav(id := "api-nav", cls := s"side-menu")(apiNav._2)
233250
)
234-
},
251+
)
235252
),
236253
div(id := "main")(
237254
div (id := "leftToggler")(

0 commit comments

Comments
 (0)