Get the new context-sensitive new menu working
This commit is contained in:
		
							parent
							
								
									40a6892a49
								
							
						
					
					
						commit
						d09f2f6e22
					
				
					 13 changed files with 461 additions and 193 deletions
				
			
		|  | @ -12,7 +12,7 @@ angular.module('quay').directive('headerBar', function () { | |||
|     restrict: 'C', | ||||
|     scope: { | ||||
|     }, | ||||
|     controller: function($scope, $element, $location, $timeout, UserService, PlanService, ApiService, NotificationService, Config) { | ||||
|     controller: function($rootScope, $scope, $element, $location, $timeout, UserService, PlanService, ApiService, NotificationService, Config, CreateService) { | ||||
|       $scope.notificationService = NotificationService; | ||||
|       $scope.searchVisible = false; | ||||
|       $scope.currentSearchQuery = null; | ||||
|  | @ -23,6 +23,19 @@ angular.module('quay').directive('headerBar', function () { | |||
| 
 | ||||
|       $scope.isNewLayout = Config.isNewLayout(); | ||||
| 
 | ||||
|       $scope.currentPageContext = {}; | ||||
| 
 | ||||
|       $rootScope.$watch('currentPage.scope.viewuser', function(u) { | ||||
|         $scope.currentPageContext['viewuser'] = u; | ||||
|       }); | ||||
| 
 | ||||
|       $rootScope.$watch('currentPage.scope.organization', function(o) { | ||||
|         $scope.currentPageContext['organization'] = o; | ||||
|       }); | ||||
| 
 | ||||
|       $rootScope.$watch('currentPage.scope.repository', function(r) { | ||||
|         $scope.currentPageContext['repository'] = r; | ||||
|       }); | ||||
| 
 | ||||
|       var conductSearch = function(query) { | ||||
|         if (!query) { $scope.searchResultState = null; return; } | ||||
|  | @ -43,6 +56,8 @@ angular.module('quay').directive('headerBar', function () { | |||
|             'results': resp.results, | ||||
|             'current': -1 | ||||
|           }; | ||||
|         }, function(resp) { | ||||
|           $scope.searchResultState = null; | ||||
|         }, /* background */ true); | ||||
|       }; | ||||
| 
 | ||||
|  | @ -133,6 +148,77 @@ angular.module('quay').directive('headerBar', function () { | |||
|         if (!$scope.searchResultState) { return; } | ||||
|         $scope.searchResultState['current'] = result; | ||||
|       }; | ||||
| 
 | ||||
|       $scope.getNamespace = function(context) { | ||||
|         if (!context) { return null; } | ||||
| 
 | ||||
|         if (context.repository && context.repository.namespace) { | ||||
|           return context.repository.namespace; | ||||
|         } | ||||
| 
 | ||||
|         if (context.organization && context.organization.name) { | ||||
|           return context.organization.name; | ||||
|         } | ||||
| 
 | ||||
|         if (context.viewuser && context.viewuser.username) { | ||||
|           return context.viewuser.username; | ||||
|         } | ||||
| 
 | ||||
|         return null; | ||||
|       }; | ||||
| 
 | ||||
|       $scope.canAdmin = function(namespace) { | ||||
|         if (!namespace) { return false; } | ||||
|         return UserService.isNamespaceAdmin(namespace); | ||||
|       }; | ||||
| 
 | ||||
|       $scope.isOrganization = function(namespace) { | ||||
|         if (!namespace) { return false; } | ||||
|         return UserService.isOrganization(namespace); | ||||
|       }; | ||||
| 
 | ||||
|       $scope.createRobot = function(context) { | ||||
|         var namespace = $scope.getNamespace(context); | ||||
|         if (!namespace || !UserService.isNamespaceAdmin(namespace)) { return; } | ||||
| 
 | ||||
|         var isorg = UserService.isOrganization(namespace); | ||||
|         bootbox.prompt('Enter the name of the new robot account', function(robotname) { | ||||
|           if (!robotname) { return; } | ||||
| 
 | ||||
|           var regex = new RegExp(ROBOT_PATTERN); | ||||
|           if (!regex.test(robotname)) { | ||||
|             bootbox.alert('Invalid robot account name'); | ||||
|             return; | ||||
|           } | ||||
| 
 | ||||
|           CreateService.createRobotAccount(ApiService, isorg, namespace, robotname, function(created) { | ||||
|             if (isorg) { | ||||
|               $location.url('/organization/' + namespace + '?tab=robots'); | ||||
|             } else { | ||||
|               $location.url('/user/' + namespace + '?tab=robots'); | ||||
|             } | ||||
|           }); | ||||
|         }); | ||||
|       }; | ||||
| 
 | ||||
|       $scope.createTeam = function(context) { | ||||
|         var namespace = $scope.getNamespace(context); | ||||
|         if (!namespace || !UserService.isNamespaceAdmin(namespace)) { return; } | ||||
| 
 | ||||
|         bootbox.prompt('Enter the name of the new team', function(teamname) { | ||||
|           if (!teamname) { return; } | ||||
| 
 | ||||
|           var regex = new RegExp(TEAM_PATTERN); | ||||
|           if (!regex.test(teamname)) { | ||||
|             bootbox.alert('Invalid team name'); | ||||
|             return; | ||||
|           } | ||||
| 
 | ||||
|           CreateService.createOrganizationTeam(ApiService, namespace, teamname, function(created) { | ||||
|             $location.url('/organization/' + namespace + '/teams/' + teamname); | ||||
|           }); | ||||
|         }); | ||||
|       }; | ||||
|     } | ||||
|   }; | ||||
|   return directiveDefinitionObject; | ||||
|  |  | |||
|  | @ -47,7 +47,7 @@ angular.module('quay').directive('teamsManager', function () { | |||
|       }; | ||||
| 
 | ||||
|       var loadOrderedTeams = function() { | ||||
|         if (!$scope.organization) { return; } | ||||
|         if (!$scope.organization || !$scope.organization.ordered_teams) { return; } | ||||
| 
 | ||||
|         $scope.orderedTeams = []; | ||||
|         $scope.organization.ordered_teams.map(function(name) { | ||||
|  |  | |||
		Reference in a new issue