Skip to content

Commit

Permalink
Make anchors stable
Browse files Browse the repository at this point in the history
  • Loading branch information
MarcinAman committed Apr 15, 2021
1 parent 46b2118 commit ebaa646
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 6 deletions.
10 changes: 6 additions & 4 deletions core/src/main/kotlin/model/CompositeSourceSetID.kt
Expand Up @@ -13,10 +13,12 @@ data class CompositeSourceSetID(
require(children.isNotEmpty()) { "Expected at least one source set id" }
}

val merged = DokkaSourceSetID(
scopeId = children.joinToString(separator = "+") { it.scopeId },
sourceSetName = children.joinToString(separator = "+") { it.sourceSetName }
)
val merged = children.sortedBy { it.scopeId + it.sourceSetName }.let { sortedChildren ->
DokkaSourceSetID(
scopeId = sortedChildren.joinToString(separator = "+") { it.scopeId },
sourceSetName = sortedChildren.joinToString(separator = "+") { it.sourceSetName }
)
}

val all: Set<DokkaSourceSetID> = setOf(merged, *children.toTypedArray())

Expand Down
9 changes: 8 additions & 1 deletion plugins/base/src/main/kotlin/renderers/pageId.kt
Expand Up @@ -11,8 +11,15 @@ internal val ContentPage.pageId: String
internal val NavigationNode.pageId: String
get() = pageId(dri, sourceSets)

internal fun Set<DisplaySourceSet>.shortenToUrl() =
sortedBy { it.sourceSetIDs.merged.let { it.scopeId + it.sourceSetName } }.joinToString().hashCode()

internal fun DRI.shortenToUrl() = toString()

internal fun Set<DRI>.shortenToUrl() = sortedBy { it.toString() }.joinToString()

/**
* Page Id is required to have a sourceSet in order to distinguish between different pages that has same DRI but different sourceSet
* like main functions that are not expect/actual
*/
private fun pageId(dri: DRI, sourceSets: Set<DisplaySourceSet>): String = "$dri/${sourceSets.hashCode()}"
private fun pageId(dri: DRI, sourceSets: Set<DisplaySourceSet>): String = "${dri.shortenToUrl()}/${sourceSets.shortenToUrl()}"
@@ -1,5 +1,6 @@
package org.jetbrains.dokka.base.resolvers.local

import org.jetbrains.dokka.base.renderers.shortenToUrl
import org.jetbrains.dokka.model.DisplaySourceSet
import org.jetbrains.dokka.pages.DCI
import org.jetbrains.dokka.pages.RootPageNode
Expand All @@ -17,6 +18,6 @@ abstract class DokkaBaseLocationProvider(
* 2040 characters limit
*/
open fun anchorForDCI(dci: DCI, sourceSets: Set<DisplaySourceSet>): String =
(dci.dri.toString() + "/" + dci.kind + "/" + sourceSets.hashCode()).urlEncoded()
(dci.dri.shortenToUrl() + "/" + dci.kind + "/" + sourceSets.shortenToUrl()).urlEncoded()

}

0 comments on commit ebaa646

Please sign in to comment.