From 49410758a80926362ea8f2641603dca4de7ab2a5 Mon Sep 17 00:00:00 2001 From: Francesc Arpi Roca Date: Tue, 7 Jul 2026 10:31:26 +0200 Subject: [PATCH 1/3] feat(programa): add Programa page with Pretalx widget Embeds the Pretalx schedule widget at /programa for the 3 supported locales, with the menu entry as the 2nd item after Inicio. Includes: - Page wrapper with getStaticPaths for es/en/ca - Localized component (h1, intro, widget, noscript fallback) - New i18n module (programa/{index,es,en,ca}.ts) - Layout: optional fullWidth prop for full-viewport content - Widget wrapped in overflow-x-auto for horizontal scroll on narrow viewports - Dialog styles injected into the widget's shadow root via JS, since Pretalx uses Shadow DOM and light-DOM CSS does not cross it --- src/components/ProgramaPage.astro | 41 ++++++++++++++++++++++++++++++ src/i18n/menu/ca.ts | 4 +++ src/i18n/menu/en.ts | 4 +++ src/i18n/menu/es.ts | 4 +++ src/i18n/programa/ca.ts | 8 ++++++ src/i18n/programa/en.ts | 8 ++++++ src/i18n/programa/es.ts | 8 ++++++ src/i18n/programa/index.ts | 5 ++++ src/layouts/Layout.astro | 10 ++++++-- src/pages/[lang]/programa.astro | 42 +++++++++++++++++++++++++++++++ 10 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 src/components/ProgramaPage.astro create mode 100644 src/i18n/programa/ca.ts create mode 100644 src/i18n/programa/en.ts create mode 100644 src/i18n/programa/es.ts create mode 100644 src/i18n/programa/index.ts create mode 100644 src/pages/[lang]/programa.astro diff --git a/src/components/ProgramaPage.astro b/src/components/ProgramaPage.astro new file mode 100644 index 0000000..604fe57 --- /dev/null +++ b/src/components/ProgramaPage.astro @@ -0,0 +1,41 @@ +--- +import { programaTexts } from '@/i18n/programa' +import { menuTexts } from '@/i18n/menu' + +interface Props { + lang: string +} +const { lang } = Astro.props +const t = programaTexts[lang as keyof typeof programaTexts] +const menuT = menuTexts[lang as keyof typeof menuTexts] +--- + +
+

{t.title}

+

{t.intro}

+ +
+ +
+ + +
diff --git a/src/i18n/menu/ca.ts b/src/i18n/menu/ca.ts index 56d8fb7..bc335ec 100644 --- a/src/i18n/menu/ca.ts +++ b/src/i18n/menu/ca.ts @@ -4,6 +4,10 @@ export const ca = { label: 'Inici', href: '/', }, + { + label: 'Programa', + href: '/programa', + }, { label: 'Informació', children: [ diff --git a/src/i18n/menu/en.ts b/src/i18n/menu/en.ts index a4b2391..2775932 100644 --- a/src/i18n/menu/en.ts +++ b/src/i18n/menu/en.ts @@ -4,6 +4,10 @@ export const en = { label: 'Home', href: '/', }, + { + label: 'Programme', + href: '/programa', + }, { label: 'Information', children: [ diff --git a/src/i18n/menu/es.ts b/src/i18n/menu/es.ts index dc342c4..2ab79ba 100644 --- a/src/i18n/menu/es.ts +++ b/src/i18n/menu/es.ts @@ -4,6 +4,10 @@ export const es = { label: 'Inicio', href: '/', }, + { + label: 'Programa', + href: '/programa', + }, { label: 'Información', children: [ diff --git a/src/i18n/programa/ca.ts b/src/i18n/programa/ca.ts new file mode 100644 index 0000000..782d50e --- /dev/null +++ b/src/i18n/programa/ca.ts @@ -0,0 +1,8 @@ +export const ca = { + title: 'Programa', + seoDescription: 'Consulta el cronograma complet de xerrades, tallers i activitats de la PyConES 2026.', + intro: 'Explora totes les xerrades, tallers i activitats de la PyConES 2026.', + locale: 'ca', + noscript: 'JavaScript està desactivat al teu navegador. Per veure el programa sense JavaScript,', + noscriptLink: 'fes clic aquí', +} as const diff --git a/src/i18n/programa/en.ts b/src/i18n/programa/en.ts new file mode 100644 index 0000000..cdda492 --- /dev/null +++ b/src/i18n/programa/en.ts @@ -0,0 +1,8 @@ +export const en = { + title: 'Programme', + seoDescription: 'Check out the full schedule of talks, workshops and activities at PyConES 2026.', + intro: 'Explore all the talks, workshops and activities at PyConES 2026.', + locale: 'en', + noscript: 'JavaScript is disabled in your browser. To view the schedule without JavaScript,', + noscriptLink: 'click here', +} as const diff --git a/src/i18n/programa/es.ts b/src/i18n/programa/es.ts new file mode 100644 index 0000000..e2b6db8 --- /dev/null +++ b/src/i18n/programa/es.ts @@ -0,0 +1,8 @@ +export const es = { + title: 'Programa', + seoDescription: 'Consulta el cronograma completo de charlas, talleres y actividades de la PyConES 2026.', + intro: 'Explora todas las charlas, talleres y actividades de la PyConES 2026.', + locale: 'es', + noscript: 'JavaScript está deshabilitado en tu navegador. Para ver el programa sin JavaScript,', + noscriptLink: 'haz click aquí', +} as const diff --git a/src/i18n/programa/index.ts b/src/i18n/programa/index.ts new file mode 100644 index 0000000..0c9ecb3 --- /dev/null +++ b/src/i18n/programa/index.ts @@ -0,0 +1,5 @@ +import { es } from './es' +import { en } from './en' +import { ca } from './ca' + +export const programaTexts = { es, en, ca } diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 91aa175..263b2df 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -9,9 +9,10 @@ import { ClientRouter } from 'astro:transitions' interface Props { title: string description?: string // Optional (?) + fullWidth?: boolean } const { lang = 'es' } = Astro.params -const { title, description = 'PyconES 2026' } = Astro.props +const { title, description = 'PyconES 2026', fullWidth = false } = Astro.props const siteUrl = Astro.site ? Astro.site.origin : 'https://2026.es.pycon.org' const canonicalURL = new URL(Astro.url.pathname, siteUrl) @@ -121,7 +122,12 @@ const alternates = [
-
+