your personal website on atproto - mirror
blento.app
1import { checkAndUploadImage, validateLink } from '$lib/helper';
2import type { CardDefinition } from '../types';
3import EditingLinkCard from './EditingLinkCard.svelte';
4import LinkCard from './LinkCard.svelte';
5import LinkCardSettings from './LinkCardSettings.svelte';
6
7export const LinkCardDefinition = {
8 type: 'link',
9 contentComponent: LinkCard,
10 editingContentComponent: EditingLinkCard,
11 createNew: (card) => {
12 card.cardData.hasFetched = false;
13 },
14 settingsComponent: LinkCardSettings,
15
16 name: 'Link Card',
17 canChange: (item) => Boolean(validateLink(item.cardData?.href)),
18 change: (item) => {
19 const href = validateLink(item.cardData?.href);
20 if (!href) return item;
21
22 item.cardData = {
23 ...item.cardData,
24 hasFetched: false
25 };
26 return item;
27 },
28 onUrlHandler: (url, item) => {
29 item.cardData.href = url;
30 item.cardData.domain = new URL(url).hostname;
31 item.cardData.hasFetched = false;
32 return item;
33 },
34 upload: async (item) => {
35 await checkAndUploadImage(item.cardData, 'image');
36 await checkAndUploadImage(item.cardData, 'favicon');
37 return item;
38 },
39 urlHandlerPriority: 0
40} as CardDefinition & { type: 'link' };