[READ-ONLY] Mirror of https://github.com/flo-bit/atmo-garden.
atmo.garden
1.4 kB
46 lines
1export type {
2 ImageData,
3 EmbedImageData,
4 EmbedExternalData,
5 EmbedVideoData,
6 EmbedRecord,
7 EmbedRecordData,
8 UnknownEmbed,
9 Embed
10} from './types';
11
12export { default as EmbedImage } from './Image.svelte';
13export { default as EmbedImages } from './Images.svelte';
14export { default as EmbedExternal } from './External.svelte';
15export { default as EmbedVideo } from './Video.svelte';
16export { default as EmbedQuotedPost } from './QuotedPost.svelte';
17export { default as EmbedRouter } from './Embed.svelte';
18
19import type { Embed } from './types';
20
21/**
22 * Attaches onclick/onclickhandle callbacks to record embeds (quoted posts).
23 * `navigate` is called with (handle, rkey) extracted from the quoted post's href.
24 * `navigateToProfile` is called with a handle.
25 */
26export function wireEmbedClicks(
27 embeds: Embed[],
28 navigate: (handle: string, rkey: string) => void,
29 navigateToProfile: (handle: string) => void
30): Embed[] {
31 for (const embed of embeds) {
32 if (embed.type === 'record' && embed.record) {
33 embed.record.onclick = (_data, href) => {
34 if (href) {
35 const parts = href.split('/');
36 const handle = parts[parts.length - 3];
37 const rkey = parts[parts.length - 1];
38 navigate(handle, rkey);
39 }
40 };
41 embed.record.onclickhandle = (handle) => navigateToProfile(handle);
42 embed.record.handleHref = (handle) => `/profile/${handle}`;
43 }
44 }
45 return embeds;
46}