Forge
csharp3407750f
1namespace AgentForge.Plugin.View.Components.Code;
2
3internal static class ForgeViewPathCrumb
4{
5 internal static string Render(string repoName, string activeBranch, string? path, bool isBlob)
6 {
7 var normalized = (path ?? "").Trim().Replace('\\', '/').Trim('/');
8 if (normalized.Length == 0)
9 return ForgeHtml.Span("path-root", ForgeHtml.Text("/"));
10
11 var segments = normalized.Split('/', StringSplitOptions.RemoveEmptyEntries);
12 var parts = new List<string>();
13 var cumulative = "";
14 for (var i = 0; i < segments.Length; i++)
15 {
16 cumulative = string.IsNullOrEmpty(cumulative) ? segments[i] : $"{cumulative}/{segments[i]}";
17 var isLast = i == segments.Length - 1;
18 if (isLast && isBlob)
19 {
20 parts.Add(ForgeHtml.Strong("path-current", ForgeHtml.Text(segments[i])));
21 break;
22 }
23
24 var href = BuildTreeHref(repoName, activeBranch, cumulative);
25 parts.Add(ForgeHtml.A(href, segments[i]));
26 parts.Add(ForgeHtml.Span("path-sep", ForgeHtml.Text("/")));
27 }
28
29 return ForgeHtml.Fragment([.. parts]);
30 }
31
32 private static string BuildTreeHref(string repoName, string branch, string? path)
33 {
34 var href = $"/view/repos/{ForgeRepoNames.ToUrlPath(repoName)}/tree?branch={Uri.EscapeDataString(branch)}";
35 if (!string.IsNullOrEmpty(path))
36 href += $"&path={Uri.EscapeDataString(path)}";
37 return href;
38 }
39}
40
View only · write via MCP/CIDE