Skip to content

Commit 6334e91

Browse files
authored
Fixed JavaDoc Website Embedding (#4557)
1 parent 78e8d8e commit 6334e91

7 files changed

Lines changed: 316 additions & 42 deletions

File tree

docs/website/assets/css/extended/cn1-javadoc-embed.css

Lines changed: 60 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,77 @@
22
max-width: min(1700px, 98vw);
33
}
44

5-
.post-single--api-javadoc .post-description {
6-
margin-top: 0.35rem;
7-
}
8-
9-
.post-single--api-javadoc .post-meta {
5+
.cn1-javadoc-links {
106
display: flex;
117
align-items: center;
128
gap: 0.55rem;
13-
margin-top: 0.7rem;
9+
margin: 0.4rem 0 1rem;
1410
font-size: 0.95rem;
1511
}
1612

17-
.cn1-api-javadoc-frame-wrap {
18-
margin-top: 1.1rem;
13+
.cn1-javadoc {
1914
border: 1px solid var(--border);
2015
border-radius: 12px;
21-
overflow: hidden;
16+
padding: 0.7rem;
2217
background: var(--entry);
18+
color: var(--content);
19+
--body-text-color: var(--content);
20+
--block-text-color: var(--content);
21+
--body-background-color: var(--entry);
22+
--section-background-color: var(--entry);
23+
--detail-background-color: var(--entry);
24+
--code-background-color: var(--code-bg);
25+
--pre-background-color: var(--code-bg);
26+
--pre-text-color: var(--content);
27+
--snippet-background-color: var(--code-bg);
28+
--snippet-text-color: var(--content);
29+
--table-header-color: color-mix(in srgb, var(--entry) 70%, var(--theme) 30%);
30+
--even-row-color: var(--entry);
31+
--odd-row-color: color-mix(in srgb, var(--entry) 90%, var(--theme) 10%);
32+
--border-color: var(--border);
33+
--title-color: var(--primary);
34+
--link-color: var(--primary);
35+
--link-color-active: var(--primary);
36+
--toc-background-color: var(--theme);
37+
--toc-hover-color: color-mix(in srgb, var(--entry) 80%, var(--theme) 20%);
38+
--toc-highlight-color: color-mix(in srgb, var(--entry) 70%, var(--theme) 30%);
39+
--navbar-background-color: color-mix(in srgb, var(--entry) 70%, #1f4a75 30%);
40+
--navbar-text-color: var(--primary);
41+
--subnav-background-color: color-mix(in srgb, var(--entry) 78%, var(--theme) 22%);
42+
--subnav-link-color: var(--primary);
43+
--selected-background-color: color-mix(in srgb, var(--primary) 26%, var(--entry) 74%);
44+
--selected-text-color: var(--content);
45+
--search-input-background-color: var(--entry);
46+
--search-input-text-color: var(--content);
47+
--search-input-placeholder-color: var(--secondary);
48+
}
49+
50+
.cn1-javadoc .main-grid {
51+
margin: 0;
2352
}
2453

25-
.cn1-api-javadoc-frame {
26-
display: block;
27-
width: 100%;
28-
height: min(76vh, 1200px);
29-
border: 0;
30-
background: #fff;
54+
.cn1-javadoc a {
55+
color: var(--primary);
3156
}
3257

33-
@media (max-width: 900px) {
34-
.cn1-api-javadoc-frame {
35-
height: 72vh;
36-
}
58+
body.dark .cn1-javadoc {
59+
background: var(--theme);
60+
--body-background-color: var(--theme);
61+
--section-background-color: var(--theme);
62+
--detail-background-color: var(--theme);
63+
--table-header-color: color-mix(in srgb, var(--theme) 70%, #1b2b40 30%);
64+
--even-row-color: var(--theme);
65+
--odd-row-color: color-mix(in srgb, var(--theme) 86%, #0d1726 14%);
66+
--toc-background-color: #101a2a;
67+
--toc-hover-color: #172439;
68+
--toc-highlight-color: #1d2d45;
69+
--navbar-background-color: #1b2d45;
70+
--subnav-background-color: #152235;
71+
--subnav-link-color: #cfe2ff;
72+
--link-color: #b7d2ff;
73+
--link-color-active: #d6e6ff;
74+
--title-color: #e3edff;
75+
--search-input-background-color: #111b2b;
76+
--search-input-text-color: #e9eef7;
77+
--search-input-placeholder-color: #8ea1bc;
3778
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
(() => {
2+
const root = document.querySelector(".cn1-javadoc");
3+
if (!root) return;
4+
5+
const toRoute = (href) => {
6+
let url;
7+
try {
8+
url = new URL(href, window.location.href);
9+
} catch (_e) {
10+
return null;
11+
}
12+
if (url.origin !== window.location.origin) return null;
13+
if (!url.pathname.startsWith("/javadoc")) return null;
14+
if (!url.pathname.endsWith(".html")) return null;
15+
return url.pathname === "/javadoc/index.html"
16+
? { fetchPath: "/javadoc/_index-raw.html", browserPath: "/javadoc/" }
17+
: { fetchPath: url.pathname, browserPath: url.pathname };
18+
};
19+
20+
const calcPathToRoot = (fetchPath) => {
21+
const rel = fetchPath.replace(/^\/javadoc\//, "");
22+
const depth = Math.max(0, rel.split("/").length - 1);
23+
return depth === 0 ? "./" : "../".repeat(depth);
24+
};
25+
26+
const loadIntoContainer = async (route, pushState) => {
27+
const res = await fetch(route.fetchPath, { credentials: "same-origin" });
28+
if (!res.ok) return;
29+
const html = await res.text();
30+
const doc = new DOMParser().parseFromString(html, "text/html");
31+
if (!doc.body) return;
32+
root.innerHTML = doc.body.innerHTML;
33+
window.pathtoroot = calcPathToRoot(route.fetchPath);
34+
if (typeof window.loadScripts === "function") {
35+
window.loadScripts(document, "script");
36+
}
37+
if (pushState) {
38+
window.history.pushState({ cn1Javadoc: route.browserPath }, "", route.browserPath);
39+
}
40+
window.scrollTo({ top: 0, behavior: "auto" });
41+
};
42+
43+
root.addEventListener("click", (event) => {
44+
const link = event.target.closest("a[href]");
45+
if (!link || link.target || link.hasAttribute("download")) return;
46+
if (link.getAttribute("href").startsWith("#")) return;
47+
const route = toRoute(link.href);
48+
if (!route) return;
49+
event.preventDefault();
50+
loadIntoContainer(route, true).catch(() => {});
51+
});
52+
53+
window.addEventListener("popstate", () => {
54+
const route = toRoute(window.location.href);
55+
if (!route) return;
56+
loadIntoContainer(route, false).catch(() => {});
57+
});
58+
})();

docs/website/content/api.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: "API"
33
date: 2015-03-03
44
slug: "javadoc"
55
layout: "api-javadoc"
6-
description: "Codename One JavaDoc embedded in the Codename One website."
6+
description: "Codename One JavaDoc"
77
aliases:
88
- /api/
99
---
Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,21 @@
11
{{- define "main" -}}
22
<article class="post-single post-single--api-javadoc">
3-
<header class="post-header">
4-
{{ partial "breadcrumbs.html" . }}
5-
<h1 class="post-title entry-hint-parent">{{ .Title }}</h1>
6-
<div class="post-description">
7-
Browse the Codename One JavaDoc with the standard website navigation and theme.
8-
</div>
9-
<div class="post-meta">
10-
<a href="/javadoc/_index-raw.html">Open raw JavaDoc</a>
11-
<span>&middot;</span>
12-
<a href="/files/javadocs.zip">Download ZIP</a>
13-
</div>
14-
</header>
3+
<div class="cn1-javadoc-links">
4+
<a href="/javadoc/_index-raw.html">Open raw JavaDoc</a>
5+
<span>&middot;</span>
6+
<a href="/files/javadocs.zip">Download ZIP</a>
7+
</div>
158

16-
<div class="cn1-api-javadoc-frame-wrap">
17-
<iframe
18-
class="cn1-api-javadoc-frame"
19-
src="/javadoc/_index-raw.html"
20-
title="Codename One JavaDoc"
21-
loading="lazy">
22-
</iframe>
9+
<div class="cn1-javadoc">
10+
{{- $javadocFragment := "generated/javadoc-content.html" -}}
11+
{{- if fileExists $javadocFragment -}}
12+
{{- readFile $javadocFragment | safeHTML -}}
13+
{{- else -}}
14+
<p>
15+
JavaDoc content isn't generated in this build.
16+
Run the website build with <code>WEBSITE_INCLUDE_JAVADOCS=true</code>.
17+
</p>
18+
{{- end -}}
2319
</div>
2420
</article>
2521
{{- end -}}

docs/website/layouts/partials/extend_head.html

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,19 @@
1111
</style>
1212
{{- end -}}
1313
{{- end -}}
14+
{{- if eq .Layout "api-javadoc" -}}
15+
{{- $javadocCssPath := "static/javadoc/resource-files/stylesheet-scoped.css" -}}
16+
{{- if fileExists $javadocCssPath -}}
17+
<style>
18+
{{ readFile $javadocCssPath | safeCSS }}
19+
</style>
20+
{{- end -}}
21+
<script type="text/javascript" src="/javadoc/script-files/script.js"></script>
22+
<script type="text/javascript" src="/javadoc/script-files/jquery-3.7.1.min.js"></script>
23+
<script type="text/javascript" src="/javadoc/script-files/jquery-ui.min.js"></script>
24+
<script type="text/javascript" src="/javadoc/script-files/highlight.min.js"></script>
25+
<script type="text/javascript" src="/javadoc/script-files/javadoc-highlight-init.js"></script>
26+
{{- end -}}
1427
{{- with site.GetPage "section" "blog" -}}
1528
{{- with .OutputFormats.Get "RSS" -}}
1629
<link rel="alternate" type="{{ .MediaType.Type }}" href="{{ .Permalink }}" title="{{ site.Title }} Blog RSS">

docs/website/layouts/partials/footer.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,15 @@ <h3>Important Links</h3>
6464
{{- $cn1Demo := resources.Get "js/cn1-demo.js" | minify | fingerprint }}
6565
{{- $cn1Pricing := resources.Get "js/cn1-pricing.js" | minify | fingerprint }}
6666
{{- $cn1Crisp := resources.Get "js/cn1-crisp.js" | minify | fingerprint }}
67+
{{- $cn1Javadoc := resources.Get "js/cn1-javadoc.js" | minify | fingerprint }}
6768
<script defer src="{{ $cn1Site.RelPermalink }}" integrity="{{ $cn1Site.Data.Integrity }}"></script>
6869
<script defer src="{{ $cn1Home.RelPermalink }}" integrity="{{ $cn1Home.Data.Integrity }}"></script>
6970
<script defer src="{{ $cn1Demo.RelPermalink }}" integrity="{{ $cn1Demo.Data.Integrity }}"></script>
7071
<script defer src="{{ $cn1Pricing.RelPermalink }}" integrity="{{ $cn1Pricing.Data.Integrity }}"></script>
7172
<script defer src="{{ $cn1Crisp.RelPermalink }}" integrity="{{ $cn1Crisp.Data.Integrity }}"></script>
73+
{{- if eq .Layout "api-javadoc" -}}
74+
<script defer src="{{ $cn1Javadoc.RelPermalink }}" integrity="{{ $cn1Javadoc.Data.Integrity }}"></script>
75+
{{- end -}}
7276

7377
<script>
7478
let menu = document.getElementById('menu')

0 commit comments

Comments
 (0)