atagen

malice

public
Star0
Watch0
a802a95814e66203129e1b60b219ed262094be91
2
ssh://brewery@pls.lobotomise.me:33/atagen/malice.git

Blame: web/src/lib/RichNodes.svelte

6d6a4c34bdc1atagen2026-10-24 06:51 UTC1
<script lang="ts">
6d6a4c34bdc1atagen2026-10-24 06:51 UTC2
  import EmojiText from './EmojiText.svelte';
6d6a4c34bdc1atagen2026-10-24 06:51 UTC3
  import RichNodes from './RichNodes.svelte';
6d6a4c34bdc1atagen2026-10-24 06:51 UTC4
  import { mediaUrl } from './api';
18fbdbb2c103atagen2026-10-26 00:32 UTC5
  import { senderHue } from './format';
6d6a4c34bdc1atagen2026-10-24 06:51 UTC6
  import { segmentInline } from './inline';
6d6a4c34bdc1atagen2026-10-24 06:51 UTC7
  import type { Mention } from './mentions';
6d6a4c34bdc1atagen2026-10-24 06:51 UTC8
  import type { RichNode } from './rich';
6d6a4c34bdc1atagen2026-10-24 06:51 UTC9
6d6a4c34bdc1atagen2026-10-24 06:51 UTC10
  export let nodes: RichNode[];
6d6a4c34bdc1atagen2026-10-24 06:51 UTC11
  export let mentions: Mention[] = [];
6d6a4c34bdc1atagen2026-10-24 06:51 UTC12
  export let self: string | null = null;
6d6a4c34bdc1atagen2026-10-24 06:51 UTC13
  export let nameOf: (userId: string) => string | null = () => null;
6d6a4c34bdc1atagen2026-10-24 06:51 UTC14
  export let plain = false;
445bf199a9cfatagen2026-10-25 02:56 UTC15
  export let verbatim = false;
6d6a4c34bdc1atagen2026-10-24 06:51 UTC16
</script>
6d6a4c34bdc1atagen2026-10-24 06:51 UTC17
18fbdbb2c103atagen2026-10-26 00:32 UTC18
{#each nodes as n}{#if n.kind === 'text'}{#if verbatim}{n.text}{:else if plain}<EmojiText text={n.text} />{:else}{#each segmentInline(n.text, mentions) as p}{#if p.kind === 'mention'}<span class="mention" class:me={p.user_id === self} style:--hue={senderHue(p.user_id)} title={p.user_id}><EmojiText text={p.text === p.user_id ? (nameOf(p.user_id) ?? p.text) : p.text} /></span>{:else if p.kind === 'link'}<a class="link" href={p.href} target="_blank" rel="noopener noreferrer"><EmojiText text={p.text} /></a>{:else}<EmojiText text={p.text} />{/if}{/each}{/if}{:else if n.kind === 'mention'}<span class="mention" class:me={n.user_id === self} style:--hue={senderHue(n.user_id)} title={n.user_id}><RichNodes nodes={n.children} plain {verbatim} /></span>{:else if n.kind === 'spoiler'}<span class="spoiler" role="button" tabindex="0"><RichNodes nodes={n.children} {mentions} {self} {nameOf} {plain} {verbatim} /></span>{:else if n.kind === 'emote'}<img class="emote" src={mediaUrl(n.mxc, 64) ?? ''} alt={n.alt} title={n.alt} />{:else if n.tag === 'br'}<br />{:else if n.tag === 'hr'}<hr />{:else if n.tag === 'a'}<a class="link" href={n.attrs['href']} target="_blank" rel="noopener noreferrer"><RichNodes nodes={n.children} plain {verbatim} /></a>{:else}<svelte:element this={n.tag} {...n.attrs}><RichNodes nodes={n.children} {mentions} {self} {nameOf} plain={plain || n.tag === 'code' || n.tag === 'pre'} verbatim={verbatim || n.tag === 'code' || n.tag === 'pre'} /></svelte:element>{/if}{/each}