From 46bfb60f356a861097149f64bf414e732807c522 Mon Sep 17 00:00:00 2001 From: Filip ZybaƂa Date: Wed, 8 Jul 2020 10:11:53 +0200 Subject: Implemented extension point for tab sorting strategy --- .../kotlin/renderers/DefaultTabSortingStrategy.kt | 29 ++++++++++++++++++++++ .../main/kotlin/renderers/TabSortingStrategy.kt | 7 ++++++ .../src/main/kotlin/renderers/html/HtmlRenderer.kt | 14 +++++++++-- 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 plugins/base/src/main/kotlin/renderers/DefaultTabSortingStrategy.kt create mode 100644 plugins/base/src/main/kotlin/renderers/TabSortingStrategy.kt (limited to 'plugins/base/src/main/kotlin/renderers') diff --git a/plugins/base/src/main/kotlin/renderers/DefaultTabSortingStrategy.kt b/plugins/base/src/main/kotlin/renderers/DefaultTabSortingStrategy.kt new file mode 100644 index 00000000..b40f9afe --- /dev/null +++ b/plugins/base/src/main/kotlin/renderers/DefaultTabSortingStrategy.kt @@ -0,0 +1,29 @@ +package org.jetbrains.dokka.base.renderers + +import org.jetbrains.dokka.pages.ContentKind +import org.jetbrains.dokka.pages.ContentNode +import org.jetbrains.dokka.pages.Kind +import org.jetbrains.dokka.utilities.DokkaLogger + +class DefaultTabSortingStrategy : TabSortingStrategy { + override fun sort(tabs: Collection): List { + val tabMap: Map> = mapOf( + ContentKind.Classlikes to mutableListOf(), + ContentKind.Constructors to mutableListOf(), + ContentKind.Functions to mutableListOf(), + ContentKind.Properties to mutableListOf(), + ContentKind.Extensions to mutableListOf(), + ContentKind.Parameters to mutableListOf(), + ContentKind.Inheritors to mutableListOf(), + ContentKind.Source to mutableListOf(), + ContentKind.Sample to mutableListOf(), + ContentKind.Comment to mutableListOf() + ) + val unrecognized: MutableList = mutableListOf() + tabs.forEach { + tabMap[it.dci.kind]?.add(it) ?: unrecognized.add(it) + } + return tabMap.values.flatten() + unrecognized + } + +} \ No newline at end of file diff --git a/plugins/base/src/main/kotlin/renderers/TabSortingStrategy.kt b/plugins/base/src/main/kotlin/renderers/TabSortingStrategy.kt new file mode 100644 index 00000000..dcf49ca9 --- /dev/null +++ b/plugins/base/src/main/kotlin/renderers/TabSortingStrategy.kt @@ -0,0 +1,7 @@ +package org.jetbrains.dokka.base.renderers + +import org.jetbrains.dokka.pages.ContentNode + +interface TabSortingStrategy { + fun sort(tabs: Collection) : List +} \ No newline at end of file diff --git a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt index 595dc8d2..50af53f0 100644 --- a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt +++ b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt @@ -9,12 +9,14 @@ import org.jetbrains.dokka.DokkaConfiguration.DokkaSourceSet import org.jetbrains.dokka.Platform import org.jetbrains.dokka.base.DokkaBase import org.jetbrains.dokka.base.renderers.DefaultRenderer +import org.jetbrains.dokka.base.renderers.TabSortingStrategy import org.jetbrains.dokka.links.DRI import org.jetbrains.dokka.model.properties.PropertyContainer import org.jetbrains.dokka.pages.* import org.jetbrains.dokka.plugability.DokkaContext import org.jetbrains.dokka.plugability.plugin import org.jetbrains.dokka.plugability.query +import org.jetbrains.dokka.plugability.querySingle import java.io.File import java.net.URI @@ -26,11 +28,19 @@ open class HtmlRenderer( sourceSet to context.configuration.sourceSets.filter { sourceSet.dependentSourceSets.contains(it.sourceSetID) } }.toMap() - private val pageList = mutableMapOf>() override val preprocessors = context.plugin().query { htmlPreprocessors } + private val tabSortingStrategy = context.plugin().querySingle { tabSortingStrategy } + + private fun sortTabs(strategy: TabSortingStrategy, tabs: Collection) : List { + val sorted = strategy.sort(tabs) + if(sorted.size != tabs.size) + context.logger.warn("Tab sorting strategy has changed number of tabs from ${tabs.size} to ${sorted.size}") + return sorted; + } + override fun FlowContent.wrapGroup( node: ContentGroup, pageContext: ContentPage, @@ -44,7 +54,7 @@ open class HtmlRenderer( val firstLevel = node.children.filterIsInstance().flatMap { it.children } .filterIsInstance() - val renderable = firstLevel.union(secondLevel) + val renderable = firstLevel.union(secondLevel).let { sortTabs(tabSortingStrategy, it) } div(classes = "tabs-section") { attributes["tabs-section"] = "tabs-section" -- cgit