treefmt / nix fmt (pull_request) Successful in 5s
pytest / pytest (pull_request) Successful in 37s
build_systems / build-leviathan (pull_request) Successful in 1m20s
build_systems / build-jeeves (pull_request) Successful in 2m57s
build_systems / build-brain (pull_request) Successful in 3m3s
build_systems / build-rhapsody-in-green (pull_request) Successful in 3m25s
build_systems / build-bob (pull_request) Successful in 32m7s
treefmt / nix fmt (push) Successful in 5s
pytest / pytest (push) Successful in 26s
build_systems / build-brain (push) Successful in 31s
build_systems / build-bob (push) Successful in 34s
build_systems / build-leviathan (push) Successful in 41s
build_systems / build-rhapsody-in-green (push) Successful in 46s
build_systems / build-jeeves (push) Successful in 2m10s
72 lines
2.9 KiB
HTML
72 lines
2.9 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>{% block title %}EPUB Search{% endblock %}</title>
|
|
{% block head %}{% endblock %}
|
|
<link rel="stylesheet" href="/static/style.css?v={{ static_version('style.css') }}">
|
|
<script>
|
|
// Apply theme and dev mode before paint to avoid a flash of unstyled/wrong content.
|
|
(function () {
|
|
var stored = localStorage.getItem("ebook-theme");
|
|
var prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
var theme = stored || (prefersDark ? "dark" : "light");
|
|
document.documentElement.classList.add("theme-" + theme);
|
|
if (localStorage.getItem("ebook-dev-mode") === "on") {
|
|
document.documentElement.classList.add("dev");
|
|
}
|
|
})();
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<header class="site-header">
|
|
<nav class="site-nav">
|
|
<a class="brand" href="/">EPUB Search</a>
|
|
<div class="nav-links">
|
|
<a href="/">Search</a>
|
|
<a href="/books">Books</a>
|
|
<a href="/admin">Admin</a>
|
|
</div>
|
|
<button type="button" id="theme-toggle" class="theme-toggle" title="Toggle light / dark theme" aria-label="Toggle theme"></button>
|
|
<label class="dev-toggle" title="Show developer diagnostics">
|
|
<input type="checkbox" id="dev-mode-toggle">
|
|
<span>Dev</span>
|
|
</label>
|
|
</nav>
|
|
</header>
|
|
<main>
|
|
{% block content %}{% endblock %}
|
|
</main>
|
|
<script>
|
|
(function () {
|
|
var toggle = document.getElementById("dev-mode-toggle");
|
|
if (toggle) {
|
|
toggle.checked = document.documentElement.classList.contains("dev");
|
|
toggle.addEventListener("change", function () {
|
|
document.documentElement.classList.toggle("dev", toggle.checked);
|
|
localStorage.setItem("ebook-dev-mode", toggle.checked ? "on" : "off");
|
|
});
|
|
}
|
|
|
|
var themeButton = document.getElementById("theme-toggle");
|
|
if (themeButton) {
|
|
var root = document.documentElement;
|
|
var sync = function () {
|
|
var isDark = root.classList.contains("theme-dark");
|
|
themeButton.textContent = isDark ? "☀️" : "🌙";
|
|
};
|
|
sync();
|
|
themeButton.addEventListener("click", function () {
|
|
var next = root.classList.contains("theme-dark") ? "light" : "dark";
|
|
root.classList.remove("theme-dark", "theme-light");
|
|
root.classList.add("theme-" + next);
|
|
localStorage.setItem("ebook-theme", next);
|
|
sync();
|
|
});
|
|
}
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|