From 566c42f44d238601bc14c3a392f299d39983577e Mon Sep 17 00:00:00 2001 From: odenix Date: Sat, 16 May 2026 03:38:24 +0200 Subject: [PATCH] pkl-doc: Support single-package docsite mode (#1592) When a docsite has only one package name and no DocsiteInfo.overview, treat it like Javadoc's single-module output: redirect the top-level index to the package page and omit the site-title breadcrumb segment from generated pages. Add src/test/files/SinglePackageTest fixtures to cover multiple package versions, redirect behavior, breadcrumb behavior, and unchanged site structure. Also: - Shut down Executor used in test. - Declare expected output fixtures of DocGenerator as test inputs, not outputs. - Fix IntelliJ warning by using a Set for the right-hand side of collection subtraction. --- pkl-doc/pkl-doc.gradle.kts | 17 +- .../kotlin/org/pkl/doc/ClassPageGenerator.kt | 11 +- .../main/kotlin/org/pkl/doc/DocGenerator.kt | 43 +- .../main/kotlin/org/pkl/doc/DocsiteInfo.kt | 6 +- .../main/kotlin/org/pkl/doc/HtmlGenerator.kt | 23 +- .../org/pkl/doc/MainOrPackagePageGenerator.kt | 3 +- .../kotlin/org/pkl/doc/MainPageGenerator.kt | 86 +- .../org/pkl/doc/ModuleOrClassPageGenerator.kt | 3 +- .../kotlin/org/pkl/doc/ModulePageGenerator.kt | 2 + .../org/pkl/doc/PackagePageGenerator.kt | 9 +- .../main/kotlin/org/pkl/doc/PageGenerator.kt | 38 +- .../com.package1-4.5.6/doc-package-info.pkl | 22 + .../input/com.package1-4.5.6/minimal.pkl | 11 + .../input/com.package1/doc-package-info.pkl | 22 + .../input/com.package1/minimal.pkl | 11 + .../SinglePackageTest/input/docsite-info.pkl | 3 + .../SinglePackageTest/output/.pkldoc/VERSION | 1 + .../output/com.package1/1.2.3/index.html | 71 ++ .../com.package1/1.2.3/minimal/Person.html | 178 +++++ .../com.package1/1.2.3/minimal/index.html | 238 ++++++ .../com.package1/1.2.3/package-data.json | 1 + .../output/com.package1/1.2.3/search-index.js | 1 + .../output/com.package1/4.5.6/index.html | 71 ++ .../com.package1/4.5.6/minimal/Person.html | 178 +++++ .../com.package1/4.5.6/minimal/index.html | 238 ++++++ .../com.package1/4.5.6/package-data.json | 1 + .../output/com.package1/4.5.6/search-index.js | 1 + .../output/com.package1/current/index.html | 71 ++ .../com.package1/current/minimal/Person.html | 178 +++++ .../com.package1/current/minimal/index.html | 238 ++++++ .../com.package1/current/package-data.json | 1 + .../com.package1/current/search-index.js | 1 + .../output/data/com.package1/1.2.3/index.json | 1 + .../com.package1/1.2.3/minimal/Person.json | 1 + .../com.package1/1.2.3/minimal/index.json | 1 + .../output/data/com.package1/4.5.6/index.json | 1 + .../com.package1/4.5.6/minimal/Person.json | 1 + .../com.package1/4.5.6/minimal/index.json | 1 + .../output/data/com.package1/_/index.json | 12 + .../data/com.package1/_/minimal/Person.json | 12 + .../data/com.package1/_/minimal/index.json | 12 + .../output/fonts/MaterialIcons-Regular.woff2 | Bin 0 -> 44300 bytes .../fonts/lato-v14-latin_latin-ext-700.woff2 | Bin 0 -> 24488 bytes .../lato-v14-latin_latin-ext-regular.woff2 | Bin 0 -> 24904 bytes .../open-sans-v15-latin_latin-ext-700.woff2 | Bin 0 -> 19504 bytes ...n-sans-v15-latin_latin-ext-700italic.woff2 | Bin 0 -> 17952 bytes ...open-sans-v15-latin_latin-ext-italic.woff2 | Bin 0 -> 18072 bytes ...pen-sans-v15-latin_latin-ext-regular.woff2 | Bin 0 -> 18876 bytes ...urce-code-pro-v7-latin_latin-ext-700.woff2 | Bin 0 -> 18816 bytes ...-code-pro-v7-latin_latin-ext-regular.woff2 | Bin 0 -> 19188 bytes .../output/images/apple-touch-icon.png | Bin 0 -> 10782 bytes .../output/images/favicon-16x16.png | Bin 0 -> 780 bytes .../output/images/favicon-32x32.png | Bin 0 -> 1802 bytes .../output/images/favicon.svg | 23 + .../files/SinglePackageTest/output/index.html | 13 + .../output/scripts/pkldoc.js | 737 ++++++++++++++++++ .../output/scripts/scroll-into-view.min.js | 30 + .../output/scripts/search-worker.js | 282 +++++++ .../SinglePackageTest/output/search-index.js | 1 + .../output/styles/pkldoc.css | 680 ++++++++++++++++ .../kotlin/org/pkl/doc/CliDocGeneratorTest.kt | 14 +- .../kotlin/org/pkl/doc/DocGeneratorTest.kt | 11 +- .../org/pkl/doc/DocGeneratorTestHelper.kt | 96 ++- .../kotlin/org/pkl/doc/JavaExecutableTest.kt | 4 +- .../org/pkl/doc/NativeExecutableTest.kt | 4 +- 65 files changed, 3611 insertions(+), 104 deletions(-) create mode 100644 pkl-doc/src/test/files/SinglePackageTest/input/com.package1-4.5.6/doc-package-info.pkl create mode 100644 pkl-doc/src/test/files/SinglePackageTest/input/com.package1-4.5.6/minimal.pkl create mode 100644 pkl-doc/src/test/files/SinglePackageTest/input/com.package1/doc-package-info.pkl create mode 100644 pkl-doc/src/test/files/SinglePackageTest/input/com.package1/minimal.pkl create mode 100644 pkl-doc/src/test/files/SinglePackageTest/input/docsite-info.pkl create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/.pkldoc/VERSION create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/index.html create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/minimal/Person.html create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/minimal/index.html create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/package-data.json create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/search-index.js create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/index.html create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/minimal/Person.html create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/minimal/index.html create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/package-data.json create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/search-index.js create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/index.html create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/minimal/Person.html create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/minimal/index.html create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/package-data.json create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/search-index.js create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/1.2.3/index.json create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/1.2.3/minimal/Person.json create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/1.2.3/minimal/index.json create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/4.5.6/index.json create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/4.5.6/minimal/Person.json create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/4.5.6/minimal/index.json create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/_/index.json create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/_/minimal/Person.json create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/_/minimal/index.json create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/fonts/MaterialIcons-Regular.woff2 create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/fonts/lato-v14-latin_latin-ext-700.woff2 create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/fonts/lato-v14-latin_latin-ext-regular.woff2 create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/fonts/open-sans-v15-latin_latin-ext-700.woff2 create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/fonts/open-sans-v15-latin_latin-ext-700italic.woff2 create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/fonts/open-sans-v15-latin_latin-ext-italic.woff2 create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/fonts/open-sans-v15-latin_latin-ext-regular.woff2 create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/fonts/source-code-pro-v7-latin_latin-ext-700.woff2 create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/fonts/source-code-pro-v7-latin_latin-ext-regular.woff2 create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/images/apple-touch-icon.png create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/images/favicon-16x16.png create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/images/favicon-32x32.png create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/images/favicon.svg create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/index.html create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/scripts/pkldoc.js create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/scripts/scroll-into-view.min.js create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/scripts/search-worker.js create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/search-index.js create mode 100644 pkl-doc/src/test/files/SinglePackageTest/output/styles/pkldoc.css diff --git a/pkl-doc/pkl-doc.gradle.kts b/pkl-doc/pkl-doc.gradle.kts index 449d0c5e..75e5028f 100644 --- a/pkl-doc/pkl-doc.gradle.kts +++ b/pkl-doc/pkl-doc.gradle.kts @@ -69,6 +69,15 @@ publishing { } } +tasks.test { + inputs.dir("src/test/files/DocGeneratorTest/input") + inputs.dir("src/test/files/DocGeneratorTest/output") + inputs.dir("src/test/files/DocMigratorTest/input") + inputs.dir("src/test/files/DocMigratorTest/output") + inputs.dir("src/test/files/SinglePackageTest/input") + inputs.dir("src/test/files/SinglePackageTest/output") +} + val testNativeExecutable by tasks.registering(Test::class) { dependsOn(tasks.assembleNative) @@ -76,7 +85,7 @@ val testNativeExecutable by classpath = sourceSets.test.get().runtimeClasspath inputs.dir("src/test/files/DocGeneratorTest/input") - outputs.dir("src/test/files/DocGeneratorTest/output") + inputs.dir("src/test/files/DocGeneratorTest/output") systemProperty("org.pkl.doc.NativeExecutableTest", "true") filter { includeTestsMatching("org.pkl.doc.NativeExecutableTest") } @@ -89,7 +98,7 @@ val testJavaExecutable by dependsOn(tasks.javaExecutable) inputs.dir("src/test/files/DocGeneratorTest/input") - outputs.dir("src/test/files/DocGeneratorTest/output") + inputs.dir("src/test/files/DocGeneratorTest/output") systemProperty("org.pkl.doc.JavaExecutableTest", "true") filter { includeTestsMatching("org.pkl.doc.JavaExecutableTest") } @@ -105,4 +114,6 @@ tasks.jar { manifest { attributes += mapOf("Main-Class" to "org.pkl.doc.Main") } htmlValidator { sources = files("src/test/files/DocGeneratorTest/output") } -tasks.validateHtml { mustRunAfter(testJavaExecutable) } +// Tests usually read expected output files, but may write missing ones before failing. +// If that happens, delay validation until after any test tasks in the graph. +tasks.validateHtml { mustRunAfter(tasks.test, testJavaExecutable, testNativeExecutable) } diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/ClassPageGenerator.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/ClassPageGenerator.kt index 42d4cbac..d14e1ef4 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/ClassPageGenerator.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/ClassPageGenerator.kt @@ -26,8 +26,17 @@ internal class ClassPageGenerator( clazz: PClass, pageScope: ClassScope, isTestMode: Boolean, + isSinglePackageSite: Boolean, consoleOut: OutputStream, -) : ModuleOrClassPageGenerator(docsiteInfo, clazz, pageScope, isTestMode, consoleOut) { +) : + ModuleOrClassPageGenerator( + docsiteInfo, + clazz, + pageScope, + isTestMode, + isSinglePackageSite, + consoleOut, + ) { override val html: HTML.() -> Unit = { renderHtmlHead() diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/DocGenerator.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/DocGenerator.kt index f6e677f4..7bdc5af7 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/DocGenerator.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/DocGenerator.kt @@ -190,28 +190,11 @@ class DocGenerator( "Docsite is not up to date. Expected: ${DocMigrator.CURRENT_VERSION}. Found: ${docMigrator.docsiteVersion}. Use DocMigrator to migrate the site." ) } - val htmlGenerator = - HtmlGenerator(docsiteInfo, docPackages, importResolver, outputDir, isTestMode, consoleOut) val searchIndexGenerator = SearchIndexGenerator(outputDir, consoleOut) val packageDataGenerator = PackageDataGenerator(outputDir, consoleOut) val runtimeDataGenerator = RuntimeDataGenerator(descendingVersionComparator, outputDir, consoleOut) - coroutineScope { - for (docPackage in docPackages) { - launch { - docPackage.deletePackageDir() - coroutineScope { - launch { htmlGenerator.generate(docPackage) } - launch { searchIndexGenerator.generate(docPackage) } - launch { packageDataGenerator.generate(docPackage) } - } - } - } - } - - writeOutputLine("Generated HTML for packages") - val newlyGeneratedPackages = docPackages.map(::PackageData).sortedBy { it.ref.pkg } val currentSearchIndex = searchIndexGenerator.getCurrentSearchIndex() @@ -226,6 +209,32 @@ class DocGenerator( newlyGeneratedPackages + existingCurrentPackages, descendingVersionComparator, ) + val isSinglePackageSite = docsiteInfo.overview == null && currentPackages.size == 1 + val htmlGenerator = + HtmlGenerator( + docsiteInfo, + docPackages, + importResolver, + outputDir, + isTestMode, + isSinglePackageSite, + consoleOut, + ) + + coroutineScope { + for (docPackage in docPackages) { + launch { + docPackage.deletePackageDir() + coroutineScope { + launch { htmlGenerator.generate(docPackage) } + launch { searchIndexGenerator.generate(docPackage) } + launch { packageDataGenerator.generate(docPackage) } + } + } + } + } + + writeOutputLine("Generated HTML for packages") createCurrentDirectories(currentPackages, existingCurrentPackages) searchIndexGenerator.generateSiteIndex(currentPackages) diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/DocsiteInfo.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/DocsiteInfo.kt index 0faeec0f..bdfba777 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/DocsiteInfo.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/DocsiteInfo.kt @@ -1,5 +1,5 @@ /* - * Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. + * Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,6 +29,10 @@ data class DocsiteInfo( * * Uses the same Markdown format as Pkldoc comments. Unless expanded, only the first paragraph is * shown. + * + * If [overview] is `null` and the generated site has only one distinct package name, the main + * page redirects to that package page and generated breadcrumbs omit the site title segment. The + * structure of the generated site is unchanged. */ val overview: String?, diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/HtmlGenerator.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/HtmlGenerator.kt index e8f4836b..3f8cf2bb 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/HtmlGenerator.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/HtmlGenerator.kt @@ -1,5 +1,5 @@ /* - * Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. + * Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,6 +28,7 @@ internal class HtmlGenerator( importResolver: (URI) -> ModuleSchema, private val outputDir: Path, private val isTestMode: Boolean, + private val isSinglePackageSite: Boolean, consoleOut: OutputStream, ) : AbstractGenerator(consoleOut) { private val siteScope = @@ -35,14 +36,25 @@ internal class HtmlGenerator( suspend fun generate(docPackage: DocPackage) = coroutineScope { val packageScope = siteScope.getPackage(docPackage.docPackageInfo) - launch { PackagePageGenerator(docsiteInfo, docPackage, packageScope, consoleOut).run() } + launch { + PackagePageGenerator(docsiteInfo, docPackage, packageScope, isSinglePackageSite, consoleOut) + .run() + } for (docModule in docPackage.docModules) { if (docModule.isUnlisted) continue val moduleScope = packageScope.getModule(docModule.name) launch { - ModulePageGenerator(docsiteInfo, docPackage, docModule, moduleScope, isTestMode, consoleOut) + ModulePageGenerator( + docsiteInfo, + docPackage, + docModule, + moduleScope, + isTestMode, + isSinglePackageSite, + consoleOut, + ) .run() } @@ -56,6 +68,7 @@ internal class HtmlGenerator( clazz, ClassScope(clazz, moduleScope.url, moduleScope), isTestMode, + isSinglePackageSite, consoleOut, ) .run() @@ -65,7 +78,9 @@ internal class HtmlGenerator( } suspend fun generateSite(packages: List) = coroutineScope { - launch { MainPageGenerator(docsiteInfo, packages, siteScope, consoleOut).run() } + launch { + MainPageGenerator(docsiteInfo, packages, siteScope, isSinglePackageSite, consoleOut).run() + } launch { generateStaticResources() } } diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/MainOrPackagePageGenerator.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/MainOrPackagePageGenerator.kt index b332f2d4..1f5bcf56 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/MainOrPackagePageGenerator.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/MainOrPackagePageGenerator.kt @@ -21,8 +21,9 @@ import kotlinx.html.* internal abstract class MainOrPackagePageGenerator( docsiteInfo: DocsiteInfo, pageScope: S, + isSinglePackageSite: Boolean, consoleOut: OutputStream, -) : PageGenerator(docsiteInfo, pageScope, consoleOut) where S : PageScope { +) : PageGenerator(docsiteInfo, pageScope, isSinglePackageSite, consoleOut) where S : PageScope { protected fun UL.renderModuleOrPackage( name: String, moduleOrPackageScope: DocScope, diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/MainPageGenerator.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/MainPageGenerator.kt index 3065a209..cd7f02ec 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/MainPageGenerator.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/MainPageGenerator.kt @@ -17,47 +17,53 @@ package org.pkl.doc import java.io.OutputStream import kotlinx.html.* +import kotlinx.serialization.json.Json internal class MainPageGenerator( docsiteInfo: DocsiteInfo, private val packagesData: List, pageScope: SiteScope, + private val isSinglePackageSite: Boolean, consoleOut: OutputStream, -) : MainOrPackagePageGenerator(docsiteInfo, pageScope, consoleOut) { +) : MainOrPackagePageGenerator(docsiteInfo, pageScope, false, consoleOut) { override val html: HTML.() -> Unit = { - renderHtmlHead() + if (isSinglePackageSite) { + renderRedirectPage() + } else { + renderHtmlHead() + body { + onLoad = "onLoad()" - body { - onLoad = "onLoad()" + renderPageHeader(null, null, null, null) - renderPageHeader(null, null, null, null) + main { + h1 { + id = "declaration-title" - main { - h1 { - id = "declaration-title" - - +(docsiteInfo.title ?: "") - } - - val memberDocs = MemberDocs(docsiteInfo.overview, pageScope, listOf(), isDeclaration = true) - - renderMemberGroupLinks( - Triple("Overview", "#_overview", memberDocs.isExpandable), - Triple("Packages", "#_packages", packagesData.isNotEmpty()), - ) - - if (docsiteInfo.overview != null) { - renderAnchor("_overview") - div { - id = "_declaration" - classes = setOf("member") - - memberDocs.renderExpandIcon(this) - memberDocs.renderDocComment(this) + +(docsiteInfo.title ?: "") } - } - renderPackages() + val memberDocs = + MemberDocs(docsiteInfo.overview, pageScope, listOf(), isDeclaration = true) + + renderMemberGroupLinks( + Triple("Overview", "#_overview", memberDocs.isExpandable), + Triple("Packages", "#_packages", packagesData.isNotEmpty()), + ) + + if (docsiteInfo.overview != null) { + renderAnchor("_overview") + div { + id = "_declaration" + classes = setOf("member") + + memberDocs.renderExpandIcon(this) + memberDocs.renderDocComment(this) + } + } + + renderPackages() + } } } } @@ -66,6 +72,28 @@ internal class MainPageGenerator( +(docsiteInfo.title ?: "Pkldoc") } + private fun HTML.renderRedirectPage() { + val packagePageUrl = "${packagesData.single().ref.basePath}/current/index.html" + + lang = "en-US" + + head { + meta { charset = "UTF-8" } + title { renderPageTitle() } + script { unsafe { raw("window.location.replace(${Json.encodeToString(packagePageUrl)});") } } + } + body { + main { + p { + a { + href = packagePageUrl + +packagePageUrl + } + } + } + } + } + private fun HtmlBlockTag.renderPackages() { if (packagesData.isEmpty()) return diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/ModuleOrClassPageGenerator.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/ModuleOrClassPageGenerator.kt index 9f9110b4..25cb4348 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/ModuleOrClassPageGenerator.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/ModuleOrClassPageGenerator.kt @@ -29,8 +29,9 @@ internal abstract class ModuleOrClassPageGenerator( protected val clazz: PClass, scope: S, private val isTestMode: Boolean, + isSinglePackageSite: Boolean, consoleOut: OutputStream, -) : PageGenerator(docsiteInfo, scope, consoleOut) where S : PageScope { +) : PageGenerator(docsiteInfo, scope, isSinglePackageSite, consoleOut) where S : PageScope { protected fun HtmlBlockTag.renderProperties() { if (!clazz.hasListedProperty) return diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/ModulePageGenerator.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/ModulePageGenerator.kt index 435ed32e..f1b32447 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/ModulePageGenerator.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/ModulePageGenerator.kt @@ -24,6 +24,7 @@ internal class ModulePageGenerator( docModule: DocModule, pageScope: ModuleScope, isTestMode: Boolean, + isSinglePackageSite: Boolean, consoleOut: OutputStream, ) : ModuleOrClassPageGenerator( @@ -31,6 +32,7 @@ internal class ModulePageGenerator( docModule.schema.moduleClass, pageScope, isTestMode, + isSinglePackageSite, consoleOut, ) { private val module = docModule.schema diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/PackagePageGenerator.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/PackagePageGenerator.kt index 8acbcaef..5b66c5f9 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/PackagePageGenerator.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/PackagePageGenerator.kt @@ -22,8 +22,15 @@ internal class PackagePageGenerator( docsiteInfo: DocsiteInfo, private val docPackage: DocPackage, pageScope: PackageScope, + isSinglePackageSite: Boolean, consoleOut: OutputStream, -) : MainOrPackagePageGenerator(docsiteInfo, pageScope, consoleOut) { +) : + MainOrPackagePageGenerator( + docsiteInfo, + pageScope, + isSinglePackageSite, + consoleOut, + ) { override val html: HTML.() -> Unit = { renderHtmlHead() diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/PageGenerator.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/PageGenerator.kt index fee8d4c1..1e632eec 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/PageGenerator.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/PageGenerator.kt @@ -32,6 +32,7 @@ import org.pkl.core.util.IoUtils internal abstract class PageGenerator( protected val docsiteInfo: DocsiteInfo, protected val pageScope: S, + private val isSinglePackageSite: Boolean, consoleOut: OutputStream, ) : AbstractGenerator(consoleOut) where S : PageScope { companion object { @@ -203,13 +204,6 @@ internal abstract class PageGenerator( } protected fun HtmlBlockTag.renderParentLinks() { - a { - classes = setOf("declaration-parent-link") - href = pageScope.relativeSiteUrl.toString() - - +(docsiteInfo.title ?: "Pkldoc") - } - val packageScope = when (pageScope) { is ClassScope -> pageScope.parent!!.parent @@ -217,33 +211,33 @@ internal abstract class PageGenerator( else -> null } - if (packageScope != null) { - +" > " - - a { - classes = setOf("declaration-parent-link") - href = packageScope.urlRelativeTo(pageScope).toString() - - +packageScope.name - } - } - val moduleScope = when (pageScope) { is ClassScope -> pageScope.parent else -> null } - if (moduleScope != null) { - +" > " + var isFirst = true + fun renderLink(text: String, url: String) { + if (isFirst) isFirst = false else +" > " a { classes = setOf("declaration-parent-link") - href = moduleScope.urlRelativeTo(pageScope).toString() + href = url - +moduleScope.name + +text } } + + if (!isSinglePackageSite) { + renderLink(docsiteInfo.title ?: "Pkldoc", pageScope.relativeSiteUrl.toString()) + } + if (packageScope != null) { + renderLink(packageScope.name, packageScope.urlRelativeTo(pageScope).toString()) + } + if (moduleScope != null) { + renderLink(moduleScope.name, moduleScope.urlRelativeTo(pageScope).toString()) + } } protected fun HtmlBlockTag.renderClassExtendsClause(clazz: PClass, currScope: DocScope) { diff --git a/pkl-doc/src/test/files/SinglePackageTest/input/com.package1-4.5.6/doc-package-info.pkl b/pkl-doc/src/test/files/SinglePackageTest/input/com.package1-4.5.6/doc-package-info.pkl new file mode 100644 index 00000000..2dd7f852 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/input/com.package1-4.5.6/doc-package-info.pkl @@ -0,0 +1,22 @@ +/// Additional version fixture for single-package site tests. +amends "pkl:DocPackageInfo" + +name = "com.package1" +version = "4.5.6" +importUri = "https://example.com/" +authors { + "package1-publisher@example.com" +} +sourceCode = "https://example.com/package1/" +sourceCodeUrlScheme = "https://example.com/package1%{path}#L%{line}-L%{endLine}" +issueTracker = "https://issues.example.com/package1/" +dependencies { + new { + name = "pkl" + // use fixed version to avoid churn in expected test outputs + version = "0.24.0" + sourceCode = "https://github.com/apple/pkl/blob/dev/stdlib/" + sourceCodeUrlScheme = "https://github.com/apple/pkl/blob/0.24.0/stdlib%{path}#L%{line}-L%{endLine}" + documentation = "https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/" + } +} diff --git a/pkl-doc/src/test/files/SinglePackageTest/input/com.package1-4.5.6/minimal.pkl b/pkl-doc/src/test/files/SinglePackageTest/input/com.package1-4.5.6/minimal.pkl new file mode 100644 index 00000000..ca56484b --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/input/com.package1-4.5.6/minimal.pkl @@ -0,0 +1,11 @@ +/// Additional version module fixture. +module com.package1.minimal + +/// Additional version class fixture. +class Person { + /// The person's name. + name: String +} + +/// A module-level property. +greeting: String diff --git a/pkl-doc/src/test/files/SinglePackageTest/input/com.package1/doc-package-info.pkl b/pkl-doc/src/test/files/SinglePackageTest/input/com.package1/doc-package-info.pkl new file mode 100644 index 00000000..1536ed51 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/input/com.package1/doc-package-info.pkl @@ -0,0 +1,22 @@ +/// Minimal package fixture for single-package site tests. +amends "pkl:DocPackageInfo" + +name = "com.package1" +version = "1.2.3" +importUri = "https://example.com/" +authors { + "package1-publisher@example.com" +} +sourceCode = "https://example.com/package1/" +sourceCodeUrlScheme = "https://example.com/package1%{path}#L%{line}-L%{endLine}" +issueTracker = "https://issues.example.com/package1/" +dependencies { + new { + name = "pkl" + // use fixed version to avoid churn in expected test outputs + version = "0.24.0" + sourceCode = "https://github.com/apple/pkl/blob/dev/stdlib/" + sourceCodeUrlScheme = "https://github.com/apple/pkl/blob/0.24.0/stdlib%{path}#L%{line}-L%{endLine}" + documentation = "https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/" + } +} diff --git a/pkl-doc/src/test/files/SinglePackageTest/input/com.package1/minimal.pkl b/pkl-doc/src/test/files/SinglePackageTest/input/com.package1/minimal.pkl new file mode 100644 index 00000000..321e8cb8 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/input/com.package1/minimal.pkl @@ -0,0 +1,11 @@ +/// Minimal module fixture. +module com.package1.minimal + +/// Minimal class fixture. +class Person { + /// The person's name. + name: String +} + +/// A module-level property. +greeting: String diff --git a/pkl-doc/src/test/files/SinglePackageTest/input/docsite-info.pkl b/pkl-doc/src/test/files/SinglePackageTest/input/docsite-info.pkl new file mode 100644 index 00000000..8fe8ab44 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/input/docsite-info.pkl @@ -0,0 +1,3 @@ +amends "pkl:DocsiteInfo" + +title = "Single Package Docs" diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/.pkldoc/VERSION b/pkl-doc/src/test/files/SinglePackageTest/output/.pkldoc/VERSION new file mode 100644 index 00000000..d8263ee9 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/.pkldoc/VERSION @@ -0,0 +1 @@ +2 \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/index.html b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/index.html new file mode 100644 index 00000000..5457466d --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/index.html @@ -0,0 +1,71 @@ + + + + + com.package1 (1.2.3) • Single Package Docs + + + + + + + + + + +
+ + +
+
+

com.package11.2.3

+ +
+
+
package com.package1
+

Minimal package fixture for single-package site tests.

+
+
Authors:
+
package1-publisher@example.com
+
Version:
+
1.2.3
+
Source code:
+
https://example.com/package1/
+
Issue tracker:
+
https://issues.example.com/package1/
+ + + + +
+
+
+
+

Modules

+ +
+
+ + diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/minimal/Person.html b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/minimal/Person.html new file mode 100644 index 00000000..ee584b3c --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/minimal/Person.html @@ -0,0 +1,178 @@ + + + + + Person (com.package1/minimal:1.2.3) • Single Package Docs + + + + + + + + + + +
+ + +
+
com.package1 > com.package1.minimal +

Person1.2.3

+ +
+
+
class Person
+

Minimal class fixture.

+
+ + + + + + +
+
+
+
+

Properties

+ +
+
+
+

Methods(show inherited)

+
    +
  • +
    + +
  • +
  • +
    + +
  • +
  • +
    +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    + +
  • +
  • +
    + +
  • +
+
+
+ + diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/minimal/index.html b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/minimal/index.html new file mode 100644 index 00000000..ac7c7b51 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/minimal/index.html @@ -0,0 +1,238 @@ + + + + + minimal (com.package1:1.2.3) • Single Package Docs + + + + + + + + + + +
+ + +
+
com.package1 +

com.package1.minimal1.2.3

+ +
+
+
module com.package1.minimal
+

Minimal module fixture.

+
+
Module URI:
+
https://example.com/minimal.pklcontent_copy
+
Source code:
+
minimal.pkl
+ + + + + + +
+
+
+
+

Properties(show inherited)

+
    +
  • +
    + +
  • +
  • +
    +
    link +
    +
    +
    +
    +
    greeting: StringSource
    +

    A module-level property.

    +
    +
    +
  • +
+
+
+
+

Methods(show inherited)

+
    +
  • +
    + +
  • +
  • +
    + +
  • +
  • +
    +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    + +
  • +
  • +
    + +
  • +
  • +
    +
    + +
  • +
+
+
+
+

Classes

+ +
+
+ + diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/package-data.json b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/package-data.json new file mode 100644 index 00000000..d9854e31 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/package-data.json @@ -0,0 +1 @@ +{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3"},"summary":"Minimal package fixture for single-package site tests.","sourceCode":"https://example.com/package1/","sourceCodeUrlScheme":"https://example.com/package1%{path}#L%{line}-L%{endLine}","dependencies":[{"ref":{"pkg":"pkl","pkgUri":null,"version":"0.24.0"}}],"modules":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"minimal"},"summary":"Minimal module fixture.","moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"minimal","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"1.2.3","module":"minimal","type":"Person"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}]}]} \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/search-index.js b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/search-index.js new file mode 100644 index 00000000..4856635a --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/1.2.3/search-index.js @@ -0,0 +1 @@ +searchData='[{"name":"com.package1.minimal","kind":1,"url":"minimal/index.html"},{"name":"greeting","kind":5,"url":"minimal/index.html#greeting","sig":": String","parId":0},{"name":"Person","kind":3,"url":"minimal/Person.html","parId":0},{"name":"name","kind":5,"url":"minimal/Person.html#name","sig":": String","parId":2}]'; diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/index.html b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/index.html new file mode 100644 index 00000000..fc42609d --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/index.html @@ -0,0 +1,71 @@ + + + + + com.package1 (4.5.6) • Single Package Docs + + + + + + + + + + +
+ + +
+
+

com.package14.5.6

+ +
+
+
package com.package1
+

Additional version fixture for single-package site tests.

+
+
Authors:
+
package1-publisher@example.com
+
Version:
+
4.5.6
+
Source code:
+
https://example.com/package1/
+
Issue tracker:
+
https://issues.example.com/package1/
+ + + + +
+
+
+
+

Modules

+ +
+
+ + diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/minimal/Person.html b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/minimal/Person.html new file mode 100644 index 00000000..5b6fca05 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/minimal/Person.html @@ -0,0 +1,178 @@ + + + + + Person (com.package1/minimal:4.5.6) • Single Package Docs + + + + + + + + + + +
+ + +
+
com.package1 > com.package1.minimal +

Person4.5.6

+ +
+
+
class Person
+

Additional version class fixture.

+
+ + + + + + +
+
+
+
+

Properties

+ +
+
+
+

Methods(show inherited)

+
    +
  • +
    + +
  • +
  • +
    + +
  • +
  • +
    +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    + +
  • +
  • +
    + +
  • +
+
+
+ + diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/minimal/index.html b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/minimal/index.html new file mode 100644 index 00000000..c15feb97 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/minimal/index.html @@ -0,0 +1,238 @@ + + + + + minimal (com.package1:4.5.6) • Single Package Docs + + + + + + + + + + +
+ + +
+
com.package1 +

com.package1.minimal4.5.6

+ +
+
+
module com.package1.minimal
+

Additional version module fixture.

+
+
Module URI:
+
https://example.com/minimal.pklcontent_copy
+
Source code:
+
minimal.pkl
+ + + + + + +
+
+
+
+

Properties(show inherited)

+
    +
  • +
    + +
  • +
  • +
    +
    link +
    +
    +
    +
    +
    greeting: StringSource
    +

    A module-level property.

    +
    +
    +
  • +
+
+
+
+

Methods(show inherited)

+
    +
  • +
    + +
  • +
  • +
    + +
  • +
  • +
    +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    + +
  • +
  • +
    + +
  • +
  • +
    +
    + +
  • +
+
+
+
+

Classes

+
    +
  • +
    + +
  • +
+
+
+ + diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/package-data.json b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/package-data.json new file mode 100644 index 00000000..a20bb208 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/package-data.json @@ -0,0 +1 @@ +{"ref":{"pkg":"com.package1","pkgUri":null,"version":"4.5.6"},"summary":"Additional version fixture for single-package site tests.","sourceCode":"https://example.com/package1/","sourceCodeUrlScheme":"https://example.com/package1%{path}#L%{line}-L%{endLine}","dependencies":[{"ref":{"pkg":"pkl","pkgUri":null,"version":"0.24.0"}}],"modules":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"4.5.6","module":"minimal"},"summary":"Additional version module fixture.","moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"4.5.6","module":"minimal","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"4.5.6","module":"minimal","type":"Person"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}]}]} \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/search-index.js b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/search-index.js new file mode 100644 index 00000000..4856635a --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/4.5.6/search-index.js @@ -0,0 +1 @@ +searchData='[{"name":"com.package1.minimal","kind":1,"url":"minimal/index.html"},{"name":"greeting","kind":5,"url":"minimal/index.html#greeting","sig":": String","parId":0},{"name":"Person","kind":3,"url":"minimal/Person.html","parId":0},{"name":"name","kind":5,"url":"minimal/Person.html#name","sig":": String","parId":2}]'; diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/index.html b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/index.html new file mode 100644 index 00000000..fc42609d --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/index.html @@ -0,0 +1,71 @@ + + + + + com.package1 (4.5.6) • Single Package Docs + + + + + + + + + + +
+ + +
+
+

com.package14.5.6

+ +
+
+
package com.package1
+

Additional version fixture for single-package site tests.

+
+
Authors:
+
package1-publisher@example.com
+
Version:
+
4.5.6
+
Source code:
+
https://example.com/package1/
+
Issue tracker:
+
https://issues.example.com/package1/
+ + + + +
+
+
+
+

Modules

+ +
+
+ + diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/minimal/Person.html b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/minimal/Person.html new file mode 100644 index 00000000..5b6fca05 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/minimal/Person.html @@ -0,0 +1,178 @@ + + + + + Person (com.package1/minimal:4.5.6) • Single Package Docs + + + + + + + + + + +
+ + +
+
com.package1 > com.package1.minimal +

Person4.5.6

+ +
+
+
class Person
+

Additional version class fixture.

+
+ + + + + + +
+
+
+
+

Properties

+ +
+
+
+

Methods(show inherited)

+
    +
  • +
    + +
  • +
  • +
    + +
  • +
  • +
    +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    + +
  • +
  • +
    + +
  • +
+
+
+ + diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/minimal/index.html b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/minimal/index.html new file mode 100644 index 00000000..c15feb97 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/minimal/index.html @@ -0,0 +1,238 @@ + + + + + minimal (com.package1:4.5.6) • Single Package Docs + + + + + + + + + + +
+ + +
+
com.package1 +

com.package1.minimal4.5.6

+ +
+
+
module com.package1.minimal
+

Additional version module fixture.

+
+
Module URI:
+
https://example.com/minimal.pklcontent_copy
+
Source code:
+
minimal.pkl
+ + + + + + +
+
+
+
+

Properties(show inherited)

+
    +
  • +
    + +
  • +
  • +
    +
    link +
    +
    +
    +
    +
    greeting: StringSource
    +

    A module-level property.

    +
    +
    +
  • +
+
+
+
+

Methods(show inherited)

+
    +
  • +
    + +
  • +
  • +
    + +
  • +
  • +
    +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    +
    + +
  • +
  • +
    + +
  • +
  • +
    + +
  • +
  • +
    +
    + +
  • +
+
+
+
+

Classes

+
    +
  • +
    + +
  • +
+
+
+ + diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/package-data.json b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/package-data.json new file mode 100644 index 00000000..a20bb208 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/package-data.json @@ -0,0 +1 @@ +{"ref":{"pkg":"com.package1","pkgUri":null,"version":"4.5.6"},"summary":"Additional version fixture for single-package site tests.","sourceCode":"https://example.com/package1/","sourceCodeUrlScheme":"https://example.com/package1%{path}#L%{line}-L%{endLine}","dependencies":[{"ref":{"pkg":"pkl","pkgUri":null,"version":"0.24.0"}}],"modules":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"4.5.6","module":"minimal"},"summary":"Additional version module fixture.","moduleClass":{"ref":{"pkg":"com.package1","pkgUri":null,"version":"4.5.6","module":"minimal","type":"ModuleClass"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Module"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]},"classes":[{"ref":{"pkg":"com.package1","pkgUri":null,"version":"4.5.6","module":"minimal","type":"Person"},"superclasses":[{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Typed"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Object"},{"pkg":"pkl","pkgUri":null,"version":"0.24.0","module":"base","type":"Any"}]}]}]} \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/search-index.js b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/search-index.js new file mode 100644 index 00000000..4856635a --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/com.package1/current/search-index.js @@ -0,0 +1 @@ +searchData='[{"name":"com.package1.minimal","kind":1,"url":"minimal/index.html"},{"name":"greeting","kind":5,"url":"minimal/index.html#greeting","sig":": String","parId":0},{"name":"Person","kind":3,"url":"minimal/Person.html","parId":0},{"name":"name","kind":5,"url":"minimal/Person.html#name","sig":": String","parId":2}]'; diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/1.2.3/index.json b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/1.2.3/index.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/1.2.3/index.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/1.2.3/minimal/Person.json b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/1.2.3/minimal/Person.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/1.2.3/minimal/Person.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/1.2.3/minimal/index.json b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/1.2.3/minimal/index.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/1.2.3/minimal/index.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/4.5.6/index.json b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/4.5.6/index.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/4.5.6/index.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/4.5.6/minimal/Person.json b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/4.5.6/minimal/Person.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/4.5.6/minimal/Person.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/4.5.6/minimal/index.json b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/4.5.6/minimal/index.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/4.5.6/minimal/index.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/_/index.json b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/_/index.json new file mode 100644 index 00000000..e86d59cc --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/_/index.json @@ -0,0 +1,12 @@ +{ + "knownVersions": [ + { + "text": "4.5.6", + "href": "../4.5.6/index.html" + }, + { + "text": "1.2.3", + "href": "../1.2.3/index.html" + } + ] +} \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/_/minimal/Person.json b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/_/minimal/Person.json new file mode 100644 index 00000000..bdd6b8a2 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/_/minimal/Person.json @@ -0,0 +1,12 @@ +{ + "knownVersions": [ + { + "text": "4.5.6", + "href": "../../4.5.6/minimal/Person.html" + }, + { + "text": "1.2.3", + "href": "../../1.2.3/minimal/Person.html" + } + ] +} \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/_/minimal/index.json b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/_/minimal/index.json new file mode 100644 index 00000000..66f104cc --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/data/com.package1/_/minimal/index.json @@ -0,0 +1,12 @@ +{ + "knownVersions": [ + { + "text": "4.5.6", + "href": "../../4.5.6/minimal/index.html" + }, + { + "text": "1.2.3", + "href": "../../1.2.3/minimal/index.html" + } + ] +} \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/fonts/MaterialIcons-Regular.woff2 b/pkl-doc/src/test/files/SinglePackageTest/output/fonts/MaterialIcons-Regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9fa211252080046a23b2449dbdced6abc2b0bb34 GIT binary patch literal 44300 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 QW8}wPUeo^@jR61v08@RD2LJ#7 literal 0 HcmV?d00001 diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/fonts/lato-v14-latin_latin-ext-700.woff2 b/pkl-doc/src/test/files/SinglePackageTest/output/fonts/lato-v14-latin_latin-ext-700.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e344f0e8b141d82cc100072b8f7e7139c566fc1c GIT binary patch literal 24488 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 ZNo9AZt?|)K{haI}>{+}NZf)b}E&z{ku%7?` literal 0 HcmV?d00001 diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/fonts/lato-v14-latin_latin-ext-regular.woff2 b/pkl-doc/src/test/files/SinglePackageTest/output/fonts/lato-v14-latin_latin-ext-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b41315e5ed0643102e999f1e09df2a4c73c85337 GIT binary patch literal 24904 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 literal 0 HcmV?d00001 diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/fonts/open-sans-v15-latin_latin-ext-italic.woff2 b/pkl-doc/src/test/files/SinglePackageTest/output/fonts/open-sans-v15-latin_latin-ext-italic.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3ca0fa8c4fb3c70c7f96f07353f5a42148cb3466 GIT binary patch literal 18072 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

{?tTd2&|w)o67E&UbY|>{q%})?$5+uB9N3V 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 z®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

Ocp=9V;?N4D(y5!tcr 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 P#kVB&gm9T7X(j*w%5Ole literal 0 HcmV?d00001 diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/images/apple-touch-icon.png b/pkl-doc/src/test/files/SinglePackageTest/output/images/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..fb060005422720459916cacdf8b22823ce14919a GIT binary patch literal 10782 zcmV+(D&f_MP)yGj-?Qo7@>q;z(Bmew>(?I8n)B5|$l$bd7lONgtGkU<)YO#j9@%uwE?*#5U7#P zR7$rA;ID$|HZb22Y~1pO)pi-pnn!OdjYs8wCXxS8e&*(Ffj~gD+NNCbi4b&su=Y9v zz6#)r04gu|RvW3}^-ZfcwOC}D;oSXLjnf?#HxY2t*)JU-(668hzq*|MoyoXt1-){^ ze48YftPntJ7(744qx)=e<;I8BZ0pIHaV8N61cdgASAPr8iebL3g0YPRtSxW5>Cczz zs(slBdgX>XpIzp=8TbbPb<1o~hIa>mDHRchf#dI7E!KwpjR) zpMU3#NDfTP8JCTq>w`6;h=m`4=$imMx(6UU8m!;)_r_b68ycEx8^CDN`PykP)~Z5m z-Mac6-KH3pV+vl--~9JQMXs2m9!x(1P@K(J1pJ_>VavZ7WLnNx)m(Rn!2ApVDZ?T9 z2=p^sY~WuCeZ?+VL9g6!r`x6stOg4|0N8KPunfkRgN<9BG-y22XSC}>l;aNdeR;|5n+X>U=Fqnc6^vVtMZ8pXC9WVs|ICC;7W3MftEXqfB-rbMY zI6YzUB>;5laBP0Q#A!2SC3-7$8u;3~rNT z`;oQxy%4%^lDi+PaU#Nh0+V?cCpsX3_gHO%779nus`>#aKkk7TxTCV8>zT%2U7re` zL_l>M7zGU8R523>4Cb>pSNyTv=l;Yz7&syTP{lYJg0*Krd=N|r2z-zubUhf0a{X^h zhB~rB8w(Tm=7*fm!uT|Ujl62D0#g-$MGQio?N(V-90jpL7t9`7mITZ9(4SZchlg&7 z@|A)S^dt9d?uGT9j!z~9vfTg*NYG~)S*0z2KqG=S1+wr8{F97|-Bz2Rm4Xs9Gc3IV z|D+<=MpkH(P)Ani+%r&mdeI@PjnGO#3Hq$3BflJ4mp!zn5CZ$pQBZ;&@pR-Kf?6=! z4WNK7RxV&KfU#B^kqW2H3769ihs^=II;lxX7u*=pd-|d zj@~wOhC0yE(}t6sCm_oSldRWF2+$swz%*pF+#2gE-uJ5J%6nKvi>FE<;e&g1GWNN5Kht(9@AS zNjq!~%$RgFuAV#(<0~dY5OR0y5Cj2Z%En?$*;p)^bqivN7!IEJ5bqs&7l&K-LuJ#? z$H#+>TRP32#7GKG(6S_aV3V0)qN<4q<0~fO>M8Rud(vFkY<9Dz(uKq3z|2W=Fmuuz z^hNrx_sDL%ckr(`-F3>8`KSPL2#1na0c=`n2-co}2?s+-lrV4Vb+~cXP4Ib*sxD?e z$J&ly`+Hk)sP%xc12cXSY~1oAV+S>tf?J^jPcOH(w|Dj#`MW5J66Q>~1~<>CMX@`p zdXJVcp|ToZS^7VJ*Y!D#DEF*_b~5O7!-3qr0ywtMQ1b|BeM;|MRwO+Y06~ zt6;VqD>vNfw#ngV02t!38&ftGpSt0*7*m$lF72#1aQs6&_trBA4fJL_27!Kirow+$ zp;RL+2tj}Mfn}bEOZhVhOR^oyX?Nk4xpi1@smAPNrHBqv1C34zS{u#6_6*!J#b{Pn}vGxv%Ro~&q7?g|99 z<>~Fu$K<`BS3i7vu_DG_B;fjN$GT#|41D_f&%)#KX7s+I#u1J6AR6mIT<%9gjzCeO z*_s6a5J-Y3IpL7pu-S^?uouB$D}o@{3>p7q`!W1+`$ly2b!0XG(XZRe{oly z&T@!Z2s|do@a${9#|K9;KI{D=*s$flXKX+Y$m>JltmRYI0{BukV-&lK@x|J&W6qRo zG>bVF??b5XC^~xfqA%Qvc%l!AYRwfivy6m1fN-=Oz5T}!iFH6xVh}|;L_wc_ToNSA zsGf}?cQFpO9suj#g3P<_jw!KS&mZ2Q_r+Y1w<~mguJZh3?Q{#NwHI1FS?8Y$)=Kh0i+?f}s6s zp|`&qzj^5w=nU!JS4RYaYx1#eN8Sl~^}4!ws>-h;i{j>Urd)$NZ~T1PxC>c{p|fWn z!qI{XS4fIL5`0AyQR1DTdBq-x^y7)mkKuHe?lALKMc@VNS8YA1+fWn9D?xwvfn}bE zTmCCR8CQy5H0u^DnSWc_D7bL66YX6eKxJ#gGtIyzxl!St0f${%3BI@-!&6&-jh0io zGp%;CRg~7`ljkF^4u$hRQ@tLbj4w`>%v*+w=<0;c}Lz_3#LSh$|+}z~R;d=#S_+6yI|Fos(YN`CLn0Y(4TK zr?5V_Y&e;w`;oqixZXj|7U7>>Vq|z-BuY)UI>~XKL$c+Cht~PO~T(UUXgYMlH~~6d-i2yU!l_ExVNK7v zogRE;={GdHItSsYL_%J)l(t;Z4NY|`0IJR8-EveXuT9t>%(qsi0SGxYG^djDE94QNrhL{t}#aSK4Re ziN4FmHJ2&Oj7}YAhjEn?P&fa->6wBE{BMCkz*0?FI=L+o`9}Z~GkJH}b$4J?skT<% zePL_b9OfI*SU2K{e$CG>oUsVg$Is9+#Wfw3uYO&(VFqHEpzmA1bQ*~7&*a@{0eB=|pI$uaQ(ysYg0^x6N{2YpOWbrW5Pjc0RW;n7+!Mgjg8mB8Fy8x$O64)uL zs!LF%5>;TQ2-U5!P$CeV4Al*ld_?SICJzJ@D~d7~Al)e<#hwy;X7LKm-{IGr9@QGmRAp26e*pM?CiZ1ZQdKlG)&3ZSX$+JQ;KtxpbO`}2 z1~~z?B#ZQmwRdCsIPHCORF-kH^%e6BDli;&AI4N%tNXp@-h2jcfAp5t#}zP65^;z@ zApjwOLtyHGfL^E+0yxCPAwUQbQ?Dw>J;dCr3ieRc84vyP8{0ApG#^&b-+rjJO19x7 z^626P0H%+hfiEt(OV>NhDvq?iY?4KVhtuK5=<;iHzZZ!|5d6bW5su|3CY%umAp{^q zpl${a{$db?h|ybK;s1xgijDE1uMNB9NZ5Ee!K9p^3=u^M%dY#B?)QiUh@#W5%#uP! z5;KeWa@k$Db>31u_vSMOTa*NX9Y8sN@{2OqdGK!?9i7hucwy*k!yXC=wA>skGiTAP zTlC&woyTb_ywU__;jm}^e{s$91sGGF(?+^UVbJG>`}!q(qELlU#AJu%$qVl zt1(Cr2ZP=};gl3jHe{Sdvug|)CtHMJwjCDH8+l_@Y7H73OpQG429yZZ! zfJKFg*F6djdyyeyO{|)P36<4`jFk-x{`AnVT_otZ-MtuDq&^vq!{*R+BbW*z5#|0X zk!MLdIYAN~C@Yzs{y`nwm>;Wj^}XwAsxSP)kS#}MQEz53|B8j0f{(P~bok*fHs)iu zP#_XeQ926(8GDA9Hf}nq{G$vVGZQ2hZoTmD7YUjOb-6VsHFKxwztKuZNl`Vtu1dql z%~#4xu7cB^J`GDR1j5{@*_~|+fvM)gzn&L#LsM-TgXiVkpd^f~n1J$PbKGqe{+Vz& z%S{o=1i!XXvGVK0W;SvI(e4fDen1v{!ruSS3PG&+0s=Y5&5!3&cslOAqWP9Pj^ zM_=SLqOl$zO(P*yO&}cYKsefguFwJaizcJkI}YhCqpC+)?c1k{`e4nd=7w#jB>)gW zSLI7rn29?6b9(!aqPwppZFvG#6-47bh{k)++kXrKNpQO=P~;wcwp7-|KQOO*6r2t} zx_S>_AaW*?e}?IJJ!4Sjn>Oq!8c*~iG;jj_;ZtB%Ga6r2WpwuLMz`f-21cFeqpys)qSpNi|VDO3QYG(cZlm{TXI+t1P2GdS$f=OZL6sNO#ucFBXXlId_dF0IQGi}#{CbQqCXcHOTo zBpmI)neO*dRXR86!I_9Kp{g1m9n)5!$qbnI3IHz-{sfsPS!T%)CRA0YeWt7TV8&t| ziY!Ob)q4;OW8w2oxG2QZ>F{H0nA4&B%!3Z8pWOomk2AC z2%#s`f^am${wZmQM7z+_-vWP%XuXM5lPnfAjR(%9U=gYf=+l@rq9DRwl)56=;I`qo z;d863Ak=>heFG;@>=_4N(ZusDABYIWo^kNHMl4jFcAQ+dkjj7CtniF ztSB*bhYq7JdX?jOGJjGlwM88B#2(5spk`@yiRFvx|JritB%#rqJA z_vFMDm1T7IwICEeg;L+NivpSi!3KZPB>24J(bsN6w(MWcsiNQJ=RIq9{R8tZ8K^oUOnmtgGMAEf6gQ@V+IMTtK?t@^Ccw z9tTB0K|8csEYA?HnviJH!=6B*5z)g>jV&F{*4HT+UKxPb46?on;tZF(0EV<`3&rj>khd z*|rnC{l_dn>O^A6KOxI3+D8*`iilQW?@ampXUEyLx9h+Az_MRQ-Rk!k`~&1Td!^Wu z{MwdTMO@Zb#>!}zRdn~Ypg+ihie{HCF#dt{wi{mx8$%TkEM{6NZ$NV6Y>B~cl;H;qKSj9tYK~) zCDDmu?|2kv7*U`oQM7gKK{U@=%_S1a3--9}Im_9U!T1G}@=wi;+b;6oCcUg*d*8Mb z0KQfqtX)gM&j6TS%sRE8V`fjU3kJ~BcNF1hCo23iFY!cVLpa)r_U;d$TGYKZ6)Gp7 zvOMg;(B(8=&o-H+@aE2VDbgYkvctx;&^9{i?Vg_`kTm@Eaj5jrG`8P180C*UHq06S#f#TWHA8EsxuJ?3{ zT2bR@ZF}3$7z|TM5>_hdXv?gD4g&74Xjf)6)os({3VvjQkRoeD$gg6kNr^~u0bHHUcyT$Nv<`ESU36ybT^H+6fwoNBGb4Q1~w~#I4{_^<(_QB3}m@NUq~PjPysx?`r+H3 zQH8{hK>P!}W5nd-@eq>e0FemJQ7}%nC~6#`{^KYqs!sY$SLi_Q3^E9tl)NElJfYjo z_&TZT_k*inel07bF2K-TJOG^C_x!LSSi1^88B1OtUt)9FOqu2vfGR)2b)X6vEh3p7HVhPR1t-t z0nMSkrX3v2Ed8Zh(4C>wDMT(4iVm91aNCN661FUrD;oq7;YhKEPWSUW4;7-IGuU!; z^``z0aoByJ6tySv5qTK@aw1WfjX<5w(xkON7>urvwu>QVGHt(=XDf8--vJ^4jsojw zr6{pWq6C#Z3$)UT+mSq8Jv0zPT-N&UQcY{VZknJ8d{FN@oqe5YLqrGbXcP_%KvggP zLFan`n`ERaLENQvy8(bnEW9lT5kAoSjw~n8o91BQa%R@6&`J_RnttYESZF%zHgC!f zS{-RVT`xot6S}pb71IRm=$AeKpgZ*JMEkLn-*?)5S+^$3HAA-;W@d_;MY?PJ<7bX& z9qPm*_iQt#fCx+!^n>5qGyp=2-uI52K9uGOg4MJ)RHd+1Xd*(9XLQPE zj-Ao=qbA@zBWy~Bxh@07uvrDEICAQ6+Go6lCg>q9x=c&gT7}zLdA{h*aCC+`5DIGx zj8j4XWt3gRVXmNwck6wntFJSygWh2;E~r~WWyqd6pOY1aqsTKR<@b-AO82SyF~sJU z%P>{Y%#=~k$x#g-UxlqYKWn!f`0IO zn+6!zsrS8)j_*zDq!&de+zx9C1SVyOD}89lE9-auSb`+E(jEp6o!pObOk1`M11}n3 zS1NLFkIY;2zLAg<`0!|YS7lLAZaO{bX2^n8XnW>!lz1nmY;yqs?;qBF#v`Up+1iwj z90*#_EocDP-ID%4%4PQ(S`Wi4hOW?*-$~s723KdVJN02OmWbiN3C+D#luQ;ky_ha& zS?YcZfbK~4!>tE3xq^y4dDH7CDVMI$`M>us@m8ljqwG7n8wpvfPo4gHHo4kVOc(Sc z_q?4T;E#IWV`l8p@Nrh;9+melJRU0GJlC_sUIcF%R~-PnfAAg6V=~kivav}kxrxP8 z=|3`g?ajSAAg8N0OalBxdDBs2Sca~2l*c6*2tb+ds1G^teaECgrS9UgY0l>wBgLL^aM;sl25sNHP5Yq4udS

w5v1#l=`M-GQ8;sbaB-uDM^8IEAhH2;n5II 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 literal 0 HcmV?d00001 diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/images/favicon-16x16.png b/pkl-doc/src/test/files/SinglePackageTest/output/images/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..7ecded2fba2fd0bbf957b2a758f9c4a36e977042 GIT binary patch literal 780 zcmV+n1M~ceP)Mc{K~y-6b&^eJRA&^1pYz>&XU4hLn4qZ!HN+oG)rw?M4F;?j=|TD30J(V&RV#7Sl{nQ`X3-~GB6 zN22Iizwg6)&Uu9?(|=}bY;<(2C$e^{Sbj+LU3d$y^Z2G@ESx-TEyLQ&pE|MYwyt~J zsenv2*ClXV0ED5wf$l>#5=&UxVUbM;o87P}2Mm1{5Gm)O6Bz)K34iUp=GL`JDKfd& ziG!Zn6S%rJ^THtjk09!d~{es5Mo|HX1u`f*M^uV<(C7G>mKPDT$c!n zu@)<4jwm_zWA`@Sk56Ju1!JmM8{xXs0E_Q`&ETKMip6*NPVEKHPVD-lq=J(Bn^h)_ zaP6A~EB(cD+Ytn9%0xEA5~0IMu$IQ4iSIhP14KRW!qQ}Ks{62tuwC^yD;9PzHjyUo zHIPg+<2rGaa!Di_@sqR3=I+zp+Kv*b#YZ|7@QZ~z0F8ceH;nG)GvkK7KSfEDNVToKJO|kqMt!pbF;Ho$}tiDqw zwk*|m{)__X@4p-Z_eS1~5ch%)Us2*6dn z$rh?Q&y4A9+<0`Cdrxiy()R7G1*5mlKD${j(nvk_(^rq*oE*-~UcGb;^Bs?hE|bYC z&fXm2)#%Ft&;TG-89rPL=o{GZlZ58#%$$9gouzs}_9C>t@7oi>9+;Iir!viIy$Btt z-iyC}1o(7%QycaOc0YiK-F~$9;^60W>PrBSzkoE5#yEd}N%cR9JSS=XGmswu0000< KMNUMnLSTaK26>bK literal 0 HcmV?d00001 diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/images/favicon-32x32.png b/pkl-doc/src/test/files/SinglePackageTest/output/images/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..a5d588e4c20804101e12e2bbc001aaba6af9867f GIT binary patch literal 1802 zcmV+l2le=gP)%*;7g_#foiuJ+Fu%T5(~yE;#HE#$kmt9^^A zY`4(W)!EZ`zu2;naaVWSGRK-1K(-fD0m@T{_nbUd&VSFrjx{R5S%f-35q@j@;K0Fs zXZ}4OhFOS!Yn=nLzyTbD-|X%F^7>NWZ@tvspeFcJ0X(0a@^s)huPlhMkWqzRbdI{x zTK!|^q4qZrS&XUyz3Cgih_bxYS)lj92`IhuoY7K*PSC<33T22+XYtPmCSZ;8fn$T> z4;+`~haO>BV>8vUYFsx=Dm~8d*e6`M(Z}fcog#lxx%9vUJnT{n7BH^sv9aX|o>ulaG*mJOBjT-;2Ac^XV8lL{r zH>j_!V{Br8)YJ$;kSQkXMu~*$sHuDy$BAdPwd~lon@C6)8o5X&dk@vZvFLwOu+}G=8z(tAi0g!CY1)8@Vc^#FDiPY& zf4%PI3&)0R*&W#Xv-Y(?K!qbxqXaRl&Q?Kpxvs}ETc4$|ZV5Ms-zAevVvLKm0p+UB zaY6(^77!k8+>CKNUOWA3`aZr4qCb$p{S|1^nq0E0^UMT*?CS1V?ATz4GBaV*qfgS_ z`c(jiMlLdy87+HUMWP@^c(`#3#(0dU$2s)+56SttQcph=b{mYV{$~yZ5d!T_aT$OIey&P1p;Q$rX2wiaugMzYFsB zQUdXcI8#%jGvENZ+$6)JACSr2A24GiD8L^?A9C?ff^CQ|u% zP!+2wg&4-ltEQ{-)H{cF_k2M_w*&n%8HJ-*&1dL3;XGqN)iO0T%Fylih=$|TR?dB;#Q5Z3fnaf)i-3_3VjNPLNdRktVD;?lxv2VI`u3SIU<4pJ zF-pX%LBtRQX-Y-JA?r_)%}r9iGXzy760XInlAKHe43@qP%FXHb0j}Nr2r&-P$fCk_ z7K>_twOJI4G3Bn5{5RE=pW?>w09ikS!sSx0xdc@I0MLKy8mXyC;+0Khf)`wE0II;8 z2@60ZTuUSrr*9ySYa}0gK>}jTFhCIa{O$cSghMsNqKQI);!G7m#1!q26zau@OCsJv zGL_`wNADI0&wU#d5!lt;u~=1qJiUJJ$~kV1+@L<*f@3_a`nXOMBl)2d@?v;i1*#T7 zaGWqgz9JH}YjK*rIz?ms1{~wz z2WhP4FQZr_LD;Jz&s zE8U_@E<^9YC7PG4p|O4ysy>0u5R24PSF;ikLo`xHV6#Lci%7&<2zk{UJNE|X``#%H z2e5hL*Os3+|7QOn%z6=t(W|QEFPiaGl2?v*)4J+&Z24?E_3@S>yXVGOT(=HY<-;3& zoV@TBBgxxkV*!p0oT?ez*_O^j?MD!H&QdApDUeSCjR3|Nni`hV)X+>#WgO3O8Bb3z za&MRqKkj8bJw6?HNFfUpwUNS4x;jtppI#T0bz*Vd-rKkDtN?i&)n8bnhr4&5zOw(t zwsiZnU88^K+I$&Kq8t$$dcOW{IyIbdo)XdhsBBU=?z>|LW;@T>^JiY( zR0VK!$Jy~x+uomUt+pojJw(4#4q0G-Dl&Dn+_!rUe&w;ql=S`Rz@H}n(L%UBdMdtlOC@Tv-najz~zjEtW>j1M(ga7~l07*qoM6N<$g1D7+{Qv*} literal 0 HcmV?d00001 diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/images/favicon.svg b/pkl-doc/src/test/files/SinglePackageTest/output/images/favicon.svg new file mode 100644 index 00000000..441aec22 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/images/favicon.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/index.html b/pkl-doc/src/test/files/SinglePackageTest/output/index.html new file mode 100644 index 00000000..d543c5bd --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/index.html @@ -0,0 +1,13 @@ + + + + + Single Package Docs + + + +

+ + diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/scripts/pkldoc.js b/pkl-doc/src/test/files/SinglePackageTest/output/scripts/pkldoc.js new file mode 100644 index 00000000..5fb89175 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/scripts/pkldoc.js @@ -0,0 +1,737 @@ +// noinspection DuplicatedCode + +'use strict'; + +// Whether the current browser is WebKit. +let isWebKitBrowser; + +// The lazily initialized worker for running searches, if any. +let searchWorker = null; + +// Tells whether non-worker search is ready for use. +// Only relevant if we determined that we can't use a worker. +let nonWorkerSearchInitialized = false; + +// The search div containing search input and search results. +let searchElement; + +// The search input element. +let searchInput; + +// The package name associated with the current page, if any. +let packageName; + +let packageVersion; + +// The module name associated with the current page, if any. +let moduleName; + +// The class name associated with the current page, if any. +let className; + +// Prefix to turn a site-relative URL into a page-relative URL. +// One of "", "../", "../../", etc. +let rootUrlPrefix; + +// Prefix to turn a package-relative URL into a page-relative URL. +// One of "", "../", "../../", etc. +let packageUrlPrefix; + +// The search result currently selected in the search results list. +let selectedSearchResult = null; + +// Initializes the UI. +// Wrapped in a function to avoid execution in tests. +// noinspection JSUnusedGlobalSymbols +function onLoad() { + isWebKitBrowser = navigator.userAgent.indexOf('AppleWebKit') !== -1; + searchElement = document.getElementById('search'); + searchInput = document.getElementById('search-input'); + packageName = searchInput.dataset.packageName || null; + packageVersion = searchInput.dataset.packageVersion || null; + moduleName = searchInput.dataset.moduleName || null; + className = searchInput.dataset.className || null; + rootUrlPrefix = searchInput.dataset.rootUrlPrefix; + packageUrlPrefix = searchInput.dataset.packageUrlPrefix; + + initExpandTargetMemberDocs(); + initNavigateToMemberPage(); + initToggleMemberDocs(); + initToggleInheritedMembers(); + initCopyModuleUriToClipboard(); + initSearchUi(); +} + +// If page URL contains a fragment, expand the target member's docs. +// Handled in JS rather than CSS so that target member can still be manually collapsed. +function initExpandTargetMemberDocs() { + const expandTargetDocs = () => { + const hash = window.location.hash; + if (hash.length === 0) return; + + const target = document.getElementById(hash.substring(1)); + if (!target) return; + + const member = target.nextElementSibling; + if (!member || !member.classList.contains('with-expandable-docs')) return; + + expandMemberDocs(member); + } + + window.addEventListener('hashchange', expandTargetDocs); + expandTargetDocs(); +} + +// For members that have their own page, navigate to that page when the member's box is clicked. +function initNavigateToMemberPage() { + const elements = document.getElementsByClassName('with-page-link'); + for (const element of elements) { + const memberLink = element.getElementsByClassName('name-decl')[0]; + // check if this is actually a link + // (it isn't if the generator couldn't resolve the link target) + if (memberLink.tagName === 'A') { + element.addEventListener('click', (e) => { + // don't act if user clicked a link + if (e.target !== null && e.target.closest('a') !== null) return; + + // don't act if user clicked to select some text + if (window.getSelection().toString()) return; + + memberLink.click(); + }); + } + } +} + +// Expands and collapses member docs. +function initToggleMemberDocs() { + const elements = document.getElementsByClassName('with-expandable-docs'); + for (const element of elements) { + element.addEventListener('click', (e) => { + // don't act if user clicked a link + if (e.target !== null && e.target.closest('a') !== null) return; + + // don't act if user clicked to select some text + if (window.getSelection().toString()) return; + + toggleMemberDocs(element); + }); + } +} + +// Shows and hides inherited members. +function initToggleInheritedMembers() { + const memberGroups = document.getElementsByClassName('member-group'); + for (const group of memberGroups) { + const button = group.getElementsByClassName('toggle-inherited-members-link')[0]; + if (button !== undefined) { + const members = group.getElementsByClassName('inherited'); + button.addEventListener('click', () => toggleInheritedMembers(button, members)); + } + } +} + +// Copies the module URI optionally displayed on a module page to the clipboard. +function initCopyModuleUriToClipboard() { + const copyUriButtons = document.getElementsByClassName('copy-uri-button'); + + for (const button of copyUriButtons) { + const moduleUri = button.previousElementSibling; + + button.addEventListener('click', e => { + e.stopPropagation(); + const range = document.createRange(); + range.selectNodeContents(moduleUri); + const selection = getSelection(); + selection.removeAllRanges(); + selection.addRange(range); + try { + document.execCommand('copy'); + } catch (e) { + } finally { + selection.removeAllRanges(); + } + }); + } +} + +// Expands or collapses member docs. +function toggleMemberDocs(memberElem) { + const comments = memberElem.getElementsByClassName('expandable'); + const icon = memberElem.getElementsByClassName('expandable-docs-icon')[0]; + const isCollapsed = icon.textContent === 'expand_more'; + + if (isCollapsed) { + for (const comment of comments) expandElement(comment); + icon.textContent = 'expand_less'; + } else { + for (const comment of comments) collapseElement(comment); + icon.textContent = 'expand_more'; + } +} + +// Expands member docs unless they are already expanded. +function expandMemberDocs(memberElem) { + const icon = memberElem.getElementsByClassName('expandable-docs-icon')[0]; + const isCollapsed = icon.textContent === 'expand_more'; + + if (!isCollapsed) return; + + const comments = memberElem.getElementsByClassName('expandable'); + for (const comment of comments) expandElement(comment); + icon.textContent = 'expand_less'; +} + +// Shows and hides inherited members. +function toggleInheritedMembers(button, members) { + const isCollapsed = button.textContent === 'show inherited'; + + if (isCollapsed) { + for (const member of members) expandElement(member); + button.textContent = 'hide inherited'; + } else { + for (const member of members) collapseElement(member); + button.textContent = 'show inherited' + } +} + +// Expands an element. +// Done in two steps to make transition work (can't transition from 'hidden'). +// For some reason (likely related to removing 'hidden') the transition isn't animated in FF. +// When using timeout() instead of requestAnimationFrame() +// there is *some* animation in FF but still doesn't look right. +function expandElement(element) { + element.classList.remove('hidden'); + + requestAnimationFrame(() => { + element.classList.remove('collapsed'); + }); +} + +// Collapses an element. +// Done in two steps to make transition work (can't transition to 'hidden'). +function collapseElement(element) { + element.classList.add('collapsed'); + + const listener = () => { + element.removeEventListener('transitionend', listener); + element.classList.add('hidden'); + }; + element.addEventListener('transitionend', listener); +} + +// Initializes the search UI and sets up delayed initialization of the search engine. +function initSearchUi() { + // initialize search engine the first time that search input receives focus + const onFocus = () => { + searchInput.removeEventListener('focus', onFocus); + initSearchWorker(); + }; + searchInput.addEventListener('focus', onFocus); + + // clear search when search input loses focus, + // except if this happens due to a search result being clicked, + // in which case clearSearch() will be called by the link's click handler, + // and calling it here would prevent the click handler from firing + searchInput.addEventListener('focusout', () => { + if (document.querySelector('#search-results:hover') === null) clearSearch(); + }); + + // trigger search when user hasn't typed in a while + let timeoutId = null; + // Using anything other than `overflow: visible` for `#search-results` + // slows down painting significantly in WebKit browsers (at least Safari/Mac). + // Compensate by using a higher search delay, which is less annoying than a blocking UI. + const delay = isWebKitBrowser ? 200 : 100; + searchInput.addEventListener('input', () => { + clearTimeout(timeoutId); + timeoutId = setTimeout(() => triggerSearch(searchInput.value), delay); + }); + + // keyboard shortcut for entering search + document.addEventListener('keyup', e => { + // could additionally support '/' like GitHub and Gmail do, + // but this would require overriding the default behavior of '/' on Firefox + if (e.key === 's') searchInput.focus(); + }); + + // keyboard navigation for search results + searchInput.addEventListener('keydown', e => { + const results = document.getElementById('search-results'); + if (results !== null) { + if (e.key === 'ArrowDown') { + selectNextResult(results.firstElementChild); + e.preventDefault(); + } else if (e.key === 'ArrowUp') { + selectPrevResult(results.firstElementChild); + e.preventDefault(); + } + } + }); + searchInput.addEventListener('keyup', e => { + if (e.key === 'Enter' && selectedSearchResult !== null) { + selectedSearchResult.firstElementChild.click(); + clearSearch(); + } + }); +} + +// Initializes the search worker. +function initSearchWorker() { + const workerScriptUrl = rootUrlPrefix + 'scripts/search-worker.js'; + + try { + searchWorker = new Worker(workerScriptUrl, {name: packageName === null ? "main" : packageName + '/' + packageVersion}); + searchWorker.addEventListener('message', e => handleSearchResults(e.data.query, e.data.results)); + } catch (e) { + // could not initialize worker, presumably because we are a file:/// page and content security policy got in the way + // fall back to running searches synchronously without a worker + // this requires loading search related scripts that would otherwise be loaded by the worker + + searchWorker = null; + let pendingScripts = 3; + + const onScriptLoaded = () => { + if (--pendingScripts === 0) { + initSearchIndex(); + nonWorkerSearchInitialized = true; + if (searchInput.focused) { + triggerSearch(searchInput.value); + } + } + }; + + const script1 = document.createElement('script'); + script1.src = (packageName === null ? rootUrlPrefix : packageUrlPrefix) + 'search-index.js'; + script1.async = true; + script1.onload = onScriptLoaded; + document.head.append(script1); + + const script2 = document.createElement('script'); + script2.src = rootUrlPrefix; + script2.async = true; + script2.onload = onScriptLoaded; + document.head.append(script2); + + const script3 = document.createElement('script'); + script3.src = workerScriptUrl; + script3.async = true; + script3.onload = onScriptLoaded; + document.head.append(script3); + } +} + +// Updates search results unless they are stale. +function handleSearchResults(query, results) { + if (query.inputValue !== searchInput.value) return; + + updateSearchResults(renderSearchResults(query, results)); +} + +// TODO: Should this (or its callers) use requestAnimationFrame() ? +// Removes any currently displayed search results, then displays the given results if non-null. +function updateSearchResults(resultsDiv) { + selectedSearchResult = null; + + const oldResultsDiv = document.getElementById('search-results'); + if (oldResultsDiv !== null) { + searchElement.removeChild(oldResultsDiv); + } + + if (resultsDiv != null) { + searchElement.append(resultsDiv); + selectNextResult(resultsDiv.firstElementChild); + } +} + +// Returns the module of the given member, or `null` if the given member is a module. +function getModule(member) { + switch (member.level) { + case 0: + return null; + case 1: + return member.parent; + case 2: + return member.parent.parent; + } +} + +// Triggers a search unless search input is invalid or incomplete. +function triggerSearch(inputValue) { + const query = parseSearchInput(inputValue); + if (!isActionableQuery(query)) { + handleSearchResults(query, null); + return; + } + + if (searchWorker !== null) { + searchWorker.postMessage({query, packageName, moduleName, className}); + } else if (nonWorkerSearchInitialized) { + const results = runSearch(query, packageName, moduleName, className); + handleSearchResults(query, results); + } +} + +// Tells if the given Unicode character is a whitespace character. +function isWhitespace(ch) { + const cp = ch.codePointAt(0); + if (cp >= 9 && cp <= 13 || cp === 32 || cp === 133 || cp === 160) return true; + if (cp < 5760) return false; + return cp === 5760 || cp >= 8192 && cp <= 8202 + || cp === 8232 || cp === 8233 || cp === 8239 || cp === 8287 || cp === 12288; +} + +// Trims the given Unicode characters. +function trim(chars) { + const length = chars.length; + let startIdx, endIdx; + + for (startIdx = 0; startIdx < length; startIdx += 1) { + if (!isWhitespace(chars[startIdx])) break; + } + for (endIdx = chars.length - 1; endIdx > startIdx; endIdx -= 1) { + if (!isWhitespace(chars[endIdx])) break; + } + return chars.slice(startIdx, endIdx + 1); +} + +// Parses the user provided search input. +// Preconditions: +// inputValue !== '' +function parseSearchInput(inputValue) { + const chars = trim(Array.from(inputValue)); + const char0 = chars[0]; // may be undefined + const char1 = chars[1]; // may be undefined + const prefix = char1 === ':' ? char0 + char1 : null; + const kind = + prefix === null ? null : + char0 === 'm' ? 1 : + char0 === 't' ? 2 : + char0 === 'c' ? 3 : + char0 === 'f' ? 4 : + char0 === 'p' ? 5 : + undefined; + const unprefixedChars = kind !== null && kind !== undefined ? + trim(chars.slice(2, chars.length)) : + chars; + const normalizedCps = toNormalizedCodePoints(unprefixedChars); + return {inputValue, prefix, kind, normalizedCps}; +} + +// Converts a Unicode character array to an array of normalized Unicode code points. +// Normalization turns characters into their base forms, e.g., é into e. +// Since JS doesn't support case folding, `toLocaleLowerCase()` is used instead. +// Note: Keep in sync with same function in search-worker.js. +function toNormalizedCodePoints(characters) { + return Uint32Array.from(characters, ch => ch.normalize('NFD')[0].toLocaleLowerCase().codePointAt(0)); +} + +// Tells if the given query is valid and long enough to be worth running. +// Prefixed queries require fewer minimum characters than unprefixed queries. +// This avoids triggering a search while typing a prefix yet still enables searching for single-character names. +// For example, `p:e` finds `pkl.math#E`. +function isActionableQuery(query) { + const kind = query.kind; + const queryCps = query.normalizedCps; + return kind !== undefined && (kind !== null && queryCps.length > 0 || queryCps.length > 1); +} + +// Renders the given search results for the given query. +// Preconditions: +// isActionableQuery(query) ? results !== null : results === null +function renderSearchResults(query, results) { + const resultsDiv = document.createElement('div'); + resultsDiv.id = 'search-results'; + const ul = document.createElement('ul'); + resultsDiv.append(ul); + + if (results === null) { + if (query.kind !== undefined) return null; + + const li = document.createElement('li'); + li.className = 'heading'; + li.textContent = 'Unknown search prefix. Use one of m: (module), c: (class), f: (function), or p: (property).'; + ul.append(li); + return resultsDiv; + } + + const {exactMatches, classMatches, moduleMatches, otherMatches} = results; + + if (exactMatches.length + classMatches.length + moduleMatches.length + otherMatches.length === 0) { + renderHeading('No results found', ul); + return resultsDiv; + } + + if (exactMatches.length > 0) { + renderHeading('Top hits', ul); + renderMembers(query.normalizedCps, exactMatches, ul); + } + if (classMatches.length > 0) { + renderHeading('Class', ul, className); + renderMembers(query.normalizedCps, classMatches, ul); + } + if (moduleMatches.length > 0) { + renderHeading('Module', ul, moduleName); + renderMembers(query.normalizedCps, moduleMatches, ul); + } + if (otherMatches.length > 0) { + renderHeading('Other results', ul); + renderMembers(query.normalizedCps, otherMatches, ul); + } + + return resultsDiv; +} + +// Adds a heading such as `Top matches` to the search results list. +function renderHeading(title, ul, name = null) { + const li = document.createElement('li'); + li.className = 'heading'; + li.append(title); + if (name != null) { + li.append(' '); + li.append(span('heading-name', name)) + } + ul.append(li); +} + +// Adds matching members to the search results list. +function renderMembers(queryCps, members, ul) { + for (const member of members) { + ul.append(renderMember(queryCps, member)); + } +} + +// Renders a member to be added to the search result list. +function renderMember(queryCps, member) { + const result = document.createElement('li'); + result.className = 'result'; + if (member.deprecated) result.className = 'deprecated'; + + const link = document.createElement('a'); + result.append(link); + + link.href = (packageName === null ? rootUrlPrefix : packageUrlPrefix) + member.url; + link.addEventListener('mousedown', () => selectResult(result)); + link.addEventListener('click', clearSearch); + + const keyword = getKindKeyword(member.kind); + // noinspection JSValidateTypes (IntelliJ bug?) + if (keyword !== null) { + link.append(span('keyword', keyword), ' '); + } + + // prefix with class name if a class member + if (member.level === 2) { + link.append(span("context", member.parent.name + '.')); + } + + const name = span('result-name'); + if (member.matchNameIdx === 0) { // main name matched + highlightMatch(queryCps, member.names[0], member.matchStartIdx, name); + } else { // aka name matched + name.append(member.name); + } + link.append(name); + + if (member.signature !== null) { + link.append(member.signature); + } + + if (member.matchNameIdx > 0) { // aka name matched + link.append(' '); + const aka = span('aka'); + aka.append('(known as: '); + const name = span('aka-name'); + highlightMatch(queryCps, member.names[member.matchNameIdx], member.matchStartIdx, name); + aka.append(name, ')'); + link.append(aka); + } + + // add module name if not a module + const module = getModule(member); + if (module !== null) { + link.append(' ', span('context', '(' + module.name + ')')); + } + + return result; +} + +// Returns the keyword for the given member kind. +function getKindKeyword(kind) { + switch (kind) { + case 0: + return "package"; + case 1: + return "module"; + case 2: + return "typealias"; + case 3: + return "class"; + case 4: + return "function"; + case 5: + // properties have no keyword + return null; + } +} + +// Highlights the matching characters in a member name. +// Preconditions: +// queryCps.length > 0 +// computeMatchFrom(queryCps, name.normalizedCps, name.wordStarts, matchStartIdx) +function highlightMatch(queryCps, name, matchStartIdx, parentElem) { + const queryLength = queryCps.length; + const codePoints = name.codePoints; + const nameCps = name.normalizedCps; + const nameLength = nameCps.length; + const wordStarts = name.wordStarts; + + let queryIdx = 0; + let queryCp = queryCps[0]; + let startIdx = matchStartIdx; + + if (startIdx > 0) { + parentElem.append(String.fromCodePoint(...codePoints.subarray(0, startIdx))); + } + + for (let nameIdx = startIdx; nameIdx < nameLength; nameIdx += 1) { + const nameCp = nameCps[nameIdx]; + + if (queryCp !== nameCp) { + const newNameIdx = wordStarts[nameIdx]; + parentElem.append( + span('highlight', String.fromCodePoint(...codePoints.subarray(startIdx, nameIdx)))); + startIdx = newNameIdx; + parentElem.append(String.fromCodePoint(...codePoints.subarray(nameIdx, newNameIdx))); + nameIdx = newNameIdx; + } + + queryIdx += 1; + if (queryIdx === queryLength) { + parentElem.append( + span('highlight', String.fromCodePoint(...codePoints.subarray(startIdx, nameIdx + 1)))); + if (nameIdx + 1 < nameLength) { + parentElem.append(String.fromCodePoint(...codePoints.subarray(nameIdx + 1, nameLength))); + } + return; + } + + queryCp = queryCps[queryIdx]; + } + + throw 'Precondition violated: `computeMatchFrom()`'; +} + +// Creates a span element. +function span(className, text = null) { + const result = document.createElement('span'); + result.className = className; + result.textContent = text; + return result; +} + +// Creates a text node. +function text(content) { + return document.createTextNode(content); +} + +// Navigates to the next member entry in the search results list, skipping headings. +function selectNextResult(ul) { + let next = selectedSearchResult === null ? ul.firstElementChild : selectedSearchResult.nextElementSibling; + while (next !== null) { + if (!next.classList.contains('heading')) { + selectResult(next); + scrollIntoView(next, { + behavior: 'instant', // better for keyboard navigation + scrollMode: 'if-needed', + block: 'nearest', + inline: 'nearest', + }); + return; + } + next = next.nextElementSibling; + } +} + +// Navigates to the previous member entry in the search results list, skipping headings. +function selectPrevResult(ul) { + let prev = selectedSearchResult === null ? ul.lastElementChild : selectedSearchResult.previousElementSibling; + while (prev !== null) { + if (!prev.classList.contains('heading')) { + selectResult(prev); + const prev2 = prev.previousElementSibling; + // make any immediately preceding heading visible as well (esp. important for first heading) + const scrollTo = prev2 !== null && prev2.classList.contains('heading') ? prev2 : prev; + scrollIntoView(scrollTo, { + behavior: 'instant', // better for keyboard navigation + scrollMode: 'if-needed', + block: 'nearest', + inline: 'nearest', + }); + return; + } + prev = prev.previousElementSibling; + } +} + +// Selects the given entry in the search results list. +function selectResult(li) { + if (selectedSearchResult !== null) { + selectedSearchResult.classList.remove('selected'); + } + li.classList.add('selected'); + selectedSearchResult = li; +} + +// Clears the search input and hides/removes the search results list. +function clearSearch() { + searchInput.value = ''; + updateSearchResults(null); +} + +const updateRuntimeDataWith = (buildAnchor) => (fragmentId, entries) => { + if (!entries) return; + const fragment = document.createDocumentFragment(); + let first = true; + for (const entry of entries) { + const a = document.createElement("a"); + buildAnchor(entry, a); + if (first) { + first = false; + } else { + fragment.append(", "); + } + fragment.append(a); + } + + const element = document.getElementById(fragmentId); + element.append(fragment); + element.classList.remove("hidden"); // dd + element.previousElementSibling.classList.remove("hidden"); // dt +} + +// Functions called by JS data scripts. +// noinspection JSUnusedGlobalSymbols +const runtimeData = { + knownVersions: (versions, myVersion) => { + updateRuntimeDataWith((entry, anchor) => { + const { text, href } = entry; + anchor.textContent = text; + // noinspection JSUnresolvedReference + if (text === myVersion) { + anchor.className = "current-version"; + } else if (href) { + anchor.href = href; + } + })("known-versions", versions); + }, + knownUsagesOrSubtypes: updateRuntimeDataWith((entry, anchor) => { + const { text, href } = entry; + anchor.textContent = text; + // noinspection JSUnresolvedReference + anchor.textContent = text; + if (href) { + anchor.href = href; + } + }), +} diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/scripts/scroll-into-view.min.js b/pkl-doc/src/test/files/SinglePackageTest/output/scripts/scroll-into-view.min.js new file mode 100644 index 00000000..de62d093 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/scripts/scroll-into-view.min.js @@ -0,0 +1,30 @@ +/** + * MIT License + * + * Copyright (c) 2023 Cody Olsen + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i=n)return setElementScroll(e,l.x,l.y),e._scrollSettings=null,t.end(COMPLETE);var r=1-t.ease(o);if(setElementScroll(e,l.x-l.differenceX*r,l.y-l.differenceY*r),i>=t.time)return t.endIterations++,animate(e);raf(animate.bind(null,e))}}function defaultIsWindow(e){return e.self===e}function transitionScrollTo(e,t,n,l){var i,o=!t._scrollSettings,r=t._scrollSettings,a=Date.now(),s={passive:!0};function f(e){t._scrollSettings=null,t.parentElement&&t.parentElement._scrollSettings&&t.parentElement._scrollSettings.end(e),n.debug&&console.log("Scrolling ended with type",e,"for",t),l(e),i&&(t.removeEventListener("touchstart",i,s),t.removeEventListener("wheel",i,s))}r&&r.end(CANCELED);var c=n.maxSynchronousAlignments;return null==c&&(c=3),t._scrollSettings={startTime:a,endIterations:0,target:e,time:n.time,ease:n.ease,align:n.align,isWindow:n.isWindow||defaultIsWindow,maxSynchronousAlignments:c,end:f},"cancellable"in n&&!n.cancellable||(i=f.bind(null,CANCELED),t.addEventListener("touchstart",i,s),t.addEventListener("wheel",i,s)),o&&animate(t),i}function defaultIsScrollable(e){return"pageXOffset"in e||(e.scrollHeight!==e.clientHeight||e.scrollWidth!==e.clientWidth)&&"hidden"!==getComputedStyle(e).overflow}function defaultValidTarget(){return!0}function findParentElement(e){if(e.assignedSlot)return findParentElement(e.assignedSlot);if(e.parentElement)return"BODY"===e.parentElement.tagName?e.parentElement.ownerDocument.defaultView||e.parentElement.ownerDocument.ownerWindow:e.parentElement;if(e.getRootNode){var t=e.getRootNode();if(11===t.nodeType)return t.host}}module.exports=function(e,t,n){if(e){"function"==typeof t&&(n=t,t=null),t||(t={}),t.time=isNaN(t.time)?1e3:t.time,t.ease=t.ease||function(e){return 1-Math.pow(1-e,e/2)};var l,i=findParentElement(e),o=1,r=t.validTarget||defaultValidTarget,a=t.isScrollable;for(t.debug&&(console.log("About to scroll to",e),i||console.error("Target did not have a parent, is it mounted in the DOM?"));i;)if(t.debug&&console.log("Scrolling parent node",i),r(i,o)&&(a?a(i,defaultIsScrollable):defaultIsScrollable(i))&&(o++,l=transitionScrollTo(e,i,t,s)),!(i=findParentElement(i))){s(COMPLETE);break}return l}function s(e){--o||n&&n(e)}}; + + },{}],2:[function(require,module,exports){ + window.scrollIntoView=require("./scrollIntoView"); + + },{"./scrollIntoView":1}]},{},[2]); diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/scripts/search-worker.js b/pkl-doc/src/test/files/SinglePackageTest/output/scripts/search-worker.js new file mode 100644 index 00000000..224b731e --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/scripts/search-worker.js @@ -0,0 +1,282 @@ +// noinspection DuplicatedCode + +'use strict'; + +// populated by `initSearchIndex()` +let searchIndex; + +// noinspection ThisExpressionReferencesGlobalObjectJS +const isWorker = 'DedicatedWorkerGlobalScope' in this; + +if (isWorker) { + const workerName = self.name; + // relative to this file + const searchIndexUrl = workerName === "main" ? + '../search-index.js' : + '../' + workerName + '/search-index.js'; + importScripts(searchIndexUrl); + initSearchIndex(); + addEventListener('message', e => { + const {query, packageName, moduleName, className} = e.data; + const results = runSearch(query, packageName, moduleName, className); + postMessage({query, results}); + }); +} else { + // non-worker environment + // `pkldoc.js` loads scripts and calls `initSearchIndex()` +} + +// Initializes the search index. +function initSearchIndex() { + // noinspection JSUnresolvedVariable + const data = JSON.parse(searchData); + const index = Array(data.length); + let idx = 0; + + for (const entry of data) { + const name = entry.name; + const names = toIndexedNames(entry); + // 0 -> package, 1 -> module, 2 -> type alias, 3 -> class, 4 -> function, 5 -> property + const kind = entry.kind; + const url = entry.url; + // noinspection JSUnresolvedVariable + const signature = entry.sig === undefined ? null : entry.sig; + // noinspection JSUnresolvedVariable + const parent = entry.parId === undefined ? null : index[entry.parId]; + const level = parent === null ? 0 : parent.parent === null ? 1 : 2; + const deprecated = entry.deprecated !== undefined; + + index[idx++] = { + name, + names, + kind, + url, + signature, + parent, + level, + deprecated, + // remaining attributes are set by `computeMatchFrom` and hence aren't strictly part of the search index + matchNameIdx: -1, // names[matchNameIdx] is the name that matched + matchStartIdx: -1, // names[matchNameIdx].codePoints[matchStartIdx] is the first code point that matched + similarity: 0 // number of code points matched relative to total number of code points (between 0.0 and 1.0) + }; + } + + searchIndex = index; +} + +// Runs a search and returns its results. +function runSearch(query, packageName, moduleName, className) { + const queryCps = query.normalizedCps; + const queryKind = query.kind; + + let exactMatches = []; + let classMatches = []; + let moduleMatches = []; + let otherMatches = []; + + for (const member of searchIndex) { + if (queryKind !== null && queryKind !== member.kind) continue; + + if (!isMatch(queryCps, member)) continue; + + if (member.similarity === 1) { + exactMatches.push(member); + } else if (moduleName !== null && member.level === 1 && moduleName === member.parent.name) { + moduleMatches.push(member); + } else if (moduleName !== null && member.level === 2 && moduleName === member.parent.parent.name) { + if (className !== null && className === member.parent.name) { + classMatches.push(member); + } else { + moduleMatches.push(member); + } + } else { + otherMatches.push(member); + } + } + + // Sorts members best-first. + function compareMembers(member1, member2) { + const normDiff = member2.similarity - member1.similarity; // higher is better + if (normDiff !== 0) return normDiff; + + const lengthDiff = member1.matchNameLength - member2.matchNameLength; // lower is better + if (lengthDiff !== 0) return lengthDiff; + + const kindDiff = member2.kind - member1.kind; // higher is better + if (kindDiff !== 0) return kindDiff; + + return member1.matchNameIdx - member2.matchNameIdx; // lower is better + } + + exactMatches.sort(compareMembers); + classMatches.sort(compareMembers); + moduleMatches.sort(compareMembers); + otherMatches.sort(compareMembers); + + return {exactMatches, classMatches, moduleMatches, otherMatches}; +} + +// Indexes a member's names. +function toIndexedNames(entry) { + const result = []; + result.push(toIndexedName(entry.name)); + // noinspection JSUnresolvedVariable + const alsoKnownAs = entry.aka; + if (alsoKnownAs !== undefined) { + for (const name of alsoKnownAs) { + result.push(toIndexedName(name)); + } + } + return result; +} + +// Indexes the given name. +function toIndexedName(name) { + const characters = Array.from(name); + const codePoints = Uint32Array.from(characters, ch => ch.codePointAt(0)); + const normalizedCps = toNormalizedCodePoints(characters); + const wordStarts = toWordStarts(characters); + + return {codePoints, normalizedCps, wordStarts}; +} + +// Converts a Unicode character array to an array of normalized Unicode code points. +// Normalization turns characters into their base forms, e.g., é into e. +// Since JS doesn't support case folding, `toLocaleLowerCase()` is used instead. +function toNormalizedCodePoints(characters) { + return Uint32Array.from(characters, ch => ch.normalize('NFD')[0].toLocaleLowerCase().codePointAt(0)); +} + +// Returns an array of same length as `characters` that for every index, holds the index of the next word start. +// Preconditions: +// characters.length > 0 +function toWordStarts(characters) { + const length = characters.length; + // -1 is used as 'no next word start exists' -> use signed int array + const result = length <= 128 ? new Int8Array(length) : new Int16Array(length); + + if (length > 1) { + let class1 = toCharClass(characters[length - 1]); + let class2; + let wordStart = -1; + for (let idx = length - 1; idx >= 1; idx -= 1) { + class2 = class1; + class1 = toCharClass(characters[idx - 1]); + const diff = class1 - class2; + // transitions other than uppercase -> other + if (diff !== 0 && diff !== 3) wordStart = idx; + result[idx] = wordStart; + // uppercase -> other + if (diff === 3) wordStart = idx - 1; + } + } + + // first character is always a word start + result[0] = 0; + + return result; +} + + +// Partitions characters into uppercase, digit, dot, and other. +function toCharClass(ch) { + const regexIsUppercase = /\p{Lu}/u + const regexIsNumericCharacter = /\p{N}/u + return regexIsUppercase.test(ch) ? 3 : regexIsNumericCharacter.test(ch) ? 2 : ch === '.' ? 1 : 0; +} + +// Tests if `queryCps` matches any of `member`'s names. +// If so, records information about the match in `member`. +// Preconditions: +// queryCps.length > 0 +function isMatch(queryCps, member) { + const queryLength = queryCps.length; + let nameIdx = 0; + + for (const name of member.names) { + const nameCps = name.normalizedCps; + const nameLength = nameCps.length; + const wordStarts = name.wordStarts; + const maxStartIdx = nameLength - queryLength; + + for (let startIdx = 0; startIdx <= maxStartIdx; startIdx += 1) { + const matchLength = computeMatchFrom(queryCps, nameCps, wordStarts, startIdx); + if (matchLength > 0) { + member.matchNameIdx = nameIdx; + member.matchStartIdx = startIdx; + // Treat exact match of last module name component as exact match (similarity == 1). + // For example, treat "PodSpec" as exact match for "io.k8s.api.core.v1.PodSpec". + // Because "ps" is considered an exact match for "PodSpec", + // it is also considered an exact match for "io.k8s.api.core.v1.PodSpec". + const isExactMatchOfLastModuleNameComponent = + startIdx > 0 && nameCps[startIdx - 1] === 46 /* '.' */ && matchLength === nameLength - startIdx; + member.similarity = isExactMatchOfLastModuleNameComponent ? 1 : matchLength / nameLength; + member.matchNameLength = nameLength; + return true; + } + } + + nameIdx += 1; + } + + return false; +} + +// Tests if the given query matches the given name from `startIdx` on. +// Returns the number of code points matched. +// Word start matches get special treatment. +// For example, `sb` is considered to match all code points of `StringBuilder`. +// Preconditions: +// queryCps.length > 0 +// nameCps.length > 0 +// wordStarts.length === nameCps.length +// startIdx < nameCps.length +function computeMatchFrom(queryCps, nameCps, wordStarts, startIdx) { + const queryLength = queryCps.length; + const nameLength = nameCps.length; + const beginsWithWordStart = wordStarts[startIdx] === startIdx; + + let queryIdx = 0; + let matchLength = 0; + let queryCp = queryCps[0]; + + for (let nameIdx = startIdx; nameIdx < nameLength; nameIdx += 1) { + const nameCp = nameCps[nameIdx]; + + if (queryCp === nameCp) { + matchLength += 1; + } else { // check for word start match + if (nameIdx === startIdx || !beginsWithWordStart) return 0; + + const newNameIdx = wordStarts[nameIdx]; + if (newNameIdx === -1) return 0; + + const newNameCp = nameCps[newNameIdx]; + if (queryCp !== newNameCp) return 0; + + matchLength += newNameIdx - nameIdx + 1; + nameIdx = newNameIdx; + } + + queryIdx += 1; + if (queryIdx === queryLength) { + // in case of a word start match, increase matchLength by number of remaining chars of the last matched word + const nextIdx = nameIdx + 1; + if (beginsWithWordStart && nextIdx < nameLength) { + const nextStart = wordStarts[nextIdx]; + if (nextStart === -1) { + matchLength += nameLength - nextIdx; + } else { + matchLength += nextStart - nextIdx; + } + } + + return matchLength; + } + + queryCp = queryCps[queryIdx]; + } + + return 0; +} diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/search-index.js b/pkl-doc/src/test/files/SinglePackageTest/output/search-index.js new file mode 100644 index 00000000..89a3f9ca --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/search-index.js @@ -0,0 +1 @@ +searchData='[{"name":"com.package1","kind":0,"url":"com.package1/current/index.html"},{"name":"com.package1.minimal","kind":1,"url":"com.package1/current/minimal/index.html"}]'; diff --git a/pkl-doc/src/test/files/SinglePackageTest/output/styles/pkldoc.css b/pkl-doc/src/test/files/SinglePackageTest/output/styles/pkldoc.css new file mode 100644 index 00000000..2c3632a3 --- /dev/null +++ b/pkl-doc/src/test/files/SinglePackageTest/output/styles/pkldoc.css @@ -0,0 +1,680 @@ +@font-face { + font-family: 'Lato'; + font-style: normal; + font-weight: 400; + src: local('Lato Regular'), local('Lato-Regular'), + url('../fonts/lato-v14-latin_latin-ext-regular.woff2') format('woff2') +} + +@font-face { + font-family: 'Lato'; + font-style: normal; + font-weight: 700; + src: local('Lato Bold'), local('Lato-Bold'), + url('../fonts/lato-v14-latin_latin-ext-700.woff2') format('woff2') +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 400; + src: local('Open Sans Regular'), local('OpenSans-Regular'), + url('../fonts/open-sans-v15-latin_latin-ext-regular.woff2') format('woff2') +} + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 400; + src: local('Open Sans Italic'), local('OpenSans-Italic'), + url('../fonts/open-sans-v15-latin_latin-ext-italic.woff2') format('woff2') +} + +@font-face { + font-family: 'Open Sans'; + font-style: normal; + font-weight: 700; + src: local('Open Sans Bold'), local('OpenSans-Bold'), + url('../fonts/open-sans-v15-latin_latin-ext-700.woff2') format('woff2') +} + +@font-face { + font-family: 'Open Sans'; + font-style: italic; + font-weight: 700; + src: local('Open Sans Bold Italic'), local('OpenSans-BoldItalic'), + url('../fonts/open-sans-v15-latin_latin-ext-700italic.woff2') format('woff2') +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 400; + src: local('Source Code Pro'), local('SourceCodePro-Regular'), + url('../fonts/source-code-pro-v7-latin_latin-ext-regular.woff2') format('woff2') +} + +@font-face { + font-family: 'Source Code Pro'; + font-style: normal; + font-weight: 700; + src: local('Source Code Pro Bold'), local('SourceCodePro-Bold'), + url('../fonts/source-code-pro-v7-latin_latin-ext-700.woff2') format('woff2') +} + +@font-face { + font-family: 'Material Icons'; + font-style: normal; + font-weight: 400; + src: local('Material Icons'), + local('MaterialIcons-Regular'), + url(../fonts/MaterialIcons-Regular.woff2) format('woff2'); +} + +.material-icons { + /*noinspection CssNoGenericFontName*/ + font-family: 'Material Icons'; + font-weight: normal; + font-style: normal; + font-size: 24px; + display: inline-block; + width: 1em; + height: 1em; + line-height: 1; + text-transform: none; + letter-spacing: normal; + word-wrap: normal; + white-space: nowrap; + direction: ltr; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + -moz-osx-font-smoothing: grayscale; + font-feature-settings: 'liga'; +} + +input[type=search] { + -webkit-appearance: textfield; +} + +input[type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +input::-moz-placeholder { + opacity: 1; +} + +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + border: 0; + font-family: inherit; + font-size: 100%; + font-style: inherit; + font-weight: inherit; + margin: 0; + outline: 0; + padding: 0; + vertical-align: baseline; +} + +body { + margin: 0; + font-family: Lato, Arial, sans-serif; + background-color: #f0f3f6; + scroll-behavior: smooth; +} + +a, a:visited, a:hover, a:active { + color: inherit; +} + +a:hover { + text-decoration: none; + transition: 0s; +} + +code, .member-modifiers, .member-signature, .doc-comment pre, #search-results li.result, .result-name, .heading-name, .aka-name { + font-family: "Source Code Pro", monospace; + letter-spacing: -0.03em; +} + +header { + position: fixed; + top: 0; + left: 0; + width: 100vw; /* vw to make sure that positioning is the same whether or not vertical scrollbar is displayed */ + height: 32px; + z-index: 1; + background-color: #364550; + padding: 7px 0 7px; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.18), 0 4px 8px rgba(0, 0, 0, 0.28); +} + +#doc-title { + position: absolute; + margin-top: 8px; + margin-left: 15px; +} + +#doc-title a { + color: #fff; + text-decoration: none; +} + +#search { + position: relative; + width: 50vw; + margin: 0 auto; +} + +#search-icon { + position: absolute; + left: 0; + top: 2px; + padding: 4px; + font-size: 21px; + color: #a5a9a9; +} + +#search-input { + margin-top: 2px; + width: 100%; + height: 28px; + text-indent: 28px; + font-size: 0.85em; + background-color: rgba(255, 255, 255, 0.2); + border: none; + border-radius: 3px; + color: #fff; +} + +#search-input:focus { + background-color: #6D7880; + outline: none; +} + +#search-input::placeholder { + text-align: center; + color: #A5A9A9; +} + +#search-input:focus::placeholder { + color: transparent; +} + +#search-results { + position: fixed; + box-sizing: border-box; + top: 38px; + left: 25vw; + right: 25vw; + width: 50vw; + max-height: 80%; + color: #103a51; + background: white; + border: solid 1px #6D7880; + border-radius: 3px; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.18), 0 4px 8px rgba(0, 0, 0, 0.28); + white-space: nowrap; + + overflow: auto; /* in safari, this slows down painting, blocking the ui */ + /*noinspection CssUnknownProperty*/ + overscroll-behavior: contain; + -webkit-overflow-scrolling: touch; +} + +#search-results a { + text-decoration: none; +} + +#search-results a:hover { + text-decoration: underline; +} + +#search-results ul { + list-style: none; + font-size: 0.9em; +} + +#search-results li { + padding: 0.2ch 3ch; + height: 17px; /* used same height regardless of which fonts are used in content */ +} + +#search-results li.heading { + background-color: #f0f3f6; + padding: 0.4ch 1ch; +} + +#search-results li.result { + font-size: 0.9em; +} + +#search-results .keyword { + color: #000082; +} + +#search-results .highlight { + font-weight: bold; +} + +#search-results .context { + color: gray; +} + +#search-results .selected, #search-results .selected .keyword, #search-results .selected .aka, #search-results .selected .context { + background: darkblue; + color: white; +} + +#search-results .deprecated { + text-decoration: line-through; +} + +/* make sure that line-through of highlighted region of selected search result has the right color */ +#search-results .deprecated.selected .highlight { + text-decoration: line-through; +} + +main { + width: 70%; + margin: 60px auto 20px; +} + +.declaration-parent-link { + margin: 0 0 1rem; +} + +#declaration-title { + font-size: 2em; + font-weight: bold; + color: #103a51; + margin: 0.5rem 0; +} + +#declaration-version { + color: #A5A9A9; + font-size: 0.9em; + vertical-align: bottom; + padding-left: 0.25em; +} + +.member-group-links { + margin: 0.75em 0 1em 0; +} + +.member-group-links li { + display: inline-block; + margin-right: 1em; +} + +.member-info { + display: grid; + grid-template-columns: auto 1fr; + line-height: 1.5; + margin-top: 0.5em; + font-size: 0.9em; +} + +.member-info dt { + grid-column: 1; + text-align: right; +} + +.member-info dd { + grid-column: 2; + margin-left: 0.5em; +} + +.copy-uri-button { + cursor: pointer; + font-size: inherit; + margin-left: 0.5em; +} + +.member-group { + /* for absolutely positioned anchors */ + position: relative; +} + +.member-group-title { + margin: 1rem; + font-weight: bold; + color: #103a51; +} + +.toggle-inherited-members { + font-size: 0.9em; + font-weight: normal; + margin-left: 0.5em; +} + +.button-link { + text-decoration: underline; +} + +.button-link:hover, .button-link:active { + text-decoration: none; + cursor: pointer; +} + +.member-group ul { + list-style: none; +} + +.member-group li { + /* for absolutely positioned anchors */ + position: relative; +} + +.anchor, +.anchor-param1, +.anchor-param2, +.anchor-param3, +.anchor-param4, +.anchor-param5, +.anchor-param6, +.anchor-param7, +.anchor-param8, +.anchor-param9 { + position: absolute; + top: -60px; + left: 0; +} + +.anchor:target ~ .member, +.anchor-param1:target ~ .member, +.anchor-param2:target ~ .member, +.anchor-param3:target ~ .member, +.anchor-param4:target ~ .member, +.anchor-param5:target ~ .member, +.anchor-param6:target ~ .member, +.anchor-param7:target ~ .member, +.anchor-param8:target ~ .member, +.anchor-param9:target ~ .member { + border-left: 3px solid #222832; +} + +.anchor:target ~ .member .name-decl, +.anchor-param1:target ~ .member .param1, +.anchor-param2:target ~ .member .param2, +.anchor-param3:target ~ .member .param3, +.anchor-param4:target ~ .member .param4, +.anchor-param5:target ~ .member .param5, +.anchor-param6:target ~ .member .param6, +.anchor-param7:target ~ .member .param7, +.anchor-param8:target ~ .member .param8, +.anchor-param9:target ~ .member .param9 { + font-weight: bold; +} + +.member { + border-left: 3px solid transparent; + margin: 0 auto 0.5rem; + background-color: #fff; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); + font-size: 0.9em; + padding: 10px; + color: #222832; +} + +.member:hover { + background-color: #f2f2f2; +} + +.member-left { + width: 25%; + display: inline; + float: left; + padding-right: 6px; + min-height: 1px; + text-align: right; +} + +.member-modifiers { + color: #000082; +} + +.member-main { + display: block; + overflow: hidden; +} + +.member-deprecated { + text-decoration: line-through; +} + +.member-selflink { + visibility: hidden; + display: inline; + float: left; + padding-right: 20px; + color: #222832; + text-decoration: none; +} + +.member-source-link { + visibility: hidden; + color: #fff; + background-color: #868e96; + display: inline-block; + margin-left: 1em; + padding: .25em .4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + vertical-align: bottom; + border-radius: .25rem +} + +.member-source-link:visited, .member-source-link:hover, .member-source-link:active { + color: #fff; +} + +.member:hover .member-source-link, .member:hover .member-selflink { + visibility: visible; +} + +.member.inherited, .member.hidden-member { + opacity: 0.75; +} + +.member.inherited .context { + color: gray; +} + +.member.with-page-link, .member.with-expandable-docs { + cursor: pointer; +} + +.member .expandable-docs-icon { + float: right; +} + +/* +Don't style a.name-decl as link +because the entire .member.with-page-link is effectively a link (via JS). +*/ +.member.with-page-link a.name-decl { + text-decoration: none; +} + +.expandable { + transform: scaleY(1); + transition: transform 0.25s; +} + +.expandable.collapsed { + transform: scaleY(0); +} + +.expandable.hidden { + display: none; +} + +#_declaration .expandable { + transform: none; + transition: none; +} + +#_declaration .expandable.collapsed { + mask: linear-gradient(rgb(0 0 0), transparent) content-box; + height: 100px; +} + +#_declaration .expandable.hidden { + display: block; +} + +/* show an otherwise hidden inherited member if it's a link target */ +.anchor:target + .expandable.collapsed.hidden { + display: inherit; + transform: scaleY(1); +} + +.doc-comment { + color: #103a51; + margin-top: 0.5rem; + font-family: "Open Sans", sans-serif; + font-size: 0.9em; +} + +.doc-comment p { + margin: 0.7em 0; +} + +.doc-comment p:first-child { + margin-top: 0; +} + +.doc-comment p:last-child { + margin-bottom: 0; +} + +.doc-comment h1, +.doc-comment h2, +.doc-comment h3, +.doc-comment h4, +.doc-comment h5, +.doc-comment h6 { + margin-bottom: 0.7em; + margin-top: 1.4em; + display: block; + text-align: left; + font-weight: bold; +} + +.doc-comment pre { + padding: 0.5em; + border: 0 solid #ddd; + background-color: #364550; + color: #ddd; + margin: 5px 0; + display: block; + border-radius: 0.2em; + overflow-x: auto; +} + +.doc-comment ul { + display: block; + list-style: circle; + padding-left: 20px; +} + +.doc-comment ol { + display: block; + padding-left:20px; +} + +.doc-comment ol.decimal { + list-style: decimal; +} + +.doc-comment ol.lowerAlpha { + list-style: lower-alpha; +} + +.doc-comment ol.upperAlpha { + list-style: upper-alpha; +} + +.doc-comment ol.lowerRoman { + list-style: lower-roman; +} + +.doc-comment ol.upperRoman { + list-style: upper-roman; +} + +.doc-comment li { + display: list-item; +} + +.doc-comment code { + font-weight: normal; +} + +.doc-comment em, .doc-comment i { + font-style: italic; +} + +.doc-comment strong, .doc-comment b { + font-weight: bold; +} + +.runtime-data.hidden { + display: none; +} + +.runtime-data .current-version { + font-weight: bold; +} + +/* +Styling for Markdown tables in doc comments. +From: https://gist.github.com/andyferra/2554919 +*/ + +table { + padding: 0; +} + +table tr { + border-top: 1px solid #cccccc; + background-color: white; + margin: 0; + padding: 0; +} + +table tr:nth-child(2n) { + background-color: #f8f8f8; +} + +table tr th { + font-weight: bold; + border: 1px solid #cccccc; + text-align: left; + margin: 0; + padding: 6px 13px; +} + +table tr td { + border: 1px solid #cccccc; + text-align: left; + margin: 0; + padding: 6px 13px; +} + +table tr th :first-child, table tr td :first-child { + margin-top: 0; +} + +table tr th :last-child, table tr td :last-child { + margin-bottom: 0; +} diff --git a/pkl-doc/src/test/kotlin/org/pkl/doc/CliDocGeneratorTest.kt b/pkl-doc/src/test/kotlin/org/pkl/doc/CliDocGeneratorTest.kt index e40604ba..78bc6a93 100644 --- a/pkl-doc/src/test/kotlin/org/pkl/doc/CliDocGeneratorTest.kt +++ b/pkl-doc/src/test/kotlin/org/pkl/doc/CliDocGeneratorTest.kt @@ -1,5 +1,5 @@ /* - * Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved. + * Copyright © 2024-2026 Apple Inc. and the Pkl project authors. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -75,6 +75,8 @@ class CliDocGeneratorTest { // Run the doc generator three times; second time adds new versions for the `birds` package @JvmStatic private fun generateDocs(): List = helper.generateDocs() + + @JvmStatic private fun generateSpDocs(): List = helper.generateSpDocs() } @Test @@ -159,6 +161,16 @@ class CliDocGeneratorTest { ) } + @ParameterizedTest + @MethodSource("generateSpDocs") + fun testSp(relativeFilePath: String) { + DocTestUtils.testExpectedFile( + helper.spExpectedOutputDir, + helper.spBaseActualOutputDir, + relativeFilePath, + ) + } + @Test fun `creates a symlink called current by default`(@TempDir tempDir: Path) { PackageServer.populateCacheDir(tempDir) diff --git a/pkl-doc/src/test/kotlin/org/pkl/doc/DocGeneratorTest.kt b/pkl-doc/src/test/kotlin/org/pkl/doc/DocGeneratorTest.kt index b2aa8d8f..d498a0db 100644 --- a/pkl-doc/src/test/kotlin/org/pkl/doc/DocGeneratorTest.kt +++ b/pkl-doc/src/test/kotlin/org/pkl/doc/DocGeneratorTest.kt @@ -24,8 +24,13 @@ class DocGeneratorTest { @Test @EnabledForJreRange(min = JRE.JAVA_21) fun `uses virtual thread executor on JDK 21+`() { - // On older JDKs, we get a ThreadPoolExecutor. - assertThat(DocGenerator.createDefaultExecutor().javaClass.canonicalName) - .isEqualTo("java.util.concurrent.ThreadPerTaskExecutor") + val executor = DocGenerator.createDefaultExecutor() + try { + // On older JDKs, we get a ThreadPoolExecutor. + assertThat(executor.javaClass.canonicalName) + .isEqualTo("java.util.concurrent.ThreadPerTaskExecutor") + } finally { + executor.shutdown() + } } } diff --git a/pkl-doc/src/test/kotlin/org/pkl/doc/DocGeneratorTestHelper.kt b/pkl-doc/src/test/kotlin/org/pkl/doc/DocGeneratorTestHelper.kt index 1e1cfd8a..222ed22b 100644 --- a/pkl-doc/src/test/kotlin/org/pkl/doc/DocGeneratorTestHelper.kt +++ b/pkl-doc/src/test/kotlin/org/pkl/doc/DocGeneratorTestHelper.kt @@ -40,6 +40,10 @@ class DocGeneratorTestHelper { projectDir.resolve("src/test/files/DocGeneratorTest/input").apply { assert(exists()) } } + private val spInputDir: Path by lazy { + projectDir.resolve("src/test/files/SinglePackageTest/input").apply { assert(exists()) } + } + internal val docsiteModule: URI by lazy { inputDir.resolve("docsite-info.pkl").apply { assert(exists()) }.toUri() } @@ -68,35 +72,85 @@ class DocGeneratorTestHelper { .map { it.toUri() } } + internal val spInputModules: List by lazy { + // intentionally not filtered + spInputDir.listFilesRecursively().map { it.toUri() } + } + internal val expectedOutputDir: Path by lazy { projectDir.resolve("src/test/files/DocGeneratorTest/output").createDirectories() } + internal val spExpectedOutputDir: Path by lazy { + projectDir.resolve("src/test/files/SinglePackageTest/output").createDirectories() + } + internal val expectedOutputFiles: List by lazy { expectedOutputDir.listFilesRecursively() } + internal val spExpectedOutputFiles: List by lazy { + spExpectedOutputDir.listFilesRecursively() + } + val baseActualOutputDir: Path by lazy { tempDir.resolve("work/DocGeneratorTest").createDirectories() } + val spBaseActualOutputDir: Path by lazy { + tempDir.resolve("work/SinglePackageTest").createDirectories() + } + val actualOutputDir: Path by lazy { baseActualOutputDir.resolve("run-1") } val actualOutputDir2: Path by lazy { baseActualOutputDir.resolve("run-2") } internal val actualOutputFiles: List by lazy { baseActualOutputDir.listFilesRecursively() } + internal val spActualOutputFiles: List by lazy { + spBaseActualOutputDir.listFilesRecursively() + } + internal val cacheDir: Path by lazy { tempDir.resolve("cache") } internal val expectedRelativeOutputFiles: List by lazy { - expectedOutputFiles.map { path -> - IoUtils.toNormalizedPathString(expectedOutputDir.relativize(path)).let { str -> - // Git will by default clone symlinks as shortcuts on Windows, and shortcuts have a - // `.lnk` extension. - if (IoUtils.isWindows() && str.endsWith(".lnk")) str.dropLast(4) else str - } - } + expectedOutputFiles.map { path -> relativeOutputPath(expectedOutputDir, path) } + } + + internal val spExpectedRelativeOutputFiles: List by lazy { + spExpectedOutputFiles.map { path -> relativeOutputPath(spExpectedOutputDir, path) } } internal val actualRelativeOutputFiles: List by lazy { - actualOutputFiles.map { IoUtils.toNormalizedPathString(baseActualOutputDir.relativize(it)) } + actualOutputFiles.map { relativeOutputPath(baseActualOutputDir, it) } + } + + internal val spActualRelativeOutputFiles: List by lazy { + spActualOutputFiles.map { relativeOutputPath(spBaseActualOutputDir, it) } + } + + internal val actualRelativeOutputFileSet: Set by lazy { + actualRelativeOutputFiles.toSet() + } + + internal val spActualRelativeOutputFileSet: Set by lazy { + spActualRelativeOutputFiles.toSet() + } + + private fun relativeOutputPath(baseDir: Path, path: Path): String { + return IoUtils.toNormalizedPathString(baseDir.relativize(path)).let { str -> + // Git will by default clone symlinks as shortcuts on Windows, and shortcuts have a + // `.lnk` extension. + if (IoUtils.isWindows() && str.endsWith(".lnk")) str.dropLast(4) else str + } + } + + private fun assertExpectedFilesGenerated(expectedFiles: List, actualFiles: Set) { + val missingFiles = expectedFiles - actualFiles + if (missingFiles.isNotEmpty()) { + val error = buildString { + appendLine("The following expected files were not actually generated:") + missingFiles.forEach { appendLine(it) } + } + Assertions.fail(error) + } } fun runPklDocCli(executable: Path, options: CliDocGeneratorOptions) { @@ -183,14 +237,7 @@ class DocGeneratorTestHelper { ) doGenerate(options2) - val missingFiles = expectedRelativeOutputFiles - actualRelativeOutputFiles - if (missingFiles.isNotEmpty()) { - val error = buildString { - appendLine("The following expected files were not actually generated:") - missingFiles.forEach { appendLine(it) } - } - Assertions.fail(error) - } + assertExpectedFilesGenerated(expectedRelativeOutputFiles, actualRelativeOutputFileSet) return actualRelativeOutputFiles } @@ -202,4 +249,21 @@ class DocGeneratorTestHelper { fun generateDocs(): List { return generateDocsWith { CliDocGenerator(it).run() } } + + fun generateSpDocs(): List { + PackageServer.populateCacheDir(cacheDir) + + val options = + CliDocGeneratorOptions( + CliBaseOptions(sourceModules = spInputModules, moduleCacheDir = cacheDir), + outputDir = spBaseActualOutputDir, + isTestMode = true, + noSymlinks = true, + ) + CliDocGenerator(options).run() + + assertExpectedFilesGenerated(spExpectedRelativeOutputFiles, spActualRelativeOutputFileSet) + + return spActualRelativeOutputFiles + } } diff --git a/pkl-doc/src/test/kotlin/org/pkl/doc/JavaExecutableTest.kt b/pkl-doc/src/test/kotlin/org/pkl/doc/JavaExecutableTest.kt index bfca1d95..59f35afa 100644 --- a/pkl-doc/src/test/kotlin/org/pkl/doc/JavaExecutableTest.kt +++ b/pkl-doc/src/test/kotlin/org/pkl/doc/JavaExecutableTest.kt @@ -1,5 +1,5 @@ /* - * Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved. + * Copyright © 2025-2026 Apple Inc. and the Pkl project authors. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,7 +33,7 @@ class JavaExecutableTest { helper.generateDocsWithCli(Executables.pkldoc.javaExecutable) } - @ParameterizedTest() + @ParameterizedTest @MethodSource("generateDocs") fun test(relativePath: String) { DocTestUtils.testExpectedFile( diff --git a/pkl-doc/src/test/kotlin/org/pkl/doc/NativeExecutableTest.kt b/pkl-doc/src/test/kotlin/org/pkl/doc/NativeExecutableTest.kt index 2fb013a5..d15371a6 100644 --- a/pkl-doc/src/test/kotlin/org/pkl/doc/NativeExecutableTest.kt +++ b/pkl-doc/src/test/kotlin/org/pkl/doc/NativeExecutableTest.kt @@ -1,5 +1,5 @@ /* - * Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved. + * Copyright © 2025-2026 Apple Inc. and the Pkl project authors. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,7 +34,7 @@ class NativeExecutableTest { } } - @ParameterizedTest() + @ParameterizedTest @MethodSource("generateDocs") fun test(relativePath: String) { DocTestUtils.testExpectedFile(
+

com.package1/current/index.html

+