aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--integration-tests/gradle/projects/it-multimodule-1/second/build.gradle2
-rw-r--r--integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Android0GradleIntegrationTest.kt1
-rw-r--r--integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt2
-rw-r--r--integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGroovyIntegrationTest.kt2
-rw-r--r--plugins/all-modules-page/build.gradle.kts9
-rw-r--r--plugins/all-modules-page/src/main/kotlin/AllModulesPageGeneration.kt12
-rw-r--r--plugins/all-modules-page/src/main/kotlin/AllModulesPagePlugin.kt42
-rw-r--r--plugins/all-modules-page/src/main/kotlin/ExternalModuleLinkResolver.kt (renamed from plugins/all-modules-page/src/main/kotlin/templates/ExternalModuleLinkResolver.kt)20
-rw-r--r--plugins/all-modules-page/src/main/kotlin/MultimoduleLocationProvider.kt1
-rw-r--r--plugins/all-modules-page/src/main/kotlin/MultimodulePageCreator.kt10
-rw-r--r--plugins/all-modules-page/src/main/kotlin/ResolveLinkCommandHandler.kt45
-rw-r--r--plugins/all-modules-page/src/main/kotlin/templates/DirectiveBasedTemplateProcessing.kt141
-rw-r--r--plugins/all-modules-page/src/main/kotlin/templates/FallbackTemplateProcessingStrategy.kt18
-rw-r--r--plugins/all-modules-page/src/test/kotlin/templates/ResolveLinkCommandResolutionTest.kt (renamed from plugins/all-modules-page/src/test/kotlin/org/jetbrains/dokka/allModulesPage/templates/ResolveLinkCommandResolutionTest.kt)5
-rw-r--r--plugins/all-modules-page/src/test/kotlin/templates/ResolveLinkGfmCommandResolutionTest.kt (renamed from plugins/all-modules-page/src/test/kotlin/org/jetbrains/dokka/allModulesPage/templates/ResolveLinkGfmCommandResolutionTest.kt)8
-rw-r--r--plugins/all-modules-page/src/test/kotlin/templates/mockedPackageListFactory.kt (renamed from plugins/all-modules-page/src/test/kotlin/org/jetbrains/dokka/allModulesPage/templates/mockedPackageListFactory.kt)0
-rw-r--r--plugins/base/base-test-utils/build.gradle.kts1
-rw-r--r--plugins/base/base-test-utils/src/main/kotlin/utils/assertHtmlEqualsIgnoringWhitespace.kt (renamed from plugins/all-modules-page/src/test/kotlin/org/jetbrains/dokka/allModulesPage/templates/assertHtmlEqualsIgnoringWhitespace.kt)2
-rw-r--r--plugins/base/src/main/kotlin/renderers/html/HtmlRenderer.kt8
-rw-r--r--plugins/base/src/main/kotlin/resolvers/local/DokkaLocationProvider.kt2
-rw-r--r--plugins/base/src/main/kotlin/templating/InsertTemplateExtra.kt12
-rw-r--r--plugins/base/src/test/kotlin/resourceLinks/ResourceLinksTest.kt2
-rw-r--r--plugins/gfm/gfm-template-processing/build.gradle.kts1
-rw-r--r--plugins/gfm/gfm-template-processing/src/main/kotlin/org/jetbrains/dokka/gfm/templateProcessing/GfmTemplateProcessingPlugin.kt6
-rw-r--r--plugins/gfm/gfm-template-processing/src/main/kotlin/org/jetbrains/dokka/gfm/templateProcessing/GfmTemplateProcessingStrategy.kt40
-rw-r--r--plugins/templating/build.gradle.kts18
-rw-r--r--plugins/templating/src/main/kotlin/templates/AddToNavigationCommandHandler.kt56
-rw-r--r--plugins/templating/src/main/kotlin/templates/CommandHandler.kt11
-rw-r--r--plugins/templating/src/main/kotlin/templates/DirectiveBasedTemplateProcessing.kt41
-rw-r--r--plugins/templating/src/main/kotlin/templates/FallbackTemplateProcessingStrategy.kt13
-rw-r--r--plugins/templating/src/main/kotlin/templates/JsonElementBasedTemplateProcessingStrategy.kt (renamed from plugins/all-modules-page/src/main/kotlin/templates/JsonElementBasedTemplateProcessingStrategy.kt)46
-rw-r--r--plugins/templating/src/main/kotlin/templates/PathToRootSubstitutor.kt (renamed from plugins/all-modules-page/src/main/kotlin/templates/PathToRootSubstitutor.kt)4
-rw-r--r--plugins/templating/src/main/kotlin/templates/SubstitutionCommandHandler.kt60
-rw-r--r--plugins/templating/src/main/kotlin/templates/Substitutor.kt (renamed from plugins/all-modules-page/src/main/kotlin/templates/Substitutor.kt)2
-rw-r--r--plugins/templating/src/main/kotlin/templates/TemplateProcessor.kt (renamed from plugins/all-modules-page/src/main/kotlin/templates/TemplateProcessor.kt)14
-rw-r--r--plugins/templating/src/main/kotlin/templates/TemplatingPlugin.kt50
-rw-r--r--plugins/templating/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin1
-rw-r--r--plugins/templating/src/test/kotlin/templates/AddToNavigationCommandResolutionTest.kt (renamed from plugins/all-modules-page/src/test/kotlin/org/jetbrains/dokka/allModulesPage/templates/AddToNavigationCommandResolutionTest.kt)6
-rw-r--r--plugins/templating/src/test/kotlin/templates/AddToSearchCommandResolutionTest.kt (renamed from plugins/all-modules-page/src/test/kotlin/org/jetbrains/dokka/allModulesPage/templates/AddToSearchCommandResolutionTest.kt)5
-rw-r--r--plugins/templating/src/test/kotlin/templates/SubstitutionCommandResolutionTest.kt (renamed from plugins/all-modules-page/src/test/kotlin/org/jetbrains/dokka/allModulesPage/templates/SubstitutionCommandResolutionTest.kt)6
-rw-r--r--plugins/templating/src/test/kotlin/templates/TemplatingDokkaTestGenerator.kt63
-rw-r--r--plugins/templating/src/test/kotlin/templates/TestTemplatingGeneration.kt22
-rw-r--r--plugins/templating/src/test/kotlin/templates/TestTemplatingPlugin.kt16
-rw-r--r--plugins/versioning/build.gradle.kts19
-rw-r--r--plugins/versioning/src/main/kotlin/versioning/ReplaceVersionCommandConsumer.kt45
-rw-r--r--plugins/versioning/src/main/kotlin/versioning/ReplaceVersionsCommand.kt26
-rw-r--r--plugins/versioning/src/main/kotlin/versioning/VersioningConfiguration.kt20
-rw-r--r--plugins/versioning/src/main/kotlin/versioning/VersioningHandler.kt101
-rw-r--r--plugins/versioning/src/main/kotlin/versioning/VersioningPlugin.kt39
-rw-r--r--plugins/versioning/src/main/kotlin/versioning/VersionsNavigationCreator.kt53
-rw-r--r--plugins/versioning/src/main/kotlin/versioning/VersionsOrdering.kt23
-rw-r--r--plugins/versioning/src/main/kotlin/versioning/htmlPreprocessors.kt24
-rw-r--r--plugins/versioning/src/main/resources/META-INF/services/org.jetbrains.dokka.plugability.DokkaPlugin1
-rw-r--r--plugins/versioning/src/main/resources/dokka/styles/multimodule.css37
-rw-r--r--runners/gradle-plugin/src/test/kotlin/org/jetbrains/dokka/gradle/AndroidAutoConfigurationTest.kt4
-rw-r--r--settings.gradle.kts2
56 files changed, 923 insertions, 297 deletions
diff --git a/integration-tests/gradle/projects/it-multimodule-1/second/build.gradle b/integration-tests/gradle/projects/it-multimodule-1/second/build.gradle
index 188917bc..2b62f963 100644
--- a/integration-tests/gradle/projects/it-multimodule-1/second/build.gradle
+++ b/integration-tests/gradle/projects/it-multimodule-1/second/build.gradle
@@ -6,7 +6,7 @@ dokkaHtml {
dokkaSourceSets {
"main" {
externalDocumentationLink {
- url.set(new URL("file://" + rootProject.rootDir.toPath().toAbsolutePath().resolve("first/build/dokka/html/first/")))
+ url.set(new URL("file://" + rootProject.rootDir.toPath().toAbsolutePath().resolve("first/build/dokka/html/")))
packageListUrl.set(new URL("file://" + rootProject.rootDir.toPath().toAbsolutePath().resolve("first/build/dokka/html/first/package-list")))
}
}
diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Android0GradleIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Android0GradleIntegrationTest.kt
index bfeed55e..216ff395 100644
--- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Android0GradleIntegrationTest.kt
+++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/Android0GradleIntegrationTest.kt
@@ -26,7 +26,6 @@ class Android0GradleIntegrationTest(override val versions: BuildVersions) : Abst
)
}
-
@BeforeTest
fun prepareProjectFiles() {
assumeAndroidSdkInstalled()
diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt
index 33b4885e..d51f27e6 100644
--- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt
+++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGradleIntegrationTest.kt
@@ -67,7 +67,7 @@ class BasicGradleIntegrationTest(override val versions: BuildVersions) : Abstrac
val moduleOutputDir = File(this, "-basic -project")
assertTrue(moduleOutputDir.isDirectory, "Missing module directory")
- val moduleIndexHtml = File(moduleOutputDir, "index.html")
+ val moduleIndexHtml = File(this, "index.html")
assertTrue(moduleIndexHtml.isFile, "Missing module index.html")
val modulePackageDir = File(moduleOutputDir, "it.basic")
diff --git a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGroovyIntegrationTest.kt b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGroovyIntegrationTest.kt
index 0e125258..9746c8b8 100644
--- a/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGroovyIntegrationTest.kt
+++ b/integration-tests/gradle/src/integrationTest/kotlin/org/jetbrains/dokka/it/gradle/BasicGroovyIntegrationTest.kt
@@ -65,7 +65,7 @@ class BasicGroovyIntegrationTest(override val versions: BuildVersions) : Abstrac
val moduleOutputDir = File(this, "it-basic-groovy")
assertTrue(moduleOutputDir.isDirectory, "Missing module directory")
- val moduleIndexHtml = File(moduleOutputDir, "index.html")
+ val moduleIndexHtml = File(this, "index.html")
assertTrue(moduleIndexHtml.isFile, "Missing module index.html")
val modulePackageDir = File(moduleOutputDir, "it.basic")
diff --git a/plugins/all-modules-page/build.gradle.kts b/plugins/all-modules-page/build.gradle.kts
index c6e88574..9c5fe1c3 100644
--- a/plugins/all-modules-page/build.gradle.kts
+++ b/plugins/all-modules-page/build.gradle.kts
@@ -6,6 +6,8 @@ registerDokkaArtifactPublication("dokkaAllModulesPage") {
dependencies {
implementation(project(":plugins:base"))
+ implementation(project(":plugins:templating"))
+ implementation(project(":plugins:versioning"))
testImplementation(project(":plugins:base"))
testImplementation(project(":plugins:base:base-test-utils"))
testImplementation(project(":plugins:gfm"))
@@ -13,10 +15,9 @@ dependencies {
val coroutines_version: String by project
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version")
-
- implementation("org.jsoup:jsoup:1.12.1")
implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.11.1")
-
val kotlinx_html_version: String by project
- testImplementation("org.jetbrains.kotlinx:kotlinx-html-jvm:$kotlinx_html_version")
+ implementation("org.jetbrains.kotlinx:kotlinx-html-jvm:$kotlinx_html_version")
+
+ implementation("org.jsoup:jsoup:1.12.1")
} \ No newline at end of file
diff --git a/plugins/all-modules-page/src/main/kotlin/AllModulesPageGeneration.kt b/plugins/all-modules-page/src/main/kotlin/AllModulesPageGeneration.kt
index 5ac854b4..0013feed 100644
--- a/plugins/all-modules-page/src/main/kotlin/AllModulesPageGeneration.kt
+++ b/plugins/all-modules-page/src/main/kotlin/AllModulesPageGeneration.kt
@@ -8,15 +8,23 @@ import org.jetbrains.dokka.plugability.DokkaContext
import org.jetbrains.dokka.plugability.plugin
import org.jetbrains.dokka.plugability.query
import org.jetbrains.dokka.plugability.querySingle
+import org.jetbrains.dokka.templates.TemplatingPlugin
+import org.jetbrains.dokka.versioning.VersioningPlugin
class AllModulesPageGeneration(private val context: DokkaContext) : Generation {
private val allModulesPagePlugin by lazy { context.plugin<AllModulesPagePlugin>() }
+ private val templatingPlugin by lazy { context.plugin<TemplatingPlugin>() }
+ private val versioningPlugin by lazy { context.plugin<VersioningPlugin>() }
override fun Timer.generate() {
+
report("Creating all modules page")
val pages = createAllModulesPage()
+ report("Copy previous documentation")
+ handlePreviousDocs()
+
report("Transforming pages")
val transformedPages = transformAllModulesPage(pages)
@@ -29,6 +37,8 @@ class AllModulesPageGeneration(private val context: DokkaContext) : Generation {
override val generationName = "index page for project"
+ fun handlePreviousDocs() = versioningPlugin.querySingle { versioningHandler }.invoke()
+
fun createAllModulesPage() = allModulesPagePlugin.querySingle { allModulesPageCreator }.invoke()
fun transformAllModulesPage(pages: RootPageNode) =
@@ -39,5 +49,5 @@ class AllModulesPageGeneration(private val context: DokkaContext) : Generation {
}
fun processSubmodules() =
- allModulesPagePlugin.querySingle { templateProcessor }.process()
+ templatingPlugin.querySingle { templateProcessor }.process()
} \ No newline at end of file
diff --git a/plugins/all-modules-page/src/main/kotlin/AllModulesPagePlugin.kt b/plugins/all-modules-page/src/main/kotlin/AllModulesPagePlugin.kt
index c99293ef..9f4b62ee 100644
--- a/plugins/all-modules-page/src/main/kotlin/AllModulesPagePlugin.kt
+++ b/plugins/all-modules-page/src/main/kotlin/AllModulesPagePlugin.kt
@@ -1,31 +1,29 @@
package org.jetbrains.dokka.allModulesPage
import org.jetbrains.dokka.CoreExtensions
-import org.jetbrains.dokka.allModulesPage.templates.*
import org.jetbrains.dokka.base.DokkaBase
import org.jetbrains.dokka.base.resolvers.local.DokkaLocationProviderFactory
import org.jetbrains.dokka.base.resolvers.local.LocationProviderFactory
import org.jetbrains.dokka.plugability.DokkaPlugin
+import org.jetbrains.dokka.templates.TemplatingPlugin
import org.jetbrains.dokka.transformers.pages.PageCreator
import org.jetbrains.dokka.transformers.pages.PageTransformer
class AllModulesPagePlugin : DokkaPlugin() {
- val templateProcessor by extensionPoint<TemplateProcessor>()
- val templateProcessingStrategy by extensionPoint<TemplateProcessingStrategy>()
val partialLocationProviderFactory by extensionPoint<LocationProviderFactory>()
val allModulesPageCreator by extensionPoint<PageCreator>()
val allModulesPageTransformer by extensionPoint<PageTransformer>()
val externalModuleLinkResolver by extensionPoint<ExternalModuleLinkResolver>()
- val substitutor by extensionPoint<Substitutor>()
-
val allModulesPageCreators by extending {
allModulesPageCreator providing ::MultimodulePageCreator
}
+ val dokkaBase by lazy { plugin<DokkaBase>() }
+
val multimoduleLocationProvider by extending {
- (plugin<DokkaBase>().locationProviderFactory
+ (dokkaBase.locationProviderFactory
providing MultimoduleLocationProvider::Factory
override plugin<DokkaBase>().locationProvider)
}
@@ -37,37 +35,11 @@ class AllModulesPagePlugin : DokkaPlugin() {
val allModulesPageGeneration by extending {
(CoreExtensions.generation
providing ::AllModulesPageGeneration
- override plugin<DokkaBase>().singleGeneration)
- }
-
- val defaultTemplateProcessor by extending {
- templateProcessor providing ::DefaultTemplateProcessor
- }
-
- val directiveBasedHtmlTemplateProcessingStrategy by extending {
- templateProcessingStrategy providing ::DirectiveBasedHtmlTemplateProcessingStrategy order {
- before(fallbackProcessingStrategy)
- }
- }
-
- val fallbackProcessingStrategy by extending {
- templateProcessingStrategy providing ::FallbackTemplateProcessingStrategy
- }
-
- val navigationSearchTemplateStrategy by extending {
- templateProcessingStrategy providing ::NavigationSearchTemplateStrategy order {
- before(fallbackProcessingStrategy)
- }
- }
-
- val pagesSearchTemplateStrategy by extending {
- templateProcessingStrategy providing ::PagesSearchTemplateStrategy order {
- before(fallbackProcessingStrategy)
- }
+ override dokkaBase.singleGeneration)
}
- val pathToRootSubstitutor by extending {
- substitutor providing ::PathToRootSubstitutor
+ val resolveLinkCommandHandler by extending {
+ plugin<TemplatingPlugin>().directiveBasedCommandHandlers providing ::ResolveLinkCommandHandler
}
val multiModuleLinkResolver by extending {
diff --git a/plugins/all-modules-page/src/main/kotlin/templates/ExternalModuleLinkResolver.kt b/plugins/all-modules-page/src/main/kotlin/ExternalModuleLinkResolver.kt
index d0e787b6..74513957 100644
--- a/plugins/all-modules-page/src/main/kotlin/templates/ExternalModuleLinkResolver.kt
+++ b/plugins/all-modules-page/src/main/kotlin/ExternalModuleLinkResolver.kt
@@ -1,4 +1,4 @@
-package org.jetbrains.dokka.allModulesPage.templates
+package org.jetbrains.dokka.allModulesPage
import org.jetbrains.dokka.DokkaConfiguration
import org.jetbrains.dokka.base.DokkaBase
@@ -30,14 +30,22 @@ class DefaultExternalModuleLinkResolver(val context: DokkaContext) : ExternalMod
context.configuration.modules.map(::loadPackageListForModule).toMap()
return packageLists.mapNotNull { (module, packageList) ->
packageList?.let {
- ExternalDocumentation(
- URL("file:/${module.name}/${module.name}"),
- packageList
- )
+ context.configuration.modules.find { it.name == module.name }?.let { m ->
+ ExternalDocumentation(
+ URL("file:/${m.relativePathToOutputDirectory.toRelativeOutputDir()}"),
+ packageList
+ )
+ }
}
}
}
+ private fun File.toRelativeOutputDir(): File = if(isAbsolute) {
+ relativeToOrSelf(context.configuration.outputDir)
+ } else {
+ this
+ }
+
private fun loadPackageListForModule(module: DokkaConfiguration.DokkaModuleDescription) =
module.sourceOutputDirectory.resolve(File(identifierToFilename(module.name))).let {
it to PackageList.load(
@@ -71,7 +79,7 @@ class DefaultExternalModuleLinkResolver(val context: DokkaContext) : ExternalMod
RecognizedLinkFormat.DokkaJekyll -> ".md"
else -> ""
}
- "${module.relativePathToOutputDirectory}/${identifierToFilename(moduleName)}/index$extension"
+ "${module.relativePathToOutputDirectory}/index$extension"
}
}
diff --git a/plugins/all-modules-page/src/main/kotlin/MultimoduleLocationProvider.kt b/plugins/all-modules-page/src/main/kotlin/MultimoduleLocationProvider.kt
index 1dbbd386..c7c32d55 100644
--- a/plugins/all-modules-page/src/main/kotlin/MultimoduleLocationProvider.kt
+++ b/plugins/all-modules-page/src/main/kotlin/MultimoduleLocationProvider.kt
@@ -1,7 +1,6 @@
package org.jetbrains.dokka.allModulesPage
import org.jetbrains.dokka.allModulesPage.MultimodulePageCreator.Companion.MULTIMODULE_PACKAGE_PLACEHOLDER
-import org.jetbrains.dokka.base.DokkaBase
import org.jetbrains.dokka.base.resolvers.local.DokkaBaseLocationProvider
import org.jetbrains.dokka.base.resolvers.local.LocationProviderFactory
import org.jetbrains.dokka.links.DRI
diff --git a/plugins/all-modules-page/src/main/kotlin/MultimodulePageCreator.kt b/plugins/all-modules-page/src/main/kotlin/MultimodulePageCreator.kt
index a333d7c4..458cf4c1 100644
--- a/plugins/all-modules-page/src/main/kotlin/MultimodulePageCreator.kt
+++ b/plugins/all-modules-page/src/main/kotlin/MultimodulePageCreator.kt
@@ -8,6 +8,7 @@ import org.jetbrains.dokka.base.parsers.moduleAndPackage.ModuleAndPackageDocumen
import org.jetbrains.dokka.base.parsers.moduleAndPackage.parseModuleAndPackageDocumentation
import org.jetbrains.dokka.base.parsers.moduleAndPackage.parseModuleAndPackageDocumentationFragments
import org.jetbrains.dokka.base.resolvers.anchors.SymbolAnchorHint
+import org.jetbrains.dokka.base.templating.InsertTemplateExtra
import org.jetbrains.dokka.base.transformers.pages.comments.DocTagToContentConverter
import org.jetbrains.dokka.base.translators.documentables.PageContentBuilder
import org.jetbrains.dokka.links.DRI
@@ -17,10 +18,14 @@ import org.jetbrains.dokka.model.doc.P
import org.jetbrains.dokka.model.properties.PropertyContainer
import org.jetbrains.dokka.pages.*
import org.jetbrains.dokka.plugability.DokkaContext
+import org.jetbrains.dokka.plugability.configuration
import org.jetbrains.dokka.plugability.plugin
import org.jetbrains.dokka.plugability.querySingle
import org.jetbrains.dokka.transformers.pages.PageCreator
import org.jetbrains.dokka.utilities.DokkaLogger
+import org.jetbrains.dokka.versioning.ReplaceVersionsCommand
+import org.jetbrains.dokka.versioning.VersioningConfiguration
+import org.jetbrains.dokka.versioning.VersioningPlugin
class MultimodulePageCreator(
private val context: DokkaContext,
@@ -39,6 +44,11 @@ class MultimodulePageCreator(
kind = ContentKind.Cover,
sourceSets = sourceSetData
) {
+ /* The line below checks if there is a provided configuration for versioning.
+ If not, we are skipping the template for inserting versions navigation */
+ configuration<VersioningPlugin, VersioningConfiguration>(context)?.let {
+ group(extra = PropertyContainer.withAll(InsertTemplateExtra(ReplaceVersionsCommand))) { }
+ }
header(2, "All modules:")
table(styles = setOf(MultimoduleTable)) {
modules.forEach { module ->
diff --git a/plugins/all-modules-page/src/main/kotlin/ResolveLinkCommandHandler.kt b/plugins/all-modules-page/src/main/kotlin/ResolveLinkCommandHandler.kt
new file mode 100644
index 00000000..e881a5ab
--- /dev/null
+++ b/plugins/all-modules-page/src/main/kotlin/ResolveLinkCommandHandler.kt
@@ -0,0 +1,45 @@
+package org.jetbrains.dokka.allModulesPage
+
+import org.jetbrains.dokka.base.templating.Command
+import org.jetbrains.dokka.base.templating.ResolveLinkCommand
+import org.jetbrains.dokka.plugability.DokkaContext
+import org.jetbrains.dokka.plugability.plugin
+import org.jetbrains.dokka.plugability.querySingle
+import org.jetbrains.dokka.templates.CommandHandler
+import org.jsoup.nodes.Attributes
+import org.jsoup.nodes.Element
+import org.jsoup.parser.Tag
+import java.io.File
+
+class ResolveLinkCommandHandler(context: DokkaContext) : CommandHandler {
+
+ private val externalModuleLinkResolver =
+ context.plugin<AllModulesPagePlugin>().querySingle { externalModuleLinkResolver }
+
+ override fun handleCommand(element: Element, command: Command, input: File, output: File) {
+ command as ResolveLinkCommand
+ val link = externalModuleLinkResolver.resolve(command.dri, output)
+ if (link == null) {
+ val children = element.childNodes().toList()
+ val attributes = Attributes().apply {
+ put("data-unresolved-link", command.dri.toString())
+ }
+ val el = Element(Tag.valueOf("span"), "", attributes).apply {
+ children.forEach { ch -> appendChild(ch) }
+ }
+ element.replaceWith(el)
+ return
+ }
+
+ val attributes = Attributes().apply {
+ put("href", link)
+ }
+ val children = element.childNodes().toList()
+ val el = Element(Tag.valueOf("a"), "", attributes).apply {
+ children.forEach { ch -> appendChild(ch) }
+ }
+ element.replaceWith(el)
+ }
+
+ override fun canHandle(command: Command): Boolean = command is ResolveLinkCommand
+} \ No newline at end of file
diff --git a/plugins/all-modules-page/src/main/kotlin/templates/DirectiveBasedTemplateProcessing.kt b/plugins/all-modules-page/src/main/kotlin/templates/DirectiveBasedTemplateProcessing.kt
deleted file mode 100644
index 2b065731..00000000
--- a/plugins/all-modules-page/src/main/kotlin/templates/DirectiveBasedTemplateProcessing.kt
+++ /dev/null
@@ -1,141 +0,0 @@
-package org.jetbrains.dokka.allModulesPage.templates
-
-import kotlinx.coroutines.Dispatchers.IO
-import kotlinx.coroutines.coroutineScope
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.withContext
-import org.jetbrains.dokka.allModulesPage.AllModulesPagePlugin
-import org.jetbrains.dokka.base.templating.*
-import org.jetbrains.dokka.plugability.DokkaContext
-import org.jetbrains.dokka.plugability.plugin
-import org.jetbrains.dokka.plugability.query
-import org.jetbrains.dokka.plugability.querySingle
-import org.jsoup.Jsoup
-import org.jsoup.nodes.*
-import org.jsoup.parser.Tag
-import java.io.File
-import java.nio.file.Files
-import java.util.concurrent.ConcurrentHashMap
-
-class DirectiveBasedHtmlTemplateProcessingStrategy(private val context: DokkaContext) : TemplateProcessingStrategy {
- private val navigationFragments = ConcurrentHashMap<String, Element>()
-
- private val substitutors = context.plugin<AllModulesPagePlugin>().query { substitutor }
- private val externalModuleLinkResolver = context.plugin<AllModulesPagePlugin>().querySingle { externalModuleLinkResolver }
-
- override suspend fun process(input: File, output: File): Boolean = coroutineScope {
- if (input.extension == "html") {
- launch {
- val documen