aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src/main/kotlin/renderers/html/SearchbarDataInstaller.kt
diff options
context:
space:
mode:
authorMarcin Aman <marcin.aman@gmail.com>2020-10-16 13:39:02 +0200
committerGitHub <noreply@github.com>2020-10-16 13:39:02 +0200
commitc482ed6e688cb9e5105aa0d686613c8ad81905fb (patch)
tree385a9bc8f8144c1c05af4ccccf08afbbd270b5ee /plugins/base/src/main/kotlin/renderers/html/SearchbarDataInstaller.kt
parent991913dc02f342615f33511f96891e5db7487cd4 (diff)
downloaddokka-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.kt35
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