aboutsummaryrefslogtreecommitdiff
path: root/plugins/base/src
diff options
context:
space:
mode:
authorMarcin Aman <maman@virtuslab.com>2020-08-20 19:00:04 +0200
committerPaweł Marks <Kordyjan@users.noreply.github.com>2020-08-25 17:49:30 +0200
commitc9af371aa18dc50490dc3927ed88dfe8836c1bde (patch)
tree6b974aa9be26d9e3544327d17722d8f26e14cd4d /plugins/base/src
parent7196323582dce7ca3f9b07262a1f94ecd8514539 (diff)
downloaddokka-c9af371aa18dc50490dc3927ed88dfe8836c1bde.tar.gz
dokka-c9af371aa18dc50490dc3927ed88dfe8836c1bde.tar.bz2
dokka-c9af371aa18dc50490dc3927ed88dfe8836c1bde.zip
Improve styles and functionality on module page #1336
Diffstat (limited to 'plugins/base/src')
-rw-r--r--plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt39
-rw-r--r--plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt39
-rw-r--r--plugins/base/src/main/kotlin/translators/documentables/PageContentBuilder.kt17
-rw-r--r--plugins/base/src/main/kotlin/translators/documentables/briefFromContentNodes.kt26
-rw-r--r--plugins/base/src/main/resources/dokka/styles/style.css21
5 files changed, 107 insertions, 35 deletions
diff --git a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt
index 22fb3e63..0118dcfd 100644
--- a/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt
+++ b/plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt
@@ -386,23 +386,31 @@ open class HtmlRenderer(
it.build(this, pageContext, sourceSetRestriction)
buildAnchor(anchorName)
}
- if (ContentKind.shouldBePlatformTagged(node.dci.kind) && (node.sourceSets.size == 1))
+ if (ContentKind.shouldBePlatformTagged(node.dci.kind) && (node.sourceSets.size == 1 || pageContext is ModulePage))
createPlatformTags(node)
}
}
}
it.filter { it !is ContentLink }.takeIf { it.isNotEmpty() }?.let {
- div("platform-dependent-row keyValue") {
- val title = it.filter { it.style.contains(ContentStyle.RowTitle) }
- div {
- title.forEach {
+ if(pageContext is ModulePage){
+ it.forEach {
+ span(classes = if(it.dci.kind == ContentKind.Comment) "brief-comment" else "") {
it.build(this, pageContext, sourceSetRestriction)
}
}
- div("title") {
- (it - title).forEach {
- it.build(this, pageContext, sourceSetRestriction)
+ } else {
+ div("platform-dependent-row keyValue") {
+ val title = it.filter { it.style.contains(ContentStyle.RowTitle) }
+ div {
+ title.forEach {
+ it.build(this, pageContext, sourceSetRestriction)
+ }
+ }
+ div("title") {
+ (it - title).forEach {
+ it.build(this, pageContext, sourceSetRestriction)
+ }
}
}
}
@@ -513,13 +521,20 @@ open class HtmlRenderer(
override fun FlowContent.buildNavigation(page: PageNode) =
div(classes = "breadcrumbs") {
- locationProvider.ancestors(page).asReversed().forEach { node ->
- text("/")
- if (node.isNavigable) buildLink(node, page)
- else text(node.name)
+ val path = locationProvider.ancestors(page).filterNot { it is RendererSpecificPage }.asReversed()
+ if(path.isNotEmpty()){
+ buildNavigationElement(path.first(), page)
+ path.drop(1).forEach { node ->
+ text("/")
+ buildNavigationElement(node, page)
+ }
}
}
+ private fun FlowContent.buildNavigationElement(node: PageNode, page: PageNode) =
+ if (node.isNavigable) buildLink(node, page)
+ else text(node.name)
+
private fun FlowContent.buildLink(to: PageNode, from: PageNode) =
locationProvider.resolve(to, from)?.let { path ->
buildLink(path) {
diff --git a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt
index 3f3e157e..30f35003 100644
--- a/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt
+++ b/plugins/base/src/main/kotlin/translators/documentables/DefaultPageCreator.kt
@@ -83,11 +83,18 @@ open class DefaultPageCreator(
}
}
+contentForComments(m)
+
block("Packages", 2, ContentKind.Packages, m.packages, m.sourceSets.toSet()) {
+ val documentations = it.sourceSets.map { platform ->
+ it.descriptions[platform]?.also { it.root }
+ }
+ val haveSameContent = documentations.all { it?.root == documentations.firstOrNull()?.root && it?.root != null }
+
link(it.name, it.dri)
+ if(it.sourceSets.size == 1 || (documentations.isNotEmpty() && haveSameContent)){
+ documentations.first()?.let { firstSentenceComment(kind = ContentKind.Comment, content = it) }
+ }
}
-// text("Index\n") TODO
-// text("Link to allpage here")
}
protected open fun contentForPackage(p: DPackage) = contentBuilder.contentFor(p) {
@@ -261,18 +268,15 @@ open class DefaultPageCreator(
protected open fun contentForDescription(
d: Documentable
): List<ContentNode> {
- val tags: GroupedTags = d.documentation.flatMap { (pd, doc) ->
- doc.children.asSequence().map { pd to it }.toList()
- }.groupBy { it.second::class }
-
+ val tags: GroupedTags = d.groupedTags
val platforms = d.sourceSets.toSet()
return contentBuilder.contentFor(d, styles = setOf(TextStyle.Block)) {
- val description = tags.withTypeUnnamed<Description>()
- if (description.any { it.value.root.children.isNotEmpty() }) {
+ val descriptions = d.descriptions
+ if (descriptions.any { it.value.root.children.isNotEmpty() }) {
platforms.forEach { platform ->
- description[platform]?.also {
- group(sourceSets = setOf(platform)) {
+ descriptions[platform]?.also {
+ group(sourceSets = setOf(platform), styles = emptySet()) {
comment(it.root)
}
}
@@ -286,7 +290,7 @@ open class DefaultPageCreator(
platforms.forEach { platform ->
unnamedTags.forEach { pdTag ->
pdTag[platform]?.also { tag ->
- group(sourceSets = setOf(platform)) {
+ group(sourceSets = setOf(platform), styles = emptySet()) {
header(4, tag.toHeaderString())
comment(tag.root)
}
@@ -308,10 +312,7 @@ open class DefaultPageCreator(
protected open fun contentForComments(
d: Documentable
): List<ContentNode> {
- val tags: GroupedTags = d.documentation.flatMap { (pd, doc) ->
- doc.children.asSequence().map { pd to it }.toList()
- }.groupBy { it.second::class }
-
+ val tags = d.groupedTags
val platforms = d.sourceSets
fun DocumentableContentBuilder.contentForParams() {
@@ -522,4 +523,12 @@ open class DefaultPageCreator(
private val List<Documentable>.sourceSets: Set<DokkaSourceSet>
get() = flatMap { it.sourceSets }.toSet()
+
+ private val Documentable.groupedTags: GroupedTags
+ get() = documentation.flatMap { (pd, doc) ->
+ doc.children.asSequence().map { pd to it }.toList()
+ }.groupBy { it.second::class }
+
+ private val Documentable.descriptions: SourceSetDependent<Description>
+ get() = groupedTags.withTypeUnnamed<Description>()
}
diff --git a/plugins/base/src/main/kotlin/translators/documentables/PageContentBuilder.kt b/plugins/base/src/main/kotlin/translators/documentables/PageContentBuilder.kt
index a1f3c002..42700f20 100644
--- a/plugins/base/src/main/kotlin/translators/documentables/PageContentBuilder.kt
+++ b/plugins/base/src/main/kotlin/translators/documentables/PageContentBuilder.kt
@@ -7,6 +7,7 @@ import org.jetbrains.dokka.base.transformers.pages.comments.CommentsToContentCon
import org.jetbrains.dokka.links.DRI
import org.jetbrains.dokka.model.Documentable
import org.jetbrains.dokka.model.SourceSetDependent
+import org.jetbrains.dokka.model.doc.Description
import org.jetbrains.dokka.model.doc.DocTag
import org.jetbrains.dokka.model.properties.PropertyContainer
import org.jetbrains.dokka.model.toDisplaySourceSets
@@ -287,6 +288,22 @@ open class PageContentBuilder(
contents += ContentGroup(content, DCI(mainDRI, kind), sourceSets.toDisplaySourceSets(), styles, extra)
}
+ fun firstSentenceComment(
+ content: Description,
+ kind: Kind = ContentKind.Comment,
+ sourceSets: Set<DokkaSourceSet> = mainSourcesetData,
+ styles: Set<Style> = mainStyles,
+ extra: PropertyContainer<ContentNode> = mainExtra
+ ){
+ val builtDescription = commentsConverter.buildContent(
+ content.root,
+ DCI(mainDRI, kind),
+ sourceSets
+ )
+
+ contents += ContentGroup(briefFromContentNodes(builtDescription), DCI(mainDRI, kind), sourceSets.toDisplaySourceSets(), styles, extra)
+ }
+
fun group(
dri: Set<DRI> = mainDRI,
sourceSets: Set<DokkaSourceSet> = mainSourcesetData,
diff --git a/plugins/base/src/main/kotlin/translators/documentables/briefFromContentNodes.kt b/plugins/base/src/main/kotlin/translators/documentables/briefFromContentNodes.kt
new file mode 100644
index 00000000..9fe128dd
--- /dev/null
+++ b/plugins/base/src/main/kotlin/translators/documentables/briefFromContentNodes.kt
@@ -0,0 +1,26 @@
+package org.jetbrains.dokka.base.translators.documentables
+
+import org.jetbrains.dokka.pages.ContentGroup
+import org.jetbrains.dokka.pages.ContentNode
+import org.jetbrains.dokka.pages.ContentText
+import org.jetbrains.dokka.pages.TextStyle
+
+fun briefFromContentNodes(description: List<ContentNode>): List<ContentNode> {
+ val firstSentenceRegex = Regex("^((?:[^.?!]|[.!?](?!\\s))*[.!?])")
+
+ var sentenceFound = false
+ fun lookthrough(node: ContentNode): ContentNode =
+ if (node is ContentText && firstSentenceRegex.containsMatchIn(node.text)) {
+ sentenceFound = true
+ node.copy(text = firstSentenceRegex.find(node.text)?.value.orEmpty())
+ } else if (node is ContentGroup) {
+ node.copy(children = node.children.mapNotNull {
+ if (!sentenceFound) lookthrough(it) else null
+ }, style = node.style - TextStyle.Paragraph)
+ } else {
+ node
+ }
+ return description.mapNotNull {
+ if (!sentenceFound) lookthrough(it) else null
+ }
+} \ No newline at end of file
diff --git a/plugins/base/src/main/resources/dokka/styles/style.css b/plugins/base/src/main/resources/dokka/styles/style.css
index 51165883..f5a1e65b 100644
--- a/plugins/base/src/main/resources/dokka/styles/style.css
+++ b/plugins/base/src/main/resources/dokka/styles/style.css
@@ -5,6 +5,7 @@
:root {
--breadcrumb-font-color: #A6AFBA;
--hover-link-color: #5B5DEF;
+ --average-color: #637282;
--footer-height: 64px;
--footer-padding-top: 48px;
--horizontal-spacing-for-content: 42px;
@@ -38,7 +39,7 @@
border-bottom: 1px solid #DADFE6;
padding: 11px 3px;
font-size: 14px;
- color: #637282;
+ color: var(--average-color);
outline: none;
margin: 0 8px;
}
@@ -90,7 +91,6 @@
display: flex;
flex-direction: column;
width: 100%;
- padding-bottom: 48px;
}
.tabbedcontent {
@@ -253,7 +253,7 @@ code.paragraph {
}
.symbol span.copy-icon path {
- fill: #637282;
+ fill: var(--average-color);
}
.symbol span.copy-icon:hover path {
@@ -317,7 +317,7 @@ code.paragraph {
display: block;
align-items: center;
height: 100%;
- color: #637282;
+ color: var(--average-color);
overflow: hidden;
}
@@ -434,7 +434,7 @@ h1, h2, h3, h4, h5, h6 {
}
p, ul, ol, table, pre, dl {
- margin: 0 0 20px;
+ margin: 0;
}
h1 {
@@ -709,7 +709,7 @@ footer {
.platform-selector:not([data-active]) {
border: 1px solid #DADFE6;
background-color: transparent;
- color: #637282;
+ color: var(--average-color);
}
td.content {
@@ -755,7 +755,7 @@ td.content {
}
.main-subrow .anchor-icon > svg path {
- fill: #637282;
+ fill: var(--average-color);
}
.main-subrow .anchor-icon:hover {
@@ -862,6 +862,7 @@ td.content {
.cover .with-platform-tabs {
background-color: white;
+ font-size: 14px;
}
.cover > .with-platform-tabs .platform-bookmarks-row {
@@ -908,6 +909,10 @@ td.content {
padding: 16px 24px 16px 24px;
}
+.table-row .brief-comment {
+ color: var(--average-color);
+}
+
.platform-dependent-row {
display: grid;
padding-top: 8px;
@@ -1025,7 +1030,7 @@ td.content {
}
.footer span.go-to-top-icon path {
- fill: #637282;
+ fill: var(--average-color);
}
.footer > span:first-child {