AI: Central SiteMap controls released vs in-development pages

- New SiteMap registry: single source of truth for page visibility.
  Fail-closed: unlisted or Released=false pages are hidden.
- NavMenu renders nav links from SiteMap.NavEntries (galaxy only).
- New Components/ReleaseGuard wraps the Router's Found template:
  unreleased routes redirect to /galaxy (covers direct URLs).
- Galaxy map released; system/mastery detail dossiers released but
  not in nav (linked from the map); Home, indexes, Units hidden.
- Brand logo now links to /galaxy.
This commit is contained in:
2026-09-29 18:21:21 +00:00
parent 5812dbdb19
commit f6e136df37
+11 -41
View File
@@ -2,7 +2,7 @@
<div class="top-row navbar navbar-dark d-flex align-items-center @(IsCollapsed ? "justify-content-center px-1" : "justify-content-between px-3")">
@if (!IsCollapsed)
{
<a class="navbar-brand d-flex align-items-center me-0" href="" title="ZeroSpace Database & Command Hub">
<a class="navbar-brand d-flex align-items-center me-0" href="galaxy" title="ZeroSpace Database & Command Hub">
<span class="brand-glow me-2">✦</span>
<span class="brand-text">ZeroSpace</span>
</a>
@@ -23,7 +23,7 @@
else
{
<div class="d-flex align-items-center justify-content-center gap-1 w-100">
<a class="navbar-brand d-flex align-items-center m-0 p-0" href="" title="ZeroSpace Database & Command Hub">
<a class="navbar-brand d-flex align-items-center m-0 p-0" href="galaxy" title="ZeroSpace Database & Command Hub">
<span class="brand-glow">✦</span>
</a>
<button type="button" class="btn btn-sm btn-nav-toggle nav-toggle-btn"
@@ -40,52 +40,22 @@
<div class="@NavMenuCssClass nav-scrollable flex-grow-1" @onclick="OnNavMenuClick">
<nav class="nav flex-column">
@foreach (var entry in SiteMap.NavEntries)
{
<div class="nav-item @(IsCollapsed ? "px-1" : "px-3")">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All" title="Home">
<span class="bi bi-house-door-fill-nav-menu" aria-hidden="true"></span>
<NavLink class="nav-link" href="@entry.Href" Match="@entry.Match" title="@entry.Title">
<span class="@entry.IconCss" aria-hidden="true"></span>
@if (!IsCollapsed)
{
<span class="nav-text">Home</span>
<span class="nav-text">@entry.Title</span>
@if (entry.Badge is not null)
{
<span class="badge badge-nav-live ms-auto">@entry.Badge</span>
}
}
</NavLink>
</div>
<div class="nav-item @(IsCollapsed ? "px-1" : "px-3")">
<NavLink class="nav-link" href="galaxy" title="Galaxy Map">
<span class="bi bi-galaxy-nav-menu" aria-hidden="true"></span>
@if (!IsCollapsed)
{
<span class="nav-text">Galaxy Map</span>
<span class="badge badge-nav-live ms-auto">MAP</span>
}
</NavLink>
</div>
<div class="nav-item @(IsCollapsed ? "px-1" : "px-3")">
<NavLink class="nav-link" href="StarSystem" title="Star Systems">
<span class="bi bi-star-systems-nav-menu" aria-hidden="true"></span>
@if (!IsCollapsed)
{
<span class="nav-text">Star Systems</span>
}
</NavLink>
</div>
<div class="nav-item @(IsCollapsed ? "px-1" : "px-3")">
<NavLink class="nav-link" href="SystemMastery" title="Masteries">
<span class="bi bi-masteries-nav-menu" aria-hidden="true"></span>
@if (!IsCollapsed)
{
<span class="nav-text">Masteries</span>
}
</NavLink>
</div>
<div class="nav-item @(IsCollapsed ? "px-1" : "px-3")">
<NavLink class="nav-link" href="units" title="Units">
<span class="bi bi-units-nav-menu" aria-hidden="true"></span>
@if (!IsCollapsed)
{
<span class="nav-text">Units</span>
}
</NavLink>
</div>
</nav>
</div>