your personal website on atproto - mirror blento.app
at edit-profile 40 lines 1.1 kB view raw
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' };