@@ -99,7 +99,7 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
99
99
case None => " "
100
100
)
101
101
102
- private def buildNavigation (pageLink : Link ): ((Boolean , AppliedTag ), (Boolean , AppliedTag ) ) =
102
+ private def buildNavigation (pageLink : Link ): (Option [ (Boolean , Seq [ AppliedTag ])], Option [ (Boolean , Seq [ AppliedTag ])] ) =
103
103
def navigationIcon (member : Member ) = member match {
104
104
case m if m.needsOwnPage => Seq (span(cls := s " micon ${member.kind.name.take(2 )}" ))
105
105
case _ => Nil
@@ -126,20 +126,25 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
126
126
)
127
127
128
128
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())
130
130
case children =>
131
131
val nested = children.map(renderNested(_, nestLevel + 1 ))
132
132
val expanded = nested.exists(_._1) || isSelected
133
133
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" )
135
135
(isSelected || expanded) -> div(attr)(
136
136
linkHtml(expanded, true ),
137
137
nested.map(_._2)
138
138
)
139
139
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
+ }
143
148
144
149
(apiNav, docsNav)
145
150
@@ -183,6 +188,8 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
183
188
)).dropRight(1 )
184
189
div(cls := " breadcrumbs container" )(innerTags:_* )
185
190
191
+ val (apiNavOpt, docsNavOpt): (Option [(Boolean , Seq [AppliedTag ])], Option [(Boolean , Seq [AppliedTag ])]) = buildNavigation(link)
192
+
186
193
def textFooter : String | AppliedTag =
187
194
args.projectFooter.fold(" " ) { f =>
188
195
span(id := " footer-text" )(
@@ -221,17 +228,27 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
221
228
// )
222
229
// ),
223
230
// 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)
233
250
)
234
- },
251
+ )
235
252
),
236
253
div(id := " main" )(
237
254
div (id := " leftToggler" )(
0 commit comments