diff --git a/src/css/components/bookmark.css b/src/css/components/bookmark.css index 09a59fc..18f9ecc 100644 --- a/src/css/components/bookmark.css +++ b/src/css/components/bookmark.css @@ -32,16 +32,30 @@ } & > :is(h2, h3, .flex) { + grid-column: 1 / -1; + } + + & > :is(h2, h3) { font-size: var(--font-size-3); - grid-column: 1/ -1; & a { + align-items: start; + column-gap: 5px; + display: flex; + &::after { content: ""; display: block; inset: 0; position: absolute; } + + & img { + block-size: 20px; + flex: 0 0 auto; + inline-size: 20px; + margin-block: 2px; + } } } diff --git a/src/routes/bookmarks/[did=did]/+page.svelte b/src/routes/bookmarks/[did=did]/+page.svelte index 1c4af56..c7ce6ec 100644 --- a/src/routes/bookmarks/[did=did]/+page.svelte +++ b/src/routes/bookmarks/[did=did]/+page.svelte @@ -154,6 +154,12 @@

+ {entry.title}

diff --git a/src/routes/bookmarks/favicon/[hostname]/+server.ts b/src/routes/bookmarks/favicon/[hostname]/+server.ts new file mode 100644 index 0000000..0d004ff --- /dev/null +++ b/src/routes/bookmarks/favicon/[hostname]/+server.ts @@ -0,0 +1,32 @@ +import { redirect } from "@sveltejs/kit"; +import type { RequestHandler } from "./$types"; + +const copyHeaders = [ + "Age", + "Cache-Control", + "Cotent-Type", + "Date", + "Last-Modified", +]; + +export const GET: RequestHandler = async (event) => { + const url = URL.parse(`https://${event.params.hostname}`); + if (url === null) { + return redirect(303, "/images/favicon.svg"); + } + const response = await event.fetch( + `https://twenty-icons.com/${url.hostname}/32`, + ); + if (response.ok === false) { + return redirect(303, "/images/favicon.svg"); + } + if (response.headers.get("Content-Type") !== "image/png") { + return redirect(303, "/images/favicon.svg"); + } + const headers = new Headers(); + for (const name of copyHeaders) { + const value = response.headers.get(name); + if (value) headers.set(name, value); + } + return new Response(response.body, { headers }); +};