Restructure into feature folders with code-behind and scoped CSS
This commit is contained in:
1 parent
5ba523d34d
commit
9d1f8fe0d4
25 files changed
+250
-203
No files matched your search
@@ -1,37 +0,0 @@
|
||||
@page "/{Slug}"
|
||||
@using Elternbeirat.Web.Services
|
||||
@inject PageService PageService
|
||||
|
||||
@if (_page is null)
|
||||
{
|
||||
<PageTitle>Nicht gefunden</PageTitle>
|
||||
}
|
||||
else
|
||||
{
|
||||
<PageTitle>@_page.Title</PageTitle>
|
||||
<article>
|
||||
@((MarkupString)_page.ContentHtml)
|
||||
</article>
|
||||
}
|
||||
|
||||
@code {
|
||||
[Parameter]
|
||||
public string Slug { get; set; } = "";
|
||||
|
||||
private Page? _page;
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
_page = PageService.Find(Slug);
|
||||
|
||||
// Unknown slug -> 404, so UseStatusCodePagesWithReExecute serves the
|
||||
// /not-found page instead of an empty 200 response.
|
||||
if (_page is null && HttpContext is not null)
|
||||
{
|
||||
HttpContext.Response.StatusCode = StatusCodes.Status404NotFound;
|
||||
}
|
||||
}
|
||||
|
||||
[CascadingParameter]
|
||||
private HttpContext? HttpContext { get; set; }
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
@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;
|
||||
}
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
@page "/"
|
||||
@using System.Globalization
|
||||
@using Elternbeirat.Web.Services
|
||||
@inject PostService PostService
|
||||
|
||||
<PageTitle>Elternbeirat der IGMH</PageTitle>
|
||||
|
||||
<h1>Elternbeirat der IGMH</h1>
|
||||
|
||||
<p class="intro">
|
||||
Willkommen beim Elternbeirat der IGMH. Hier finden Sie aktuelle Informationen,
|
||||
Antworten auf häufige Fragen und Unterlagen rund um die Elternarbeit.
|
||||
</p>
|
||||
|
||||
<section class="home-news">
|
||||
<h2>Aktuelle Beiträge</h2>
|
||||
|
||||
@if (_latest.Count == 0)
|
||||
{
|
||||
<p>Zurzeit gibt es keine Beiträge.</p>
|
||||
}
|
||||
else
|
||||
{
|
||||
<ul class="post-list">
|
||||
@foreach (var post in _latest)
|
||||
{
|
||||
<li>
|
||||
<a href="@($"/beitraege/{post.Slug}")">@post.Title</a>
|
||||
<time datetime="@post.Date.ToString("yyyy-MM-dd")">
|
||||
@post.Date.ToString("d. MMMM yyyy", _german)
|
||||
</time>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
<p><a href="/beitraege">Alle Beiträge →</a></p>
|
||||
}
|
||||
</section>
|
||||
|
||||
@code {
|
||||
private static readonly CultureInfo _german = CultureInfo.GetCultureInfo("de-DE");
|
||||
|
||||
private IReadOnlyList<Post> _latest = [];
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
// Show the three most recent posts as a teaser on the home page.
|
||||
_latest = PostService.All.Take(3).ToList();
|
||||
}
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
@page "/beitraege/{Slug}"
|
||||
@using System.Globalization
|
||||
@using Elternbeirat.Web.Services
|
||||
@inject PostService PostService
|
||||
|
||||
@if (_post is null)
|
||||
{
|
||||
<PageTitle>Nicht gefunden</PageTitle>
|
||||
}
|
||||
else
|
||||
{
|
||||
<PageTitle>@_post.Title</PageTitle>
|
||||
<article>
|
||||
<p class="post-meta">
|
||||
<a href="/beitraege">← Alle Beiträge</a>
|
||||
<time datetime="@_post.Date.ToString("yyyy-MM-dd")">
|
||||
@_post.Date.ToString("d. MMMM yyyy", _german)
|
||||
</time>
|
||||
</p>
|
||||
@((MarkupString)_post.ContentHtml)
|
||||
</article>
|
||||
}
|
||||
|
||||
@code {
|
||||
private static readonly CultureInfo _german = CultureInfo.GetCultureInfo("de-DE");
|
||||
|
||||
[Parameter]
|
||||
public string Slug { get; set; } = "";
|
||||
|
||||
private Post? _post;
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
_post = PostService.Find(Slug);
|
||||
|
||||
// Unknown slug -> 404, so UseStatusCodePagesWithReExecute serves the
|
||||
// /not-found page instead of an empty 200 response.
|
||||
if (_post is null && HttpContext is not null)
|
||||
{
|
||||
HttpContext.Response.StatusCode = StatusCodes.Status404NotFound;
|
||||
}
|
||||
}
|
||||
|
||||
[CascadingParameter]
|
||||
private HttpContext? HttpContext { get; set; }
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
@page "/beitraege"
|
||||
@using System.Globalization
|
||||
@using Elternbeirat.Web.Services
|
||||
@inject PostService PostService
|
||||
|
||||
<PageTitle>Beiträge</PageTitle>
|
||||
|
||||
<h1>Beiträge</h1>
|
||||
|
||||
@if (PostService.All.Count == 0)
|
||||
{
|
||||
<p>Zurzeit gibt es keine Beiträge.</p>
|
||||
}
|
||||
else
|
||||
{
|
||||
<ul class="post-list">
|
||||
@foreach (var post in PostService.All)
|
||||
{
|
||||
<li>
|
||||
<a href="@($"/beitraege/{post.Slug}")">@post.Title</a>
|
||||
<time datetime="@post.Date.ToString("yyyy-MM-dd")">
|
||||
@post.Date.ToString("d. MMMM yyyy", _german)
|
||||
</time>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
|
||||
@code {
|
||||
private static readonly CultureInfo _german = CultureInfo.GetCultureInfo("de-DE");
|
||||
}
|
||||
Reference in new issue
Block a user