@@ -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
@@ -167,6 +172,8 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
167
172
)).dropRight(1 )
168
173
div(cls := " breadcrumbs container" )(innerTags:_* )
169
174
175
+ val (apiNavOpt, docsNavOpt): (Option [(Boolean , Seq [AppliedTag ])], Option [(Boolean , Seq [AppliedTag ])]) = buildNavigation(link)
176
+
170
177
def textFooter : String | AppliedTag =
171
178
args.projectFooter.fold(" " ) { f =>
172
179
span(id := " footer-text" )(
@@ -205,17 +212,27 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
205
212
// )
206
213
// ),
207
214
// div(id := "paneSearch"),
208
- buildNavigation(link) match {
209
- case ((isApiActive, apiNav), (isDocsActive, docsNav)) =>
210
- Seq (
211
- div(cls:= " switcher-container" )(
212
- button(id := " docs-nav-button" , cls:= s " switcher h100 ${if ! isApiActive && isDocsActive then " selected" else " " }" )(raw(" Docs" )),
213
- button(id := " api-nav-button" , cls:= s " switcher h100 ${if isApiActive then " selected" else " " }" )(raw(" API" )),
214
- ),
215
- nav(id := " api-nav" , cls := s " side-menu ${if isApiActive then " selected" else " " }" )(apiNav),
216
- nav(id := " docs-nav" , cls := s " side-menu ${if ! isApiActive && isDocsActive then " selected" else " " }" )(docsNav)
215
+ Seq (
216
+ div(cls:= " switcher-container" )(
217
+ apiNavOpt match {
218
+ case Some (isApiActive, apiNav) =>
219
+ Seq (a(id := " api-nav-button" , cls:= s " switcher h100 ${if isApiActive then " selected" else " " }" , href := pathToPage(link.dri, rootApiPage.get.link.dri))(" API" ))
220
+ case _ => Nil
221
+ },
222
+ docsNavOpt match {
223
+ case Some (isDocsActive, docsNav) =>
224
+ Seq (a(id := " docs-nav-button" , cls:= s " switcher h100 ${if isDocsActive then " selected" else " " }" , href := pathToPage(link.dri, rootDocsPage.get.link.dri))(" Docs" ))
225
+ case _ => Nil
226
+ }
227
+ ),
228
+ apiNavOpt
229
+ .filter(_._1)
230
+ .fold(
231
+ nav(id := " docs-nav" , cls := s " side-menu " )(docsNavOpt.get._2)
232
+ )(
233
+ apiNav => nav(id := " api-nav" , cls := s " side-menu " )(apiNav._2)
217
234
)
218
- },
235
+ )
219
236
),
220
237
div(id := " main" )(
221
238
div (id := " leftToggler" )(
0 commit comments