diff options
author | Marcin Aman <marcin.aman@gmail.com> | 2020-10-16 13:39:02 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-16 13:39:02 +0200 |
commit | c482ed6e688cb9e5105aa0d686613c8ad81905fb (patch) | |
tree | 385a9bc8f8144c1c05af4ccccf08afbbd270b5ee /plugins/base/src/main/kotlin | |
parent | 991913dc02f342615f33511f96891e5db7487cd4 (diff) | |
download | dokka-c482ed6e688cb9e5105aa0d686613c8ad81905fb.tar.gz dokka-c482ed6e688cb9e5105aa0d686613c8ad81905fb.tar.bz2 dokka-c482ed6e688cb9e5105aa0d686613c8ad81905fb.zip |
Explicit fallback in searchbar (#1559)
Diffstat (limited to 'plugins/base/src/main/kotlin')
-rw-r--r-- | plugins/base/src/main/kotlin/renderers/html/SearchbarDataInstaller.kt | 35 | ||||
-rw-r--r-- | plugins/base/src/main/kotlin/renderers/html/htmlPreprocessors.kt | 24 |
2 files changed, 28 insertions, 31 deletions
diff --git a/plugins/base/src/main/kotlin/renderers/html/SearchbarDataInstaller.kt b/plugins/base/src/main/kotlin/renderers/html/SearchbarDataInstaller.kt index f953821f..3c562315 100644 --- a/plugins/base/src/main/kotlin/renderers/html/SearchbarDataInstaller.kt +++ b/plugins/base/src/main/kotlin/renderers/html/SearchbarDataInstaller.kt @@ -1,28 +1,43 @@ package org.jetbrains.dokka.base.renderers.html +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import org.jetbrains.dokka.Platform import org.jetbrains.dokka.model.DisplaySourceSet import org.jetbrains.dokka.model.dfs import org.jetbrains.dokka.pages.* import java.util.concurrent.ConcurrentHashMap -class SearchbarDataInstaller { - private val pageList = ConcurrentHashMap<String, Pair<String, String>>() +data class SearchRecord(val name: String, val description: String? = null, val location: String, val searchKeys: List<String> = listOf(name)) { + companion object { } +} + +open class SearchbarDataInstaller { + private val mapper = jacksonObjectMapper() - private fun String.escaped(): String = this.replace("'", "\\'") + private val pageList = ConcurrentHashMap<String, Pair<String, String>>() - fun generatePagesList(): String = - pageList.entries + open fun generatePagesList(): String { + val pages = pageList.entries .filter { it.key.isNotEmpty() } .sortedWith(compareBy({ it.key }, { it.value.first }, { it.value.second })) .groupBy { it.key.substringAfterLast(".") } .entries - .flatMapIndexed { topLevelIndex, entry -> - entry.value.mapIndexed { index, subentry -> - "{\'name\': \'${subentry.value.first.escaped()}\', \'description\':\'${subentry.key.escaped()}\', \'location\':\'${subentry.value.second.escaped()}\', 'searchKey':'${entry.key.escaped()}'}" + .flatMap { entry -> + entry.value.map { subentry -> + val name = subentry.value.first + createSearchRecord( + name = name, + description = subentry.key, + location = subentry.value.second, + searchKeys = listOf(entry.key, name) + ) } } - .joinToString(prefix = "[", separator = ",\n", postfix = "]") + return mapper.writeValueAsString(pages) + } + + open fun createSearchRecord(name: String, description: String?, location: String, searchKeys: List<String>): SearchRecord = + SearchRecord(name, description, location, searchKeys) private fun getSymbolSignature(page: ContentPage) = page.content.dfs { it.dci.kind == ContentKind.Symbol } @@ -44,7 +59,7 @@ class SearchbarDataInstaller { return getContentTextNodes(node, sourceSetRestriction).joinToString("") { it.text } } - fun processPage(page: ContentPage, link: String) { + open fun processPage(page: ContentPage, link: String) { val signature = getSymbolSignature(page) val textNodes = signature?.let { flattenToText(it) } val documentable = page.documentable diff --git a/plugins/base/src/main/kotlin/renderers/html/htmlPreprocessors.kt b/plugins/base/src/main/kotlin/renderers/html/htmlPreprocessors.kt index b34d3d6e..fdb5be3c 100644 --- a/plugins/base/src/main/kotlin/renderers/html/htmlPreprocessors.kt +++ b/plugins/base/src/main/kotlin/renderers/html/htmlPreprocessors.kt @@ -1,17 +1,9 @@ package org.jetbrains.dokka.base.renderers.html -import com.fasterxml.jackson.databind.annotation.JsonSerialize -import com.fasterxml.jackson.databind.ser.std.ToStringSerializer import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper -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 import org.jetbrains.dokka.model.DEnumEntry import org.jetbrains.dokka.model.DFunction @@ -24,18 +16,8 @@ import org.jetbrains.dokka.transformers.pages.PageTransformer object NavigationPageInstaller : PageTransformer { private val mapper = jacksonObjectMapper() - private data class NavigationNodeView( - val name: String, - val label: String = name, - val searchKey: String = name, - @get:JsonSerialize(using = ToStringSerializer::class) val dri: DRI, - val location: String - ) { - companion object { - fun from(node: NavigationNode, location: String): NavigationNodeView = - NavigationNodeView(name = node.name, dri = node.dri, location = location) - } - } + fun SearchRecord.Companion.from(node: NavigationNode, location: String): SearchRecord = + SearchRecord(name = node.name, location = location) override fun invoke(input: RootPageNode): RootPageNode { val nodes = input.children.filterIsInstance<ContentPage>().single() @@ -46,7 +28,7 @@ object NavigationPageInstaller : PageTransformer { children = emptyList(), strategy = RenderingStrategy.LocationResolvableWrite { resolver -> mapper.writeValueAsString( - nodes.withDescendants().map { NavigationNodeView.from(it, resolver(it.dri, it.sourceSets)) }) + nodes.withDescendants().map { SearchRecord.from(it, resolver(it.dri, it.sourceSets)) }) }) return input.modified( |