Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add /api path to site that forwards to API url #335

Merged
merged 3 commits into from
Jul 15, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,8 @@ object TypelevelSitePlugin extends AutoPlugin {
tlSiteHeliumExtensions := TypelevelHeliumExtensions(
licenses.value.headOption,
tlSiteRelatedProjects.value,
tlIsScala3.value
tlIsScala3.value,
tlSiteApiUrl.value
),
tlSiteApiUrl := {
val javadocioUrl = for {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,22 +33,32 @@ import java.net.URL

object TypelevelHeliumExtensions {

@deprecated("Use overload with scala3 parameter", "0.4.7")
@deprecated("Use overload with API url and scala3 parameter", "0.4.7")
def apply(license: Option[(String, URL)], related: Seq[(String, URL)]): ThemeProvider =
apply(license, related, false)

@deprecated("Use overload with API url and scala3 parameter", "0.4.13")
def apply(
license: Option[(String, URL)],
related: Seq[(String, URL)],
scala3: Boolean): ThemeProvider =
apply(license, related, false, None)

/**
* @param license
* name and [[java.net.URL]] of project license
* @param related
* name and [[java.net.URL]] of related projects
* @param scala3
* whether to use Scala 3 syntax highlighting
* @param apiUrl
* url to API docs
*/
def apply(
license: Option[(String, URL)],
related: Seq[(String, URL)],
scala3: Boolean
scala3: Boolean,
apiUrl: Option[URL]
): ThemeProvider = new ThemeProvider {
def build[F[_]](implicit F: Sync[F]): Resource[F, Theme[F]] =
ThemeBuilder[F]("Typelevel Helium Extensions")
Expand All @@ -62,6 +72,11 @@ object TypelevelHeliumExtensions {
F.blocking(getClass.getResourceAsStream("helium/site/styles.css")),
Path.Root / "site" / "styles.css"
)
.merge(
apiUrl.fold(InputTree[F]) { url =>
InputTree[F].addString(htmlForwarder(url), Path.Root / "api" / "index.html")
}
)
)
.addExtensions(
GitHubFlavor,
Expand Down Expand Up @@ -93,4 +108,11 @@ object TypelevelHeliumExtensions {
})
.build

private def htmlForwarder(to: URL) =
s"""|<!DOCTYPE html>
|<meta charset="utf-8">
|<meta http-equiv="refresh" content="0; URL=$to">
|<link rel="canonical" href="$to">
|""".stripMargin

}