Skip to content

Commit d77d29b

Browse files
authored
Merge pull request #27 from pikinier20/scaladoc/quick-links
Implement quick links setting
2 parents d75c77f + 4aba96a commit d77d29b

File tree

8 files changed

+70
-43
lines changed

8 files changed

+70
-43
lines changed

project/Build.scala

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1324,6 +1324,7 @@ object Build {
13241324
val (dirs, files) = IO.listFiles(dir).toList.partition(_.isDirectory)
13251325
val targetDir = (Compile / resourceManaged).value.toPath.resolve(unmanagedResources.toPath.relativize(dir.toPath)).toFile
13261326
val bundleFile = targetDir / "bundle.css"
1327+
if (bundleFile.exists) bundleFile.delete()
13271328
files.foreach(file => IO.append(bundleFile, IO.readBytes(file)))
13281329
bundleFile :: dirs.flatMap(createBundle)
13291330
}
@@ -1836,7 +1837,17 @@ object ScaladocConfigs {
18361837
projectFooter,
18371838
defaultTemplate,
18381839
Author(true),
1839-
Groups(true)
1840+
Groups(true),
1841+
QuickLinks(
1842+
List(
1843+
"Download::https://www.scala-lang.org/download/",
1844+
"Documentation::https://docs.scala-lang.org/",
1845+
"Libraries::https://index.scala-lang.org",
1846+
"Contribute::https://www.scala-lang.org/contribute/",
1847+
"Blog::https://www.scala-lang.org/blog/",
1848+
"Community::https://www.scala-lang.org/community/"
1849+
)
1850+
)
18401851
)
18411852
}
18421853

project/ScaladocGeneration.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ object ScaladocGeneration {
129129
def key: String = "-usejavacp"
130130
}
131131

132+
case class QuickLinks(value: List[String]) extends Arg[List[String]] {
133+
def key: String = "-quick-links"
134+
}
135+
132136
import _root_.scala.reflect._
133137

134138
trait GenerationConfig {

project/scripts/cmdScaladocTests

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,6 @@ dist/target/pack/bin/scaladoc \
4040
-project-footer "Copyright (c) 2002-2022, LAMP/EPFL" \
4141
-default-template static-site-main \
4242
-author -groups -revision main -project-version "${DOTTY_BOOTSTRAPPED_VERSION}" \
43+
"-quick-links:Download::https://www.scala-lang.org/download/,Documentation::https://docs.scala-lang.org/,Libraries::https://index.scala-lang.org,Contribute::https://www.scala-lang.org/contribute/,Blog::https://www.scala-lang.org/blog/,Community::https://www.scala-lang.org/community/" \
4344
out/bootstrap/scaladoc-testcases/scala-"${DOTTY_NONBOOTSTRAPPED_VERSION}"/classes > "$tmp" 2>&1 || echo "generated testcases project with scripts"
4445
diff -rq "$OUT1" "scaladoc/output/testcases"

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@
5454
margin-left: calc(3 * var(--base-spacing));
5555
}
5656

57+
.logo-container {
58+
display: flex;
59+
align-items: center;
60+
}
61+
5762
#mobile-menu-toggle {
5863
display: none;
5964
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dotty.tools.scaladoc
2+
3+
case class QuickLink(text: String, url: String)
4+
5+
object QuickLink:
6+
lazy val delimiter = "::"
7+
def usage: String =
8+
"""List of quick links that is displayed in the header of documentation.
9+
|The setting accepts list of quick links in format: text::url
10+
|The first `::` occurence is taken as the delimiter.""".stripMargin
11+
def parse(s: String): Either[String, QuickLink] =
12+
s.split(delimiter, 2).toList match
13+
case text :: url :: Nil => Right(QuickLink(text, url))
14+
case _ => Left(s"""Invalid syntax of quick link.
15+
|$usage""".stripMargin)

scaladoc/src/dotty/tools/scaladoc/Scaladoc.scala

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ object Scaladoc:
4949
apiSubdirectory : Boolean = false,
5050
scastieConfiguration: String = "",
5151
defaultTemplate: Option[String] = None,
52+
quickLinks: List[QuickLink] = List.empty
5253
)
5354

5455
def run(args: Array[String], rootContext: CompilerContext): Reporter =
@@ -180,6 +181,15 @@ object Scaladoc:
180181
},right => Some(right))
181182
}
182183

184+
val quickLinksParsed =
185+
quickLinks.get.flatMap { s =>
186+
QuickLink.parse(s) match
187+
case Left(err) =>
188+
report.warning(err)
189+
None
190+
case Right(value) => Some(value)
191+
}
192+
183193
unsupportedSettings.filter(s => s.get != s.default).foreach { s =>
184194
report.warning(s"Setting ${s.name} is currently not supported.")
185195
}
@@ -220,7 +230,8 @@ object Scaladoc:
220230
generateInkuire.get,
221231
apiSubdirectory.get,
222232
scastieConfiguration.get,
223-
defaultTemplate.nonDefault
233+
defaultTemplate.nonDefault,
234+
quickLinksParsed
224235
)
225236
(Some(docArgs), newContext)
226237
}

scaladoc/src/dotty/tools/scaladoc/ScaladocSettings.scala

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,12 @@ class ScaladocSettings extends SettingGroup with AllScalaSettings:
133133
""
134134
)
135135

136+
val quickLinks: Setting[List[String]] =
137+
MultiStringSetting(
138+
"-quick-links",
139+
"quick-links",
140+
"List of quick links that is displayed in the header of documentation."
141+
)
136142

137143
def scaladocSpecificSettings: Set[Setting[_]] =
138-
Set(sourceLinks, legacySourceLink, syntax, revision, externalDocumentationMappings, socialLinks, skipById, skipByRegex, deprecatedSkipPackages, docRootContent, snippetCompiler, generateInkuire, scastieConfiguration)
144+
Set(sourceLinks, legacySourceLink, syntax, revision, externalDocumentationMappings, socialLinks, skipById, skipByRegex, deprecatedSkipPackages, docRootContent, snippetCompiler, generateInkuire, defaultTemplate, scastieConfiguration, quickLinks)

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

Lines changed: 14 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -208,37 +208,28 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
208208
)
209209
}
210210

211+
def quickLinks(mobile: Boolean = false): TagArg =
212+
val className = if mobile then "mobile-menu-item" else "text-button"
213+
args.quickLinks.map { quickLink =>
214+
a(href := quickLink.url, cls := className)(quickLink.text)
215+
}
216+
211217
div(id := "")(
212218
div(id := "header", cls := "body-small")(
213219
div(cls := "header-container-left")(
214-
projectLogoElem.toSeq,
215-
darkProjectLogoElem.toSeq,
216-
span(cls := "project-name h300")(args.name),
220+
a(href := pathToRoot(link.dri), cls := "logo-container")(
221+
projectLogoElem.toSeq,
222+
darkProjectLogoElem.toSeq,
223+
span(cls := "project-name h300")(args.name)
224+
),
217225
span(onclick := "dropdownHandler(event)", cls := "text-button with-arrow", id := "dropdown-trigger")(
218226
a(args.projectVersion.map(v => div(cls:="projectVersion")(v)).toSeq),
219227
),
220228
div(id := "version-dropdown", cls := "dropdown-menu") ()
221229
),
222230
div(cls:="header-container-right")(
223-
button(id := "search-toggle", cls := "icon-button"),
224-
a(href := "https://www.scala-lang.org/download/", cls := "text-button") (
225-
"Download",
226-
),
227-
a(href := "https://docs.scala-lang.org/", cls := "text-button") (
228-
"Documentation",
229-
),
230-
a(href := "https://index.scala-lang.org", cls := "text-button") (
231-
"Libraries",
232-
),
233-
a(href := "https://www.scala-lang.org/contribute/", cls := "text-button") (
234-
"Contribute",
235-
),
236-
a(href := "https://www.scala-lang.org/contribute/", cls := "text-button") (
237-
"Blog",
238-
),
239-
a(href := "https://www.scala-lang.org/blog/", cls := "text-button") (
240-
"Community",
241-
),
231+
button(id := "search-toggle", cls := "icon-button"),
232+
quickLinks(),
242233
span(id := "theme-toggle", cls := "icon-button"),
243234
span(id := "mobile-menu-toggle", cls := "icon-button hamburger"),
244235
),
@@ -253,24 +244,7 @@ class HtmlRenderer(rootPackage: Member, members: Map[DRI, Member])(using ctx: Do
253244
),
254245
div(cls := "mobile-menu-container body-medium")(
255246
input(id := "mobile-scaladoc-searchbar-input", cls := "scaladoc-searchbar-input", `type` := "search", `placeholder`:= "Find anything"),
256-
a(href := "https://www.scala-lang.org/download/", cls := "mobile-menu-item") (
257-
"Download",
258-
),
259-
a(href := "https://docs.scala-lang.org/", cls := "mobile-menu-item") (
260-
"Documentation",
261-
),
262-
a(href := "https://index.scala-lang.org", cls := "mobile-menu-item") (
263-
"Libraries",
264-
),
265-
a(href := "https://www.scala-lang.org/contribute/", cls := "mobile-menu-item contribute") (
266-
"Contribute",
267-
),
268-
a(href := "https://www.scala-lang.org/contribute/", cls := "mobile-menu-item") (
269-
"Blog",
270-
),
271-
a(href := "https://www.scala-lang.org/blog/", cls := "mobile-menu-item") (
272-
"Community",
273-
),
247+
quickLinks(mobile = true),
274248
span(id := "mobile-theme-toggle", cls := "mobile-menu-item mode"),
275249
)
276250
),

0 commit comments

Comments
 (0)