From fe7974a665d925d54bc9d2631eecb7cefc8a7e5c Mon Sep 17 00:00:00 2001 From: v4rgas <66626747+v4rgas@users.noreply.github.com> Date: Wed, 24 Dec 2025 18:54:25 -0300 Subject: [PATCH] feat(ui): make entire post cards clickable - Wrap PostCard and PostHeader in anchor tags for full card clickability - Convert internal links to buttons with event propagation prevention - Update UpvoteButton onclick handler to accept MouseEvent - Remove unused escapeHtml function from OG image route --- web/src/lib/components/PostCard.svelte | 43 +++++++++++----------- web/src/lib/components/PostHeader.svelte | 39 +++++++++++--------- web/src/lib/components/UpvoteButton.svelte | 2 +- web/src/routes/og/post/[id]/+server.ts | 13 +------ 4 files changed, 47 insertions(+), 50 deletions(-) diff --git a/web/src/lib/components/PostCard.svelte b/web/src/lib/components/PostCard.svelte index b40e92c..39cfc60 100644 --- a/web/src/lib/components/PostCard.svelte +++ b/web/src/lib/components/PostCard.svelte @@ -93,46 +93,47 @@ } -
-
+
- { e.preventDefault(); e.stopPropagation(); goto(`/site/${post.domain}`); }} class="float-right ml-2 mb-0 sm:mb-1 text-xs border-input border text-muted-foreground hover:border-border-hover hover:text-foreground transition-colors duration-200 px-2 py-0.5 sm:py-1 rounded-full max-w-[40%] truncate" > {post.domain} - - + + {post.title} - +
-
-
+ + diff --git a/web/src/lib/components/PostHeader.svelte b/web/src/lib/components/PostHeader.svelte index 68dc53c..97058be 100644 --- a/web/src/lib/components/PostHeader.svelte +++ b/web/src/lib/components/PostHeader.svelte @@ -87,37 +87,42 @@ } -
-
+ +
- + {post.title} - +
{ e.preventDefault(); e.stopPropagation(); handleUpvote(); }} {loading} /> · {getRelativeTime(post.createdAt)} · - +
- { e.preventDefault(); e.stopPropagation(); goto(`/site/${post.domain}`); }} class="text-xs shrink-0 border-input border text-muted-foreground hover:border-border-hover hover:text-foreground transition-colors duration-200 px-2 py-1 rounded-full max-w-[120px] truncate" > {post.domain} - -
-
+ + + diff --git a/web/src/lib/components/UpvoteButton.svelte b/web/src/lib/components/UpvoteButton.svelte index d10a5ae..a348933 100644 --- a/web/src/lib/components/UpvoteButton.svelte +++ b/web/src/lib/components/UpvoteButton.svelte @@ -8,7 +8,7 @@ }: { count?: number; active?: boolean; - onclick?: () => void; + onclick?: (e: MouseEvent) => void; disabled?: boolean; loading?: boolean; } = $props(); diff --git a/web/src/routes/og/post/[id]/+server.ts b/web/src/routes/og/post/[id]/+server.ts index 6589e48..2234af1 100644 --- a/web/src/routes/og/post/[id]/+server.ts +++ b/web/src/routes/og/post/[id]/+server.ts @@ -22,8 +22,8 @@ export const GET: RequestHandler = async ({ params }) => { the stack - ${escapeHtml(title)} - ${escapeHtml(subtitle)} + ${title} + ${subtitle} `; return new ImageResponse(html, { @@ -31,12 +31,3 @@ export const GET: RequestHandler = async ({ params }) => { height: 630 }); }; - -function escapeHtml(str: string): string { - return str - .replace(/&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); -}