From ef77630c2a0b759b7ff8a2e3e6dbe07ba26b9fa1 Mon Sep 17 00:00:00 2001 From: liannacasper <67953602+liannacasper@users.noreply.github.com> Date: Sat, 4 Apr 2026 16:24:18 +0300 Subject: [PATCH 1/3] Switch JavaDoc pipeline to Java 26 and drop custom dark theme overrides --- .github/scripts/build_javadocs.sh | 2 +- .github/workflows/javadocs.yml | 9 ++- .github/workflows/pr.yml | 4 +- .github/workflows/website-docs.yml | 4 +- .../assets/css/extended/cn1-javadoc-embed.css | 70 ------------------- 5 files changed, 9 insertions(+), 80 deletions(-) diff --git a/.github/scripts/build_javadocs.sh b/.github/scripts/build_javadocs.sh index fc257a64f8..fba7c2ff5e 100755 --- a/.github/scripts/build_javadocs.sh +++ b/.github/scripts/build_javadocs.sh @@ -6,7 +6,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)" CN1_DIR="$ROOT_DIR/CodenameOne" -JDK_HOME="${JDK_25_HOME:-${JAVA_HOME:-}}" +JDK_HOME="${JDK_26_HOME:-${JAVA_HOME:-}}" if [ -n "$JDK_HOME" ] && [ -x "$JDK_HOME/bin/javadoc" ]; then JAVADOC_CMD="$JDK_HOME/bin/javadoc" else diff --git a/.github/workflows/javadocs.yml b/.github/workflows/javadocs.yml index 54ac0c5fc5..f70e973ebf 100644 --- a/.github/workflows/javadocs.yml +++ b/.github/workflows/javadocs.yml @@ -20,14 +20,14 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Set up Java 25 + - name: Set up Java 26 uses: actions/setup-java@v4 with: distribution: temurin - java-version: '25' + java-version: '26' - - name: Capture Java 25 path - run: echo "JDK_25_HOME=$JAVA_HOME" >> "$GITHUB_ENV" + - name: Capture Java 26 path + run: echo "JDK_26_HOME=$JAVA_HOME" >> "$GITHUB_ENV" - name: Build JavaDocs run: ./.github/scripts/build_javadocs.sh @@ -47,4 +47,3 @@ jobs: with: files: | CodenameOne/javadocs.zip - diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index eeb5d789e7..98b44a16d7 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -282,12 +282,12 @@ jobs: if: matrix.java-version == 8 run: ant -noinput -buildfile CodenameOne/build.xml weeklyLibUpdate - - name: Set up Java 25 for JavaDocs + - name: Set up Java 26 for JavaDocs if: matrix.java-version == 8 uses: actions/setup-java@v4 with: distribution: temurin - java-version: '25' + java-version: '26' - name: Build JavaDocs if: matrix.java-version == 8 diff --git a/.github/workflows/website-docs.yml b/.github/workflows/website-docs.yml index 8628fa59db..9d39db7f7d 100644 --- a/.github/workflows/website-docs.yml +++ b/.github/workflows/website-docs.yml @@ -76,11 +76,11 @@ jobs: env: GITHUB_TOKEN: ${{ github.token }} - - name: Set up Java 25 for website build + - name: Set up Java 26 for website build uses: actions/setup-java@v4 with: distribution: temurin - java-version: '25' + java-version: '26' - name: Build website run: | diff --git a/docs/website/assets/css/extended/cn1-javadoc-embed.css b/docs/website/assets/css/extended/cn1-javadoc-embed.css index 887b2c51f3..4a0fa9c704 100644 --- a/docs/website/assets/css/extended/cn1-javadoc-embed.css +++ b/docs/website/assets/css/extended/cn1-javadoc-embed.css @@ -34,39 +34,7 @@ body.cn1-javadoc-page .main:has(> .post-single--api-javadoc) { border: 1px solid var(--border); border-radius: 0; padding: 0.7rem; - background: var(--entry); - color: var(--content); overflow: visible; - --code-bg: color-mix(in srgb, var(--entry) 90%, var(--theme) 10%); - --body-text-color: var(--content) !important; - --block-text-color: var(--content) !important; - --body-background-color: var(--entry) !important; - --section-background-color: var(--entry) !important; - --detail-background-color: var(--entry) !important; - --code-background-color: var(--code-bg); - --pre-background-color: var(--code-bg); - --pre-text-color: var(--content); - --snippet-background-color: var(--code-bg); - --snippet-text-color: var(--content); - --table-header-color: color-mix(in srgb, var(--entry) 70%, var(--theme) 30%) !important; - --even-row-color: var(--entry) !important; - --odd-row-color: color-mix(in srgb, var(--entry) 90%, var(--theme) 10%) !important; - --border-color: var(--border) !important; - --title-color: var(--primary) !important; - --link-color: var(--primary) !important; - --link-color-active: var(--primary) !important; - --toc-background-color: var(--theme) !important; - --toc-hover-color: color-mix(in srgb, var(--entry) 80%, var(--theme) 20%) !important; - --toc-highlight-color: color-mix(in srgb, var(--entry) 70%, var(--theme) 30%) !important; - --navbar-background-color: color-mix(in srgb, var(--entry) 70%, #1f4a75 30%) !important; - --navbar-text-color: var(--primary) !important; - --subnav-background-color: color-mix(in srgb, var(--entry) 78%, var(--theme) 22%) !important; - --subnav-link-color: var(--primary) !important; - --selected-background-color: color-mix(in srgb, var(--primary) 26%, var(--entry) 74%) !important; - --selected-text-color: var(--content) !important; - --search-input-background-color: var(--entry) !important; - --search-input-text-color: var(--content) !important; - --search-input-placeholder-color: var(--secondary) !important; } .cn1-javadoc .main-grid { @@ -129,41 +97,3 @@ body.cn1-javadoc-page .main:has(> .post-single--api-javadoc) { border-color: var(--border) !important; color: var(--content) !important; } - -.cn1-javadoc pre, -.cn1-javadoc code, -.cn1-javadoc pre code, -.cn1-javadoc .snippet-container, -.cn1-javadoc .snippet-container pre, -.cn1-javadoc .block pre, -.cn1-javadoc .block code { - background: var(--code-bg) !important; - color: var(--content) !important; -} - -.cn1-javadoc a { - color: var(--primary); -} - -body.dark .cn1-javadoc { - background: var(--theme); - --code-bg: #141f31; - --body-background-color: var(--theme) !important; - --section-background-color: var(--theme) !important; - --detail-background-color: var(--theme) !important; - --table-header-color: color-mix(in srgb, var(--theme) 70%, #1b2b40 30%) !important; - --even-row-color: var(--theme) !important; - --odd-row-color: color-mix(in srgb, var(--theme) 86%, #0d1726 14%) !important; - --toc-background-color: #101a2a !important; - --toc-hover-color: #172439 !important; - --toc-highlight-color: #1d2d45 !important; - --navbar-background-color: #1b2d45 !important; - --subnav-background-color: #152235 !important; - --subnav-link-color: #cfe2ff !important; - --link-color: #b7d2ff !important; - --link-color-active: #d6e6ff !important; - --title-color: #e3edff !important; - --search-input-background-color: #111b2b !important; - --search-input-text-color: #e9eef7 !important; - --search-input-placeholder-color: #8ea1bc !important; -} From 76997105358bf93663389e6ffdf2de495c826704 Mon Sep 17 00:00:00 2001 From: liannacasper <67953602+liannacasper@users.noreply.github.com> Date: Sat, 4 Apr 2026 18:55:44 +0300 Subject: [PATCH 2/3] Fix embedded JavaDoc native theming and search selector scoping --- docs/website/assets/js/cn1-javadoc.js | 18 ++++++++++++++++++ scripts/website/build.sh | 9 +++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/docs/website/assets/js/cn1-javadoc.js b/docs/website/assets/js/cn1-javadoc.js index 32f1511f43..0e1be7a160 100644 --- a/docs/website/assets/js/cn1-javadoc.js +++ b/docs/website/assets/js/cn1-javadoc.js @@ -8,6 +8,22 @@ } let currentDocPath = "/javadoc/_index-raw.html"; + let bodyThemeObserver = null; + + const syncEmbeddedTheme = () => { + const dark = document.body.classList.contains("dark"); + root.classList.toggle("dark-mode", dark); + root.classList.toggle("theme-dark", dark); + root.classList.toggle("theme-light", !dark); + root.dataset.theme = dark ? "dark" : "light"; + root.style.colorScheme = dark ? "dark" : "light"; + }; + + const observeThemeChanges = () => { + if (bodyThemeObserver) return; + bodyThemeObserver = new MutationObserver(syncEmbeddedTheme); + bodyThemeObserver.observe(document.body, { attributes: true, attributeFilter: ["class"] }); + }; const reviveSearchUi = () => { const inputs = root.querySelectorAll('input[type="search"], input#search-input, #search-input'); @@ -134,6 +150,8 @@ window.addEventListener("resize", clampSearchPopup); root.addEventListener("input", clampSearchPopup, true); root.addEventListener("focusin", clampSearchPopup, true); + observeThemeChanges(); + syncEmbeddedTheme(); ensureSearchAssets(currentDocPath); })(); diff --git a/scripts/website/build.sh b/scripts/website/build.sh index c4c8f6118f..9695e22d1b 100755 --- a/scripts/website/build.sh +++ b/scripts/website/build.sh @@ -208,8 +208,13 @@ def transform_selector(sel): return sel if PREFIX in sel: return sel - if sel in ("html", "body", ":root"): - return PREFIX + for root_sel in ("html", "body", ":root"): + if sel == root_sel: + return PREFIX + if sel.startswith(root_sel): + suffix = sel[len(root_sel):] + if not suffix or suffix[0] in ".#:[ >+~": + return f"{PREFIX}{suffix}" return f"{PREFIX} {sel}" def extract_block(text, start): From 4067afbf22342092d33ecfb9303506617d90287c Mon Sep 17 00:00:00 2001 From: liannacasper <67953602+liannacasper@users.noreply.github.com> Date: Sat, 4 Apr 2026 19:28:40 +0300 Subject: [PATCH 3/3] Fix root selector prefixing for embedded JavaDoc dark theme rules --- scripts/website/build.sh | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/scripts/website/build.sh b/scripts/website/build.sh index 9695e22d1b..4f3ab327eb 100755 --- a/scripts/website/build.sh +++ b/scripts/website/build.sh @@ -208,13 +208,39 @@ def transform_selector(sel): return sel if PREFIX in sel: return sel - for root_sel in ("html", "body", ":root"): - if sel == root_sel: + remainder = sel + rooted = False + direct_attach = False + while True: + for root_sel in ("html", "body", ":root"): + if remainder == root_sel: + remainder = "" + rooted = True + break + if remainder.startswith(root_sel): + suffix = remainder[len(root_sel):] + if not suffix: + remainder = "" + rooted = True + break + if suffix[0] in ".#:[": + remainder = suffix + rooted = True + direct_attach = True + break + if suffix[0].isspace(): + remainder = suffix.lstrip() + rooted = True + direct_attach = False + break + else: + break + if rooted: + if not remainder: return PREFIX - if sel.startswith(root_sel): - suffix = sel[len(root_sel):] - if not suffix or suffix[0] in ".#:[ >+~": - return f"{PREFIX}{suffix}" + if direct_attach and remainder[0] in ".#:[": + return f"{PREFIX}{remainder}" + return f"{PREFIX} {remainder}" return f"{PREFIX} {sel}" def extract_block(text, start):