aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/kotlin/renderers/html
diff options
context:
space:
mode:
authorMarcin Aman <marcin.aman@gmail.com>2020-10-07 13:58:46 +0200
committerGitHub <noreply@github.com>2020-10-07 13:58:46 +0200
commite9f5da45c0fcfec5f7c150229301904d7915e090 (patch)
treec094b57b37fec4c901bbfaa508268d354a4dc4c8 /plugins/base/src/main/kotlin/renderers/html
parentde6019337ae0e97e73db7fa9394e88ec2de4aeed (diff)
downloaddokka-e9f5da45c0fcfec5f7c150229301904d7915e090.tar.gz
dokka-e9f5da45c0fcfec5f7c150229301904d7915e090.tar.bz2
dokka-e9f5da45c0fcfec5f7c150229301904d7915e090.zip
Make logo replaceable #1339 (#1488)
Diffstat (limited to 'plugins/base/src/main/kotlin/renderers/html')
-rw-r--r--plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt2
-rw-r--r--plugins/base/src/main/kotlin/renderers/html/htmlPreprocessors.kt103
2 files changed, 55 insertions, 50 deletions
diff --git a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt
index 6bdeae62..7a047d3c 100644
--- a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt
+++ b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt
@@ -679,10 +679,10 @@ open class HtmlRenderer(
) {
async = true
}
+ it.isImage() -> link(href = page.root(it))
else -> unsafe { +it }
}
}
- link(rel = LinkRel.stylesheet, href = page.root("styles/main.css")) {}
script { unsafe { +"""var pathToRoot = "${locationProvider.pathToRoot(page)}";""" } }
}
body {
diff --git a/plugins/base/src/main/kotlin/renderers/html/htmlPreprocessors.kt b/plugins/base/src/main/kotlin/renderers/html/htmlPreprocessors.kt
index a5fca92f..a87254ce 100644
--- a/plugins/base/src/main/kotlin/renderers/html/htmlPreprocessors.kt
+++ b/plugins/base/src/main/kotlin/renderers/html/htmlPreprocessors.kt
@@ -7,6 +7,9 @@ import kotlinx.html.h1
import kotlinx.html.id
import kotlinx.html.table
import kotlinx.html.tbody
+import org.jetbrains.dokka.DokkaConfiguration
+import org.jetbrains.dokka.base.DokkaBase
+import org.jetbrains.dokka.base.DokkaBaseConfiguration
import org.jetbrains.dokka.base.renderers.sourceSets
import org.jetbrains.dokka.links.DRI
import org.jetbrains.dokka.model.DEnum
@@ -14,30 +17,9 @@ import org.jetbrains.dokka.model.DEnumEntry
import org.jetbrains.dokka.model.withDescendants
import org.jetbrains.dokka.pages.*
import org.jetbrains.dokka.plugability.DokkaContext
+import org.jetbrains.dokka.plugability.configuration
import org.jetbrains.dokka.transformers.pages.PageTransformer
-
-object SearchPageInstaller : PageTransformer {
- override fun invoke(input: RootPageNode) = input.modified(children = input.children + searchPage)
-
- private val searchPage = RendererSpecificResourcePage(
- name = "Search",
- children = emptyList(),
- strategy = RenderingStrategy<HtmlRenderer> {
- buildHtml(it, listOf("styles/style.css", "scripts/pages.js", "scripts/search.js")) {
- h1 {
- id = "searchTitle"
- text("Search results for ")
- }
- table {
- tbody {
- id = "searchTable"
- }
- }
- }
- })
-}
-
object NavigationPageInstaller : PageTransformer {
private val mapper = jacksonObjectMapper()
@@ -89,56 +71,79 @@ object NavigationPageInstaller : PageTransformer {
}.sortedBy { it.name.toLowerCase() }
}
+class CustomResourceInstaller(val dokkaContext: DokkaContext) : PageTransformer {
+ private val configuration = configuration<DokkaBase, DokkaBaseConfiguration>(dokkaContext)
+
+ private val customAssets = configuration?.customAssets?.map {
+ RendererSpecificResourcePage("images/${it.name}", emptyList(), RenderingStrategy.Copy(it.absolutePath))
+ }.orEmpty()
+
+ private val customStylesheets = configuration?.customStyleSheets?.map {
+ RendererSpecificResourcePage("styles/${it.name}", emptyList(), RenderingStrategy.Copy(it.absolutePath))
+ }.orEmpty()
+
+ override fun invoke(input: RootPageNode): RootPageNode {
+ val customResourcesPaths = (customAssets + customStylesheets).map { it.name }.toSet()
+ val withEmbeddedResources = input.transformContentPagesTree { it.modified(embeddedResources = it.embeddedResources + customResourcesPaths) }
+ val (currentResources, otherPages) = withEmbeddedResources.children.partition { it is RendererSpecificResourcePage }
+ return input.modified(children = otherPages + currentResources.filterNot { it.name in customResourcesPaths } + customAssets + customStylesheets)
+ }
+}
+
object ScriptsInstaller : PageTransformer {
+ private val scriptsPages = listOf(
+ "scripts/clipboard.js",
+ "scripts/navigation-loader.js",
+ "scripts/platform-content-handler.js",
+ "scripts/main.js"
+ )
+
override fun invoke(input: RootPageNode): RootPageNode {
return input.modified(
- children = input.children + RendererSpecificResourcePage(
- "scripts",
- emptyList(),
- RenderingStrategy.Copy("/dokka/scripts")
- )
+ children = input.children + scriptsPages.toRenderSpecificResourcePage()
).transformContentPagesTree {
it.modified(
- embeddedResources = it.embeddedResources + listOf(
- "scripts/navigationLoader.js",
- "scripts/platformContentHandler.js",
- "scripts/sourceset_dependencies.js",
- "scripts/clipboard.js",
- )
+ embeddedResources = it.embeddedResources + scriptsPages
)
}
}
}
object StylesInstaller : PageTransformer {
+ private val stylesPages = listOf(
+ "styles/style.css",
+ "styles/logo-styles.css",
+ "styles/jetbrains-mono.css",
+ "styles/main.css"
+ )
+
override fun invoke(input: RootPageNode): RootPageNode =
input.modified(
- children = input.children + RendererSpecificResourcePage(
- "styles",
- emptyList(),
- RenderingStrategy.Copy("/dokka/styles")
- )
+ children = input.children + stylesPages.toRenderSpecificResourcePage()
).transformContentPagesTree {
it.modified(
- embeddedResources = it.embeddedResources + listOf(
- "styles/style.css",
- "styles/jetbrains-mono.css"
- )
+ embeddedResources = it.embeddedResources + stylesPages
)
}
}
object AssetsInstaller : PageTransformer {
+ private val imagesPages = listOf(
+ "images/arrow_down.svg",
+ "images/docs_logo.svg",
+ "images/logo-icon.svg"
+ )
+
override fun invoke(input: RootPageNode) = input.modified(
- children = input.children + RendererSpecificResourcePage(
- "images",
- emptyList(),
- RenderingStrategy.Copy("/dokka/images")
- )
+ children = input.children + imagesPages.toRenderSpecificResourcePage()
)
}
+private fun List<String>.toRenderSpecificResourcePage(): List<RendererSpecificResourcePage> =
+ map { RendererSpecificResourcePage(it, emptyList(), RenderingStrategy.Copy("/dokka/$it")) }
+
class SourcesetDependencyAppender(val context: DokkaContext) : PageTransformer {
+ private val name = "scripts/sourceset_dependencies.js"
override fun invoke(input: RootPageNode): RootPageNode {
val dependenciesMap = context.configuration.sourceSets.map {
it.sourceSetID to it.dependentSourceSets
@@ -155,14 +160,14 @@ class SourcesetDependencyAppender(val context: DokkaContext) : PageTransformer {
}}'"
val deps = RendererSpecificResourcePage(
- name = "scripts/sourceset_dependencies.js",
+ name = name,
children = emptyList(),
strategy = RenderingStrategy.Write(createDependenciesJson())
)
return input.modified(
children = input.children + deps
- )
+ ).transformContentPagesTree { it.modified(embeddedResources = it.embeddedResources + name) }
}
}