1
0
forked from rosa/hakurei

cmd/pkgserver: fix dark mode in test web UI

This commit is contained in:
Kat
2026-03-22 06:14:10 +11:00
parent 96acdd696c
commit 1e8fc8e20c
14 changed files with 80 additions and 20 deletions

View File

@@ -28,15 +28,24 @@ func serveStaticContent(w http.ResponseWriter, r *http.Request) {
case "/static/test.js": case "/static/test.js":
http.ServeFileFS(w, r, content, "ui/static/test.js") http.ServeFileFS(w, r, content, "ui/static/test.js")
case "/static/test.css": case "/static/test.css":
http.ServeFileFS(w, r, content, "ui/static/test.css") darkTheme := r.CookiesNamed("dark_theme")
if len(darkTheme) > 0 && darkTheme[0].Value == "true" {
http.ServeFileFS(w, r, content, "ui/static/test_dark.css")
} else {
http.ServeFileFS(w, r, content, "ui/static/test_light.css")
}
case "/static/all_tests.js": case "/static/all_tests.js":
http.ServeFileFS(w, r, content, "ui/static/all_tests.js") http.ServeFileFS(w, r, content, "ui/static/all_tests.js")
case "/static/test_tests.js": case "/static/test_tests.js":
http.ServeFileFS(w, r, content, "ui/static/test_tests.js") http.ServeFileFS(w, r, content, "ui/static/test_tests.js")
case "/static/success-closed.svg": case "/static/success-closed-white.svg":
http.ServeFileFS(w, r, content, "ui/static/success-closed.svg") http.ServeFileFS(w, r, content, "ui/static/success-closed-white.svg")
case "/static/success-open.svg": case "/static/success-open-white.svg":
http.ServeFileFS(w, r, content, "ui/static/success-open.svg") http.ServeFileFS(w, r, content, "ui/static/success-open-white.svg")
case "/static/success-closed-black.svg":
http.ServeFileFS(w, r, content, "ui/static/success-closed-black.svg")
case "/static/success-open-black.svg":
http.ServeFileFS(w, r, content, "ui/static/success-open-black.svg")
case "/static/failure-closed.svg": case "/static/failure-closed.svg":
http.ServeFileFS(w, r, content, "ui/static/failure-closed.svg") http.ServeFileFS(w, r, content, "ui/static/failure-closed.svg")
case "/static/failure-open.svg": case "/static/failure-open.svg":

View File

@@ -1,3 +1,8 @@
html {
background-color: var(--bg);
color: var(--fg);
}
h1, p, summary { h1, p, summary {
font-family: sans-serif; font-family: sans-serif;
} }
@@ -9,7 +14,7 @@ h1, p, summary {
details.test-node { details.test-node {
margin-left: 1rem; margin-left: 1rem;
padding: 0.2rem 0.5rem; padding: 0.2rem 0.5rem;
border-left: 2px dashed black; border-left: 2px dashed var(--fg);
> summary { > summary {
cursor: pointer; cursor: pointer;
} }
@@ -21,11 +26,8 @@ details.test-node {
* individuals, it's better than no indication of a test's state. * individuals, it's better than no indication of a test's state.
* See: https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::marker#browser_compatibility * See: https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::marker#browser_compatibility
*/ */
color: black; color: var(--fg);
content: url("/static/success-closed.svg"); /* content set in theme-specific file. */
}
&.success[open] > summary::marker {
content: url("/static/success-open.svg");
} }
&.failure > summary::marker { &.failure > summary::marker {
color: red; color: red;

View File

@@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- See failure-open.svg for an explanation of the view box dimensions. --> <!-- See failure-open.svg for an explanation of the view box dimensions. -->
<svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130"> <svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130">
<!-- This triangle should match success-closed.svg, fill and stroke color notwithstanding. --> <!-- This triangle should match success-closed-black.svg, fill and stroke color notwithstanding. -->
<polygon points="0,0 100,50 0,100" fill="red" stroke="red" stroke-width="15" stroke-linejoin="round"/> <polygon points="0,0 100,50 0,100" fill="red" stroke="red" stroke-width="15" stroke-linejoin="round"/>
<!-- <!--
! y-coordinates go before x-coordinates here to highlight the difference ! y-coordinates go before x-coordinates here to highlight the difference

Before

Width:  |  Height:  |  Size: 788 B

After

Width:  |  Height:  |  Size: 794 B

View File

@@ -19,7 +19,7 @@
! simplest and most effective solution is to reduce the height of the view box ! simplest and most effective solution is to reduce the height of the view box
! from 140 to 130, thereby removing some of the bottom padding present. ! from 140 to 130, thereby removing some of the bottom padding present.
! !
! All six SVGs use the same view box (and indeed, they refer to this comment) ! All eight SVGs use the same view box (and indeed, they refer to this comment)
! so that they all appear to be the same size and position relative to each ! so that they all appear to be the same size and position relative to each
! other on the DOM—indeed, the view box dimensions, alongside the width, ! other on the DOM—indeed, the view box dimensions, alongside the width,
! directly control their placement on the DOM. ! directly control their placement on the DOM.
@@ -27,7 +27,7 @@
! TL;DR: CSS is janky, overflow is weird, and SVG is awesome! ! TL;DR: CSS is janky, overflow is weird, and SVG is awesome!
--> -->
<svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130"> <svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130">
<!-- This triangle should match success-open.svg, fill and stroke color notwithstanding. --> <!-- This triangle should match success-open-black.svg, fill and stroke color notwithstanding. -->
<polygon points="0,0 100,0 50,100" fill="red" stroke="red" stroke-width="15" stroke-linejoin="round"/> <polygon points="0,0 100,0 50,100" fill="red" stroke="red" stroke-width="15" stroke-linejoin="round"/>
<!-- See the comment in failure-closed.svg before modifying this. --> <!-- See the comment in failure-closed.svg before modifying this. -->
<line x1="30" y1="10" x2="70" y2="50" stroke="white" stroke-width="16"/> <line x1="30" y1="10" x2="70" y2="50" stroke="white" stroke-width="16"/>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- See failure-open.svg for an explanation of the view box dimensions. --> <!-- See failure-open.svg for an explanation of the view box dimensions. -->
<svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130"> <svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130">
<!-- This triangle should match success-closed.svg, fill and stroke color notwithstanding. --> <!-- This triangle should match success-closed-black.svg, fill and stroke color notwithstanding. -->
<polygon points="0,0 100,50 0,100" fill="blue" stroke="blue" stroke-width="15" stroke-linejoin="round"/> <polygon points="0,0 100,50 0,100" fill="blue" stroke="blue" stroke-width="15" stroke-linejoin="round"/>
<!-- <!--
! This path is extremely similar to the one in skip-open.svg; before ! This path is extremely similar to the one in skip-open.svg; before

Before

Width:  |  Height:  |  Size: 812 B

After

Width:  |  Height:  |  Size: 818 B

View File

@@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- See failure-open.svg for an explanation of the view box dimensions. --> <!-- See failure-open.svg for an explanation of the view box dimensions. -->
<svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130"> <svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130">
<!-- This triangle should match success-open.svg, fill and stroke color notwithstanding. --> <!-- This triangle should match success-open-black.svg, fill and stroke color notwithstanding. -->
<polygon points="0,0 100,0 50,100" fill="blue" stroke="blue" stroke-width="15" stroke-linejoin="round"/> <polygon points="0,0 100,0 50,100" fill="blue" stroke="blue" stroke-width="15" stroke-linejoin="round"/>
<!-- <!--
! This path is extremely similar to the one in skip-closed.svg; before ! This path is extremely similar to the one in skip-closed.svg; before

Before

Width:  |  Height:  |  Size: 812 B

After

Width:  |  Height:  |  Size: 818 B

View File

@@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- See failure-open.svg for an explanation of the view box dimensions. --> <!-- See failure-open.svg for an explanation of the view box dimensions. -->
<svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130"> <svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130">
<!-- When updating this triangle, also update the other five SVGs. --> <!-- When updating this triangle, also update the other seven SVGs. -->
<polygon points="0,0 100,50 0,100" fill="none" stroke="black" stroke-width="15" stroke-linejoin="round"/> <polygon points="0,0 100,50 0,100" fill="none" stroke="black" stroke-width="15" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 369 B

After

Width:  |  Height:  |  Size: 370 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0"?>
<!-- See failure-open.svg for an explanation of the view box dimensions. -->
<svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130">
<!-- This triangle should match success-closed-black.svg, stroke color notwithstanding. -->
<polygon points="0,0 100,50 0,100" fill="none" stroke="ghostwhite" stroke-width="15" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 395 B

View File

@@ -1,6 +1,6 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- See failure-open.svg for an explanation of the view box dimensions. --> <!-- See failure-open.svg for an explanation of the view box dimensions. -->
<svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130"> <svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130">
<!-- When updating this triangle, also update the other five SVGs. --> <!-- When updating this triangle, also update the other seven SVGs. -->
<polygon points="0,0 100,0 50,100" fill="none" stroke="black" stroke-width="15" stroke-linejoin="round"/> <polygon points="0,0 100,0 50,100" fill="none" stroke="black" stroke-width="15" stroke-linejoin="round"/>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 369 B

After

Width:  |  Height:  |  Size: 370 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0"?>
<!-- See failure-open.svg for an explanation of the view box dimensions. -->
<svg xmlns="http://www.w3.org/2000/svg" width="20" viewBox="-20,-20 160 130">
<!-- This triangle should match success-open-black.svg, stroke color notwithstanding. -->
<polygon points="0,0 100,0 50,100" fill="none" stroke="ghostwhite" stroke-width="15" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 393 B

View File

@@ -0,0 +1,19 @@
@use "test_common";
:root {
--bg: #2c2c2c;
--fg: ghostwhite;
}
/*
* The color of an SVG in a content: cannot be controlled via CSS as it's not
* present in the DOM, so use duplicated versions.
*/
details.test-node.success {
&[open] > summary::marker {
content: url("/static/success-open-white.svg");
}
> summary::marker {
content: url("/static/success-closed-white.svg");
}
}

View File

@@ -0,0 +1,19 @@
@use "test_common";
:root {
--bg: #d3d3d3;
--fg: black;
}
/*
* The color of an SVG in a content: cannot be controlled via CSS as it's not
* present in the DOM, so use duplicated versions.
*/
details.test-node.success {
&[open] > summary::marker {
content: url("/static/success-open-black.svg");
}
> summary::marker {
content: url("/static/success-closed-black.svg");
}
}

View File

@@ -3,7 +3,6 @@
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="static/style.css">
<link rel="stylesheet" href="static/test.css"> <link rel="stylesheet" href="static/test.css">
<title>PkgServer Tests</title> <title>PkgServer Tests</title>
</head> </head>

View File

@@ -4,6 +4,6 @@ package main
import "embed" import "embed"
//go:generate sh -c "sass ui/static/dark.scss ui/static/dark.css && sass ui/static/light.scss ui/static/light.css && sass ui/static/test.scss ui/static/test.css && tsc -p ui/static" //go:generate sh -c "sass ui/static/dark.scss ui/static/dark.css && sass ui/static/light.scss ui/static/light.css && sass ui/static/test_light.scss ui/static/test_light.css && sass ui/static/test_dark.scss ui/static/test_dark.css && tsc -p ui/static"
//go:embed ui/* //go:embed ui/*
var content embed.FS var content embed.FS