Files
ChronoCCG/Chrono/Web/Pages/Decks.razor
T
2026-06-18 13:30:46 -04:00

70 lines
2.3 KiB
Plaintext

@page "/decks"
<PageTitle>Decks</PageTitle>
<div class="decks-page">
<div class="decks-header">
<h1>Decks</h1>
<p class="text-secondary">@decks.Count deck@(decks.Count != 1 ? "s" : "")</p>
</div>
<div class="deck-list">
@foreach (var deck in decks)
{
<a class="deck-card" href="/decks/@Uri.EscapeDataString(deck.Name)">
<div class="deck-card-body">
<h2 class="deck-card-title">@deck.Name</h2>
@if (deck.Factions.Count > 0)
{
<div class="deck-card-factions">
@foreach (var f in deck.Factions)
{
<span class="faction-badge">@f</span>
}
</div>
}
<div class="deck-card-meta">
<span>@deck.Cards.Count card@(deck.Cards.Count != 1 ? "s" : "")</span>
@if (deck.Keycards.Count > 0)
{
<span>@deck.Keycards.Count keycard@(deck.Keycards.Count != 1 ? "s" : "")</span>
}
@if (deck.Divers.Count > 0)
{
<span>@deck.Divers.Count diver@(deck.Divers.Count != 1 ? "s" : "")</span>
}
</div>
</div>
@if (deck.Description != null)
{
<div class="deck-card-excerpt">@Truncate(deck.Description, 120)</div>
}
</a>
}
</div>
@if (decks.Count == 0)
{
<div class="empty-state">
<i class="bi bi-journal-text"></i>
<p>No decks available yet.</p>
</div>
}
</div>
@code {
private List<DeckData> decks = [];
protected override void OnInitialized()
{
decks = DeckDatabase.Decks.Where(d => d.IsVisible).ToList();
}
private static string Truncate(string text, int maxLength)
{
if (text.Length <= maxLength) return text;
var lastSpace = text.LastIndexOf(' ', maxLength);
return text[..(lastSpace > 0 ? lastSpace : maxLength)] + "...";
}
}