58014eb8dd
Two-axis review found the shipped colour and three weak tests. - --patina was a warm gold at the same hue family as --brass; the spec asked for a cool blue-green so an unhealthy Lane is unmistakably not ember. Now verdigris in both branches, with docs/design-system.md stating why the far side of the wheel is the point. - A Lane pass that returns before computing its figures carries the previous pass's due count and gap forward instead of recording zeroes, and Checked rides beside Due so a stopped Lane is distinguishable from a quiet one. - TestAdminPageWithoutAPollerSaysSo now separates the two causes it conflated, TestOwnerClearsReaderMarks seeds real counters so the clearing assertion can fail, and TestLaneStatus asserts Checked and the carry-forward. - backend/AGENTS.md records the one deliberate owner comparison outside requireOwner and the carry-forward rule.
40 lines
1.6 KiB
HTML
40 lines
1.6 KiB
HTML
{{/* The owner's administrative page: everything that reaches past one Reader,
|
|
at its own address so it can be bookmarked rather than hunted for inside
|
|
the reading page. Owner-only at route registration (requireOwner), which
|
|
is why nothing in here re-tests who is asking. */}}
|
|
{{define "admin"}}
|
|
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
|
<meta name="color-scheme" content="dark light">
|
|
<title>BookmarkManager — Admin</title>
|
|
<link rel="icon" href="/static/logo.svg" type="image/svg+xml">
|
|
<link rel="stylesheet" href="/static/style.css">
|
|
<link rel="preload" href="/static/fonts/instrument-serif-400-latin.woff2" as="font" type="font/woff2" crossorigin>
|
|
<script src="/static/htmx.min.js" defer></script>
|
|
</head>
|
|
<body>
|
|
<div class="sheet">
|
|
<header class="topbar">
|
|
<h1 class="brand">{{template "mark" .}}<span>Bookmark<em>Manager</em></span></h1>
|
|
{{/* Back to the library, no switch: this page belongs to neither library,
|
|
and the ember-lit switch says which library you are reading. */}}
|
|
<a class="ghost back" href="/">Library</a>
|
|
<form method="post" action="/logout">
|
|
<button type="submit" class="ghost">Log out</button>
|
|
</form>
|
|
</header>
|
|
|
|
{{/* The live region wraps the swapped block rather than being it: the
|
|
refresh replaces the section wholesale, and a region recreated on every
|
|
update is never announced. */}}
|
|
<div aria-live="polite">{{template "lanes" .Lanes}}</div>
|
|
|
|
{{template "readers" .}}
|
|
</div>
|
|
</body>
|
|
</html>
|
|
{{end}}
|