diff --git a/CLAUDE.md b/CLAUDE.md index 8a71bfa..6de3178 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -38,8 +38,9 @@ vollständige Stand. Port-Mapping hat und nur über NPM erreichbar ist. - **Das chiseled-Runtime-Image hat keine Shell.** `HEALTHCHECK` mit `curl` oder `sh` schlägt dort fehl. -- Neue Seite = Markdown in `Content/pages/`. Neuer Termin = Eintrag in - `Content/termine.yml`. In beiden Fällen wird **kein** `.razor` angefasst. +- Neue Seite = Markdown in `Content/pages/`. Neuer Beitrag = Markdown in + `Content/posts/`. Neuer Termin = Eintrag in `Content/events.yml`. In allen + Fällen wird **kein** `.razor` angefasst. - Slugs ohne Umlaute (`ueber-uns`, nicht `über-uns`). ## Regeln @@ -62,7 +63,9 @@ vollständige Stand. eingelesen und gecacht). - Öffentliche Typen und Methoden der `Services` bekommen XML-Doc (auf Englisch, leicht verständlich), Razor-Markup nicht. -- **Code auf Englisch** — Typen, Member, Variablen, Kommentare, Skripte und Doku. - Ausnahme: UI-Texte und Redakteurs-Inhalte bleiben Deutsch (Markdown-Inhalte, - Frontmatter-Schlüssel wie `titel:`, sowie Slugs/Dateinamen unter `Content/`, - z. B. `vorstandsteam`). +- **Code durchgängig auf Englisch** — Typen, Member, Variablen, Kommentare, + Skripte und Doku. Das gilt **auch für Domänenbegriffe**: im Code `Event`, nicht + `Termin`; `Post`, nicht `Beitrag`. Deutsch bleibt ausschließlich, was ein + Besucher liest oder ein Redakteur pflegt: UI-Texte, Markdown-Inhalte, + Frontmatter-Schlüssel wie `titel:` sowie Slugs/Dateinamen unter `Content/` + (z. B. `vorstandsteam`, `/termine`). diff --git a/Elternbeirat.Web.Tests/RouteSmokeTests.cs b/Elternbeirat.Web.Tests/RouteSmokeTests.cs index 2de7a4b..38200e9 100644 --- a/Elternbeirat.Web.Tests/RouteSmokeTests.cs +++ b/Elternbeirat.Web.Tests/RouteSmokeTests.cs @@ -38,6 +38,8 @@ public sealed class RouteSmokeTests : IClassFixtureVorstandsteam Förderverein Beiträge + Termine FAQ Downloads Kontakt diff --git a/Elternbeirat.Web/Components/Pages/EventList.razor b/Elternbeirat.Web/Components/Pages/EventList.razor new file mode 100644 index 0000000..0fdee26 --- /dev/null +++ b/Elternbeirat.Web/Components/Pages/EventList.razor @@ -0,0 +1,91 @@ +@page "/termine" +@using System.Globalization +@using Elternbeirat.Web.Services +@inject EventService EventService + +Termine + +

Termine

+ +

+ Alle Termine des Elternbeirats auf einen Blick. Sie können den Kalender auch + abonnieren und in Ihrer Kalender-App automatisch + aktuell halten. +

+ +

Kommende Termine

+ +@if (EventService.Upcoming.Count == 0) +{ +

Zurzeit sind keine Termine geplant.

+} +else +{ + +} + +@if (EventService.Past.Count > 0) +{ +

Vergangene Termine

+ +} + +@code { + private static readonly CultureInfo _german = CultureInfo.GetCultureInfo("de-DE"); + + // Formats the entry's date range for display: a single day, a date with a + // time, or a span across days. + private static string Format(Event ev) + { + var start = ev.HasTime + ? ev.Start.ToString("dddd, d. MMMM yyyy, HH:mm", _german) + " Uhr" + : ev.Start.ToString("dddd, d. MMMM yyyy", _german); + + if (ev.End is not { } end) + { + return start; + } + + // Same day: append just the end time. Different days: append the full + // end date. + if (end.Date == ev.Start.Date) + { + return ev.HasTime + ? start + "–" + end.ToString("HH:mm", _german) + " Uhr" + : start; + } + + var endText = ev.HasTime + ? end.ToString("d. MMMM yyyy, HH:mm", _german) + " Uhr" + : end.ToString("d. MMMM yyyy", _german); + return start + " – " + endText; + } +} diff --git a/Elternbeirat.Web/Content/events.yml b/Elternbeirat.Web/Content/events.yml new file mode 100644 index 0000000..5d8f418 --- /dev/null +++ b/Elternbeirat.Web/Content/events.yml @@ -0,0 +1,26 @@ +# Calendar entries of the Elternbeirat. +# +# One entry per event. Required keys: title, start. +# start/end: +# date only -> "2026-03-15" (all-day) +# date with time -> "2026-03-15 19:30" +# location and note are optional. + +- title: Elternbeiratssitzung + start: "2026-10-08 19:30" + location: Lehrerzimmer + note: Themen bitte vorab per E-Mail einreichen. + +- title: Herbstbasar + start: "2026-11-14 10:00" + end: "2026-11-14 16:00" + location: Aula + +- title: Weihnachtsferien + start: "2026-12-21" + end: "2027-01-06" + +- title: Elternsprechtag + start: "2026-09-05 15:00" + end: "2026-09-05 18:00" + location: Klassenräume diff --git a/Elternbeirat.Web/Content/pages/datenschutz.md b/Elternbeirat.Web/Content/pages/datenschutz.md index 58a09a5..b64b662 100644 --- a/Elternbeirat.Web/Content/pages/datenschutz.md +++ b/Elternbeirat.Web/Content/pages/datenschutz.md @@ -1,5 +1,5 @@ --- -titel: Datenschutz +title: Datenschutz --- # Datenschutzerklärung diff --git a/Elternbeirat.Web/Content/pages/downloads.md b/Elternbeirat.Web/Content/pages/downloads.md index 7b071ac..d4ed098 100644 --- a/Elternbeirat.Web/Content/pages/downloads.md +++ b/Elternbeirat.Web/Content/pages/downloads.md @@ -1,5 +1,5 @@ --- -titel: Downloads +title: Downloads --- # Downloads diff --git a/Elternbeirat.Web/Content/pages/faq-elternarbeit.md b/Elternbeirat.Web/Content/pages/faq-elternarbeit.md index ea44e32..e26735b 100644 --- a/Elternbeirat.Web/Content/pages/faq-elternarbeit.md +++ b/Elternbeirat.Web/Content/pages/faq-elternarbeit.md @@ -1,5 +1,5 @@ --- -titel: FAQ Elternarbeit +title: FAQ Elternarbeit --- # Elternarbeit diff --git a/Elternbeirat.Web/Content/pages/faq-elterneuro.md b/Elternbeirat.Web/Content/pages/faq-elterneuro.md index 5286e04..3465b3d 100644 --- a/Elternbeirat.Web/Content/pages/faq-elterneuro.md +++ b/Elternbeirat.Web/Content/pages/faq-elterneuro.md @@ -1,5 +1,5 @@ --- -titel: FAQ Elterneuro +title: FAQ Elterneuro --- # Elterneuro diff --git a/Elternbeirat.Web/Content/pages/faq-mensa.md b/Elternbeirat.Web/Content/pages/faq-mensa.md index fefa1a5..3d5f91c 100644 --- a/Elternbeirat.Web/Content/pages/faq-mensa.md +++ b/Elternbeirat.Web/Content/pages/faq-mensa.md @@ -1,5 +1,5 @@ --- -titel: FAQ Mensa +title: FAQ Mensa --- # Mensa diff --git a/Elternbeirat.Web/Content/pages/faq-schliessfach.md b/Elternbeirat.Web/Content/pages/faq-schliessfach.md index e3ea004..7ab707d 100644 --- a/Elternbeirat.Web/Content/pages/faq-schliessfach.md +++ b/Elternbeirat.Web/Content/pages/faq-schliessfach.md @@ -1,5 +1,5 @@ --- -titel: FAQ Schließfach +title: FAQ Schließfach --- # Schließfächer diff --git a/Elternbeirat.Web/Content/pages/faq.md b/Elternbeirat.Web/Content/pages/faq.md index 4d6f760..c88fabf 100644 --- a/Elternbeirat.Web/Content/pages/faq.md +++ b/Elternbeirat.Web/Content/pages/faq.md @@ -1,5 +1,5 @@ --- -titel: FAQ +title: FAQ --- # Häufige Fragen diff --git a/Elternbeirat.Web/Content/pages/foerderverein.md b/Elternbeirat.Web/Content/pages/foerderverein.md index 4ce4fe8..ecb6bfe 100644 --- a/Elternbeirat.Web/Content/pages/foerderverein.md +++ b/Elternbeirat.Web/Content/pages/foerderverein.md @@ -1,5 +1,5 @@ --- -titel: Förderverein +title: Förderverein --- # Förderverein „Freunde der IGMH" diff --git a/Elternbeirat.Web/Content/pages/impressum.md b/Elternbeirat.Web/Content/pages/impressum.md index d2e508c..26b3b1e 100644 --- a/Elternbeirat.Web/Content/pages/impressum.md +++ b/Elternbeirat.Web/Content/pages/impressum.md @@ -1,5 +1,5 @@ --- -titel: Impressum +title: Impressum --- # Impressum diff --git a/Elternbeirat.Web/Content/pages/kontakt.md b/Elternbeirat.Web/Content/pages/kontakt.md index cdf298d..5e2ccfb 100644 --- a/Elternbeirat.Web/Content/pages/kontakt.md +++ b/Elternbeirat.Web/Content/pages/kontakt.md @@ -1,5 +1,5 @@ --- -titel: Kontakt +title: Kontakt --- # Kontakt diff --git a/Elternbeirat.Web/Content/pages/vorstandsteam.md b/Elternbeirat.Web/Content/pages/vorstandsteam.md index 000d88b..df13a9d 100644 --- a/Elternbeirat.Web/Content/pages/vorstandsteam.md +++ b/Elternbeirat.Web/Content/pages/vorstandsteam.md @@ -1,5 +1,5 @@ --- -titel: Vorstandsteam +title: Vorstandsteam --- # Das Vorstandsteam diff --git a/Elternbeirat.Web/Content/beitraege/neue-sporthalle-eroeffnet.md b/Elternbeirat.Web/Content/posts/neue-sporthalle-eroeffnet.md similarity index 80% rename from Elternbeirat.Web/Content/beitraege/neue-sporthalle-eroeffnet.md rename to Elternbeirat.Web/Content/posts/neue-sporthalle-eroeffnet.md index 1bfe16d..f59270e 100644 --- a/Elternbeirat.Web/Content/beitraege/neue-sporthalle-eroeffnet.md +++ b/Elternbeirat.Web/Content/posts/neue-sporthalle-eroeffnet.md @@ -1,6 +1,6 @@ --- -titel: Neue Sporthalle feierlich eröffnet -datum: 2025-10-05 +title: Neue Sporthalle feierlich eröffnet +date: 2025-10-05 --- # Neue Sporthalle feierlich eröffnet diff --git a/Elternbeirat.Web/Content/beitraege/neuer-vorstand-gewaehlt.md b/Elternbeirat.Web/Content/posts/neuer-vorstand-gewaehlt.md similarity index 83% rename from Elternbeirat.Web/Content/beitraege/neuer-vorstand-gewaehlt.md rename to Elternbeirat.Web/Content/posts/neuer-vorstand-gewaehlt.md index 04948ec..8cb545c 100644 --- a/Elternbeirat.Web/Content/beitraege/neuer-vorstand-gewaehlt.md +++ b/Elternbeirat.Web/Content/posts/neuer-vorstand-gewaehlt.md @@ -1,6 +1,6 @@ --- -titel: Neuer Vorstand des Elternbeirats gewählt -datum: 2025-02-26 +title: Neuer Vorstand des Elternbeirats gewählt +date: 2025-02-26 --- # Neuer Vorstand des Elternbeirats gewählt diff --git a/Elternbeirat.Web/Elternbeirat.Web.csproj b/Elternbeirat.Web/Elternbeirat.Web.csproj index aeae671..e6069f2 100644 --- a/Elternbeirat.Web/Elternbeirat.Web.csproj +++ b/Elternbeirat.Web/Elternbeirat.Web.csproj @@ -15,6 +15,7 @@ +