Skip to content

Commit e613719

Browse files
committed
Side menu html update
1 parent 946c710 commit e613719

File tree

3 files changed

+69
-32
lines changed

3 files changed

+69
-32
lines changed

scaladoc/resources/dotty_res/scripts/ux.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,28 @@
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+
})
25+
226
var toggler = document.getElementById("leftToggler");
327
if (toggler) {
428
toggler.onclick = function () {
@@ -16,7 +40,7 @@ window.addEventListener("DOMContentLoaded", () => {
1640
}
1741
}
1842

19-
$("#sideMenu2 span").on('click', function(){
43+
$(".side-menu span").on('click', function(){
2044
$(this).parent().toggleClass("expanded")
2145
});
2246

@@ -36,7 +60,7 @@ window.addEventListener("DOMContentLoaded", () => {
3660
observer.observe(section);
3761
});
3862

39-
document.querySelectorAll("#sideMenu2 a").forEach(elem => elem.addEventListener('click', e => e.stopPropagation()))
63+
document.querySelectorAll(".side-menu a").forEach(elem => elem.addEventListener('click', e => e.stopPropagation()))
4064

4165
$('.names .tab').on('click', function() {
4266
parent = $(this).parents(".tabs").first()

scaladoc/resources/dotty_res/styles/theme/layout/sideMenu.css

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#sideMenu2 {
1+
.side-menu {
22
overflow-y: auto;
33
overflow-x: hidden;
44
width: 100%;
@@ -8,50 +8,54 @@
88
box-sizing: border-box;
99
}
1010

11+
.side-menu:not(.selected) {
12+
display: none;
13+
}
14+
1115
/* divs in sidebar represent entry and its children */
12-
#sideMenu2 .ni {
16+
.side-menu .ni {
1317
padding-left: 0.8em;
1418
}
1519

16-
#sideMenu2 > .ni {
20+
.side-menu > .ni {
1721
padding-left: 0em;
1822
}
1923

20-
#sideMenu2 .ni {
24+
.side-menu .ni {
2125
display: none;
2226
}
2327

24-
#sideMenu2 > .ni {
28+
.side-menu > .ni {
2529
display: block;
2630
}
2731

28-
#sideMenu2 .nh a:only-child {
32+
.side-menu .nh a:only-child {
2933
padding-left: 20px;
3034
}
3135

32-
#sideMenu2 .nh {
36+
.side-menu .nh {
3337
display: flex;
3438
flex-direction: row;
3539
align-items: center;
3640
border-radius: 3px;
3741
}
3842

39-
#sideMenu2 .ni.expanded > .ni {
43+
.side-menu .ni.expanded > .ni {
4044
display: block;
4145
}
4246

4347
/* show direct children of currently exmanded node*/
44-
#sideMenu2 div.expanded > div {
48+
.side-menu div.expanded > div {
4549
display: block;
4650
}
4751

4852
/* always show top level entry*/
49-
#sideMenu2 > div {
53+
.side-menu > div {
5054
display: block;
5155
}
5256

5357
/* 'a's in side menu represent text of entry with link */
54-
#sideMenu2 a {
58+
.side-menu a {
5559
display: flex;
5660
align-items: center;
5761
overflow-wrap: anywhere;
@@ -61,21 +65,21 @@
6165
box-sizing: border-box;
6266
}
6367

64-
#sideMenu2 a:hover {
68+
.side-menu a:hover {
6569
color: var(--link-hover-fg);
6670
}
6771

68-
#sideMenu2 a span:not(.micon) {
72+
.side-menu a span:not(.micon) {
6973
margin-right: 0.75ex;
7074
text-indent: -1.5em;
7175
padding-left: 1.5em;
7276
}
7377

74-
#sideMenu2 a.selected span:not(.micon) {
78+
.side-menu a.selected span:not(.micon) {
7579
margin-right: 0.5ex;
7680
}
7781

78-
#sideMenu2 .nh:hover {
82+
.side-menu .nh:hover {
7983
cursor: pointer;
8084
}
8185
/* spans represent a expand button */

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

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

102-
private def buildNavigation(pageLink: Link): AppliedTag =
102+
private def buildNavigation(pageLink: Link): ((Boolean, AppliedTag), (Boolean, 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
106106
}
107107

108-
def renderNested(nav: Page, toplevel: Boolean = false): (Boolean, AppliedTag) =
108+
def renderNested(nav: Page, apiNav: Boolean, nestLevel: Int): (Boolean, AppliedTag) =
109109
val isSelected = nav.link.dri == pageLink.dri
110110

111111
def linkHtml(expanded: Boolean = false, withArrow: Boolean = false) =
112112
val attrs: Seq[String] = Seq(
113113
Option.when(isSelected)("selected h100"),
114-
Option.when(expanded)("expanded")
114+
Option.when(expanded)("expanded cs"),
115+
Option.when(!apiNav)("de")
115116
).flatten
116117
val icon = nav.content match {
117118
case m: Member => navigationIcon(m)
@@ -124,19 +125,23 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
124125
)
125126
)
126127

127-
nav.children.filterNot(_.hidden) match
128-
case Nil => isSelected -> div(cls := s"ni ${if isSelected then "expanded" else ""}")(linkHtml())
128+
nav.children.filter(_.content.isInstanceOf[Member] == apiNav).filterNot(_.hidden) match
129+
case Nil => isSelected -> div(cls := s"ni n$nestLevel ${if isSelected || nestLevel == 0 then "expanded" else ""}")(linkHtml())
129130
case children =>
130-
val nested = children.map(renderNested(_))
131+
val nested = children.map(renderNested(_, apiNav, nestLevel + 1))
131132
val expanded = nested.exists(_._1) || isSelected
132133
val attr =
133-
if expanded || isSelected || toplevel then Seq(cls := "ni expanded") else Seq(cls := "ni body-small")
134+
if expanded || isSelected || nestLevel == 0 then Seq(cls := s"ni n$nestLevel expanded") else Seq(cls := s"ni n$nestLevel body-small")
134135
(isSelected || expanded) -> div(attr)(
135136
linkHtml(expanded, true),
136137
nested.map(_._2)
137138
)
138139

139-
renderNested(navigablePage, toplevel = true)._2
140+
141+
val apiNav = renderNested(navigablePage, true, 0)
142+
val docsNav = renderNested(navigablePage, false, 0)
143+
144+
(apiNav, docsNav)
140145

141146
private def hasSocialLinks = !args.socialLinks.isEmpty
142147

@@ -196,10 +201,6 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
196201
),
197202
),
198203
div(id := "leftColumn")(
199-
div(cls:= "switcher-container")(
200-
button(cls:= "switcher h100")(raw("Docs")),
201-
button(cls:= "switcher h100")(raw("API")),
202-
),
203204
// div(id := "logo")(
204205
// projectLogo,
205206
// span(
@@ -220,9 +221,17 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
220221
// )
221222
// ),
222223
// div(id := "paneSearch"),
223-
nav(id := "sideMenu2")(
224-
buildNavigation(link)
225-
),
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)
233+
)
234+
},
226235
),
227236
div(id := "main")(
228237
div (id := "leftToggler")(

0 commit comments

Comments
 (0)