92 lines
2.6 KiB
Plaintext
92 lines
2.6 KiB
Plaintext
@page "/termine"
|
||
@using System.Globalization
|
||
@using Elternbeirat.Web.Services
|
||
@inject EventService EventService
|
||
|
||
<PageTitle>Termine</PageTitle>
|
||
|
||
<h1>Termine</h1>
|
||
|
||
<p class="intro">
|
||
Alle Termine des Elternbeirats auf einen Blick. Sie können den Kalender auch
|
||
<a href="/termine.ics">abonnieren</a> und in Ihrer Kalender-App automatisch
|
||
aktuell halten.
|
||
</p>
|
||
|
||
<h2>Kommende Termine</h2>
|
||
|
||
@if (EventService.Upcoming.Count == 0)
|
||
{
|
||
<p>Zurzeit sind keine Termine geplant.</p>
|
||
}
|
||
else
|
||
{
|
||
<ul class="event-list">
|
||
@foreach (var ev in EventService.Upcoming)
|
||
{
|
||
<li>
|
||
<time datetime="@ev.Start.ToString("s")">@Format(ev)</time>
|
||
<span class="event-title">@ev.Title</span>
|
||
@if (!string.IsNullOrWhiteSpace(ev.Location))
|
||
{
|
||
<span class="event-location">@ev.Location</span>
|
||
}
|
||
@if (!string.IsNullOrWhiteSpace(ev.Note))
|
||
{
|
||
<p class="event-note">@ev.Note</p>
|
||
}
|
||
</li>
|
||
}
|
||
</ul>
|
||
}
|
||
|
||
@if (EventService.Past.Count > 0)
|
||
{
|
||
<h2>Vergangene Termine</h2>
|
||
<ul class="event-list event-list-past">
|
||
@foreach (var ev in EventService.Past)
|
||
{
|
||
<li>
|
||
<time datetime="@ev.Start.ToString("s")">@Format(ev)</time>
|
||
<span class="event-title">@ev.Title</span>
|
||
@if (!string.IsNullOrWhiteSpace(ev.Location))
|
||
{
|
||
<span class="event-location">@ev.Location</span>
|
||
}
|
||
</li>
|
||
}
|
||
</ul>
|
||
}
|
||
|
||
@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;
|
||
}
|
||
}
|