-
Notifications
You must be signed in to change notification settings - Fork 415
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
Add the link to homepage to the header if homepageLink is provided #3235
Changes from 7 commits
c069217
52ed1f0
a9c8eb3
506ef29
6662802
6fd4a09
d5eab97
5505436
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -21,6 +21,9 @@ | |
<@source_set_selector.display/> | ||
</div> | ||
<div class="navigation-controls"> | ||
<#if homepageLink?has_content> | ||
<div class="navigation-controls--btn navigation-controls--homepage" id="homepage-link" role="button"><a href="${homepageLink}"></a></div> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I have not checked but it seems to be There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Im not an html-expert, but at least my variant works. If to switch tags, it doesn't work at my side (may be need to adapt more code) |
||
</#if> | ||
<button class="navigation-controls--btn navigation-controls--theme" id="theme-toggle-button" type="button">switch theme</button> | ||
<div class="navigation-controls--btn navigation-controls--search" id="searchBar" role="button">search in API</div> | ||
</div> | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
/* | ||
* Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. | ||
*/ | ||
|
||
package renderers.html | ||
|
||
import org.jetbrains.dokka.DokkaConfiguration | ||
import org.jetbrains.dokka.DokkaConfigurationImpl | ||
import org.jetbrains.dokka.PluginConfigurationImpl | ||
import org.jetbrains.dokka.base.DokkaBase | ||
import org.jetbrains.dokka.base.DokkaBaseConfiguration | ||
import org.jetbrains.dokka.base.templating.toJsonString | ||
import org.jetbrains.dokka.base.testApi.testRunner.BaseAbstractTest | ||
import org.jetbrains.dokka.pages.RootPageNode | ||
import org.jetbrains.dokka.plugability.DokkaContext | ||
import org.jsoup.Jsoup | ||
import utils.TestOutputWriter | ||
import utils.TestOutputWriterPlugin | ||
import kotlin.test.Test | ||
import kotlin.test.assertEquals | ||
import kotlin.test.assertNotNull | ||
import kotlin.test.assertNull | ||
|
||
class HeaderTest : BaseAbstractTest() { | ||
private val configuration = dokkaConfiguration { | ||
sourceSets { | ||
sourceSet { | ||
name = "jvm" | ||
sourceRoots = listOf("src/jvm") | ||
} | ||
sourceSet { | ||
name = "js" | ||
sourceRoots = listOf("src/js") | ||
} | ||
} | ||
} | ||
|
||
@Test | ||
fun `should include homepage link if homepageLink is provided`() { | ||
testRendering( | ||
DokkaBaseConfiguration(homepageLink = "https://github.com/Kotlin/dokka/") | ||
) { _, _, writer -> | ||
val renderedContent = navigationElement(writer) | ||
|
||
val sourceLinkElement = | ||
assertNotNull(renderedContent.getElementById("homepage-link"), "Source link element not found") | ||
val aElement = assertNotNull(sourceLinkElement.selectFirst("a")) | ||
assertEquals("https://github.com/Kotlin/dokka/", aElement.attr("href")) | ||
} | ||
} | ||
|
||
@Test | ||
fun `should not include homepage link by default`() { | ||
testRendering(null) { _, _, writer -> | ||
val renderedContent = navigationElement(writer) | ||
assertNull(renderedContent.getElementById("homepage-link"), "Source link element found") | ||
} | ||
} | ||
|
||
private fun testRendering( | ||
baseConfiguration: DokkaBaseConfiguration?, | ||
block: (RootPageNode, DokkaContext, writer: TestOutputWriter) -> Unit | ||
) { | ||
fun configuration(): DokkaConfigurationImpl { | ||
baseConfiguration ?: return configuration | ||
return configuration.copy( | ||
pluginsConfiguration = listOf( | ||
PluginConfigurationImpl( | ||
DokkaBase::class.java.canonicalName, | ||
DokkaConfiguration.SerializationFormat.JSON, | ||
toJsonString(baseConfiguration) | ||
) | ||
) | ||
) | ||
} | ||
|
||
val writerPlugin = TestOutputWriterPlugin() | ||
testInline( | ||
""" | ||
|/src/jvm/Test.kt | ||
|fun test() {} | ||
|/src/js/Test.kt | ||
|fun test() {} | ||
""", | ||
configuration(), | ||
pluginOverrides = listOf(writerPlugin) | ||
) { | ||
renderingStage = { node, context -> | ||
block(node, context, writerPlugin.writer) | ||
} | ||
} | ||
} | ||
|
||
private fun navigationElement(writer: TestOutputWriter) = | ||
writer | ||
.contents | ||
.getValue("index.html") | ||
.let(Jsoup::parse) | ||
.select(".navigation") | ||
.single() | ||
|
||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think all html files except
navigation
might be checked.