[refac] Replace <a> with Link and button for Quick Links

This commit is contained in:
Karen Chen
2026-01-06 19:20:17 -05:00
parent c5c841ec30
commit c3cdb94068
4 changed files with 78 additions and 98 deletions

View File

@@ -1,14 +1,29 @@
<script lang="ts"> <script lang="ts">
let { children, onclick = null } = $props(); type ButtonSize = 'sm' | 'md' | 'lg';
let {
children,
onclick = null,
disabled = false,
size = 'md' as ButtonSize,
class: className = ''
} = $props();
const sizeClasses: Record<ButtonSize, string> = {
sm: 'px-3 py-1.5',
md: 'px-4 py-2',
lg: 'px-2 py-2'
};
</script> </script>
<button <button
class="bg-ecsess-600 hover:bg-ecsess-500 active:bg-ecsess-700 disabled={disabled}
inline-block rounded-md border-none px-4 onclick={onclick}
py-2 text-white transition-all class="rounded-md border border-ecsess-200 bg-ecsess-500
duration-200 ease-out {sizeClasses[size]}
hover:scale-105 hover:shadow-xl" text-sm font-semibold text-ecsess-50 transition-colors
{onclick} hover:bg-ecsess-600/50 hover:border-ecsess-300
disabled:pointer-events-none disabled:opacity-50 {className}"
> >
{@render children()} {@render children?.()}
</button> </button>

View File

@@ -1,7 +1,24 @@
<script> <script lang="ts">
let { href = 'https://www.example.com', children } = $props(); let {
href = undefined,
external = false,
button = false,
children,
class: className = ''
} = $props();
</script> </script>
<a {href} target="_blank" rel="noopener noreferrer" class="underline"> {#if href}
{@render children()} <a
</a> href={href}
class="{button ? '' : 'underline'} {className}"
target={external ? '_blank' : undefined}
rel={external ? 'noopener noreferrer' : undefined}
>
{@render children?.()}
</a>
{:else}
<span class={className}>
{@render children?.()}
</span>
{/if}

View File

@@ -0,0 +1,23 @@
<script lang="ts">
import Link from 'components/Link.svelte';
import Button from 'components/Button.svelte';
</script>
<div class="grid grid-cols-1 gap-3 sm:grid-cols-2">
<Link href="/events" button>
<Button class="w-full">ECSESS Events</Button>
</Link>
<Link href="/r/trot5th" external button>
<Button class="w-full">Trottier 5th booking</Button>
</Link>
<Link href="/r/ctrlz" external button>
<Button size="lg" class="w-full">Ctrl+Z (feedback) form</Button>
</Link>
<!-- Sponsorship disabled -->
<Link button>
<Button disabled class="w-full">Sponsorship</Button>
</Link>
</div>

View File

@@ -7,6 +7,7 @@
import SeoMetaTags from 'components/layout/SeoMetaTags.svelte'; import SeoMetaTags from 'components/layout/SeoMetaTags.svelte';
import AffiliatedClubs from 'components/homepage/AffiliatedClubs.svelte'; import AffiliatedClubs from 'components/homepage/AffiliatedClubs.svelte';
import { fade } from 'svelte/transition'; import { fade } from 'svelte/transition';
import QuickLinks from 'components/QuickLinks.svelte';
/** loading things from the server side */ /** loading things from the server side */
let { data } = $props(); let { data } = $props();
@@ -33,56 +34,18 @@
<RichText value={data.description} /> <RichText value={data.description} />
</div> </div>
<!-- Quick Links (Desktop only) --> <!-- Quick Links (Desktop) -->
<div class="hidden lg:block p-4"> <div class="hidden lg:block p-4">
<!-- Quick Links -->
<div class="mt-6"> <div class="mt-6">
<p <p
class="mt-8 mb-4 text-center text-base font-bold tracking-wide class="mt-8 mb-4 text-center text-base font-bold tracking-wide
text-ecsess-50 text-ecsess-50
underline decoration-ecsess-200 decoration-2 underline-offset-8 underline decoration-ecsess-200 decoration-2 underline-offset-8
drop-shadow-[0_6px_24px_rgba(0,0,0,0.75)]" drop-shadow-[0_6px_24px_rgba(0,0,0,0.75)]"
>Commonly searched for >
Commonly searched for
</p> </p>
<QuickLinks />
<div class="grid grid-cols-1 gap-3 sm:grid-cols-2">
<a
href="/events"
class="rounded-md border border-ecsess-200 bg-ecsess-500 px-4 py-2
text-center text-sm font-semibold text-ecsess-50 transition-colors
hover:bg-ecsess-600/50 hover:border-ecsess-300"
>ECSESS Events
</a>
<a
href="/r/trot5th"
target="_blank"
rel="noopener noreferrer"
class="rounded-md border border-ecsess-200 bg-ecsess-500 px-4 py-2
text-center text-sm font-semibold text-ecsess-50 transition-colors
hover:bg-ecsess-600/50 hover:border-ecsess-300"
>Trottier 5th booking
</a>
<a
href="/r/ctrlz"
target="_blank"
rel="noopener noreferrer"
class="rounded-md border border-ecsess-200 bg-ecsess-500 px-2 py-2
text-center text-sm font-semibold text-ecsess-50 transition-colors
hover:bg-ecsess-600/50 hover:border-ecsess-300"
>Ctrl+Z (feedback) form
</a>
<a
aria-disabled="true"
tabindex="-1"
class="rounded-md border border-ecsess-200 bg-ecsess-500 px-4 py-2
text-center text-sm font-semibold text-ecsess-50 transition-colors
hover:bg-ecsess-600/50 hover:border-ecsess-300"
>Sponsorship
</a>
</div>
</div> </div>
</div> </div>
</div> </div>
@@ -90,7 +53,7 @@
<!-- Image --> <!-- Image -->
<div class="order-2 m-2 lg:order-2 lg:col-span-2 lg:mx-12 lg:my-0"> <div class="order-2 m-2 lg:order-2 lg:col-span-2 lg:mx-12 lg:my-0">
<div class="lg:sticky lg:top-16 lg:h-[calc(100vh-7rem)] lg:flex lg:items-center lg:justify-center"> <div class="lg:top-16 lg:h-[calc(100vh-7rem)] lg:flex lg:items-center lg:justify-center">
<img <img
src={data.councilPhoto} src={data.councilPhoto}
alt="ECSESS Council" alt="ECSESS Council"
@@ -99,56 +62,18 @@
</div> </div>
</div> </div>
<!-- Quick Links --> <!-- Quick Links (mobile) -->
<div class="order-3 p-4 lg:hidden"> <div class="order-3 p-4 lg:hidden">
<!-- Quick Links -->
<div class="mt-6"> <div class="mt-6">
<p <p
class="mt-8 mb-4 text-center text-base font-bold tracking-wide class="mt-8 mb-4 text-center text-base font-bold tracking-wide
text-ecsess-50 text-ecsess-50
underline decoration-ecsess-200 decoration-2 underline-offset-8 underline decoration-ecsess-200 decoration-2 underline-offset-8
drop-shadow-[0_6px_24px_rgba(0,0,0,0.75)]" drop-shadow-[0_6px_24px_rgba(0,0,0,0.75)]"
>Commonly searched for >
Commonly searched for
</p> </p>
<QuickLinks />
<div class="grid grid-cols-1 gap-3 sm:grid-cols-2">
<a
href="/events"
class="rounded-md border border-ecsess-200 bg-ecsess-500 px-4 py-2
text-center text-sm font-semibold text-ecsess-50 transition-colors
hover:bg-ecsess-600/50 hover:border-ecsess-300"
>ECSESS Events
</a>
<a
href="/r/trot5th"
target="_blank"
rel="noopener noreferrer"
class="rounded-md border border-ecsess-200 bg-ecsess-500 px-4 py-2
text-center text-sm font-semibold text-ecsess-50 transition-colors
hover:bg-ecsess-600/50 hover:border-ecsess-300"
>Trottier 5th booking
</a>
<a
href="/r/ctrlz"
target="_blank"
rel="noopener noreferrer"
class="rounded-md border border-ecsess-200 bg-ecsess-500 px-2 py-2
text-center text-sm font-semibold text-ecsess-50 transition-colors
hover:bg-ecsess-600/50 hover:border-ecsess-300"
>Ctrl+Z (feedback) form
</a>
<a
aria-disabled="true"
tabindex="-1"
class="rounded-md border border-ecsess-200 bg-ecsess-500 px-4 py-2
text-center text-sm font-semibold text-ecsess-50 transition-colors
hover:bg-ecsess-600/50 hover:border-ecsess-300"
>Sponsorship
</a>
</div>
</div> </div>
</div> </div>
</div> </div>