diff --git a/src/lib/components/embedded_events/EmbeddedEvent.svelte b/src/lib/components/embedded_events/EmbeddedEvent.svelte index 7e1edee..3c1ad49 100644 --- a/src/lib/components/embedded_events/EmbeddedEvent.svelte +++ b/src/lib/components/embedded_events/EmbeddedEvent.svelte @@ -305,11 +305,381 @@ {#if event.kind === 1 || repostKinds.includes(event.kind)}
- {@render parsedContent(event.content.slice(0, 300))} - {#if event.content.length > 300} - ... + {#if repostKinds.includes(event.kind)} + +
+
+ Reposted content: +
+ {@render parsedContent(event.content.slice(0, 300))} + {#if event.content.length > 300} + ... + {/if} +
+ {:else} + + {@render parsedContent(event.content.slice(0, 300))} + {#if event.content.length > 300} + ... + {/if} + {/if} +
+ + {:else if event.kind === 3} +
+ {#if event.content} + {@const contactData = (() => { + try { + return JSON.parse(event.content); + } catch { + return null; + } + })()} + {#if contactData} +
+
+ Contact List + {#if contactData.relays} +
+ Relays: {Object.keys(contactData.relays).length} +
+ {/if} +
+ {#if contactData.follows} +
+ Following: {contactData.follows.length} users +
+ {/if} +
+ {:else} +
+ Invalid contact list data +
+ {/if} + {:else} +
+ Empty contact list +
+ {/if} +
+ + {:else if event.kind === 30040} +
+ {#if event.content} + {@const indexData = (() => { + try { + return JSON.parse(event.content); + } catch { + return null; + } + })()} + {#if indexData} +
+
+ Publication Index + {#if indexData.title} +
+ Title: {indexData.title} +
+ {/if} + {#if indexData.summary} +
+ Summary: {indexData.summary} +
+ {/if} + {#if indexData.authors} +
+ Authors: {indexData.authors.length} +
+ {/if} +
+
+ {:else} +
+ Invalid publication index data +
+ {/if} + {:else} +
+ Empty publication index +
+ {/if} +
+ + {:else if event.kind === 30041 || event.kind === 30818} +
+ {#if event.content} +
+
+ + {event.kind === 30041 ? 'Publication Content' : 'Wiki Content'} + +
+
+
+                {event.content.slice(0, 300)}
+                {#if event.content.length > 300}
+                  ...
+                {/if}
+              
+
+
+ {:else} +
+ Empty {event.kind === 30041 ? 'publication' : 'wiki'} content +
+ {/if} +
+ + {:else if event.kind === 30023} +
+ {#if event.content} +
+
+ Long-form Content +
+
+
+                {event.content.slice(0, 300)}
+                {#if event.content.length > 300}
+                  ...
+                {/if}
+              
+
+
+ {:else} +
+ Empty long-form content +
{/if}
+ + {:else if event.kind === 1111} +
+
+
+ Reply/Comment +
+ {#if event.content && event.content.trim()} +
+ {@render parsedContent(event.content)} +
+ {:else} +
+ Empty reply +
+ {/if} +
+
+ + {:else if event.kind === 1621} +
+
+
+ Git Issue + {#if event.tags} + {@const subjectTag = event.tags.find(tag => tag[0] === 'subject')} + {#if subjectTag && subjectTag[1]} +
+ Subject: {subjectTag[1]} +
+ {/if} + {/if} +
+ {#if event.content && event.content.trim()} +
+ {@render parsedContent(event.content)} +
+ {:else} +
+ Empty issue description +
+ {/if} +
+
+ + {:else if event.kind === 1622} +
+
+
+ Git Comment +
+ {#if event.content && event.content.trim()} +
+ {@render parsedContent(event.content)} +
+ {:else} +
+ Empty comment +
+ {/if} +
+
+ + {:else if event.kind === 7} +
+
+
+ Reaction +
+ {#if event.content && event.content.trim()} +
+ {event.content} +
+ {:else} +
+ Empty reaction +
+ {/if} +
+
+ + {:else if event.kind === 9735} +
+
+
+ Zap Receipt +
+ {#if event.content && event.content.trim()} + {@const zapData = (() => { + try { + return JSON.parse(event.content); + } catch { + return null; + } + })()} + {#if zapData} +
+ {#if zapData.amount} +
Amount: {zapData.amount} sats
+ {/if} + {#if zapData.preimage} +
Preimage: {zapData.preimage.slice(0, 8)}...
+ {/if} + {#if zapData.bolt11} +
Invoice: {zapData.bolt11.slice(0, 20)}...
+ {/if} +
+ {:else} +
+
+                  {event.content.slice(0, 200)}
+                  {#if event.content.length > 200}
+                    ...
+                  {/if}
+                
+
+ {/if} + {:else} +
+ Empty zap receipt +
+ {/if} +
+
+ + {:else if event.kind === 20} +
+
+
+ Image/Media Post +
+ + + {#if event.tags} + {@const imetaTags = event.tags.filter(tag => tag[0] === 'imeta')} + {#if imetaTags.length > 0} +
+ {#each imetaTags as imetaTag} + {@const imetaData = (() => { + const data: any = {}; + for (let i = 1; i < imetaTag.length; i++) { + const item = imetaTag[i]; + if (item.startsWith('url ')) { + data.url = item.substring(4); + } else if (item.startsWith('dim ')) { + data.dimensions = item.substring(4); + } else if (item.startsWith('m ')) { + data.mimeType = item.substring(2); + } else if (item.startsWith('size ')) { + data.size = item.substring(5); + } else if (item.startsWith('blurhash ')) { + data.blurhash = item.substring(9); + } else if (item.startsWith('x ')) { + data.x = item.substring(2); + } + } + return data; + })()} + + {#if imetaData.url && imetaData.mimeType?.startsWith('image/')} +
+ imeta { + (e.target as HTMLImageElement).style.display = 'none'; + const fallback = (e.target as HTMLImageElement).nextElementSibling; + if (fallback) fallback.classList.remove('hidden'); + }} + /> + + + +
+ {#if imetaData.dimensions} + Size: {imetaData.dimensions} + {/if} + {#if imetaData.size} + File: {Math.round(parseInt(imetaData.size) / 1024)}KB + {/if} + {#if imetaData.mimeType} + Type: {imetaData.mimeType} + {/if} +
+
+ {:else if imetaData.url} + +
+ + {#if imetaData.size} +
+ Size: {Math.round(parseInt(imetaData.size) / 1024)}KB +
+ {/if} +
+ {/if} + {/each} +
+ {/if} + {/if} + + + {#if event.content && event.content.trim()} +
+ {@render parsedContent(event.content)} +
+ {/if} + + + {#if event.tags} + {@const altTag = event.tags.find(tag => tag[0] === 'alt')} + {#if altTag && altTag[1]} +
+ Alt: {altTag[1]} +
+ {/if} + {/if} +
+
{:else if event.kind === 0 && profile}
@@ -340,6 +710,20 @@

{/if}
+ + {:else if event.content} +
+
+          {event.content.slice(0, 300)}
+          {#if event.content.length > 300}
+            ...
+          {/if}
+        
+
+ {:else} +
+ No content +
{/if}