102 lines
3.3 KiB
Plaintext
102 lines
3.3 KiB
Plaintext
@namespace Shared.Pages
|
|
@page "/decks"
|
|
@using Model
|
|
|
|
<PageTitle>Chrono CCG - Decks</PageTitle>
|
|
|
|
<HeadContent>
|
|
<meta name="description"
|
|
content="Explore community and official Chrono CCG decks. Find the best strategies and card combinations."/>
|
|
</HeadContent>
|
|
|
|
<div class="decks-page">
|
|
<div class="decks-header">
|
|
<h1>Decks</h1>
|
|
<div class="decks-header-row">
|
|
<p class="text-secondary">@decks.Count deck@(decks.Count != 1 ? "s" : "")</p>
|
|
<div class="form-check form-switch">
|
|
<input class="form-check-input" type="checkbox" id="showPrecons" @bind="showPrecons"
|
|
@bind:after="RefreshDecks">
|
|
<label class="form-check-label" for="showPrecons">Show Precons</label>
|
|
</div>
|
|
</div>
|
|
</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-factions">
|
|
<span class="faction-badge">@deck.DeckType</span>
|
|
</div>
|
|
|
|
<div class="deck-card-meta">
|
|
<span>@deck.Cards.Distinct().Count() unique, @deck.Cards.Count total</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 = [];
|
|
private bool showPrecons;
|
|
|
|
protected override void OnInitialized()
|
|
{
|
|
RefreshDecks();
|
|
}
|
|
|
|
private void RefreshDecks()
|
|
{
|
|
decks = DeckDatabase.Decks
|
|
.Where(d => d.IsVisible)
|
|
.Where(d =>
|
|
showPrecons
|
|
? d.DeckType is "precon" or "store"
|
|
: d.DeckType is "custom")
|
|
.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)] + "...";
|
|
}
|
|
|
|
}
|