From 7adb7f3ea2b2aaf5c4b13f201b5c3964942b379e Mon Sep 17 00:00:00 2001 From: netusco Date: Fri, 9 May 2014 13:44:03 +0200 Subject: [PATCH] adding submenus functionality to the menu service When having few modules like Articles, Blog, Services, etc... it's good to add the 'New Whatever' or other functionalities within a submenu structure. --- .../core/services/menus.client.service.js | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/public/modules/core/services/menus.client.service.js b/public/modules/core/services/menus.client.service.js index 15761996f6..61a62f52a1 100644 --- a/public/modules/core/services/menus.client.service.js +++ b/public/modules/core/services/menus.client.service.js @@ -74,23 +74,49 @@ angular.module('core').service('Menus', [ }; // Add menu item object - this.addMenuItem = function(menuId, menuItemTitle, menuItemURL, menuItemUIRoute, isPublic, roles) { + this.addMenuItem = function(menuId, menuItemTitle, menuItemURL, menuClass, menuItemUIRoute, isPublic, roles) { // Validate that the menu exists this.validateMenuExistance(menuId); // Push new menu item this.menus[menuId].items.push({ + class: (menuClass === 'dropdown') ? menuClass : '', title: menuItemTitle, link: menuItemURL, uiRoute: menuItemUIRoute || ('/' + menuItemURL), isPublic: isPublic || this.menus[menuId].isPublic, roles: roles || this.defaultRoles, + subitems: [], shouldRender: shouldRender }); // Return the menu object return this.menus[menuId]; }; + + // Add submenu item object + this.addSubMenuItem = function(menuId, rootMenuItemURL, menuItemTitle, menuItemURL, menuItemUIRoute, isPublic, roles) { + // Validate that the menu exists + this.validateMenuExistance(menuId); + + // Search for menu item + for (var itemIndex in this.menus[menuId].items) { + if (this.menus[menuId].items[itemIndex].link === rootMenuItemURL) { + // Push new submenu item + this.menus[menuId].items[itemIndex].subitems.push({ + title: menuItemTitle, + link: menuItemURL, + uiRoute: menuItemUIRoute || ('/' + menuItemURL), + isPublic: isPublic || this.menus[menuId].isPublic, + roles: roles || this.defaultRoles, + shouldRender: shouldRender + }); + } + } + + // Return the menu object + return this.menus[menuId]; + }; // Remove existing menu object by menu id this.removeMenuItem = function(menuId, menuItemURL) { @@ -107,6 +133,24 @@ angular.module('core').service('Menus', [ // Return the menu object return this.menus[menuId]; }; + + // Remove existing menu object by menu id + this.removeSubMenuItem = function(menuId, submenuItemURL) { + // Validate that the menu exists + this.validateMenuExistance(menuId); + + // Search for menu item to remove + for (var itemIndex in this.menus[menuId].items) { + for (var subitemIndex in this.menus[menuId].items[itemIndex].subitems) { + if (this.menus[menuId].items[itemIndex].subitems[subitemIndex].link === menuItemURL) { + this.menus[menuId].items[itemIndex].subitems.splice(subitemIndex, 1); + } + } + } + + // Return the menu object + return this.menus[menuId]; + }; //Adding the topbar menu this.addMenu('topbar');