aboutsummaryrefslogtreecommitdiff
path: root/src/routes/user
Commit message (Collapse)AuthorAgeFilesLines
* fix(security): sanitize badge_wall_css server-side, render via textContentFuwn21 hours1-12/+1
| | | | | | | | | | | | | | | | Custom badge-wall CSS was sanitised only client-side with a fragile regex and injected via innerHTML, while the stored value stayed raw. Sanitise at the write boundary instead (setCSS, covering both the REST and GraphQL paths) with a css-tree pass that parses leniently and drops @import, behavior/-moz-binding, expression()/javascript: values, and </style> break-out attempts; render with textContent instead of innerHTML so break-out is impossible by construction (CSP already blocks inline script). css-tree stays server-only. A behaviour-gate test confirms ordinary CSS (backdrop-filter, content, url(), @media, @keyframes) is preserved while the dangerous constructs are removed. The previous regex also silently stripped all `content:` declarations; those now render correctly.
* style: apply biome autofixes and resolve remaining lint findingsFuwn4 days5-51/+50
| | | | | | | | | | | | | | 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.
* feat(analytics): track umami events across core actionsFuwn4 days1-2/+7
| | | | | | | | | Add a guarded track() wrapper (src/lib/analytics.ts) so programmatic events no-op instead of throwing when umami is absent (localhost), lazily loaded, or ad-blocked. Instrument the core loop (progress increment, roulette, list filter, force refresh), the auth funnel (log in/out, command palette), settings toggles/selects at the wrapper level, sync/debug/feed actions, and tool/sharing actions.
* refactor(locale): move hardcoded UI strings into english localeFuwn9 days3-67/+83
| | | | | | | | | | | | | | | | | 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.
* refactor(colours): tokenise card shadows and scrimsFuwn2026-05-151-2/+2
| | | | | | | | | | | Introduce --shadow-card, --shadow-card-emphasized, --shadow-cta, --scrim, --scrim-soft, and --scrim-banner. Migrate 14 inline literals (card.css, input.css, Notification, MediaRoulette, the two Landing CTA buttons, the popup overlay, the palette and roulette scrims, three identity banners, the user profile cover art shadow) onto the tokens, with light/dark adaptation handled by the existing prefers-color-scheme blocks instead of duplicated inline. Two single-use Landing demo-focus values stay inline.
* fix(badges): hide outbound link noticeFuwn2026-04-011-1/+1
|
* fix(cache): preserve hydrated client stateFuwn2026-03-281-1/+2
|
* fix(profile): restore owner controls for new accountsFuwn2026-03-271-14/+26
|
* chore(biome): drop formatter style overridesFuwn2026-03-017-487/+524
|
* chore(biome): re-enable noImplicitAnyLet ruleFuwn2026-03-012-2/+4
|
* chore(biome): enable svelte formattingFuwn2026-03-013-487/+487
|
* chore(types): decouple app code from fragile generated route typesFuwn2026-03-011-1/+1
|
* fix: Resolve all ESLint errors and warningsFuwn2026-01-292-5/+5
|
* fix: Add null guards and improve error messaging for user lookupsFuwn2026-01-234-6/+27
|
* refactor: Migrate event handlers to new Svelte 5 syntaxFuwn2026-01-232-30/+30
|
* refactor(layout): Replace empty p elements with reusable Spacer componentFuwn2026-01-232-24/+26
|
* fix(html): Replace self-closing non-void HTML elements with proper closing tagsFuwn2026-01-232-26/+26
|
* deps(svelte): Migrate to Svelte 5 with compatibility modeFuwn2026-01-221-3/+8
|
* format: Apply Prettier formattingFuwn2025-12-152-34/+31
|
* feat(badges): Add a no-load query parameterFuwn2025-09-061-8/+15
|
* style(src): Remove self-closing tags with attributesFuwn2025-06-231-2/+2
|
* style(src): Remove self-closing p and div tagsFuwn2025-06-232-24/+24
|
* feat: Move remaining localStorage usages to localforageFuwn2025-06-122-16/+17
|
* style: Reformat using latest formattingFuwn2025-06-111-2/+7
|
* feat: Add Badge Wall action to command paletteFuwn2025-05-061-1/+6
|
* fix(badges): Ignore empty user-set timeFuwn2025-05-041-1/+1
|
* fix(badges): Properly set badge time when mutatingFuwn2025-05-021-1/+1
|
* revert: Clean up easter eventFuwn2025-04-211-4/+1
|
* feat(EasterEgg): Add more eggsFuwn2025-04-191-1/+4
|
* chore(prettier): use spaces instead of tabsFuwn2024-10-096-1632/+1632
|
* feat(graphql): add badgeCount fieldFuwn2024-10-082-6/+3
|
* fix(graphql): wait for database update on badge mutationFuwn2024-10-071-1/+0
|
* fix(badges): fix field clearing regressionFuwn2024-10-071-0/+2
|
* chore(badges): remove old commentsFuwn2024-10-061-40/+0
|
* feat(badges): use locally cached identityFuwn2024-10-061-327/+301
|
* feat(user): request id in initial queryFuwn2024-10-061-0/+2
|
* feat(badges): return user for badge mutationsFuwn2024-10-062-40/+62
|
* feat(user): live update for mutationsFuwn2024-10-061-6/+30
|
* feat(user): use preferences graphl apiFuwn2024-10-062-51/+88
|
* feat(badges): use preferences graphql apiFuwn2024-10-063-43/+55
|
* feat(badges): move badge operations to graphqlFuwn2024-10-065-401/+496
|
* chore(npm): fix graphql builderFuwn2024-09-282-22/+22
|
* feat(user): move profile page badges to graphqlFuwn2024-09-284-21/+39
|
* refactor(Data): rename database referencesFuwn2024-08-242-3/+3
|
* feat(settings): data saverFuwn2024-08-221-1/+4
|
* refactor(Database): move Supabase user modules to User moduleFuwn2024-07-252-9/+9
|
* refactor(Database): separate providersFuwn2024-07-252-3/+3
|
* feat(BadgePreview): move seek buttons to preview panelFuwn2024-06-141-22/+4
|
* feat(badges): overseer wordingFuwn2024-06-131-5/+6
|
* refactor(badges): move category toggle to scriptFuwn2024-05-271-14/+14
|