Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Push classlike tabs reorganization research results #2810

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions plugins/base/api/base.api
Original file line number Diff line number Diff line change
Expand Up @@ -1439,6 +1439,35 @@ public final class org/jetbrains/dokka/base/translators/documentables/BriefFromC
public abstract interface annotation class org/jetbrains/dokka/base/translators/documentables/ContentBuilderMarker : java/lang/annotation/Annotation {
}

public final class org/jetbrains/dokka/base/translators/documentables/ContentTab {
public fun <init> (Ljava/lang/String;Ljava/util/List;)V
public final fun component1 ()Ljava/lang/String;
public final fun component2 ()Ljava/util/List;
public final fun copy (Ljava/lang/String;Ljava/util/List;)Lorg/jetbrains/dokka/base/translators/documentables/ContentTab;
public static synthetic fun copy$default (Lorg/jetbrains/dokka/base/translators/documentables/ContentTab;Ljava/lang/String;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/dokka/base/translators/documentables/ContentTab;
public fun equals (Ljava/lang/Object;)Z
public final fun getContentTypes ()Ljava/util/List;
public final fun getName ()Ljava/lang/String;
public fun hashCode ()I
public fun toString ()Ljava/lang/String;
}

public final class org/jetbrains/dokka/base/translators/documentables/ContentTabs : org/jetbrains/dokka/model/properties/ExtraProperty {
public static final field Companion Lorg/jetbrains/dokka/base/translators/documentables/ContentTabs$Companion;
public fun <init> (Ljava/util/List;)V
public fun getKey ()Lorg/jetbrains/dokka/model/properties/ExtraProperty$Key;
public final fun getTabs ()Ljava/util/List;
}

public final class org/jetbrains/dokka/base/translators/documentables/ContentTabs$Companion : org/jetbrains/dokka/model/properties/ExtraProperty$Key {
public synthetic fun mergeStrategyFor (Ljava/lang/Object;Ljava/lang/Object;)Lorg/jetbrains/dokka/model/properties/MergeStrategy;
public fun mergeStrategyFor (Lorg/jetbrains/dokka/base/translators/documentables/ContentTabs;Lorg/jetbrains/dokka/base/translators/documentables/ContentTabs;)Lorg/jetbrains/dokka/model/properties/MergeStrategy;
}

public final class org/jetbrains/dokka/base/translators/documentables/ContentTabsKt {
public static final fun toExtra (Lorg/jetbrains/dokka/base/translators/documentables/TabbedContentType;)Lorg/jetbrains/dokka/base/translators/documentables/TabbedContent;
}

public final class org/jetbrains/dokka/base/translators/documentables/DefaultDocumentableToPageTranslator : org/jetbrains/dokka/transformers/documentation/DocumentableToPageTranslator {
public fun <init> (Lorg/jetbrains/dokka/plugability/DokkaContext;)V
public fun invoke (Lorg/jetbrains/dokka/model/DModule;)Lorg/jetbrains/dokka/pages/ModulePageNode;
Expand Down Expand Up @@ -1624,6 +1653,29 @@ public class org/jetbrains/dokka/base/translators/documentables/PageContentBuild
public static synthetic fun row$default (Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder$TableBuilder;Ljava/util/Set;Ljava/util/Set;Lorg/jetbrains/dokka/pages/Kind;Ljava/util/Set;Lorg/jetbrains/dokka/model/properties/PropertyContainer;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V
}

public final class org/jetbrains/dokka/base/translators/documentables/TabbedContent : org/jetbrains/dokka/model/properties/ExtraProperty {
public static final field Companion Lorg/jetbrains/dokka/base/translators/documentables/TabbedContent$Companion;
public fun <init> (Lorg/jetbrains/dokka/base/translators/documentables/TabbedContentType;)V
public fun getKey ()Lorg/jetbrains/dokka/model/properties/ExtraProperty$Key;
public final fun getType ()Lorg/jetbrains/dokka/base/translators/documentables/TabbedContentType;
}

public final class org/jetbrains/dokka/base/translators/documentables/TabbedContent$Companion : org/jetbrains/dokka/model/properties/ExtraProperty$Key {
public synthetic fun mergeStrategyFor (Ljava/lang/Object;Ljava/lang/Object;)Lorg/jetbrains/dokka/model/properties/MergeStrategy;
public fun mergeStrategyFor (Lorg/jetbrains/dokka/base/translators/documentables/TabbedContent;Lorg/jetbrains/dokka/base/translators/documentables/TabbedContent;)Lorg/jetbrains/dokka/model/properties/MergeStrategy;
}

public final class org/jetbrains/dokka/base/translators/documentables/TabbedContentType : java/lang/Enum {
public static final field CONSTRUCTOR Lorg/jetbrains/dokka/base/translators/documentables/TabbedContentType;
public static final field ENTRY Lorg/jetbrains/dokka/base/translators/documentables/TabbedContentType;
public static final field EXTENSION Lorg/jetbrains/dokka/base/translators/documentables/TabbedContentType;
public static final field FUNCTION Lorg/jetbrains/dokka/base/translators/documentables/TabbedContentType;
public static final field PROPERTY Lorg/jetbrains/dokka/base/translators/documentables/TabbedContentType;
public static final field TYPE Lorg/jetbrains/dokka/base/translators/documentables/TabbedContentType;
public static fun valueOf (Ljava/lang/String;)Lorg/jetbrains/dokka/base/translators/documentables/TabbedContentType;
public static fun values ()[Lorg/jetbrains/dokka/base/translators/documentables/TabbedContentType;
}

public final class org/jetbrains/dokka/base/translators/psi/DefaultPsiToDocumentableTranslator : org/jetbrains/dokka/transformers/sources/AsyncSourceToDocumentableTranslator {
public fun <init> (Lorg/jetbrains/dokka/plugability/DokkaContext;)V
public fun invoke (Lorg/jetbrains/dokka/DokkaConfiguration$DokkaSourceSet;Lorg/jetbrains/dokka/plugability/DokkaContext;)Lorg/jetbrains/dokka/model/DModule;
Expand Down
27 changes: 16 additions & 11 deletions plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ import org.jetbrains.dokka.base.renderers.html.innerTemplating.HtmlTemplater
import org.jetbrains.dokka.base.resolvers.anchors.SymbolAnchorHint
import org.jetbrains.dokka.base.resolvers.local.DokkaBaseLocationProvider
import org.jetbrains.dokka.base.templating.*
import org.jetbrains.dokka.base.translators.documentables.ContentTabs
import org.jetbrains.dokka.base.translators.documentables.TabbedContent
import org.jetbrains.dokka.base.translators.documentables.TabbedContentType
import org.jetbrains.dokka.links.DRI
import org.jetbrains.dokka.model.*
import org.jetbrains.dokka.model.properties.PropertyContainer
Expand Down Expand Up @@ -65,21 +68,16 @@ open class HtmlRenderer(
) {
val additionalClasses = node.style.joinToString(" ") { it.toString().toLowerCase() }
return when {
node.hasStyle(ContentStyle.TabbedContent) -> div(additionalClasses) {
val secondLevel = node.children.filterIsInstance<ContentComposite>().flatMap { it.children }
.filterIsInstance<ContentHeader>().flatMap { it.children }.filterIsInstance<ContentText>()
val firstLevel = node.children.filterIsInstance<ContentHeader>().flatMap { it.children }
.filterIsInstance<ContentText>()

val renderable = sortTabs(tabSortingStrategy, firstLevel.union(secondLevel))
node.hasStyle(ContentStyle.TabbedContent) && node.extra[ContentTabs] != null -> div(additionalClasses) {
val contentTabs = node.extra[ContentTabs]!!.tabs // TODO handle !!

div(classes = "tabs-section") {
attributes["tabs-section"] = "tabs-section"
renderable.forEachIndexed { index, node ->
contentTabs.forEachIndexed { index, tab ->
button(classes = "section-tab") {
if (index == 0) attributes["data-active"] = ""
attributes["data-togglable"] = node.text
text(node.text)
attributes["data-togglable"] = tab.contentTypes.joinToString(separator = ",") { it.toClass() }
text(tab.name)
}
}
}
Expand All @@ -91,6 +89,10 @@ open class HtmlRenderer(
node.extra.extraHtmlAttributes().forEach { attributes[it.extraKey] = it.extraValue }
childrenCallback()
}
node.extra[TabbedContent] != null -> div {
attributes["data-togglable"] = node.extra[TabbedContent]!!.type.toClass() // TODO handle null
childrenCallback()
}
node.dci.kind in setOf(ContentKind.Symbol) -> div("symbol $additionalClasses") {
childrenCallback()
}
Expand Down Expand Up @@ -143,6 +145,10 @@ open class HtmlRenderer(
}
}

private fun TabbedContentType.toClass(): String {
return this.name
}

private fun FlowContent.filterButtons(page: PageNode) {
if (shouldRenderSourceSetBubbles && page is ContentPage) {
div(classes = "filter-section") {
Expand Down Expand Up @@ -559,7 +565,6 @@ open class HtmlRenderer(
when {
node.style.contains(CommentTable) -> buildDefaultTable(node, pageContext, sourceSetRestriction)
else -> div(classes = "table") {
node.extra.extraHtmlAttributes().forEach { attributes[it.extraKey] = it.extraValue }
node.children.forEach {
buildRow(it, pageContext, sourceSetRestriction)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.jetbrains.dokka.base.translators.documentables

import org.jetbrains.dokka.model.properties.ExtraProperty
import org.jetbrains.dokka.pages.ContentNode
import org.jetbrains.dokka.pages.ContentStyle

enum class TabbedContentType {
TYPE, CONSTRUCTOR, FUNCTION, PROPERTY, ENTRY, EXTENSION
}

fun TabbedContentType.toExtra() = TabbedContent(type = this)

/**
* TODO fix name clash with [ContentStyle.TabbedContent]
*/
class TabbedContent(val type: TabbedContentType) : ExtraProperty<ContentNode> {
companion object : ExtraProperty.Key<ContentNode, TabbedContent>
override val key: ExtraProperty.Key<ContentNode, TabbedContent> = TabbedContent
}

data class ContentTab(
val name: String,
val contentTypes: List<TabbedContentType>
)

class ContentTabs(val tabs: List<ContentTab>) : ExtraProperty<ContentNode> {
companion object : ExtraProperty.Key<ContentNode, ContentTabs>
override val key: ExtraProperty.Key<ContentNode, ContentTabs> = ContentTabs
}
Loading