From 7d16969f026c7f98079106f739364eca323eaf13 Mon Sep 17 00:00:00 2001 From: "Moon.eth" Date: Mon, 3 Aug 2026 15:28:51 +0900 Subject: [PATCH] support flash --- package-lock.json | 7 ++ package.json | 1 + src/components/blog/Attachments.svelte | 17 +++- src/components/blog/Attachments.test.ts | 35 ++++++- src/components/blog/Composer.svelte | 28 +++++- src/components/blog/Composer.test.ts | 35 +++++++ src/components/blog/FlashAttachment.svelte | 101 ++++++++++++++++++++ src/components/blog/FlashAttachment.test.ts | 64 +++++++++++++ src/lib/api/endpoints.test.ts | 34 +++++++ src/lib/api/types.ts | 8 +- src/lib/ruffle.ts | 78 +++++++++++++++ src/lib/util/flash.test.ts | 46 +++++++++ src/lib/util/flash.ts | 25 +++++ src/styles/blog.css | 66 +++++++++++++ src/styles/forms.css | 17 +++- vite.config.ts | 46 ++++++++- 16 files changed, 599 insertions(+), 9 deletions(-) create mode 100644 src/components/blog/FlashAttachment.svelte create mode 100644 src/components/blog/FlashAttachment.test.ts create mode 100644 src/lib/ruffle.ts create mode 100644 src/lib/util/flash.test.ts create mode 100644 src/lib/util/flash.ts diff --git a/package-lock.json b/package-lock.json index 299fad4..30f19af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "plspace", "version": "0.1.0", "dependencies": { + "@ruffle-rs/ruffle": "^0.4.0-nightly.2026.7.7", "dompurify": "^3.4.12" }, "devDependencies": { @@ -723,6 +724,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@ruffle-rs/ruffle": { + "version": "0.4.0-nightly.2026.7.7", + "resolved": "https://registry.npmjs.org/@ruffle-rs/ruffle/-/ruffle-0.4.0-nightly.2026.7.7.tgz", + "integrity": "sha512-VrTxTCYWRaArk4gMi4EAIGAH36AlWphQNiIlwvj5DGjurXxRvl4tcm4QKwA4b3DekYVtOMQPoVZBuENGAQsNwg==", + "license": "(MIT OR Apache-2.0)" + }, "node_modules/@standard-schema/spec": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", diff --git a/package.json b/package.json index 138c545..ab8326d 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "vitest": "^4.1.10" }, "dependencies": { + "@ruffle-rs/ruffle": "^0.4.0-nightly.2026.7.7", "dompurify": "^3.4.12" } } diff --git a/src/components/blog/Attachments.svelte b/src/components/blog/Attachments.svelte index 14b5191..5edb9d7 100644 --- a/src/components/blog/Attachments.svelte +++ b/src/components/blog/Attachments.svelte @@ -7,15 +7,20 @@ * can mix flagged and unflagged media. */ import type { CustomEmoji, MediaAttachment } from '$lib/api/types' + import type { RuffleLoader } from '$lib/ruffle' + import { isFlashAttachment } from '$lib/util/flash' import EmojiText from '../common/EmojiText.svelte' + import FlashAttachment from './FlashAttachment.svelte' interface Props { attachments: MediaAttachment[] emojis?: CustomEmoji[] sensitive?: boolean + /** Injectable so Flash rendering remains backend- and network-free in tests. */ + loadRuffle?: RuffleLoader } - let { attachments, emojis, sensitive = false }: Props = $props() + let { attachments, emojis, sensitive = false, loadRuffle }: Props = $props() let revealed = $state>({}) @@ -49,7 +54,15 @@ data-revealed={isRevealed(media.id) ? 'true' : 'false'} >
- {#if media.type === 'video' || media.type === 'gifv'} + {#if isFlashAttachment(media)} + {#if isRevealed(media.id)} + + {:else} +
+ Sensitive Flash attachment +
+ {/if} + {:else if media.type === 'video' || media.type === 'gifv'}