예제 #1
0
        public Menu(MenuGroup menu = null)
        {
            if (menu == null)
            {
                this.MenuRoot = new MenuGroup();
            }
            else
            {
                this.MenuRoot = menu;
            }

            this.MenuRoot.GroupID = IdentityNext();
        }
예제 #2
0
        /// <summary>
        /// Adds a new menu Group.
        /// </summary>
        /// <param name="headGroup">The menu to add the group too</param>
        /// <param name="searchExpression">Where to add the group</param>
        /// <param name="menuGroupToAdd">The group to add</param>
        /// <returns>The menu that was added</returns>
        public MenuGroup AddMenuGroup(MenuGroup headGroup, Expression<Func<MenuGroup, bool>> searchExpression, MenuGroup menuGroupToAdd)
        {
            // Compiling the expression tree into a delegate.
            Func<MenuGroup, bool> expressionResult = searchExpression.Compile();

            if (headGroup == null)
            {
                return null;
            }

            if (expressionResult(headGroup))
            {
                menuGroupToAdd.GroupID = IdentityNext();
                headGroup.MenuSubGroups.Add(menuGroupToAdd);
                headGroup.MenuSubGroups = headGroup.MenuSubGroups.OrderBy(x => x.GroupSortOrder).ThenBy(x => x.GroupName).ToList<MenuGroup>();
                return menuGroupToAdd;
            }

            foreach (MenuGroup item in headGroup.MenuSubGroups)
            {
                MenuGroup result = AddMenuGroup(item, searchExpression, menuGroupToAdd);

                if (result != null)
                {
                    return result;
                }
            }

            return null;
        }
예제 #3
0
        private void RenderHTML(MenuGroup menuToRender, ref bool active, ref int parentGroupID, List<int> allChildGroups, ref int groupOfActiveTag)
        {
            bool showActiveTag = false;

            if (menuToRender.GroupID != 1 && !menuToRender.HideGroupOnTheMenu)
            {
                MenuHTMLPartsRender.Add(new MenuHTMLRender()
                {
                    GroupID = menuToRender.GroupID,
                    IsHead = true,
                    HTMLBody = RenderMenuGroupHead(menuToRender)
                });
            }

            //Assign new parent group
            parentGroupID = menuToRender.GroupID;

            //Get all group items
            if (menuToRender.MenuSubGroups.Count > 0)
            {
                allChildGroups = menuToRender.MenuSubGroups.Select<MenuGroup, int>(x => x.GroupID).ToList<int>();
            }

            //Render the menu items
            foreach (var item in menuToRender.MenuItems)
            {
                item.IsActive = IsMenuItemActive(item); ;
                MenuHTMLPartsRender.Add(new MenuHTMLRender()
                {
                    GroupID = menuToRender.GroupID,
                    IsHead = false,
                    HTMLBody = RenderListItem(item, menuToRender.HideGroupOnTheMenu)
                });

                if (item.IsActive)
                {
                    groupOfActiveTag = menuToRender.GroupID;
                }

                if (!active && item.IsActive)
                {
                    active = true;
                }
            }

            if (parentGroupID == 1)
            {
                active = false;
            }

            //Render the subgroups
            foreach (MenuGroup item in menuToRender.MenuSubGroups)
            {
                RenderHTML(item, ref active, ref parentGroupID, allChildGroups, ref groupOfActiveTag);
            }

            if (menuToRender.GroupID == groupOfActiveTag)
            {
                showActiveTag = true;
                groupOfActiveTag = menuToRender.GroupID;
            }

            if (active && parentGroupID == 1)
            {
                showActiveTag = true;
            }

            if (active && !allChildGroups.Contains(menuToRender.GroupID) && allChildGroups.Contains(groupOfActiveTag))
            {
                showActiveTag = true;
                groupOfActiveTag = menuToRender.GroupID;
            }

            //Render group setup
            if (menuToRender.GroupID != 1 && !menuToRender.HideGroupOnTheMenu)
            {
                //render new header tag if the selected menu item was in the group
                if (showActiveTag)
                {
                    int indexOfHeadElement = MenuHTMLPartsRender.FindIndex(x => x.GroupID == menuToRender.GroupID && x.IsHead);
                    MenuHTMLPartsRender.RemoveAt(indexOfHeadElement);
                    MenuHTMLPartsRender.Insert(indexOfHeadElement, new MenuHTMLRender()
                    {
                        GroupID = menuToRender.GroupID,
                        IsHead = true,
                        HTMLBody = RenderMenuGroupHead(menuToRender, true)
                    });
                }


                //group closing tags
                MenuHTMLPartsRender.Add(new MenuHTMLRender()
                {
                    GroupID = menuToRender.GroupID,
                    IsHead = false,
                    HTMLBody = RenderClosingGroupTags()
                });
            }
        }
예제 #4
0
 private string RenderMenuGroupHead(MenuGroup group, bool active = false)
 {
     return String.Format(@"
                             <li {0}>
                                 <a href=""javascript:;"">
                                     <i class="" fa {1} ""></i>
                                     <span class="" {2} "">{3}</span>
                                     <span class="" {4} ""></span>
                                 </a>
                                 <ul class=""sub-menu"">
                           ", (active ? @"class="" active open """ : String.Empty) + " " + group.GroupListClass + " ",
                                 HtmlHelperExtensions.RenderClassName(group.GroupIconClass.ToString()),
                                 " title ",
                                 group.GroupName,
                                 group.GroupArrowCssClass + (active ? " open " : String.Empty));
 }
예제 #5
0
        /// <summary>
        /// Finds a Menu Group
        /// </summary>
        /// <param name="menuToSearch">Menu to search</param>
        /// <param name="searchExpression">The search criteria</param>
        /// <returns>The Menu Group if found or null if not found</returns>
        public MenuGroup FindMenuGroup(MenuGroup menuToSearch, Expression<Func<MenuGroup, bool>> searchExpression)
        {
            // Compiling the expression tree into a delegate.
            Func<MenuGroup, bool> expressionResult = searchExpression.Compile();

            if (menuToSearch == null)
            {
                return null;
            }

            if (expressionResult(menuToSearch))
            {
                return menuToSearch;
            }

            foreach (MenuGroup item in menuToSearch.MenuSubGroups)
            {
                MenuGroup foundGroup = FindMenuGroup(item, searchExpression);

                if (foundGroup != null)
                {
                    return foundGroup;
                }
            }

            return null;
        }