Forge
csharp3407750f
1using AgentForge.Abstractions;
2using AgentForge.Plugin.View;
3
4namespace AgentForge.Plugin.Releases.Pages;
5
6internal static class ForgeReleaseListPage
7{
8 internal static string Render(
9 string repoName,
10 IReadOnlyList<ForgeReleaseListItem> releases,
11 IForgeReleaseListGrouping? grouping,
12 ForgeReleaseListViewContext context)
13 {
14 if (grouping is null)
15 return RenderFlat(releases);
16
17 return ForgeHtml.Fragment(
18 ForgeHtml.H2("Releases"),
19 grouping.RenderToolbar(context),
20 grouping.RenderListBody(releases, context));
21 }
22
23 internal static string RenderFlat(IReadOnlyList<ForgeReleaseListItem> releases)
24 {
25 if (releases.Count == 0)
26 return ForgeHtml.P("meta", ForgeHtml.Text("No releases yet. Git tag source — Phase B (FORGE-ADR-0032)."));
27
28 return ForgeHtml.Fragment(
29 ForgeHtml.H2("Releases"),
30 ForgeHtml.Ul("plain", [.. releases.Select(RenderItem)]));
31 }
32
33 internal static string RenderItem(ForgeReleaseListItem release)
34 {
35 var meta = release.PublishedAt is { } at
36 ? ForgeHtml.Span("meta", ForgeHtml.Text($" · {at:u}"))
37 : "";
38
39 var badge = release.IsPrerelease
40 ? ForgeHtml.Span("badge", ForgeHtml.Text("pre-release"))
41 : "";
42
43 return ForgeHtml.Li(
44 null,
45 ForgeHtml.Strong(release.Tag),
46 badge,
47 meta);
48 }
49}
50
View only · write via MCP/CIDE