public async static Task <HashSet <JsonMenu> > GetAllMenuItems(IEnumerable <AuthroziedFeatureInfo> items) { var menuITems = new HashSet <JsonMenu>(); foreach (var item in items) { var feature = item.Feature; var children = FeatureSecurityFilter.GetAuthorizedFeatures(Context.Current.User(), parent: feature); var sumMenu = new JsonMenu { ID = item.Feature.ID, Icon = item.Feature.Icon, Title = item.Feature.Title, LoadUrl = item.AddQueryString(), LogicalPath = feature.ToString(), UseIframe = item.Feature.UseIframe }; if (children.Any()) { sumMenu.Children = await GetAllMenuItems(children); } menuITems.Add(sumMenu); } return(menuITems); }
public static XElement RenderMenu(Feature currentFeature) { var items = FeatureSecurityFilter.GetAuthorizedFeatures(Context.Current.User()); items = AddEverythingItem(items); return(RenderMenu(currentFeature, items)); }
public async static Task <string> RenderJsonMenu() { var items = FeatureSecurityFilter.GetAuthorizedFeatures(Context.Current.User()); var jsonSerializerSettings = new JsonSerializerSettings { PreserveReferencesHandling = PreserveReferencesHandling.Objects }; return(JsonConvert.SerializeObject(await GetAllMenuItems(items), Formatting.None, jsonSerializerSettings)); }
public static async Task <string> RenderFullMenu() { var items = FeatureSecurityFilter.GetAuthorizedFeatures(Context.Current.User()); var menuItems = await GetAllMenuItems(items); var sorted = menuItems .OrderBy(x => x.Children == null ? 0 : x.Children.Sum(c => c.Children == null ? 1 : c.Children.Count() + 1)) .ToList(); var container = new XElement("div"); sorted.ForEach(item => { var div = new XElement("div"); div.Add(new XAttribute("class", "full-menu-item")); if (item.Children != null && item.Children.Any()) { var ul = new XElement("ul"); item.Children.ToList().ForEach(subItem => { var li = new XElement("li", CreateSubLink(subItem, ColourPalette.GetColourCode())); ul.Add(li); AddChildItems(subItem, ColourPalette.GetColourCode(), li); }); div.Add(ul); div.Add(new XElement("h3", new XAttribute("class", "full-menu-text"), new XElement("a", item.Title, new XAttribute("href", item.LoadUrl)))); } else { div.Add(new XElement("ul", new XElement("li", CreateSubLink(item, ColourPalette.GetColourCode())))); } container.Add(div); }); return(container.ToString().TrimStart("<div>").TrimEnd("</div>")); }
static XElement RenderMenu(Feature currentFeature, IEnumerable <AuthroziedFeatureInfo> items) { if (items.None()) { return(null); } var rootMEnuId = Guid.NewGuid(); if (currentFeature != null) { rootMEnuId = currentFeature.ID; } var ul = new XElement("ul", new XAttribute("class", "nav navbar-nav dropped-submenu"), new XAttribute("id", rootMEnuId)); foreach (var item in items) { var feature = item.Feature; var li = new XElement("li", new XAttribute("id", feature.ID), new XAttribute("class", string.Format("feature-menu-item{0}{1}", " active".OnlyWhen(feature == currentFeature), " d-none".OnlyWhen(item.Feature.Hide))) ).AddTo(ul); li.Add(new XAttribute("expand", currentFeature.IsAnyOf(feature.WithAllChildren()))); if (feature.Parent != null) { li.Add(new XAttribute("is-side-menu-child", "true")); li.Add(new XAttribute("side-menu-parent", feature.Parent.ID)); } else { li.Add(new XAttribute("is-side-menu-child", "false")); } var link = new XElement("a", new XAttribute("href", item.AddQueryString()), new XAttribute("data-badgeurl", feature.GetBadgeUrl().OrEmpty()), new XAttribute("data-badge-optional", feature.IsBadgeOptional()), new XAttribute("data-service", (feature.Service?.Name).OrEmpty()), new XAttribute("class", "badge-number"), new XElement("i", string.Empty, new XAttribute("class", $"{feature.Icon}"), new XAttribute("aria-hidden", "true")), feature.Title ).AddTo(li); if (!item.IsDisabled && !feature.UseIframe) { link.Add(new XAttribute("data-redirect", "ajax")); } var children = FeatureSecurityFilter.GetAuthorizedFeatures(Context.Current.User(), parent: feature); if (children.Any()) { li.Add(RenderMenu(currentFeature, children)); } } return(ul); }