careTalk / admin.html
$P@D$3RV£R
Release v1.1.31: add anonymous NHS feedback
e123f50
Raw
History Blame Contribute Delete
6.11 kB
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<meta name="robots" content="noindex,nofollow" />
<meta name="theme-color" content="#1e3a5f" />
<meta name="description" content="careTalk updates admin" />
<link rel="icon" type="image/png" href="./icons/favicon.png" />
<title>careTalk — updates</title>
<script>
(function () {
try {
var t = localStorage.getItem("don.ui.theme");
if (t !== "light" && t !== "dark") {
t = matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
}
document.documentElement.setAttribute("data-theme", t);
} catch (e) {}
})();
</script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,550;9..144,700&family=Source+Sans+3:wght@400;600;700&display=swap"
rel="stylesheet"
/>
<script type="module" crossorigin src="./assets/admin-COcnhFD_.js"></script>
<link rel="modulepreload" crossorigin href="./assets/theme-CuaEyjDL.js">
<link rel="modulepreload" crossorigin href="./assets/subscribers-CLCOf4GQ.js">
<link rel="stylesheet" crossorigin href="./assets/subscribers-BHyrZ7wW.css">
<link rel="manifest" href="./manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="./registerSW.js"></script></head>
<body class="admin-page">
<header class="site-header">
<a class="brand-lockup" href="./">
<span class="avatar" aria-hidden="true">C</span>
<span class="brand-name">careTalk</span>
</a>
<nav class="nav-links" aria-label="Primary">
<button
type="button"
class="theme-toggle"
data-theme-toggle
aria-label="Switch to dark theme"
title="Dark theme"
>
<svg class="theme-icon theme-icon-sun" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="4" />
<path d="M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M4.93 19.07l1.41-1.41M17.66 6.34l1.41-1.41" />
</svg>
<svg class="theme-icon theme-icon-moon" viewBox="0 0 24 24" aria-hidden="true" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 14.5A8.5 8.5 0 1 1 9.5 3a7 7 0 0 0 11.5 11.5z" />
</svg>
</button>
<a class="btn btn-ghost" href="./">Back to site</a>
</nav>
</header>
<main class="section band">
<div class="section-inner admin-wrap">
<p class="version-pill">Version <span data-app-version>1.1.31</span></p>
<section id="adminLogin" class="admin-card" aria-labelledby="admin-login-title">
<h1 id="admin-login-title">Updates access</h1>
<p class="lede">Sign in to review emails collected for careTalk update notes on this device.</p>
<form id="adminLoginForm" class="feedback-form" autocomplete="on">
<label>
Username
<input name="username" type="text" autocomplete="username" required placeholder="Username" />
</label>
<label>
Password
<input name="password" type="password" autocomplete="current-password" required />
</label>
<div class="feedback-actions">
<button type="submit" class="btn btn-primary">Sign in</button>
<p id="adminLoginStatus" class="feedback-status" hidden></p>
</div>
</form>
<p class="admin-privacy">Credentials are not published on the public site.</p>
</section>
<section id="adminPanel" class="admin-card" hidden aria-labelledby="admin-panel-title">
<div class="admin-panel-head">
<div>
<h1 id="admin-panel-title">Subscribers</h1>
<p class="lede">
<strong id="subscriberCount">0</strong> email(s) on this browser
· careTalk <span data-app-version>1.1.31</span>
</p>
</div>
<div class="admin-actions">
<button type="button" class="btn btn-ghost" id="exportSubscribers">Export CSV</button>
<button type="button" class="btn btn-ghost" id="clearSubscribers">Clear all</button>
<button type="button" class="btn btn-primary" id="adminSignOut">Sign out</button>
</div>
</div>
<p id="subscriberEmpty" class="feedback-wall-empty">No subscribers yet on this device.</p>
<div class="subscriber-table-wrap">
<table class="subscriber-table">
<thead>
<tr>
<th scope="col">Email</th>
<th scope="col">Name</th>
<th scope="col">Subscribed</th>
<th scope="col">Version</th>
<th scope="col"><span class="sr-only">Actions</span></th>
</tr>
</thead>
<tbody id="subscriberRows"></tbody>
</table>
</div>
<p class="admin-privacy">
Static demo storage: lists are kept in this browser’s local storage (same origin).
Export CSV if you need a portable copy.
</p>
</section>
</div>
</main>
<footer class="site-footer">
<div class="section-inner">
<p>careTalk ops · v<span data-app-version>1.1.31</span></p>
</div>
</footer>
<style>
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
</style>
</body>
</html>