aboutsummaryrefslogtreecommitdiff
path: root/src/lib/User/BadgeWall/BadgePreview.svelte
Commit message (Collapse)AuthorAgeFilesLines
* fix(security): escape badge source/designer to close stored XSSFuwn39 hours1-60/+15
| | | | | | | | | classifySource/classifyDesigner built <a> markup by raw-interpolating user-controlled badge fields and rendered it via {@html}, enabling stored XSS on public badge walls (any visitor who opened a crafted badge). Extract them into badgeLinks.ts returning {href,label} with http(s)-only href validation, render via escaped Svelte bindings, and add regression tests.
* style: apply biome autofixes and resolve remaining lint findingsFuwn4 days1-7/+6
| | | | | | | | | | | | | | 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-8/+12
| | | | | | | | | | | | | | | | | 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.
* style(breakpoints): consolidate 9 ad-hoc values into 5 SCSS tokensFuwn2026-05-191-2/+4
| | | | | | | | | | | | | | | | Adds src/styles/_breakpoints.scss with five canonical tokens (\$bp-sm 600, \$bp-md 800, \$bp-lg 1024, \$bp-xl 1280, \$bp-2xl 1600) and migrates all 15 @media (max-width: ...) occurrences across 9 files. Configures vite.config.ts with scss loadPaths so any file can @use "breakpoints" without relative paths. Conservative rounding-up where existing values were near-duplicates: 500 and 512 collapse to 600, 768 collapses to 800, 1000 collapses to 1024. Slightly more viewports get the smaller-layout treatment in those bands, which is usually beneficial on cramped widths. Converts 7 Svelte files from <style> to <style lang="scss"> to access the SCSS tokens. SCSS is a CSS superset, so existing rules stay valid.
* fix(user): pass actual description to badge preview alt textFuwn2026-04-181-1/+1
| | | | | | | | | | The ParallaxImage alternativeText prop was passed as the literal string "selectedBadge.description" (quoted attribute syntax) instead of the expression, so every badge image rendered with that identifier name as its alt text. Switch to the expression form with a nullish-coalescing fallback so badges without a description render empty alt rather than the literal.
* chore(biome): drop formatter style overridesFuwn2026-03-011-71/+80
|
* chore(biome): enable svelte formattingFuwn2026-03-011-89/+89
|
* fix: Resolve all ESLint errors and warningsFuwn2026-01-291-4/+4
|
* refactor: Migrate event handlers to new Svelte 5 syntaxFuwn2026-01-231-7/+4
|
* refactor(layout): Replace empty p elements with reusable Spacer componentFuwn2026-01-231-3/+4
|
* fix(html): Replace self-closing non-void HTML elements with proper closing tagsFuwn2026-01-231-3/+3
|
* format: Apply Prettier formattingFuwn2025-12-151-3/+3
|
* style(src): Remove self-closing p and div tagsFuwn2025-06-231-3/+3
|
* fix(BadgePreview): Correct badge preview widthFuwn2025-03-251-1/+0
|
* chore(prettier): use spaces instead of tabsFuwn2024-10-091-219/+219
|
* refactor(Data): rename database referencesFuwn2024-08-241-1/+1
|
* refactor(Database): move Supabase user modules to User moduleFuwn2024-07-251-2/+2
|
* refactor(Database): separate providersFuwn2024-07-251-1/+1
|
* feat(BadgePreview): move seek buttons to preview panelFuwn2024-06-141-0/+16
|
* feat(BadgePreview): bigger preview windowFuwn2024-06-131-96/+91
|
* feat(BadgePreview): detect lofter.comFuwn2024-06-071-0/+2
|
* feat(badges): click counter for badgesFuwn2024-05-271-0/+8
|
* feat(BadgePreview): navigate using badge sideFuwn2024-05-021-7/+21
|
* feat(BadgePreview): simple designer linkFuwn2024-04-301-3/+21
|
* feat(BadgePreview): simple source nameFuwn2024-04-301-2/+21
|
* feat(BadgePreview): SauceNAO buttonFuwn2024-04-211-3/+6
|
* fix(BadgePreview): high-resolution image load on navigateFuwn2024-04-211-1/+13
|
* feat(User): move BadgeWall to User moduleFuwn2024-04-201-0/+158