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'}