Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
Wrap tab content
Fix css style
Revert public API in `DefaultPageCreator`
  • Loading branch information
vmishenev committed Feb 24, 2023
1 parent 7ee0138 commit 1e76662
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 46 deletions.
5 changes: 0 additions & 5 deletions core/api/core.api
Expand Up @@ -1449,7 +1449,6 @@ public abstract class org/jetbrains/dokka/model/Documentable : org/jetbrains/dok
public final class org/jetbrains/dokka/model/DocumentableKt {
public static final fun dfs (Lorg/jetbrains/dokka/model/Documentable;Lkotlin/jvm/functions/Function1;)Lorg/jetbrains/dokka/model/Documentable;
public static final fun orEmpty (Ljava/util/Map;)Ljava/util/Map;
public static final fun shouldDocumentConstructors (Ljava/util/List;)Z
public static final fun withDri (Lorg/jetbrains/dokka/model/Variance;Lorg/jetbrains/dokka/links/DRI;)Lorg/jetbrains/dokka/model/Variance;
}

Expand Down Expand Up @@ -3882,10 +3881,6 @@ public final class org/jetbrains/dokka/pages/ContentNode$DefaultImpls {
public static fun getChildren (Lorg/jetbrains/dokka/pages/ContentNode;)Ljava/util/List;
}

public final class org/jetbrains/dokka/pages/ContentNodePropertiesKt {
public static final field TOGGLEABLE_CONTENT_TYPE_ATTR Ljava/lang/String;
}

public final class org/jetbrains/dokka/pages/ContentNodesKt {
public static final fun hasStyle (Lorg/jetbrains/dokka/pages/ContentNode;Lorg/jetbrains/dokka/pages/Style;)Z
}
Expand Down
2 changes: 1 addition & 1 deletion core/src/main/kotlin/pages/ContentNodes.kt
Expand Up @@ -394,7 +394,7 @@ enum class TextStyle : Style {
enum class ContentStyle : Style {
RowTitle,
/**
* The style is used only for HTML
* The style is used only for HTML. It is applied only for [ContentGroup].
* Creating and rendering tabs is a part of a renderer.
*/
TabbedContent,
Expand Down
16 changes: 9 additions & 7 deletions plugins/base/api/base.api
Expand Up @@ -339,8 +339,6 @@ public final class org/jetbrains/dokka/base/renderers/html/HtmlFormatingUtilsKt

public class org/jetbrains/dokka/base/renderers/html/HtmlRenderer : org/jetbrains/dokka/base/renderers/DefaultRenderer {
public fun <init> (Lorg/jetbrains/dokka/plugability/DokkaContext;)V
public synthetic fun build (Lorg/jetbrains/dokka/pages/ContentNode;Ljava/lang/Object;Lorg/jetbrains/dokka/pages/ContentPage;Ljava/util/Set;)V
public fun build (Lorg/jetbrains/dokka/pages/ContentNode;Lkotlinx/html/FlowContent;Lorg/jetbrains/dokka/pages/ContentPage;Ljava/util/Set;)V
public final fun buildAnchorCopyButton (Lkotlinx/html/FlowContent;Ljava/lang/String;)V
public synthetic fun buildCodeBlock (Ljava/lang/Object;Lorg/jetbrains/dokka/pages/ContentCodeBlock;Lorg/jetbrains/dokka/pages/ContentPage;)V
public fun buildCodeBlock (Lkotlinx/html/FlowContent;Lorg/jetbrains/dokka/pages/ContentCodeBlock;Lorg/jetbrains/dokka/pages/ContentPage;)V
Expand Down Expand Up @@ -1444,11 +1442,8 @@ public final class org/jetbrains/dokka/base/translators/documentables/DefaultDoc
public class org/jetbrains/dokka/base/translators/documentables/DefaultPageCreator {
public fun <init> (Lorg/jetbrains/dokka/base/DokkaBaseConfiguration;Lorg/jetbrains/dokka/base/transformers/pages/comments/CommentsToContentConverter;Lorg/jetbrains/dokka/base/signatures/SignatureProvider;Lorg/jetbrains/dokka/utilities/DokkaLogger;Ljava/util/List;)V
public synthetic fun <init> (Lorg/jetbrains/dokka/base/DokkaBaseConfiguration;Lorg/jetbrains/dokka/base/transformers/pages/comments/CommentsToContentConverter;Lorg/jetbrains/dokka/base/signatures/SignatureProvider;Lorg/jetbrains/dokka/utilities/DokkaLogger;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
protected fun contentForBrief (Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder$DocumentableContentBuilder;Lorg/jetbrains/dokka/model/Documentable;Lorg/jetbrains/dokka/model/properties/PropertyContainer;)V
public static synthetic fun contentForBrief$default (Lorg/jetbrains/dokka/base/translators/documentables/DefaultPageCreator;Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder$DocumentableContentBuilder;Lorg/jetbrains/dokka/model/Documentable;Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILjava/lang/Object;)V
protected fun contentForBrief (Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder$DocumentableContentBuilder;Lorg/jetbrains/dokka/model/Documentable;)V
protected fun contentForClasslikesAndEntries (Ljava/util/List;)Lorg/jetbrains/dokka/pages/ContentGroup;
protected fun contentForClasslikesScopes (Ljava/util/List;Ljava/util/Set;Ljava/util/List;)Lorg/jetbrains/dokka/pages/ContentGroup;
public static synthetic fun contentForClasslikesScopes$default (Lorg/jetbrains/dokka/base/translators/documentables/DefaultPageCreator;Ljava/util/List;Ljava/util/Set;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/dokka/pages/ContentGroup;
protected fun contentForConstructors (Ljava/util/List;Ljava/util/Set;Ljava/util/Set;)Lorg/jetbrains/dokka/pages/ContentGroup;
protected fun contentForDescription (Lorg/jetbrains/dokka/model/Documentable;)Ljava/util/List;
protected fun contentForEntries (Ljava/util/List;Ljava/util/Set;Ljava/util/Set;)Lorg/jetbrains/dokka/pages/ContentGroup;
Expand All @@ -1457,8 +1452,11 @@ public class org/jetbrains/dokka/base/translators/documentables/DefaultPageCreat
protected fun contentForMembers (Ljava/util/List;)Lorg/jetbrains/dokka/pages/ContentGroup;
protected fun contentForModule (Lorg/jetbrains/dokka/model/DModule;)Lorg/jetbrains/dokka/pages/ContentGroup;
protected fun contentForPackage (Lorg/jetbrains/dokka/model/DPackage;)Lorg/jetbrains/dokka/pages/ContentGroup;
protected fun contentForPackageScope (Lorg/jetbrains/dokka/model/DPackage;Lorg/jetbrains/dokka/links/DRI;Ljava/util/Set;)Lorg/jetbrains/dokka/pages/ContentGroup;
protected fun contentForProperty (Lorg/jetbrains/dokka/model/DProperty;)Lorg/jetbrains/dokka/pages/ContentGroup;
protected fun contentForScope (Lorg/jetbrains/dokka/model/WithScope;Lorg/jetbrains/dokka/links/DRI;Ljava/util/Set;Ljava/util/List;)Lorg/jetbrains/dokka/pages/ContentGroup;
public static synthetic fun contentForScope$default (Lorg/jetbrains/dokka/base/translators/documentables/DefaultPageCreator;Lorg/jetbrains/dokka/model/WithScope;Lorg/jetbrains/dokka/links/DRI;Ljava/util/Set;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/dokka/pages/ContentGroup;
protected fun contentForScopes (Ljava/util/List;Ljava/util/Set;Ljava/util/List;)Lorg/jetbrains/dokka/pages/ContentGroup;
public static synthetic fun contentForScopes$default (Lorg/jetbrains/dokka/base/translators/documentables/DefaultPageCreator;Ljava/util/List;Ljava/util/Set;Ljava/util/List;ILjava/lang/Object;)Lorg/jetbrains/dokka/pages/ContentGroup;
protected fun divergentBlock (Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder$DocumentableContentBuilder;Ljava/lang/String;Ljava/util/Collection;Lorg/jetbrains/dokka/pages/ContentKind;Lorg/jetbrains/dokka/model/properties/PropertyContainer;)V
public static synthetic fun divergentBlock$default (Lorg/jetbrains/dokka/base/translators/documentables/DefaultPageCreator;Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder$DocumentableContentBuilder;Ljava/lang/String;Ljava/util/Collection;Lorg/jetbrains/dokka/pages/ContentKind;Lorg/jetbrains/dokka/model/properties/PropertyContainer;ILjava/lang/Object;)V
protected fun getContentBuilder ()Lorg/jetbrains/dokka/base/translators/documentables/PageContentBuilder;
Expand All @@ -1479,6 +1477,10 @@ public class org/jetbrains/dokka/base/translators/documentables/DefaultPageCreat
protected fun toHeaderString (Lorg/jetbrains/dokka/model/doc/TagWrapper;)Ljava/lang/String;
}

public final class org/jetbrains/dokka/base/translators/documentables/DefaultPageCreatorKt {
public static final fun shouldDocumentConstructors (Ljava/util/List;)Z
}

public final class org/jetbrains/dokka/base/translators/documentables/DriClashAwareName : org/jetbrains/dokka/model/properties/ExtraProperty {
public static final field Companion Lorg/jetbrains/dokka/base/translators/documentables/DriClashAwareName$Companion;
public fun <init> (Ljava/lang/String;)V
Expand Down
16 changes: 13 additions & 3 deletions plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt
Expand Up @@ -48,6 +48,15 @@ open class HtmlRenderer(

override val preprocessors = context.plugin<DokkaBase>().query { htmlPreprocessors }

/**
* Tabs themselves are created in HTML plugin since, currently, only HTML format supports them.
* [TabbedContentType] is used to mark content that should be inside tab content.
* A tab can display multiple [TabbedContentType].
* The content style [ContentStyle.TabbedContent] is used to determine where tabs will be generated.
*
* @see TabbedContentType
* @see ContentStyle.TabbedContent
*/
private fun createTabs(pageContext: ContentPage): List<ContentTab> {
return when(pageContext) {
is ClasslikePage -> createTabsForClasslikes(pageContext)
Expand Down Expand Up @@ -215,6 +224,10 @@ open class HtmlRenderer(
node.hasStyle(ListStyle.DescriptionDetails) -> DD(emptyMap(), consumer).visit {
this@wrapGroup.childrenCallback()
}
node.extra.extraTabbedContentType() != null -> div() {
node.extra.extraTabbedContentType()?.let { attributes[TOGGLEABLE_CONTENT_TYPE_ATTR] = it.value.toHtmlAttribute() }
this@wrapGroup.childrenCallback()
}
else -> childrenCallback()
}
}
Expand Down Expand Up @@ -268,7 +281,6 @@ open class HtmlRenderer(
div(divStyles) {
attributes["data-platform-hinted"] = "data-platform-hinted"
extra.extraHtmlAttributes().forEach { attributes[it.extraKey] = it.extraValue }
extra.extraTabbedContentType()?.let { attributes[TOGGLEABLE_CONTENT_TYPE_ATTR] = it.value.toHtmlAttribute() }
if (renderTabs) {
div("platform-bookmarks-row") {
attributes["data-toggle-list"] = "data-toggle-list"
Expand Down Expand Up @@ -615,7 +627,6 @@ open class HtmlRenderer(
node.style.contains(CommentTable) -> buildDefaultTable(node, pageContext, sourceSetRestriction)
else -> div(classes = "table") {
node.extra.extraHtmlAttributes().forEach { attributes[it.extraKey] = it.extraValue }
node.extra.extraTabbedContentType()?.let { attributes[TOGGLEABLE_CONTENT_TYPE_ATTR] = it.value.toHtmlAttribute() }
node.children.forEach {
buildRow(it, pageContext, sourceSetRestriction)
}
Expand Down Expand Up @@ -659,7 +670,6 @@ open class HtmlRenderer(
override fun FlowContent.buildHeader(level: Int, node: ContentHeader, content: FlowContent.() -> Unit) {
val classes = node.style.joinToString { it.toString() }.toLowerCase()
val contentWithExtraAttributes: FlowContent.() -> Unit = {
node.extra.extraTabbedContentType()?.let { attributes[TOGGLEABLE_CONTENT_TYPE_ATTR] = it.value.toHtmlAttribute() }
content()
}
when (level) {
Expand Down
Expand Up @@ -257,7 +257,7 @@ open class DefaultPageCreator(
}
}

protected open fun contentForClasslikesScopes(
protected open fun contentForScopes(
scopes: List<WithScope>,
sourceSets: Set<DokkaSourceSet>,
extensions: List<Documentable> = emptyList()
Expand All @@ -278,12 +278,13 @@ open class DefaultPageCreator(
s: WithScope,
dri: DRI,
sourceSets: Set<DokkaSourceSet>,
extensions: List<Documentable> = emptyList()
): ContentGroup {
val types = listOf(
s.classlikes,
(s as? DPackage)?.typealiases ?: emptyList()
).flatten()
return contentForScope(setOf(dri), sourceSets, types, s.functions, s.properties, emptyList())
return contentForScope(setOf(dri), sourceSets, types, s.functions, s.properties, extensions)
}

private fun contentForScope(
Expand All @@ -297,8 +298,7 @@ open class DefaultPageCreator(
divergentBlock(
"Types",
types,
ContentKind.Classlikes,
extra = mainExtra + TabbedContentTypeExtra(BasicTabbedContentType.TYPE)
ContentKind.Classlikes
)
val (extensionProps, extensionFuns) = extensions.splitPropsAndFuns()
if (separateInheritedMembers) {
Expand All @@ -308,27 +308,19 @@ open class DefaultPageCreator(
val (inheritedExtensionFunctions, extensionFunctions) = extensionFuns.splitInheritedExtension(dri)
val (inheritedExtensionProperties, extensionProperties) = extensionProps.splitInheritedExtension(dri)
propertiesBlock(
"Properties",
BasicTabbedContentType.PROPERTY,
memberProperties + extensionProperties
"Properties", memberProperties + extensionProperties
)
propertiesBlock(
"Inherited properties",
BasicTabbedContentType.PROPERTY,
inheritedProperties + inheritedExtensionProperties
"Inherited properties", inheritedProperties + inheritedExtensionProperties
)
functionsBlock("Functions", BasicTabbedContentType.FUNCTION, memberFunctions + extensionFunctions)
functionsBlock("Functions", memberFunctions + extensionFunctions)
functionsBlock(
"Inherited functions",
BasicTabbedContentType.FUNCTION,
inheritedFunctions + inheritedExtensionFunctions
"Inherited functions", inheritedFunctions + inheritedExtensionFunctions
)
} else {
functionsBlock("Functions", BasicTabbedContentType.FUNCTION, functions + extensionFuns)
functionsBlock("Functions", functions + extensionFuns)
propertiesBlock(
"Properties",
BasicTabbedContentType.PROPERTY,
properties + extensionProps
"Properties", properties + extensionProps
)
}
}
Expand Down Expand Up @@ -377,7 +369,7 @@ open class DefaultPageCreator(
if (csEnum.isNotEmpty()) {
+contentForEntries(csEnum.flatMap { it.entries }, csEnum.dri, csEnum.sourceSets)
}
+contentForClasslikesScopes(scopes, documentables.sourceSets, extensions)
+contentForScopes(scopes, documentables.sourceSets, extensions)
}
}
protected open fun contentForConstructors(
Expand Down Expand Up @@ -532,29 +524,25 @@ open class DefaultPageCreator(

private fun DocumentableContentBuilder.functionsBlock(
name: String,
tabbedContentType: TabbedContentType,
list: Collection<DFunction>
) {
val onlyExtensions = list.all { it.isExtension() }
divergentBlock(
name,
list.sorted(),
ContentKind.Functions,
extra = mainExtra + TabbedContentTypeExtra(if (onlyExtensions) BasicTabbedContentType.EXTENSION_FUNCTION else tabbedContentType)
extra = mainExtra
)
}

private fun DocumentableContentBuilder.propertiesBlock(
name: String,
tabbedContentType: TabbedContentType,
list: Collection<DProperty>
) {
val onlyExtensions = list.all { it.isExtension() }
divergentBlock(
name,
list,
ContentKind.Properties,
extra = mainExtra + TabbedContentTypeExtra(if (onlyExtensions) BasicTabbedContentType.EXTENSION_PROPERTY else tabbedContentType)
extra = mainExtra
)

}
Expand Down Expand Up @@ -586,8 +574,17 @@ open class DefaultPageCreator(
extra: PropertyContainer<ContentNode> = mainExtra
) {
if (collection.any()) {
group(extra = extra) {
header(2, name, kind = kind) { }
val onlyExtensions = collection.all { it.isExtension() }
val groupExtra = when(kind) {
ContentKind.Functions -> extra + TabbedContentTypeExtra(if (onlyExtensions) BasicTabbedContentType.EXTENSION_FUNCTION else BasicTabbedContentType.FUNCTION)
ContentKind.Properties -> extra + TabbedContentTypeExtra(if (onlyExtensions) BasicTabbedContentType.EXTENSION_PROPERTY else BasicTabbedContentType.PROPERTY)
ContentKind.Classlikes -> extra + TabbedContentTypeExtra(BasicTabbedContentType.TYPE)
else -> extra
}

group(extra = groupExtra) {
// be careful: groupExtra will be applied for children by default
header(2, name, kind = kind, extra = extra) { }
val isFunctions = collection.any { it is DFunction }
table(kind, extra = extra, styles = emptySet()) {
header {
Expand Down
8 changes: 5 additions & 3 deletions plugins/base/src/main/resources/dokka/styles/style.css
Expand Up @@ -1298,8 +1298,10 @@ div.runnablesample {
float: right;
}

// the hack to hide the headers inside tabs for a package page because each tab
// has only one header, and the header text is the same as the tab name, so no point in showing it
.main-content[data-page-type="package"] .tabs-section-body > h2 !important {
/*
the hack to hide the headers inside tabs for a package page because each tab
has only one header, and the header text is the same as the tab name, so no point in showing it
*/
.main-content[data-page-type="package"] .tabs-section-body h2 !important {
display: none;
}

0 comments on commit 1e76662

Please sign in to comment.