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}); }); } }]);