--- import BaseLayout from '../../layouts/base.astro'; import SpeakerList from '../../components/SpeakerList.astro'; import core from '../../core.json'; import EventsExt from '../../events-ext.json'; import { dateFormat, dateInfo, dateEnd, nameRenderer, ccRenderer, eventStatus, findExt } from '../../lib/events.js'; import { marked } from 'marked'; const { id } = Astro.params; export async function getStaticPaths() { return core.events.map(event => ({ params: { id: event.id }})); } const item = core.events.find(event => event.id === id) const status = eventStatus(item) const ext = findExt(EventsExt, item) --- <BaseLayout title={id} metaTitle={nameRenderer(item, true)} image="og_events"> <div class="middle-pane-medium mt-10"> <div class="lg:flex w-full "> <div class="lg:mr-10 mb-8 lg:mb-0"> <div> {item.images && item.images['poster-simple'] && <img src={item.images['poster-simple']} class="border border-white/20 w-80 aspect-[1/1.414] object-contain" /> } {!(item.images && item.images['poster-simple']) && <img src="/logo.svg" class="border border-white/20 w-80 aspect-square object-contain p-10" /> } </div> </div> <div class="grow"> <h1 id="upcoming">W3PN {nameRenderer(item, true)}</h1> <div class="flex gap-2 mb-4 text-lg"> {item.type !== 'online-summit' && <img src={`/flags/${item.country}.svg`} class="w-4" /> <div> {item.city}, {item.country.toUpperCase()} {item.coincidence && <span> - {ccRenderer(item)}</span> } </div> } {item.type === 'online-summit' && <img src="/flags/other/earth.svg" class="w-4" /> <div>Online</div> } </div> <div> <div>Date: <span class="text-white">{dateFormat(item.date)} {item.days ? ' - ' + dateFormat(dateEnd(item.date, item.days)) + ` (${item.days} days)` : ''}</span></div> <div> {item.type !== 'online-summit' && <div>Venue: {item.place && <span class="text-white" set:html={marked.parseInline(item.place)}></span> || "TBD"}</div> } {item.place && item['place-address'] && <span> @ </span> <span class="text-white">{item['place-address']}</span> } </div> <div>Status: <span class:list={[status.color]} class="mr-1.5 text-xs">●</span> {status.title}</div> <div>Visitors: {item.visitors && <span class="text-white">{item.visitors} people</span> } {!item.visitors && ext && <span><span class="text-white">{ext.guestCount > 0 ? (ext.guestCount + ' people') : 'n/a'}</span> {status.title === 'Pre-registration' ? 'pre-registered' : 'registered'}</span> } {!item.visitors && !ext && <span>n/a</span> } </div> <div class="mt-4 mb-2"> {item.links?.rsvp && <a href={item.links.rsvp} class="button inverted"><button>{status.title === 'Pre-registration' ? 'Pre-registration' : 'Registration'}</button></a> } {item.links?.web && <a href={item.links.web} class="button inverted"><button>Website</button></a> } </div> </div> </div> </div> <div class="bg-[#0f0f0f] px-4 py-2 mt-6 flex gap-6 w-full"> <div>ID: <span class="py-1 px-2 rounded bg-white/70 text-black">{item.id}</span></div> <div>Lead: <span class="">{item.lead || 'n/a'}</span></div> <div class="grow flex items-right justify-end gap-6"> {item.links?.rsvp && <a href={item.links.rsvp} class="hover:text-white">Lu.ma</a> } {item.issue && <a href={`https://github.com/web3privacy/events/issues/${item.issue}`} class="hover:text-white">PM</a> } <a href="https://github.com/web3privacy/data/blob/main/src/events/index.yaml" class="hover:text-white">Source</a> </div> </div> <SpeakerList {item} thumbSize="big"/> </div> </BaseLayout>