Dataset/JS/AngularCosmoMenu/menu.js (133 lines of code) (raw):
angular.module('cosmo').controller('menuCtrl', ['$scope', 'REST', '$rootScope', 'Page', '$translate', function($scope, REST, $rootScope, Page, $translate){
$scope.menu = {};
$scope.menu.panel = 'manage';
$scope.menu.editLink = true;
REST.menus.query({}, function(data){
$scope.menus = data;
});
$scope.remove = function(scope){
if($scope.list.length>1){
var index = scope.$index;
if (index > -1) {
scope.sortableModelValue.splice(index, 1)[0];
}
} else {
$translate('menu_empty').then(function(translatedText){
$rootScope.$broadcast('notify', {message: translatedText});
});
}
};
$scope.newSubItem = function(scope) {
var nodeData = scope.$modelValue;
nodeData.items.push({
id: nodeData.id * 10 + nodeData.items.length,
title: nodeData.title + '.' + (nodeData.items.length + 1),
url: '',
items: []
});
};
$scope.selectMenu = function(menu){
$scope.menu.id = menu.id;
$scope.menu.name = menu.name;
$scope.menu.area = menu.area;
$scope.menu.panel = 'edit';
if(menu.menu)
$scope.list = angular.fromJson(menu.menu);
else
$scope.list = [{
"id": 1,
"title": "Link",
"url": "",
"items": []
}];
};
$scope.options = {
itemClicked: function(sourceItem){
$scope.menu.editLinkText = sourceItem.title;
$scope.menu.editLinkURL = sourceItem.url;
$scope.menu.selectedLink = sourceItem;
$scope.$apply();
}
};
$scope.newMenu = function(){
REST.menus.save({ name: $scope.menu.newName }, function(data){
if($scope.menus)
$scope.menus.push({ id: data, name: $scope.menu.newName });
else
$scope.menus = [{ id: data, name: $scope.menu.newName }];
$scope.menu.newName = '';
$translate('menu_created').then(function(translatedText){
$rootScope.$broadcast('notify', {message: translatedText});
});
});
};
$scope.updateMenuName = function(){
REST.menus.update({
menuID: $scope.menu.id,
name: $scope.menu.name,
menu: $scope.menu.menu,
area: $scope.menu.area
}, updateMenuPromise);
};
function updateMenuPromise(data){
if(data){
for(var i=0; i< $scope.menus.length; i++){
if($scope.menus[i]['id'] === $scope.menu.id)
$scope.menus[i]['name'] = $scope.menu.name;
}
$scope.menu.name = '';
}
}
$scope.deleteMenu = function(){
REST.menus.delete({ menuID: $scope.menu.id }, deleteMenuPromise);
};
function deleteMenuPromise(data){
if(data){
for(var i=0; i< $scope.menus.length; i++){
if($scope.menus[i]['id'] === $scope.menu.id)
$scope.menus.splice(i,1);
}
$scope.menu.name = '';
$translate('menu_deleted').then(function(translatedText){
$rootScope.$broadcast('notify', {message: translatedText});
});
}
}
$scope.updateLink = function(){
angular.forEach($scope.list, function(link){
if(angular.equals(link, $scope.menu.currentlyEditingLink)){
link.title = $scope.menu.editLinkText;
link.url = $scope.menu.editLinkURL;
}
angular.forEach(link.items, function(link2){
if(angular.equals(link2, $scope.menu.currentlyEditingLink)){
link2.title = $scope.menu.editLinkText;
link2.url = $scope.menu.editLinkURL;
}
angular.forEach(link2.items, function(link3){
if(angular.equals(link3, $scope.menu.currentlyEditingLink)){
link3.title = $scope.menu.editLinkText;
link3.url = $scope.menu.editLinkURL;
}
});
});
});
};
$scope.saveMenu = function(){
REST.menus.update({
menuID: $scope.menu.id,
name: $scope.menu.name,
menu: angular.toJson($scope.list),
area: $scope.menu.area
}, saveMenuPromise);
};
function saveMenuPromise(data){
REST.menus.query({}, function(data){
Page.menus = data;
$rootScope.$broadcast('menusGet');
});
$translate('menu_saved').then(function(translatedText){
$rootScope.$broadcast('notify', {message: translatedText});
});
}
}]);