aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Hearn <mike@plan99.net>2015-11-23 19:21:08 +0100
committerMike Hearn <mike@plan99.net>2015-11-23 19:21:08 +0100
commit90cf2ebccd12073a55ff6f187e5a378a2e96e23b (patch)
tree2a8575d78618a8b374a35e6e8749968187583e29
parent23e270b603eb32472b8ef4a5f44c01af57fd049f (diff)
downloaddokka-90cf2ebccd12073a55ff6f187e5a378a2e96e23b.tar.gz
dokka-90cf2ebccd12073a55ff6f187e5a378a2e96e23b.tar.bz2
dokka-90cf2ebccd12073a55ff6f187e5a378a2e96e23b.zip
Copy style.css to the output directory when doing HTML and use relative paths.
Fixes the code so that the relative path to root is always available, breaking the requirement to use a local web server.
-rw-r--r--resources/dokka/styles/style.css (renamed from styles/style.css)0
-rw-r--r--src/Formats/HtmlFormatService.kt7
-rw-r--r--src/Formats/HtmlTemplateService.kt9
-rw-r--r--src/Generation/FileGenerator.kt6
-rw-r--r--src/Generation/Generator.kt2
-rw-r--r--src/Locations/FoldersLocationService.kt8
-rw-r--r--src/Locations/LocationService.kt2
-rw-r--r--src/Locations/SingleFolderLocationService.kt9
-rw-r--r--src/Utilities/DokkaModule.kt2
-rw-r--r--src/main.kt4
10 files changed, 35 insertions, 14 deletions
diff --git a/styles/style.css b/resources/dokka/styles/style.css
index 09586237..09586237 100644
--- a/styles/style.css
+++ b/resources/dokka/styles/style.css
diff --git a/src/Formats/HtmlFormatService.kt b/src/Formats/HtmlFormatService.kt
index e810ef7f..2c461905 100644
--- a/src/Formats/HtmlFormatService.kt
+++ b/src/Formats/HtmlFormatService.kt
@@ -3,6 +3,7 @@ package org.jetbrains.dokka
import com.google.inject.Inject
import com.google.inject.name.Named
import java.io.File
+import java.nio.file.Paths
public open class HtmlFormatService @Inject constructor(@Named("folders") locationService: LocationService,
signatureGenerator: LanguageService,
@@ -113,17 +114,19 @@ public open class HtmlFormatService @Inject constructor(@Named("folders") locati
override fun appendNodes(location: Location, to: StringBuilder, nodes: Iterable<DocumentationNode>) {
- templateService.appendHeader(to, getPageTitle(nodes))
+ templateService.appendHeader(to, getPageTitle(nodes), calcPathToRoot(location))
super.appendNodes(location, to, nodes)
templateService.appendFooter(to)
}
override fun appendOutline(location: Location, to: StringBuilder, nodes: Iterable<DocumentationNode>) {
- templateService.appendHeader(to, "Module Contents")
+ templateService.appendHeader(to, "Module Contents", calcPathToRoot(location))
super.appendOutline(location, to, nodes)
templateService.appendFooter(to)
}
+ private fun calcPathToRoot(location: Location) = Paths.get(location.path).parent.relativize(Paths.get(locationService.root.path + '/'))
+
override fun getOutlineFileName(location: Location): File {
return File("${location.path}-outline.html")
}
diff --git a/src/Formats/HtmlTemplateService.kt b/src/Formats/HtmlTemplateService.kt
index b9900757..ae42a31b 100644
--- a/src/Formats/HtmlTemplateService.kt
+++ b/src/Formats/HtmlTemplateService.kt
@@ -1,7 +1,9 @@
package org.jetbrains.dokka
+import java.nio.file.Path
+
public interface HtmlTemplateService {
- fun appendHeader(to: StringBuilder, title: String?)
+ fun appendHeader(to: StringBuilder, title: String?, basePath: Path)
fun appendFooter(to: StringBuilder)
companion object {
@@ -11,14 +13,15 @@ public interface HtmlTemplateService {
to.appendln("</BODY>")
to.appendln("</HTML>")
}
- override fun appendHeader(to: StringBuilder, title: String?) {
+ override fun appendHeader(to: StringBuilder, title: String?, basePath: Path) {
to.appendln("<HTML>")
to.appendln("<HEAD>")
if (title != null) {
to.appendln("<title>$title</title>")
}
if (css != null) {
- to.appendln("<link rel=\"stylesheet\" href=\"$css\">")
+ val cssPath = basePath.resolve(css)
+ to.appendln("<link rel=\"stylesheet\" href=\"$cssPath\">")
}
to.appendln("</HEAD>")
to.appendln("<BODY>")
diff --git a/src/Generation/FileGenerator.kt b/src/Generation/FileGenerator.kt
index 810038fa..a762bae3 100644
--- a/src/Generation/FileGenerator.kt
+++ b/src/Generation/FileGenerator.kt
@@ -42,6 +42,12 @@ public class FileGenerator @Inject constructor(val locationService: FileLocation
}
}
}
+
+ override fun buildSupportFiles() {
+ FileOutputStream(locationService.location(listOf("style.css"), false).file).use {
+ javaClass.getResourceAsStream("/dokka/styles/style.css").copyTo(it)
+ }
+ }
}
private fun File.mkdirsOrFail() {
diff --git a/src/Generation/Generator.kt b/src/Generation/Generator.kt
index d7db1c52..ac10a6a5 100644
--- a/src/Generation/Generator.kt
+++ b/src/Generation/Generator.kt
@@ -3,11 +3,13 @@ package org.jetbrains.dokka
public interface Generator {
fun buildPages(nodes: Iterable<DocumentationNode>)
fun buildOutlines(nodes: Iterable<DocumentationNode>)
+ fun buildSupportFiles()
}
fun Generator.buildAll(nodes: Iterable<DocumentationNode>) {
buildPages(nodes)
buildOutlines(nodes)
+ buildSupportFiles()
}
fun Generator.buildPage(node: DocumentationNode): Unit = buildPages(listOf(node))
diff --git a/src/Locations/FoldersLocationService.kt b/src/Locations/FoldersLocationService.kt
index 8a0cf6be..89b34ed1 100644
--- a/src/Locations/FoldersLocationService.kt
+++ b/src/Locations/FoldersLocationService.kt
@@ -5,14 +5,16 @@ import com.google.inject.name.Named
import java.io.File
public fun FoldersLocationService(root: String): FoldersLocationService = FoldersLocationService(File(root), "")
-public class FoldersLocationService @Inject constructor(@Named("outputDir") val root: File, val extension: String) : FileLocationService {
+public class FoldersLocationService @Inject constructor(@Named("outputDir") val rootFile: File, val extension: String) : FileLocationService {
+ override val root: Location
+ get() = FileLocation(rootFile)
override fun withExtension(newExtension: String): FileLocationService {
- return if (extension.isEmpty()) FoldersLocationService(root, newExtension) else this
+ return if (extension.isEmpty()) FoldersLocationService(rootFile, newExtension) else this
}
override fun location(qualifiedName: List<String>, hasMembers: Boolean): FileLocation {
- return FileLocation(File(root, relativePathToNode(qualifiedName, hasMembers)).appendExtension(extension))
+ return FileLocation(File(rootFile, relativePathToNode(qualifiedName, hasMembers)).appendExtension(extension))
}
}
diff --git a/src/Locations/LocationService.kt b/src/Locations/LocationService.kt
index 15a4ebac..80bc0236 100644
--- a/src/Locations/LocationService.kt
+++ b/src/Locations/LocationService.kt
@@ -51,6 +51,8 @@ public interface LocationService {
* @param hasMembers if true, the node for which the location is calculated has member nodes.
*/
fun location(qualifiedName: List<String>, hasMembers: Boolean): Location
+
+ val root: Location
}
diff --git a/src/Locations/SingleFolderLocationService.kt b/src/Locations/SingleFolderLocationService.kt
index 049636c0..e313ac28 100644
--- a/src/Locations/SingleFolderLocationService.kt
+++ b/src/Locations/SingleFolderLocationService.kt
@@ -5,12 +5,15 @@ import com.google.inject.name.Named
import java.io.File
public fun SingleFolderLocationService(root: String): SingleFolderLocationService = SingleFolderLocationService(File(root), "")
-public class SingleFolderLocationService @Inject constructor(@Named("outputDir") val root: File, val extension: String) : FileLocationService {
+public class SingleFolderLocationService @Inject constructor(@Named("outputDir") val rootFile: File, val extension: String) : FileLocationService {
override fun withExtension(newExtension: String): FileLocationService =
- SingleFolderLocationService(root, newExtension)
+ SingleFolderLocationService(rootFile, newExtension)
override fun location(qualifiedName: List<String>, hasMembers: Boolean): FileLocation {
val filename = qualifiedName.map { identifierToFilename(it) }.joinToString("-")
- return FileLocation(File(root, filename).appendExtension(extension))
+ return FileLocation(File(rootFile, filename).appendExtension(extension))
}
+
+ override val root: Location
+ get() = FileLocation(rootFile)
} \ No newline at end of file
diff --git a/src/Utilities/DokkaModule.kt b/src/Utilities/DokkaModule.kt
index 3b2d26f1..1eb82313 100644
--- a/src/Utilities/DokkaModule.kt
+++ b/src/Utilities/DokkaModule.kt
@@ -26,7 +26,7 @@ class DokkaModule(val environment: AnalysisEnvironment,
binder.bind(LanguageService::class.java).to(KotlinLanguageService::class.java)
binder.bind(HtmlTemplateService::class.java).toProvider(object : Provider<HtmlTemplateService> {
- override fun get(): HtmlTemplateService = HtmlTemplateService.default("/dokka/styles/style.css")
+ override fun get(): HtmlTemplateService = HtmlTemplateService.default("style.css")
})
binder.registerCategory<LanguageService>("language")
diff --git a/src/main.kt b/src/main.kt
index ef694981..5a7514c4 100644
--- a/src/main.kt
+++ b/src/main.kt
@@ -93,7 +93,7 @@ public fun main(args: Array<String>) {
samples,
includes,
arguments.moduleName,
- arguments.outputDir,
+ arguments.outputDir.let { if (it.endsWith('/')) it else it + '/' },
arguments.outputFormat,
sourceLinks,
arguments.nodeprecated)
@@ -148,7 +148,7 @@ class DokkaGenerator(val logger: DokkaLogger,
val environment = createAnalysisEnvironment()
logger.info("Module: $moduleName")
- logger.info("Output: ${File(outputDir).absolutePath}")
+ logger.info("Output: ${File(outputDir)}")
logger.info("Sources: ${environment.sources.joinToString()}")
logger.info("Classpath: ${environment.classpath.joinToString()}")