-
Notifications
You must be signed in to change notification settings - Fork 43
Expand file tree
/
Copy path_TocTreeNav.cshtml
More file actions
103 lines (102 loc) · 3.72 KB
/
_TocTreeNav.cshtml
File metadata and controls
103 lines (102 loc) · 3.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
@using Elastic.Documentation.Navigation
@using Elastic.Documentation.Navigation.Isolated
@using Elastic.Documentation.Navigation.Isolated.Leaf
@using Elastic.Documentation.Site.Navigation
@inherits RazorSlice<NavigationTreeItem>
@{
var isTopLevel = Model.Level == 0;
}
@functions {
static (string? badge, string label) ParseNavTitle(string raw)
{
if (raw.StartsWith("[ns]", StringComparison.Ordinal)) return ("ns", raw[4..]);
if (raw.StartsWith("[cmd]", StringComparison.Ordinal)) return ("cmd", raw[5..]);
if (raw.StartsWith("[alias]", StringComparison.Ordinal)) return ("alias", raw[7..]);
return (null, raw);
}
}
@if (isTopLevel && !Model.IsGlobalAssemblyBuild && !Model.IsPrimaryNavEnabled && !Model.SubTree.Index.Hidden)
{
var idx = Model.SubTree.Index;
<li class="flex group/li pr-8 mt-6">
<a href="@idx.Url" class="sidebar-link nav-link">@idx.NavigationTitle</a>
</li>
}
@foreach (var item in Model.SubTree.NavigationItems)
{
if (item.Hidden)
{
continue;
}
if (item.Parent is not null && item.Parent.Index == item)
{
continue;
}
if (item is INodeNavigationItem<INavigationModel, INavigationItem> { NavigationItems.Count: 0 } group)
{
var (groupBadge, groupLabel) = ParseNavTitle(group.NavigationTitle);
<li class="flex group/li pr-8 @(isTopLevel ? "font-semibold mt-6" : "mt-4")">
<a href="@group.Url" class="sidebar-link nav-link">
<span>@groupLabel</span>
@if (groupBadge == "ns") { <span class="nav-badge nav-badge-ns">ns</span> }
else if (groupBadge == "cmd") { <span class="nav-badge nav-badge-cmd">cmd</span> }
else if (groupBadge == "alias") { <span class="nav-badge nav-badge-alias">alias</span> }
</a>
</li>
}
else if (item is INodeNavigationItem<INavigationModel, INavigationItem> folder)
{
var g = folder;
var allHidden = folder.NavigationItems.All(n => n.Hidden);
var (folderBadge, folderLabel) = ParseNavTitle(g.NavigationTitle);
<li class="nav-folder @(isTopLevel ? "mt-6" : "mt-4")">
<div class="peer grid grid-cols-[1fr_auto] w-full">
<a href="@(g.Url)" class="sidebar-link nav-folder-link@(isTopLevel ? " font-semibold" : "")">
<span>@folderLabel</span>
@if (folderBadge == "ns") { <span class="nav-badge nav-badge-ns">ns</span> }
else if (folderBadge == "cmd") { <span class="nav-badge nav-badge-cmd">cmd</span> }
else if (folderBadge == "alias") { <span class="nav-badge nav-badge-alias">alias</span> }
</a>
@if (!allHidden)
{
<label for="@folder.Id" class="group/label flex mr-2 items-start">
<div class="nav-toggle-btn">
<svg class="nav-chevron" viewBox="0 0 24 24"><use href="#icon-chevron-down"/></svg>
</div>
<input
id="@folder.Id"
type="checkbox"
class="hidden"
aria-hidden="true">
</label>
}
</div>
@if (g.NavigationItems.Count > 0)
{
<ul class="nav-subtree">
@await RenderPartialAsync(_TocTreeNav.Create(new NavigationTreeItem
{
IsPrimaryNavEnabled = Model.IsPrimaryNavEnabled,
IsGlobalAssemblyBuild = Model.IsGlobalAssemblyBuild,
Level = Model.Level + 1,
SubTree = g,
RootNavigationId = Model.RootNavigationId,
Htmx = Model.Htmx
}))
</ul>
}
</li>
}
else if (item is ILeafNavigationItem<INavigationModel> leaf)
{
var (leafBadge, leafLabel) = ParseNavTitle(leaf.NavigationTitle);
<li class="flex group/li pr-8 @(isTopLevel ? "font-semibold mt-6" : "mt-4")">
<a href="@leaf.Url" class="sidebar-link nav-link">
<span>@leafLabel</span>
@if (leafBadge == "ns") { <span class="nav-badge nav-badge-ns">ns</span> }
else if (leafBadge == "cmd") { <span class="nav-badge nav-badge-cmd">cmd</span> }
else if (leafBadge == "alias") { <span class="nav-badge nav-badge-alias">alias</span> }
</a>
</li>
}
}