import { render as renderMarkdown } from "@deno/gfm"; import { nip19 } from "@nostr/tools"; export function htmlLayout(title: string, body: string) { return ` ${title} ${body} `; } export function articleHtml(articleEvent: object, profile: object) { const titleTag = articleEvent.tags.find((t) => t[0] === "title"); const title = titleTag ? titleTag[1] : "Untitled"; const content = renderMarkdown(articleEvent.content); const date = new Date(articleEvent.created_at * 1000); const formattedDate = date.toLocaleDateString("en-US", { year: "numeric", month: "long", day: "numeric", }); const body = `

${title}

User Avatar ${profile.name} ${formattedDate}

${content}
`; return htmlLayout(title, body); } function articleListItemHtml(articleEvent: object) { const identifier = articleEvent.tags.find((t) => t[0] === "d")[1]; const naddr = nip19.naddrEncode({ identifier: identifier, pubkey: articleEvent.pubkey, kind: articleEvent.kind, }); const titleTag = articleEvent.tags.find((t) => t[0] === "title"); const title = titleTag ? titleTag[1] : "Untitled"; const date = new Date(articleEvent.created_at * 1000); const formattedDate = date.toLocaleDateString("en-US", { year: "numeric", month: "long", day: "numeric", }); return `

${title}

${formattedDate}

`; } export function articleListHtml(articleEvents: object[]) { if (articleEvents.length === 0) return ""; let html = ""; for (const articleEvent of articleEvents) { html += articleListItemHtml(articleEvent); } return `

Articles

${html}
`; } export function profilePageHtml(profileEvent: object, articleEvents: object[]) { const profile = JSON.parse(profileEvent.content); const name = profile.name || "Anonymous"; const title = `${name} on Nostr`; const body = `
User Avatar

${profile.name}

${profile.about}

${articleListHtml(articleEvents)}
`; return htmlLayout(title, body); }