2015-06-29 22:51:29 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
//Menu service used for managing menus
|
|
|
|
angular.module('core').service('Menus', [
|
|
|
|
|
|
|
|
function() {
|
|
|
|
// Define a set of default roles
|
|
|
|
this.defaultRoles = ['*'];
|
|
|
|
|
|
|
|
// Define the menus object
|
|
|
|
this.menus = {};
|
|
|
|
|
2016-04-29 06:00:41 +00:00
|
|
|
// A private function for rendering decision
|
2015-06-29 22:51:29 +00:00
|
|
|
var shouldRender = function(user) {
|
|
|
|
if (user) {
|
2016-04-29 06:00:41 +00:00
|
|
|
if (~this.roles.indexOf('*')) {
|
2015-06-29 22:51:29 +00:00
|
|
|
return true;
|
2017-04-23 02:38:37 +00:00
|
|
|
}
|
|
|
|
for (var userRoleIndex in user.roles) {
|
|
|
|
for (var roleIndex in this.roles) {
|
|
|
|
if (this.roles[roleIndex] === user.roles[userRoleIndex]) {
|
|
|
|
return true;
|
2015-06-29 22:51:29 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2017-04-23 02:38:37 +00:00
|
|
|
return false;
|
2015-06-29 22:51:29 +00:00
|
|
|
|
2017-04-23 02:38:37 +00:00
|
|
|
}
|
|
|
|
return this.isPublic;
|
2015-06-29 22:51:29 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
// Validate menu existance
|
|
|
|
this.validateMenuExistance = function(menuId) {
|
|
|
|
if (menuId && menuId.length) {
|
|
|
|
if (this.menus[menuId]) {
|
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
throw new Error('Menu does not exists');
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
throw new Error('MenuId was not provided');
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
// Get the menu object by menu id
|
|
|
|
this.getMenu = function(menuId) {
|
|
|
|
// Validate that the menu exists
|
|
|
|
this.validateMenuExistance(menuId);
|
|
|
|
|
|
|
|
// Return the menu object
|
|
|
|
return this.menus[menuId];
|
|
|
|
};
|
|
|
|
|
|
|
|
// Add new menu object by menu id
|
|
|
|
this.addMenu = function(menuId, isPublic, roles) {
|
|
|
|
// Create the new menu
|
|
|
|
this.menus[menuId] = {
|
|
|
|
isPublic: isPublic || false,
|
|
|
|
roles: roles || this.defaultRoles,
|
|
|
|
items: [],
|
|
|
|
shouldRender: shouldRender
|
|
|
|
};
|
|
|
|
|
|
|
|
// Return the menu object
|
|
|
|
return this.menus[menuId];
|
|
|
|
};
|
|
|
|
|
|
|
|
// Remove existing menu object by menu id
|
|
|
|
this.removeMenu = function(menuId) {
|
|
|
|
// Validate that the menu exists
|
|
|
|
this.validateMenuExistance(menuId);
|
|
|
|
|
|
|
|
// Return the menu object
|
|
|
|
delete this.menus[menuId];
|
|
|
|
};
|
|
|
|
|
|
|
|
// Add menu item object
|
|
|
|
this.addMenuItem = function(menuId, menuItemTitle, menuItemURL, menuItemType, menuItemUIRoute, isPublic, roles, position) {
|
|
|
|
// Validate that the menu exists
|
|
|
|
this.validateMenuExistance(menuId);
|
|
|
|
|
|
|
|
// Push new menu item
|
|
|
|
this.menus[menuId].items.push({
|
|
|
|
title: menuItemTitle,
|
|
|
|
link: menuItemURL,
|
|
|
|
menuItemType: menuItemType || 'item',
|
|
|
|
menuItemClass: menuItemType,
|
|
|
|
uiRoute: menuItemUIRoute || ('/' + menuItemURL),
|
|
|
|
isPublic: ((isPublic === null || typeof isPublic === 'undefined') ? this.menus[menuId].isPublic : isPublic),
|
|
|
|
roles: ((roles === null || typeof roles === 'undefined') ? this.menus[menuId].roles : roles),
|
|
|
|
position: position || 0,
|
|
|
|
items: [],
|
|
|
|
shouldRender: shouldRender
|
|
|
|
});
|
|
|
|
|
|
|
|
// Return the menu object
|
|
|
|
return this.menus[menuId];
|
|
|
|
};
|
|
|
|
|
|
|
|
// Add submenu item object
|
|
|
|
this.addSubMenuItem = function(menuId, rootMenuItemURL, menuItemTitle, menuItemURL, menuItemUIRoute, isPublic, roles, position) {
|
|
|
|
// 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].items.push({
|
|
|
|
title: menuItemTitle,
|
|
|
|
link: menuItemURL,
|
|
|
|
uiRoute: menuItemUIRoute || ('/' + menuItemURL),
|
|
|
|
isPublic: ((isPublic === null || typeof isPublic === 'undefined') ? this.menus[menuId].items[itemIndex].isPublic : isPublic),
|
|
|
|
roles: ((roles === null || typeof roles === 'undefined') ? this.menus[menuId].items[itemIndex].roles : roles),
|
|
|
|
position: position || 0,
|
|
|
|
shouldRender: shouldRender
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Return the menu object
|
|
|
|
return this.menus[menuId];
|
|
|
|
};
|
|
|
|
|
|
|
|
// Remove existing menu object by menu id
|
|
|
|
this.removeMenuItem = function(menuId, menuItemURL) {
|
|
|
|
// Validate that the menu exists
|
|
|
|
this.validateMenuExistance(menuId);
|
|
|
|
|
|
|
|
// Search for menu item to remove
|
|
|
|
for (var itemIndex in this.menus[menuId].items) {
|
|
|
|
if (this.menus[menuId].items[itemIndex].link === menuItemURL) {
|
|
|
|
this.menus[menuId].items.splice(itemIndex, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// 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].items) {
|
|
|
|
if (this.menus[menuId].items[itemIndex].items[subitemIndex].link === submenuItemURL) {
|
|
|
|
this.menus[menuId].items[itemIndex].items.splice(subitemIndex, 1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Return the menu object
|
|
|
|
return this.menus[menuId];
|
|
|
|
};
|
|
|
|
|
|
|
|
//Adding the topbar menu
|
|
|
|
this.addMenu('topbar', false, ['*']);
|
|
|
|
|
|
|
|
//Adding the bottombar menu for the Form-Footer view
|
|
|
|
this.addMenu('bottombar', false, ['*']);
|
|
|
|
}
|
2016-04-29 06:00:41 +00:00
|
|
|
]);
|