aboutsummaryrefslogtreecommitdiff
path: root/src/routes/updates
Commit message (Collapse)AuthorAgeFilesLines
* fix(updates): isolate feed failures so one feed can't break the pageFuwn31 hours1-4/+15
| | | | | | | | | | | | onMount fetched the novel feed then the manga feed, each via `(await fetch(...)).json()` with no error handling. When a feed endpoint failed (e.g. all-novels, when wlnupdates returns HTML), `.json()` threw and aborted onMount before the other feed loaded, leaving the whole page stuck on skeletons. Load each feed through a fetchJson helper that returns null on any failure (non-ok, network, or parse error) and set the feed to null — the existing "Failed to load feed" state — when the response is missing or malformed. A failing feed now degrades gracefully while the other still renders.
* fix(security): sanitize third-party RSS HTML before {@html}Fuwn40 hours1-2/+21
| | | | | | | | | | | The /updates page rendered manga/novel feed fields (content, titles, series names) from mangaupdates/syosetu/wlnupdates via {@html} with no sanitization. CSP already blocks script execution, but injected markup could still phish, redirect, or track. Add sanitizeFeedHtml (DOMPurify with a small safe allow-list) and apply it on ingest. A behaviour-gate test plus a check against the live mangaupdates feed confirm legitimate formatting (entities, <i>/<b>/<a href>) is preserved while <script>, event handlers, <iframe>/<meta>/<style> and javascript: URLs are removed.
* style: apply biome autofixes and resolve remaining lint findingsFuwn4 days1-3/+3
| | | | | | | | | | | | | | Auto-fixed cosmetic findings (import ordering, obj["k"]->obj.k, optional chaining, template literals, Date.now, parseInt radix, useless ternaries/ switch cases). Resolved the non-autofixable rest by hand: - Senpy: static-only class -> object literal (no this/static reliance). - app.html: var global shim -> window.global = window (keeps the shim, drops the unused-var flag). - biome-ignore with rationale for the logout document.cookie clear and the holodule scrape non-null assertion. Verified: biome check 0 diagnostics, svelte-check 0/0, 24/24 unit tests.
* refactor(locale): move hardcoded UI strings into english localeFuwn10 days1-5/+6
| | | | | | | | | | | | | | | | | Adds optional namespaces (common, errors, commandPalette, headTitle, notifications, schedule, events, home, reader, routes, badgePreview, badgeWall) and extends existing ones (settings.*, lists.*, tools.*, user.*, hololive.*) on the Locale interface. New fields are optional so japanese.ts can omit them; svelte-i18n's fallbackLocale handles the runtime miss. HeadTitle gains an optional routeKey prop for type-safe lookup. defaultActions becomes a factory so the command palette re-reads locale on language toggle. The existing JP feedback translation in routes/settings is preserved via japanese.ts. Out of scope (kept hardcoded): service-worker.ts, app.html, Landing*.svelte, tools.ts registry, Easter Event 2025 pages.
* chore(cleanup): remove stale eslint directivesFuwn2026-03-011-2/+0
|
* chore(biome): drop formatter style overridesFuwn2026-03-011-35/+45
|
* chore(biome): enable svelte formattingFuwn2026-03-011-55/+55
|
* perf: optimise list hot paths and shared timersFuwn2026-03-011-3/+3
|
* fix: Resolve all ESLint errors and warningsFuwn2026-01-291-1/+1
|
* chore(prettier): use spaces instead of tabsFuwn2024-10-091-134/+134
|
* refactor: ids to classesFuwn2024-02-191-2/+2
|
* fix: destroy height observer on unmountFuwn2024-02-021-2/+5
|
* fix(html): height observer initial sizeFuwn2024-01-311-1/+1
|
* refactor: global opacity classFuwn2024-01-311-2/+2
|
* refactor(skeleton): move to loading moduleFuwn2024-01-311-1/+1
|
* fix(updates): no details observerFuwn2024-01-261-1/+1
|
* feat(updates): better list skeletonFuwn2024-01-241-20/+16
|
* feat(updates): skeleton loadingFuwn2024-01-241-2/+7
|
* feat: root prefix all linksFuwn2024-01-191-2/+3
|
* refactor(home): move layout to homeFuwn2024-01-131-1/+1
|
* feat: site-wide limit heightFuwn2024-01-041-69/+77
|
* feat(routes): route-specific head titleFuwn2023-12-251-0/+3
|
* feat(routes): better loading messageFuwn2023-12-221-2/+2
|
* fix(updates): better display title linkFuwn2023-12-161-3/+6
|
* fix(updates): link to anilistFuwn2023-12-161-1/+5
|
* feat(updates): change wordingFuwn2023-11-251-1/+1
|
* format(updates): add typesFuwn2023-09-141-4/+9
|
* feat(updates): english novel updatesFuwn2023-09-141-5/+11
|
* refactor(updates): move api routesFuwn2023-09-141-2/+2
|
* fix(updates): non-italic volumeFuwn2023-09-141-2/+3
|
* fix(updates): ignore eslintFuwn2023-09-141-0/+2
|
* feat(updates): change loading styleFuwn2023-09-131-2/+2
|
* refactor(updates): rename formattersFuwn2023-09-131-11/+9
|
* feat(updates): italic titlesFuwn2023-09-131-1/+3
|
* feat(updates): hidden direct linkFuwn2023-09-131-8/+16
|
* refactor(updates): rename to updatesFuwn2023-09-131-0/+99