Skip to content

Commit

Permalink
Add not found page
Browse files Browse the repository at this point in the history
  • Loading branch information
vmishenev committed Sep 20, 2021
1 parent 7fd9421 commit 24d41b3
Show file tree
Hide file tree
Showing 6 changed files with 223 additions and 6 deletions.
2 changes: 2 additions & 0 deletions docs/src/doc/docs/user_guide/versioning/versioning.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ Versioning can be configured using:
By default, Dokka will try to use semantic versioning to create such ordering.
* renderVersionsNavigationOnAllPages - a bool value.
By default, Dokka renders a versions navigation on all pages.

!!! note
You should enable the plugin in all submodules to render a versions navigation on all pages.

Above configuration should be placed under the `pluginsConfiguration` block specific for your build tool.
Expand Down
6 changes: 6 additions & 0 deletions plugins/versioning/api/versioning.api
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,11 @@ public final class org/jetbrains/dokka/versioning/MultiModuleStylesInstaller : o
public fun invoke (Lorg/jetbrains/dokka/pages/RootPageNode;)Lorg/jetbrains/dokka/pages/RootPageNode;
}

public final class org/jetbrains/dokka/versioning/NotFoundPageInstaller : org/jetbrains/dokka/transformers/pages/PageTransformer {
public fun <init> (Lorg/jetbrains/dokka/plugability/DokkaContext;)V
public fun invoke (Lorg/jetbrains/dokka/pages/RootPageNode;)Lorg/jetbrains/dokka/pages/RootPageNode;
}

public final class org/jetbrains/dokka/versioning/ReplaceVersionCommandConsumer : org/jetbrains/dokka/base/templating/ImmediateHtmlCommandConsumer {
public fun <init> (Lorg/jetbrains/dokka/plugability/DokkaContext;)V
public fun canProcess (Lorg/jetbrains/dokka/base/templating/Command;)Z
Expand Down Expand Up @@ -116,6 +121,7 @@ public final class org/jetbrains/dokka/versioning/VersioningPlugin : org/jetbrai
public final fun getCssStyleInstaller ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getDefaultVersioningNavigationCreator ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getDefaultVersioningStorage ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getNotFoundPageInstaller ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getPreviousDocumentationCopyPostAction ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getReplaceVersionCommandHandler ()Lorg/jetbrains/dokka/plugability/Extension;
public final fun getResolveLinkConsumer ()Lorg/jetbrains/dokka/plugability/Extension;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,15 @@ class VersioningPlugin : DokkaPlugin() {
val cssStyleInstaller by extending {
dokkaBase.htmlPreprocessors providing ::MultiModuleStylesInstaller order {
after(dokkaBase.assetsInstaller)
before(dokkaBase.baseSearchbarDataInstaller)
before(dokkaBase.customResourceInstaller)
}
}
val notFoundPageInstaller by extending {
dokkaBase.htmlPreprocessors providing ::NotFoundPageInstaller order {
after(dokkaBase.assetsInstaller)
before(dokkaBase.customResourceInstaller)
} applyIf { !delayTemplateSubstitution }
}
val versionsDefaultOrdering by extending {
versionsOrdering providing { ctx ->
configuration<VersioningPlugin, VersioningConfiguration>(ctx)?.versionsOrdering?.let {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import org.jetbrains.dokka.plugability.DokkaContext
import org.jetbrains.dokka.plugability.configuration
import org.jetbrains.dokka.plugability.plugin
import org.jetbrains.dokka.plugability.querySingle
import org.jetbrains.dokka.utilities.urlEncoded
import java.io.File

interface VersionsNavigationCreator {
Expand Down Expand Up @@ -62,13 +63,14 @@ class HtmlVersionsNavigationCreator(private val context: DokkaContext) : Version
?.exists() == true

val absolutePath =
if(isExistsFile) path?.resolve(relativePosition) else path?.resolve("index.html")

a(href = absolutePath?.toRelativeString(position)) {
if (isExistsFile)
text(version)
path?.resolve(relativePosition)
else
strike { text(version) }
versioningStorage.currentVersion.dir.resolve("not-found-version.html")

a(href = absolutePath?.toRelativeString(position) +
if (!isExistsFile) "?v=" + version.urlEncoded() else "") {
text(version)
}
}
}
Expand Down
12 changes: 12 additions & 0 deletions plugins/versioning/src/main/kotlin/versioning/htmlPreprocessors.kt
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,17 @@ class MultiModuleStylesInstaller(private val dokkaContext: DokkaContext) : PageT
}
}

class NotFoundPageInstaller(private val dokkaContext: DokkaContext) : PageTransformer {
private val notFoundPage = listOf(
"not-found-version.html",
)

override fun invoke(input: RootPageNode): RootPageNode =
input.let { root ->
if (dokkaContext.configuration.delayTemplateSubstitution) root
else root.modified(children = input.children + notFoundPage.toRenderSpecificResourcePage())
}
}

private fun List<String>.toRenderSpecificResourcePage(): List<RendererSpecificResourcePage> =
map { RendererSpecificResourcePage(it, emptyList(), RenderingStrategy.Copy("/dokka/$it")) }
189 changes: 189 additions & 0 deletions plugins/versioning/src/main/resources/dokka/not-found-version.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Unavailable page</title>
<style>
.article-content h1._big {
text-transform: uppercase;
color: #161616;
font-size: 54px;
font-weight: 800;
line-height: 45px;
}
.sub-title {
margin-bottom: 40px;
font-size: 20px;
font-weight: 400;
line-height: 30px;
}
.margin-top-vertical-unit-half {
margin-top: 25px;
}
.wt-row_size_m {
--wt-horizontal-layout-gutter: 16px;
}
.article-content {
color: #343434;
font-family: system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen, Ubuntu, Cantarell, Droid Sans, Helvetica Neue, Arial, sans-serif;
font-size: 14px;
font-weight: 400;
line-height: 25px;
}
.wt-container {
width: 100%;
margin-left: auto;
margin-right: auto;
-webkit-box-sizing: border-box;
box-sizing: border-box;
padding-left: 22px;
padding-right: 22px;
max-width: 1276px;
}
.wt-col-5 {
--wt-col-count: 5;
}
.wt-col-3 {
--wt-col-count: 3;
}
.page-404__logo {
position: relative;
display: flex;
}
.wt-row, .wt-row_wide {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
}
[class*="wt-col"] {
-ms-flex-preferred-size: calc(8.33333%*var(--wt-col-count) - var(--wt-horizontal-layout-gutter)*2);
flex-basis: calc(8.33333%*var(--wt-col-count) - var(--wt-horizontal-layout-gutter)*2);
max-width: calc(8.33333%*var(--wt-col-count) - var(--wt-horizontal-layout-gutter)*2);
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.wt-row_size_m {
--wt-horizontal-layout-gutter: 16px;
}
[class*="wt-col"], [class*="wt-col"].wt-row {
margin-right: var(--wt-horizontal-layout-gutter);
margin-left: var(--wt-horizontal-layout-gutter);
}
.wt-row_justify_center {
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
}
.page-404__logo .sprite-img._404 {
position: absolute;
width: 100%;
height: 100%;
}
.page-404__logo::before {
float: left;
padding-bottom: 100%;
content: "";
}
.page-404__beam {
position: absolute;
left: -50%;
top: -50%;
width: 587px;
height: 636px;
z-index: -1;
}
.heavy {
font-size: 14px;
font-weight: bold;
}
</style>
</head>
<body>
<script type="text/javascript">
function getUrlParams(url) {

var queryString = url ? url.split('?')[1] : window.location.search.slice(1);
var obj = {};

if (queryString) {
queryString = queryString.split('#')[0];

var arr = queryString.split('&');

for (var i = 0; i < arr.length; i++) {
var a = arr[i].split('=');

var paramName = a[0];
var paramValue = typeof (a[1]) === 'undefined' ? true : a[1];

paramName = paramName.toLowerCase();
if (typeof paramValue === 'string') paramValue = paramValue.toLowerCase();

if (!obj[paramName]) {
obj[paramName] = paramValue;
}
}
}
return obj;
}
window.onload = function() {
document.getElementById("version").textContent = getUrlParams()['v']
}
</script>

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
style="position: absolute; width: 0; height: 0" id="__SVG_SPRITE_NODE__">
<symbol xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 64 64" id="404">
<g>
<rect y="0" width="64" height="64"></rect>
<rect x="5.9" y="52" fill="#fff" width="24" height="4"></rect>
<text x="5" y="20" fill="#fff" class="heavy">NOT</text>
<text x="5" y="35" fill="#fff" class="heavy">FOUND</text>
</g>
</symbol>
<symbol xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="183 -134 978 1061"
id="page-404-beam">
<g style="opacity:0.49;">
<path style="fill-opacity:0;stroke:#D9D9D9;stroke-dasharray:10,3;"
d="M1117.5,424.5l-535-476l87,449L1117.5,424.5z"></path>
<path style="fill-opacity:0;stroke:#E1E1E1;stroke-dasharray:10,3;"
d="M1118.3,465.9c-23.3,0-42.2-18.9-42.2-42.2 s18.9-42.2,42.2-42.2c23.3,0,42.2,18.9,42.2,42.2S1141.6,465.9,1118.3,465.9z M583.6,34.4c-46.3,0-83.9-37.6-83.9-83.9 s37.6-83.9,83.9-83.9s83.9,37.6,83.9,83.9S630,34.4,583.6,34.4z M536.2,841.7c0,46.8-37.9,84.8-84.7,84.8s-84.7-37.9-84.7-84.8 s37.9-84.8,84.7-84.8S536.2,794.9,536.2,841.7z M273.9,263.1c-49.9,0-90.4-40.5-90.4-90.4s40.5-90.4,90.4-90.4s90.4,40.5,90.4,90.4 S323.8,263.1,273.9,263.1z"></path>
<path style="fill:#FFFFFF;fill-opacity:0;stroke:#CCCCCC;stroke-linejoin:round;"
d="M1138.3,460.8L494,916l-0.4-0.7 c-12.4,7.1-26.8,11.2-42.2,11.2c-46.8,0-84.8-37.9-84.8-84.8c0-34.5,20.6-64.1,50.2-77.4l638.2-348l-470.3-382L417,173.1 l222.9,172.2c13.4,5.4,22.8,18.5,22.8,33.8c0,20.2-16.3,36.5-36.5,36.5c-9.8,0-18.6-3.8-25.2-10.1L242.9,257.6 c-2.2-0.8-4.3-1.7-6.3-2.6l-2-0.8l0-0.1c-30.2-14.6-51.1-45.6-51.1-81.4c0-28.6,13.3-54.1,34.1-70.7l0-0.3l321.1-222.2l0.2,0 c13-8.2,28.3-13,44.8-13c25.1,0,47.7,11.1,63,28.6l497.7,495.4c9.8,7.7,16.2,19.7,16.2,33.2 C1160.5,439.7,1151.5,453.7,1138.3,460.8z"></path>
<path style="fill-opacity:0;stroke:#D9D9D9;stroke-dasharray:10,3;"
d="M451.5,849.5l219-452l-398-223L451.5,849.5z"></path>
<g>
<path style="fill:#CDCDCD;"
d="M608.5,58.4l-5.7-5.1l-3.1,6.9l-0.7-0.6l3.1-6.9l-0.1-0.1l0.4-0.8l6.5,5.8L608.5,58.4z"></path>
<path style="fill:#CDCDCD;"
d="M353.8,220.4l3.1,6.9l-0.9,0.1l-3.1-6.9l-0.2,0l-0.4-0.8l8.6-1l0.4,0.8L353.8,220.4z"></path>
<path style="fill:#CDCDCD;"
d="M1041.4,418.5l-7.2,4.9l-0.7-0.5l6.3-4.3l-6-4.7l0.8-0.5l6,4.7l0.1-0.1L1041.4,418.5z"></path>
<path style="fill:#CDCDCD;"
d="M528.6,699.3l-6.9,3.1l0,0.2l-0.8,0.4l-1-8.6l0.8-0.4l0.8,7.6l6.9-3.1L528.6,699.3z"></path>
</g>
</g>
</symbol>
</svg>
<div class="wt-container article-content">
<div class="wt-row wt-row_size_m wt-row_justify_center">
<div class="wt-col-3">
<div class="page-404__logo">
<svg class="sprite-img _404">
<use xlink:href="#404"></use>
</svg>
<svg class="page-404__beam">
<use xlink:href="#page-404-beam"></use>
</svg>
</div>
</div>
<div class="wt-col-5">
<h1 class="_big">uh-oh!</h1>
<div class="sub-title margin-top-vertical-unit-half">You are requesting a page that not
available in documentation version <span id="version"></span>
</div>
</div>
</div>
</div>
</body>
</html>

0 comments on commit 24d41b3

Please sign in to comment.