From c0f3cae01e5d20a87f36f683608a0a760cb8d7d0 Mon Sep 17 00:00:00 2001 From: Niko Date: Sat, 20 Jun 2026 23:56:56 +0200 Subject: [PATCH 01/25] Update styles --- src/components/Header.astro | 9 ++-- src/components/schedule/day.astro | 1 + src/components/sessions/list-posters.astro | 44 ++++++++-------- src/content/pages/tickets.mdx | 6 +-- src/data/nav.ts | 7 ++- src/pages/schedule.astro | 4 +- src/pages/session/[slug].astro | 9 +++- src/pages/talks.astro | 59 +++++++++++++--------- src/pages/tutorials.astro | 43 ++++++++-------- src/styles/light-theme.css | 2 +- 10 files changed, 102 insertions(+), 82 deletions(-) diff --git a/src/components/Header.astro b/src/components/Header.astro index 8f501cb2d..e9f198caa 100644 --- a/src/components/Header.astro +++ b/src/components/Header.astro @@ -130,16 +130,17 @@ nav { text-transform: uppercase; letter-spacing: 0.07em; color: var(--color-text-primary); - text-decoration: none; + text-decoration: underline; + text-decoration-color: transparent; border-radius: 2px; - transition: color 0.15s, background 0.15s; + transition: color 0.15s, text-decoration-color 0.15s; } .nav-item > a:hover, .nav-item:hover > a, .nav-item > a:focus { - color: var(--color-text); - background: var(--color-border); + color: var(--color-accent-themed); + text-decoration-color: var(--color-accent-themed); } .nav-arrow { diff --git a/src/components/schedule/day.astro b/src/components/schedule/day.astro index d0973b927..67c86b1cf 100644 --- a/src/components/schedule/day.astro +++ b/src/components/schedule/day.astro @@ -56,6 +56,7 @@ const ROOMS = (day.data.rooms ?? []) type ScheduleSession = { title: string; + slug?: string; start: Date; startTime: string; end: Date; diff --git a/src/components/sessions/list-posters.astro b/src/components/sessions/list-posters.astro index d9c1dbe9f..003b0a549 100644 --- a/src/components/sessions/list-posters.astro +++ b/src/components/sessions/list-posters.astro @@ -1,4 +1,20 @@ --- +import { getCollection } from "astro:content"; + +const allSpeakers = await getCollection("speakers"); +const speakerNames: Record = {}; +for (const s of allSpeakers) { + speakerNames[s.id] = s.data.name; +} + +function speakerLabel(speakers: any): string { + if (!speakers || speakers.length === 0) return ""; + return speakers.map((s: any) => { + const id = typeof s === "string" ? s : s.id; + return speakerNames[id] || id; + }).join(", "); +} + interface Props { posters: Array<{ id: string; @@ -29,9 +45,7 @@ const { posters } = Astro.props;

{p.data.title}

- {p.data.speakers?.length - ? `${p.data.speakers.length} speaker${p.data.speakers.length > 1 ? "s" : ""}` - : ""} + {speakerLabel(p.data.speakers)}

@@ -56,23 +70,6 @@ const { posters } = Astro.props; + From 0eaa1623c7ef867f2aff105d2269c8dcff00bd30 Mon Sep 17 00:00:00 2001 From: Niko Date: Sun, 21 Jun 2026 12:21:23 +0200 Subject: [PATCH 22/25] Fix session blinking --- src/components/schedule/day.astro | 1 + src/pages/schedule.astro | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/components/schedule/day.astro b/src/components/schedule/day.astro index f023254ce..3518a2832 100644 --- a/src/components/schedule/day.astro +++ b/src/components/schedule/day.astro @@ -406,6 +406,7 @@ const dateText = format(date, "eeee d MMMM"); {(sessionsByTime[slot.startTime] ?? []) .sort(sortSessionByRooms) + .filter((session) => session.sessionType !== "poster") .map((session) => { const style = getSessionStyle(session); diff --git a/src/pages/schedule.astro b/src/pages/schedule.astro index 67f3c4b93..c15f92bf4 100644 --- a/src/pages/schedule.astro +++ b/src/pages/schedule.astro @@ -35,10 +35,9 @@ window.addEventListener('load', function() { if (!currentAnchor) return; var targetEl = document.getElementById(currentAnchor); - console.log(targetEl); + // Always switch to the correct day tab if we found the session if (targetEl) { - // Find the day this session belongs to var dayEl = targetEl.closest('.ep-sched-day'); if (dayEl) { var dayName = dayEl.getAttribute('data-day'); @@ -47,20 +46,22 @@ window.addEventListener('load', function() { var tabs = tabsContainer.querySelectorAll('.ep-sched-tab'); tabs.forEach(function(t) { if (t.getAttribute('data-day') === dayName) { - (t as HTMLElement).click(); + t.click(); } }); } } + } - var sessionEl: HTMLElement = targetEl.querySelector('.ep-session') || targetEl; + // Only blink if the session is visible + if (targetEl && targetEl.offsetParent !== null) { + var sessionEl = targetEl.querySelector('.ep-session') || targetEl; var originalOutline = sessionEl.style.outline; var originalBackground = sessionEl.style.background; var blinkCount = 0; var maxBlinks = 5; var blinkDuration = 500; - console.log('0'); function toggleBorder() { if (blinkCount >= maxBlinks * 2) { From 46516fc730151f6d23910845870c47d028041fdb Mon Sep 17 00:00:00 2001 From: Niko Date: Sun, 21 Jun 2026 18:08:35 +0200 Subject: [PATCH 23/25] Persist schedule tab with anchor --- src/layouts/ScheduleLayout.astro | 11 +++++++++-- src/pages/schedule.astro | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/layouts/ScheduleLayout.astro b/src/layouts/ScheduleLayout.astro index ee5dae832..a9c517cdd 100644 --- a/src/layouts/ScheduleLayout.astro +++ b/src/layouts/ScheduleLayout.astro @@ -228,7 +228,11 @@ select { if (days.length === 0) return; // en-CA gives us YYYY-MM-DD format - const today = new Intl.DateTimeFormat('en-CA', { + // Check URL hash for a specific day, otherwise use today + const hashDay = window.location.hash.replace('#day-', ''); + const hasDayHash = hashDay !== window.location.hash; + + const targetDay = hasDayHash ? hashDay : new Intl.DateTimeFormat('en-CA', { timeZone: 'Europe/Warsaw', year: 'numeric', month: '2-digit', @@ -237,7 +241,7 @@ select { let defaultIndex = 0; days.forEach(function(day, index) { - if (day.getAttribute('data-day') === today) defaultIndex = index; + if (day.getAttribute('data-day') === targetDay) defaultIndex = index; }); days.forEach(function(day, index) { @@ -262,6 +266,9 @@ select { d.classList.add('active'); } }); + + // Update URL hash for the selected day + history.replaceState(null, '', '#day-' + dayName); }); tabsContainer.appendChild(tab); diff --git a/src/pages/schedule.astro b/src/pages/schedule.astro index c15f92bf4..9634a2c18 100644 --- a/src/pages/schedule.astro +++ b/src/pages/schedule.astro @@ -32,7 +32,7 @@ window.addEventListener('load', function() { const currentAnchor = window.location.hash.substring(1); - if (!currentAnchor) return; + if (!currentAnchor || currentAnchor.startsWith('day-')) return; var targetEl = document.getElementById(currentAnchor); From 93b181110780a6e93260a0ab8bee0d54fa056b85 Mon Sep 17 00:00:00 2001 From: Niko Date: Sun, 21 Jun 2026 18:38:14 +0200 Subject: [PATCH 24/25] Fix search results link --- src/components/Search.astro | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/components/Search.astro b/src/components/Search.astro index f62c968e2..944daa999 100644 --- a/src/components/Search.astro +++ b/src/components/Search.astro @@ -106,6 +106,7 @@ import SearchComponent from "astro-pagefind/components/Search"; display: block; padding: 0.8rem 1.4rem; border-bottom: 1px solid var(--color-surface-faint); + position: relative; text-decoration: none; cursor: pointer; transition: background 0.12s; @@ -115,6 +116,12 @@ import SearchComponent from "astro-pagefind/components/Search"; border-bottom: none; } +.search-modal-content :global(.pagefind-ui__result-link::after) { + content: ""; + position: absolute; + inset: 0; +} + .search-modal-content :global(.pagefind-ui__result:hover), .search-modal-content :global(.pagefind-ui__result[data-selected]) { background: oklch(0.708 0.153 259.2 / 0.1); /* #64a0ff */ From 686faae4c2c92ca690ec4e0aa871f8718487c289 Mon Sep 17 00:00:00 2001 From: Niko Date: Sun, 21 Jun 2026 18:58:16 +0200 Subject: [PATCH 25/25] Fix search results --- astro.config.mjs | 7 ++++++- src/pages/media/speaker/[slug].astro | 2 +- src/pages/media/speakers.astro | 2 +- src/pages/media/sponsor/[slug].astro | 2 +- src/pages/media/sponsors.astro | 2 +- 5 files changed, 10 insertions(+), 5 deletions(-) diff --git a/astro.config.mjs b/astro.config.mjs index 156bebf21..3eb7f12a7 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -184,7 +184,12 @@ export default defineConfig({ // "https://vdo.ninja/?room=EuroPython_2025_Terrace_2B&hash=338a&do", }, integrations: [ - pagefind(), + pagefind({ + indexConfig: { + // Skip media pages from search results + excludeSelectors: ["html[data-pagefind-ignore]"], + }, + }), mdx(), svelte(), ...(fastBuild diff --git a/src/pages/media/speaker/[slug].astro b/src/pages/media/speaker/[slug].astro index ab31095f9..4cabd6c97 100644 --- a/src/pages/media/speaker/[slug].astro +++ b/src/pages/media/speaker/[slug].astro @@ -14,7 +14,7 @@ const { entry } = Astro.props; const allSessions = await getEntries(entry.data.submissions); --- - + diff --git a/src/pages/media/speakers.astro b/src/pages/media/speakers.astro index 5f77dc6d9..a6655f440 100644 --- a/src/pages/media/speakers.astro +++ b/src/pages/media/speakers.astro @@ -7,7 +7,7 @@ const speakers = await getCollection("speakers"); type Speaker = CollectionEntry<"speakers">; --- - + diff --git a/src/pages/media/sponsor/[slug].astro b/src/pages/media/sponsor/[slug].astro index 364432db3..a0ac014d3 100644 --- a/src/pages/media/sponsor/[slug].astro +++ b/src/pages/media/sponsor/[slug].astro @@ -14,7 +14,7 @@ const { entry:sponsor } = Astro.props; --- - + diff --git a/src/pages/media/sponsors.astro b/src/pages/media/sponsors.astro index a41a93193..c384ba8e8 100644 --- a/src/pages/media/sponsors.astro +++ b/src/pages/media/sponsors.astro @@ -7,7 +7,7 @@ const sponsors = await getCollection("sponsors"); type Sponsor = CollectionEntry<"sponsors">; --- - +