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); } }
public BreadcrumbNode(string title, string action, string controller, object routeValues = null, BreadcrumbNode parent = null) { Title = title; Action = action; Controller = controller; RouteValues = routeValues; Parent = parent; }
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]; } }
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)); }
public BreadcrumbNode WithParent(BreadcrumbNode parent) { Parent = parent; return(this); }