forked from siteserver/cms
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathNavigationTree.cs
More file actions
110 lines (99 loc) · 4.38 KB
/
Copy pathNavigationTree.cs
File metadata and controls
110 lines (99 loc) · 4.38 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
104
105
106
107
108
109
110
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Text;
using System.Web.UI;
using SiteServer.BackgroundPages.Plugins;
using SiteServer.Utils;
using SiteServer.CMS.Core;
namespace SiteServer.BackgroundPages.Controls
{
public class NavigationTree : Control
{
public int SiteId { get; set; }
public string TopId { get; set; }
public string Title { get; set; }
public List<string> PermissionList { get; set; }
protected override void Render(HtmlTextWriter writer)
{
var builder = new StringBuilder();
var tabList = TabManager.GetTabList(TopId, SiteId);
if (tabList != null && tabList.Count > 0)
{
var linkHtml = string.Empty;
if (string.IsNullOrEmpty(TopId) && PermissionList.Contains(ConfigManager.PluginsPermissions.Management))
{
linkHtml = $@"<a id=""updatePackagesLink"" href=""{PageUtils.GetLoadingUrl(PageManagement.GetRedirectUrl(4))}"" onclick=""closeMenu()"" class=""badge badge-warning"" style=""display: none"" target=""right""></a>";
}
builder.Append($@"<li class=""text-muted menu-title"">{Title}{linkHtml}</li>");
BuildNavigationTree(builder, tabList, 0, true);
}
writer.Write(builder);
}
protected void BuildNavigationTree(StringBuilder builder, List<Tab> tabs, int parentsCount, bool isDisplay)
{
if (tabs == null) return;
foreach (var parent in tabs)
{
if (!TabManager.IsValid(parent, PermissionList)) continue;
var childBuilder = new StringBuilder();
if (parent.Children != null && parent.Children.Length > 0)
{
var tabCollection = new TabCollection(parent.Children);
if (tabCollection.Tabs != null && tabCollection.Tabs.Length > 0)
{
foreach (var childTab in tabCollection.Tabs)
{
if (!TabManager.IsValid(childTab, PermissionList)) continue;
var href = childTab.Href;
if (!PageUtils.IsAbsoluteUrl(href))
{
href = PageUtils.AddQueryString(href,
new NameValueCollection { { "siteId", SiteId.ToString() } });
}
href = childTab.HasHref ? PageUtils.GetLoadingUrl(href) : "javascript:;";
childBuilder.Append($@"
<li>
<a href=""{href}"" onclick=""closeMenu()"" target=""{(string.IsNullOrEmpty(childTab.Target) ? "right" : childTab.Target)}"">
<i class=""{childTab.IconClass}""></i>
{childTab.Text}
</a>
</li>");
}
}
}
if (childBuilder.Length > 0)
{
builder.Append($@"
<li class=""has_sub"">
<a href=""javascript:;"" onclick=""closeMenu()"" class=""waves-effect waves-primary {(parent.Selected ? "subdrop" : "")}"" target=""{(string.IsNullOrEmpty(parent.Target) ? "right" : parent.Target)}"">
<i class=""{parent.IconClass ?? "ion-star"}""></i>
<span> {parent.Text} </span>
<span class=""menu-arrow""></span>
</a>
<ul class=""list-unstyled"" style=""display: {(parent.Selected ? "block" : "none")};"">
{childBuilder}
</ul>
</li>
");
}
else
{
var href = parent.Href;
if (!PageUtils.IsAbsoluteUrl(href))
{
href = PageUtils.AddQueryString(href,
new NameValueCollection {{"siteId", SiteId.ToString()}});
}
href = parent.HasHref ? PageUtils.GetLoadingUrl(href) : "javascript:;";
builder.Append($@"
<li class=""has_sub"">
<a href=""{href}"" onclick=""closeMenu()"" class=""waves-effect waves-primary {(parent.Selected ? "subdrop" : "")}"" target=""{(string.IsNullOrEmpty(parent.Target) ? "right" : parent.Target)}"">
<i class=""{parent.IconClass ?? "ion-star"}""></i>
<span> {parent.Text} </span>
</a>
</li>");
}
}
}
}
}