The tab row no longer turns its 1 px underline overhang into a scrollbar on the desktop; an overview entry opens its repository wherever it is clicked; the footer carries Imprint and Privacy from server.impressumUrl and the new server.privacyUrl; the System page's watch is a yellower amber and its critical a red clearly redder than the clay of a failed build. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Co-authored-by: mhoennig <michael@hoennig.de> Reviewed-on: #39
77 lines
4.4 KiB
Markdown
77 lines
4.4 KiB
Markdown
> **WARNING:** This document describes only the change applied in this PR.
|
|
> It may already be outdated once the next PR is merged.
|
|
> Historic PR-documentation is not maintained along with new PRs — treat it as a snapshot, not as current documentation.
|
|
|
|
## Related Links
|
|
|
|
- [PR#35 — the design](2026-09-08-PR#35-ui-kin-design.md) and [PR#37 — the Repositories page](2026-09-08-PR#37-ui-repositories-overview.md), which this PR corrects after their first day in use.
|
|
|
|
## The Problem
|
|
|
|
Four small things showed on the first day of v1.3.0:
|
|
|
|
- The row of view tabs (`Latest`, `Branches`, `History`) showed a vertical scrollbar on the desktop — not scrollable, just sitting at the edge: the active tab's underline overhangs the row by one pixel, and the row was `overflow-x: auto`, which turns any overflow into scrollbars.
|
|
- On the Repositories page only the repository's name was a link; the rest of the entry, which holds no other control, did nothing when clicked.
|
|
- The footer had one link, `Impressum (Legal Disclosure)`, and none for the privacy policy; the author's sites carry `Imprint` and `Privacy` on the right.
|
|
- On the System page the `watch` amber and the `critical` clay were hard to tell apart.
|
|
|
|
## Non-Goals
|
|
|
|
- No other visual change; the palette otherwise stays as RFC 0001 specifies it.
|
|
- Failed builds keep their clay; only the System page's *critical* level gets the redder tone, because there it stands next to *watch*.
|
|
|
|
## The Scenarios
|
|
|
|
### Feature: small corrections to the new UI
|
|
|
|
#### Scenario#39.01: the footer carries Imprint and Privacy
|
|
|
|
So that every page links the legal pages the way the author's sites do.
|
|
|
|
- **Given** `server.impressumUrl` and `server.privacyUrl` are configured (instance-level, `~/.werkator.yml` on a multi-repository instance)
|
|
- **When** any page renders
|
|
- **Then** the footer's right side links `Imprint` and `Privacy`, each opening in a new tab
|
|
- **and** an empty URL hides its link; with both empty the right side is empty.
|
|
|
|
##### Verified by
|
|
|
|
- [UiControllerTest — latest view renders rows with badge, Gitea links, artifact link, actions, and token](../../src/test/kotlin/de/hoennig/werkator/server/UiControllerTest.kt) (asserts both links)
|
|
|
|
#### Scenario#39.02: the whole overview entry opens the repository
|
|
|
|
So that a reader can click anywhere in the entry, not only on the name.
|
|
|
|
- **Given** the Repositories page
|
|
- **When** the reader clicks anywhere in an entry that is not a link, without selecting text
|
|
- **Then** the browser opens that repository's Latest view
|
|
- **and** the name stays a real link for the keyboard and for opening in a new tab
|
|
- **and** an entry re-rendered by `werkator.js` behaves the same.
|
|
|
|
##### Verified by
|
|
|
|
- [UiControllerTest — the Repositories page lists every served repository as the overview sorts them](../../src/test/kotlin/de/hoennig/werkator/server/UiControllerTest.kt) (asserts the entry's `data-url`)
|
|
- The click itself is script behaviour, checked in the browser.
|
|
|
|
#### Scenario#39.03: no scrollbar on the tabs, and two tellable levels
|
|
|
|
- **Given** a desktop viewport
|
|
- **When** a repository view renders
|
|
- **Then** the tab row shows no scrollbar; on a phone it still scrolls sideways when the tabs do not fit.
|
|
- **Given** the System page with a gauge at `watch` and one at `critical`
|
|
- **Then** `watch` is a yellow amber and `critical` a red clearly redder than the clay of a failed build, in both color schemes.
|
|
|
|
##### Verified by
|
|
|
|
- Stylesheet only; checked in the browser, light and dark.
|
|
|
|
## The Solution
|
|
|
|
- `werkator.css`: the tab row loses `overflow-x: auto` on the desktop and keeps it on the phone with `overflow-y: hidden` and a 1 px bottom padding for the underline's overhang; `.repo` gets a pointer cursor and a hover ground; new tokens `--amber` (yellower), `--crit`/`--crit-soft` (red) used by the System page's critical level, the overloaded verdict and the `upgrade` advice.
|
|
- `ServerConfig.privacyUrl`, the `init` template and `docs/configuration.md` gain the key; `UiController` puts it on the model; the footer fragment renders `Imprint` and `Privacy`.
|
|
- `repos.html` writes the entry's `data-url`; `werkator.js` sets it on re-rendered entries and opens it on a click that hits no link and selects no text.
|
|
|
|
## Additional Changes
|
|
|
|
- Version 1.3.1 and its release-notes entry, since this is what gets deployed.
|
|
- On mih09 the instance file gets `server.impressumUrl` and `server.privacyUrl` pointing at the author's pages.
|