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/renderers/html/SearchbarDataInstaller.kt | |
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/renderers/html/SearchbarDataInstaller.kt')
-rw-r--r-- | plugins/base/src/main/kotlin/renderers/html/SearchbarDataInstaller.kt | 35 |
1 files changed, 25 insertions, 10 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 |