public virtual void Seed(MvcTree permissions) { MvcTreeNode root = new(Resource.ForString("All")); permissions.Nodes.Add(root); foreach (IGrouping <String?, PermissionView> area in GetAllPermissions().GroupBy(permission => permission.Area)) { List <MvcTreeNode> nodes = new(); foreach (IGrouping <String, PermissionView> controller in area.GroupBy(permission => permission.Controller)) { MvcTreeNode node = new(controller.Key); node.Children.AddRange(controller.Select(permission => new MvcTreeNode(permission.Id, permission.Action))); nodes.Add(node); } if (area.Key == null) { root.Children.AddRange(nodes); } else { root.Children.Add(new MvcTreeNode(area.Key) { Children = nodes }); } } }
public void MvcTree_CreatesEmpty() { MvcTree actual = new MvcTree(); Assert.Empty(actual.Nodes); Assert.Empty(actual.SelectedIds); }
private TagBuilder ViewFor(MvcTree model) { TagBuilder root = new TagBuilder("ul"); root.AddCssClass("mvc-tree-view"); return(Build(model, root, model.Nodes, 1)); }
private TagBuilder ViewFor(MvcTree model) { TagBuilder view = new("ul"); view.AddCssClass("mvc-tree-view"); foreach (TagBuilder node in Build(model, model.Nodes, 1)) { view.InnerHtml.AppendHtml(node); } return(view); }
private MvcTree CreatePermissions() { MvcTreeNode root = new MvcTreeNode(Resource.ForString("All")); MvcTree expectedTree = new MvcTree(); expectedTree.Nodes.Add(root); expectedTree.SelectedIds = new HashSet <Int64>(role.Permissions.Select(rolePermission => rolePermission.PermissionId)); IEnumerable <PermissionView> permissions = role .Permissions .Select(rolePermission => rolePermission.Permission) .Select(permission => new PermissionView { Id = permission.Id, Action = Resource.ForAction(permission.Action), Area = permission.Area == null ? null : Resource.ForArea(permission.Area), Controller = Resource.ForController($"{permission.Area}/{permission.Controller}") }); foreach (IGrouping <String?, PermissionView> area in permissions.GroupBy(permission => permission.Area).OrderBy(permission => permission.Key ?? permission.FirstOrDefault()?.Controller)) { List <MvcTreeNode> nodes = new List <MvcTreeNode>(); foreach (IGrouping <String, PermissionView> controller in area.GroupBy(permission => permission.Controller !)) { MvcTreeNode node = new MvcTreeNode(controller.Key); foreach (PermissionView permission in controller) { node.Children.Add(new MvcTreeNode(permission.Id, permission.Action !)); } nodes.Add(node); } if (area.Key == null) { root.Children.AddRange(nodes); } else { root.Children.Add(new MvcTreeNode(area.Key) { Children = nodes }); } } return(expectedTree); }
private MvcTree CreatePermissions() { MvcTreeNode root = new MvcTreeNode(Resource.ForString("All")); MvcTree expectedTree = new MvcTree(); expectedTree.Nodes.Add(root); expectedTree.SelectedIds = new HashSet <Int32>(role.Permissions.Select(rolePermission => rolePermission.PermissionId)); IEnumerable <Permission> permissions = role .Permissions .Select(rolePermission => rolePermission.Permission) .Select(permission => new Permission { Id = permission.Id, Area = Resource.ForPermission(permission.Area), Controller = Resource.ForPermission(permission.Area, permission.Controller), Action = Resource.ForPermission(permission.Area, permission.Controller, permission.Action) }); foreach (IGrouping <String, Permission> area in permissions.GroupBy(permission => permission.Area).OrderBy(permission => permission.Key ?? permission.FirstOrDefault().Controller)) { MvcTreeNode areaNode = new MvcTreeNode(area.Key); foreach (IGrouping <String, Permission> controller in area.GroupBy(permission => permission.Controller).OrderBy(permission => permission.Key)) { MvcTreeNode controllerNode = new MvcTreeNode(controller.Key); foreach (Permission permission in controller.OrderBy(permission => permission.Action)) { controllerNode.Children.Add(new MvcTreeNode(permission.Id, permission.Action)); } if (areaNode.Title == null) { root.Children.Add(controllerNode); } else { areaNode.Children.Add(controllerNode); } } if (areaNode.Title != null) { root.Children.Add(areaNode); } } return(expectedTree); }
public MvcTreeTagHelperTests() { MvcTree tree = new MvcTree(); tree.SelectedIds.Add(123456); tree.Nodes.Add(new MvcTreeNode("Test")); tree.Nodes[0].Children.Add(new MvcTreeNode(4567, "Test2")); tree.Nodes[0].Children.Add(new MvcTreeNode(123456, "Test1")); EmptyModelMetadataProvider provider = new EmptyModelMetadataProvider(); ModelExplorer explorer = new ModelExplorer(provider, provider.GetMetadataForProperty(typeof(MvcTreeView), "MvcTree"), tree); helper = new MvcTreeTagHelper(); helper.For = new ModelExpression("MvcTree", explorer); output = new TagHelperOutput("div", new TagHelperAttributeList(), (_, __) => Task.FromResult <TagHelperContent?>(null)); }
public override void Process(TagHelperContext context, TagHelperOutput output) { String treeClasses = "mvc-tree"; MvcTree tree = For?.Model as MvcTree ?? new MvcTree(); if (Readonly) { treeClasses += " mvc-tree-readonly"; } output.Content.AppendHtml(IdsFor(tree)); output.Content.AppendHtml(ViewFor(tree)); output.Attributes.SetAttribute("data-for", $"{For?.Name}.SelectedIds"); output.Attributes.SetAttribute("class", $"{treeClasses} {output.Attributes["class"]?.Value}".Trim()); }
private IEnumerable <TagBuilder> Build(MvcTree model, List <MvcTreeNode> nodes, Int32 depth) { return(nodes.Select(node => { TagBuilder item = new TagBuilder("li"); item.InnerHtml.AppendHtml("<i></i>"); if (node.Id is Int64 id) { if (model.SelectedIds.Contains(id)) { item.AddCssClass("mvc-tree-checked"); } item.Attributes["data-id"] = id.ToString(); } TagBuilder anchor = new TagBuilder("a"); anchor.InnerHtml.Append(node.Title); anchor.Attributes["href"] = "#"; item.InnerHtml.AppendHtml(anchor); if (node.Children.Count > 0) { item.AddCssClass("mvc-tree-branch"); if (HideDepth <= depth) { item.AddCssClass("mvc-tree-collapsed"); } TagBuilder branch = new TagBuilder("ul"); foreach (TagBuilder leaf in Build(model, node.Children, depth + 1)) { branch.InnerHtml.AppendHtml(leaf); } item.InnerHtml.AppendHtml(branch); } return item; })); }
private TagBuilder IdsFor(MvcTree model) { TagBuilder ids = new("div"); ids.AddCssClass("mvc-tree-ids"); String name = $"{For?.Name}.SelectedIds"; foreach (Int64 id in model.SelectedIds) { TagBuilder input = new("input"); input.TagRenderMode = TagRenderMode.SelfClosing; input.Attributes["value"] = id.ToString(); input.Attributes["type"] = "hidden"; input.Attributes["name"] = name; ids.InnerHtml.AppendHtml(input); } return(ids); }
private TagBuilder Build(MvcTree model, TagBuilder branch, List <MvcTreeNode> nodes, Int32 depth) { foreach (MvcTreeNode node in nodes) { TagBuilder item = new TagBuilder("li"); item.InnerHtml.AppendHtml("<i></i>"); if (node.Id is Int32 id) { if (model.SelectedIds.Contains(id)) { item.AddCssClass("mvc-tree-checked"); } item.Attributes["data-id"] = id.ToString(); } TagBuilder anchor = new TagBuilder("a"); anchor.InnerHtml.Append(node.Title); anchor.Attributes["href"] = "#"; item.InnerHtml.AppendHtml(anchor); if (node.Children.Count > 0) { item.AddCssClass("mvc-tree-branch"); if (HideDepth <= depth) { item.AddCssClass("mvc-tree-collapsed"); } item.InnerHtml.AppendHtml(Build(model, new TagBuilder("ul"), node.Children, depth + 1)); } branch.InnerHtml.AppendHtml(item); } return(branch); }
public MvcTreeView() { MvcTree = new MvcTree(); }
public RoleView() { Permissions = new MvcTree(); }