コード例 #1
0
        private void GenerateHierarchy(Dictionary <string, BreadcrumbNodeEntry> entries)
        {
            // Mandatory single default entry
            BreadcrumbNodeEntry defaultEntry = entries.Values.Single(e => e.Default);

            DefaultNode = defaultEntry.Node;
            _nodes.Add(defaultEntry.Key, DefaultNode);

            foreach (var entry in entries.Values)
            {
                if (entry.Default)
                {
                    continue;
                }

                var fromKey = entry.FromKey ?? defaultEntry.Key;
                if (!entries.ContainsKey(fromKey))
                {
                    throw new SmartBreadcrumbsException($"No node exists that has a '{fromKey}' as a key.\n" +
                                                        $"Make sure that razor page or controller action has a BreadcrumbAttribute.");
                }

                var fromEntry = entries[fromKey];
                entry.Node.Parent = fromEntry.Node;
                _nodes.Add(entry.Key, entry.Node);
            }
        }
コード例 #2
0
 public BreadcrumbNode(string title, string action, string controller, object routeValues = null, BreadcrumbNode parent = null)
 {
     Title       = title;
     Action      = action;
     Controller  = controller;
     RouteValues = routeValues;
     Parent      = parent;
 }
コード例 #3
0
        private void GenerateHierarchy(IReadOnlyCollection <BreadcrumbAttribute> breadcrumbAttrs)
        {
            // Default node
            var defaultBreadcrumbAttr = breadcrumbAttrs.FirstOrDefault(ba => ba.Default);

            if (defaultBreadcrumbAttr == null)
            {
                throw new System.Exception("Default breadcrumb attribute not found.");
            }

            DefaultNode = new BreadcrumbNode(defaultBreadcrumbAttr);
            if (!_nodes.ContainsKey(defaultBreadcrumbAttr.Action))
            {
                _nodes.Add(defaultBreadcrumbAttr.Action, DefaultNode);
            }

            foreach (var attr in breadcrumbAttrs)
            {
                if (attr.Default)
                {
                    continue;
                }

                // Create the node if needed
                if (!_nodes.ContainsKey(attr.Action))
                {
                    _nodes.Add(attr.Action, new BreadcrumbNode(attr));
                }

                // If this is a parentless node, set the parent to the default node
                if (string.IsNullOrEmpty(attr.FromAction))
                {
                    _nodes[attr.Action].Parent = DefaultNode;
                    continue;
                }

                // Create the parent node if needed
                if (!_nodes.ContainsKey(attr.FromAction))
                {
                    _nodes.Add(attr.FromAction, new BreadcrumbNode(breadcrumbAttrs.First(ba => ba.Action == attr.FromAction)));
                }

                // Set the node's parent
                _nodes[attr.Action].Parent = _nodes[attr.FromAction];
            }
        }
コード例 #4
0
        private string GetLi(BreadcrumbNode node, string link, bool isActive)
        {
            var normalTemplate = _breadcrumbsManager.Options.LiTemplate;
            var activeTemplate = _breadcrumbsManager.Options.ActiveLiTemplate;

            if (!isActive && string.IsNullOrEmpty(normalTemplate))
            {
                return($"<li{GetClass(_breadcrumbsManager.Options.LiClasses)}><a href=\"{link}\">{node.Title}</a></li>");
            }

            if (isActive && string.IsNullOrEmpty(activeTemplate))
            {
                return($"<li{GetClass(_breadcrumbsManager.Options.LiClasses)}>{node.Title}</li>");
            }

            // Templates
            string templateToUse = isActive ? activeTemplate : normalTemplate;

            // The IconClasses will get ignored if the template doesn't have their index.
            return(string.Format(templateToUse, node.Title, link, node.IconClasses));
        }
コード例 #5
0
 public BreadcrumbNode WithParent(BreadcrumbNode parent)
 {
     Parent = parent;
     return(this);
 }