Esempio n. 1
0
        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
                    });
                }
            }
        }
Esempio n. 2
0
        public void MvcTree_CreatesEmpty()
        {
            MvcTree actual = new MvcTree();

            Assert.Empty(actual.Nodes);
            Assert.Empty(actual.SelectedIds);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 6
0
        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());
        }
Esempio n. 9
0
        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);
        }
Esempio n. 11
0
        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);
        }
Esempio n. 12
0
 public MvcTreeView()
 {
     MvcTree = new MvcTree();
 }
Esempio n. 13
0
 public RoleView()
 {
     Permissions = new MvcTree();
 }