From 9726d22df1c5aecb61e81a55d6cd43c93ffee5a9 Mon Sep 17 00:00:00 2001 From: David Gregory Date: Thu, 24 Mar 2022 13:24:48 +0000 Subject: [PATCH 1/2] Add the API base URI to the Laika config --- .../scala/org/typelevel/sbt/TypelevelSitePlugin.scala | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/site/src/main/scala/org/typelevel/sbt/TypelevelSitePlugin.scala b/site/src/main/scala/org/typelevel/sbt/TypelevelSitePlugin.scala index 2b1b8a0b..c9b8e382 100644 --- a/site/src/main/scala/org/typelevel/sbt/TypelevelSitePlugin.scala +++ b/site/src/main/scala/org/typelevel/sbt/TypelevelSitePlugin.scala @@ -23,6 +23,8 @@ import laika.helium.config.Favicon import laika.helium.config.HeliumIcon import laika.helium.config.IconLink import laika.helium.config.ImageLink +import laika.rewrite.link.ApiLinks +import laika.rewrite.link.LinkConfig import laika.sbt.LaikaPlugin import laika.theme.ThemeProvider import mdoc.MdocPlugin @@ -105,6 +107,12 @@ object TypelevelSitePlugin extends AutoPlugin { .value: @nowarn("cat=other-pure-statement"), tlSitePreview := previewTask.value, Laika / sourceDirectories := Seq(mdocOut.value), + laikaConfig := { + val currentConfig = laikaConfig.value + tlSiteApiUrl.value.fold(currentConfig) { apiUrl => + currentConfig.withConfigValue(LinkConfig(apiLinks = Seq(ApiLinks(apiUrl.toString)))) + } + }, laikaTheme := tlSiteHeliumConfig.value.build.extend(tlSiteHeliumExtensions.value), mdocVariables := { mdocVariables.value ++ From 999c70ffd37fba7e4c1a251d607ffdfd5e425770 Mon Sep 17 00:00:00 2001 From: David Gregory Date: Thu, 24 Mar 2022 17:23:20 +0000 Subject: [PATCH 2/2] Add tlSiteApiIndexUrl providing the index page of the API docs at the base package of the project --- .../org/typelevel/sbt/TypelevelSitePlugin.scala | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/site/src/main/scala/org/typelevel/sbt/TypelevelSitePlugin.scala b/site/src/main/scala/org/typelevel/sbt/TypelevelSitePlugin.scala index c9b8e382..3a93a255 100644 --- a/site/src/main/scala/org/typelevel/sbt/TypelevelSitePlugin.scala +++ b/site/src/main/scala/org/typelevel/sbt/TypelevelSitePlugin.scala @@ -51,6 +51,9 @@ object TypelevelSitePlugin extends AutoPlugin { settingKey[Option[ModuleID]]("The module that publishes API docs") lazy val tlSiteApiPackage = settingKey[Option[String]]( "The top-level package for your API docs (e.g. org.typlevel.sbt)") + lazy val tlSiteApiIndexUrl = + settingKey[Option[URL]]( + "The URL of the index page for the top-level package of your API docs") lazy val tlSiteRelatedProjects = settingKey[Seq[(String, URL)]]("A list of related projects (default: cats)") @@ -87,6 +90,7 @@ object TypelevelSitePlugin extends AutoPlugin { tlSitePublishBranch := Some("main"), tlSitePublishTags := tlSitePublishBranch.value.isEmpty, tlSiteApiUrl := None, + tlSiteApiIndexUrl := None, tlSiteApiPackage := None, tlSiteRelatedProjects := Seq(TypelevelProject.Cats), tlSiteKeepFiles := true, @@ -121,7 +125,7 @@ object TypelevelSitePlugin extends AutoPlugin { "PRERELEASE_VERSION" -> currentPreRelease.value.getOrElse(version.value), "SNAPSHOT_VERSION" -> version.value ) ++ - tlSiteApiUrl.value.map("API_URL" -> _.toString).toMap + tlSiteApiIndexUrl.value.map("API_URL" -> _.toString).toMap }, tlSiteHeliumExtensions := TypelevelHeliumExtensions( licenses.value.headOption, @@ -140,12 +144,15 @@ object TypelevelSitePlugin extends AutoPlugin { val o = moduleId.organization val n = cross(moduleId.name) val v = version - val p = tlSiteApiPackage.value.fold("")(_.replace('.', '/') + "/index.html") - url(s"https://www.javadoc.io/doc/$o/$n/$v/$p") + url(s"https://www.javadoc.io/doc/$o/$n/$v/") } tlSiteApiUrl.value.orElse(javadocioUrl) }, + tlSiteApiIndexUrl := tlSiteApiUrl.value.map { apiURL => + val apiIndex = tlSiteApiPackage.value.fold("")(_.replace('.', '/') + "/index.html") + apiURL.toURI.resolve(apiIndex).toURL + }, tlSiteHeliumConfig := { Helium .defaults @@ -178,9 +185,9 @@ object TypelevelSitePlugin extends AutoPlugin { "https://typelevel.org", Image.external(s"https://typelevel.org/img/logo.svg") ), - navLinks = tlSiteApiUrl.value.toList.map { url => + navLinks = tlSiteApiIndexUrl.value.toList.map { apiIndex => IconLink.external( - url.toString, + apiIndex.toString, HeliumIcon.api, options = Styles("svg-link") )