mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-07-11 06:28:00 +08:00
Destructive-action safety: - Rule-delete dialog no longer deletes on "No": clear message, "also delete downloaded files" checkbox, real Cancel + single red Delete - RSS bulk delete, torrent bulk delete, clear-log and notification provider removal now behind NPopconfirm Honest feedback and data states: - axios interceptor gains per-request `silent` flag; background fetches (status/log/downloader polls, passkey list) stop toasting errors - failed downloader poll keeps last data instead of faking "no torrents"; failed first bangumi load shows error+retry instead of onboarding; search SSE failure distinct from "no results"; RSS table loading state; calendar refresh + provider save success toasts; wizard submit failures show the backend reason Setup wizard dead ends: - downloader step no longer hard-gated on a passing connection test (passwordless qB testable, editing fields re-arms untested state) - inline username validation; progress persists to sessionStorage Accessibility and touch: - keyboard: logout button, search variant/filter chips as real buttons, Space on card buttons, Escape closes add/edit modals, rule-list rows focusable; visible close button on the search modal (was backdrop-only) - air-weekday select in the rule editor — weekday assignment now works on mobile/keyboard, not just desktop drag - mobile nav actually fixed to the bottom (was rendering in-flow at top) - 44px touch targets: topbar, chips, modal close, offsets, fold headers, wizard controls (with 16px inputs to stop iOS zoom) Performance: - self-hosted Inter variable font replaces render-blocking Google Fonts - lazy poster loading on the landing grid; log page bounded to newest 1000 lines; KeepAlive capped at 3 pages Design tokens: new warning bg/border/text tokens (light+dark) replace hard-coded ambers; add-RSS and notification config use NSwitch/NSelect instead of hand-rolled controls; ab-data-list selection is controllable (mobile RSS checkboxes no longer desync after bulk actions). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FAxVyRwrY7z5NotTtgnwVs
66 lines
2.2 KiB
HTML
66 lines
2.2 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="zh">
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta
|
||
name="viewport"
|
||
content="width=device-width, initial-scale=1.0, viewport-fit=cover"
|
||
/>
|
||
<meta name="robots" content="noindex, nofollow" />
|
||
<meta name="theme-color" content="#FAFAFA" />
|
||
<link rel="icon" href="/images/logo.svg" />
|
||
<link rel="apple-touch-icon" href="/images/apple-touch-icon.png" />
|
||
<meta name="description" content="Automated Bangumi Download Tool" />
|
||
<!-- Self-hosted Inter (variable, 300–700): no render-blocking Google
|
||
Fonts round-trip, and it works where fonts.googleapis.com is slow
|
||
or blocked. CJK text falls through to Noto Sans SC / system fonts. -->
|
||
<link
|
||
rel="preload"
|
||
href="/fonts/inter-latin.woff2"
|
||
as="font"
|
||
type="font/woff2"
|
||
crossorigin
|
||
/>
|
||
<style>
|
||
@font-face {
|
||
font-family: 'Inter';
|
||
font-style: normal;
|
||
font-weight: 300 700;
|
||
font-display: swap;
|
||
src: url('/fonts/inter-latin.woff2') format('woff2');
|
||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6,
|
||
U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,
|
||
U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||
}
|
||
@font-face {
|
||
font-family: 'Inter';
|
||
font-style: normal;
|
||
font-weight: 300 700;
|
||
font-display: swap;
|
||
src: url('/fonts/inter-latin-ext.woff2') format('woff2');
|
||
unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7,
|
||
U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F,
|
||
U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F,
|
||
U+A720-A7FF;
|
||
}
|
||
</style>
|
||
<title>AutoBangumi</title>
|
||
<script>
|
||
// Apply dark mode before render to prevent flash
|
||
(function () {
|
||
const saved = localStorage.getItem('theme');
|
||
const prefersDark = window.matchMedia(
|
||
'(prefers-color-scheme: dark)'
|
||
).matches;
|
||
if (saved === 'dark' || (!saved && prefersDark)) {
|
||
document.documentElement.classList.add('dark');
|
||
}
|
||
})();
|
||
</script>
|
||
</head>
|
||
<body>
|
||
<div id="app"></div>
|
||
<script type="module" src="/src/main.ts"></script>
|
||
</body>
|
||
</html>
|