mirror of
https://github.com/goharbor/harbor.git
synced 2025-03-31 00:36:05 +02:00
update for UI changes of repository page.
This commit is contained in:
parent
76c77db807
commit
65bd6b264a
@ -4,8 +4,9 @@
|
||||
|
||||
angular
|
||||
.module('harbor.details')
|
||||
.config(routeConfig);
|
||||
|
||||
.config(routeConfig)
|
||||
.filter('name', nameFilter);
|
||||
|
||||
function routeConfig($routeProvider) {
|
||||
$routeProvider
|
||||
.when('/repositories', {
|
||||
@ -28,4 +29,26 @@
|
||||
});
|
||||
}
|
||||
|
||||
function nameFilter() {
|
||||
|
||||
return filter;
|
||||
|
||||
function filter(input, filterInput, key) {
|
||||
input = input || '';
|
||||
var filteredResults = [];
|
||||
|
||||
if (filterInput != '') {
|
||||
for(var i = 0; i < input.length; i++) {
|
||||
var item = input[i];
|
||||
if((key == "" && item.indexOf(filterInput) >= 0) || (key != "" && item[key].indexOf(filterInput) >= 0)) {
|
||||
filteredResults.push(item);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
input = filteredResults;
|
||||
}
|
||||
return input;
|
||||
}
|
||||
}
|
||||
|
||||
})();
|
@ -4,28 +4,28 @@
|
||||
|
||||
angular
|
||||
.module('harbor.details')
|
||||
.constant('mockupProjects', mockupProjects)
|
||||
.controller('DetailsController', DetailsController);
|
||||
|
||||
function mockupProjects() {
|
||||
var data = [
|
||||
{ "id": 1, "name" : "myrepo"},
|
||||
{ "id": 2, "name" : "myproject"},
|
||||
{ "id": 3, "name" : "harbor_project"},
|
||||
{ "id": 4, "name" : "legacy"}
|
||||
];
|
||||
return data;
|
||||
}
|
||||
DetailsController.$inject = ['ListProjectService', '$scope'];
|
||||
|
||||
DetailsController.$inject = ['mockupProjects', '$scope'];
|
||||
|
||||
function DetailsController(mockupProjects, $scope) {
|
||||
function DetailsController(ListProjectService, $scope) {
|
||||
var vm = this;
|
||||
vm.isOpen = false;
|
||||
vm.projects = mockupProjects();
|
||||
vm.selectedProject = vm.projects[0];
|
||||
vm.closeRetrievePane = closeRetrievePane;
|
||||
|
||||
ListProjectService({'isPublic' : 0, 'projectName' : ''})
|
||||
.then(getProjectComplete)
|
||||
.catch(getProjectFailed);
|
||||
|
||||
function getProjectComplete(response) {
|
||||
vm.projects = response.data;
|
||||
vm.selectedProject = vm.projects[0];
|
||||
}
|
||||
|
||||
function getProjectFailed(response) {
|
||||
|
||||
}
|
||||
|
||||
function closeRetrievePane() {
|
||||
$scope.$broadcast('isOpen', false);
|
||||
}
|
||||
|
@ -3,6 +3,8 @@
|
||||
'use strict';
|
||||
|
||||
angular
|
||||
.module('harbor.details', []);
|
||||
.module('harbor.details', [
|
||||
'harbor.services.project'
|
||||
]);
|
||||
|
||||
})();
|
@ -4,14 +4,14 @@
|
||||
<div class="panel panel-default">
|
||||
<div class="form-inline search-projects">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control search-icon" placeholder="" ng-keyup="vm.filterProjects(vm.filterInput)" ng-model="vm.filterInput" size="30">
|
||||
<input type="text" class="form-control search-icon" placeholder="" ng-model="vm.filterInput" size="30">
|
||||
</div>
|
||||
</div>
|
||||
<h5 class="page-header">My Projects: <span class="badge">//vm.projects.length//</span></h5>
|
||||
<div class="project-list pane-container">
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item" ng-repeat="item in vm.projects" ng-click="vm.selectItem(item)">
|
||||
<span ng-show="item.id == vm.selectedId" class="glyphicon glyphicon-ok project-selected"></span> <a href="javascript:void(0);">//item.name//</a>
|
||||
<li class="list-group-item" ng-repeat="item in vm.projects | name: vm.filterInput: 'Name'" ng-click="vm.selectItem(item)">
|
||||
<span ng-show="item.ProjectId == vm.selectedId" class="glyphicon glyphicon-ok project-selected"></span> <a href="/ng/repository#/repositories?project_id=//item.ProjectId//">//item.Name//</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
@ -5,38 +5,28 @@
|
||||
angular
|
||||
.module('harbor.details')
|
||||
.directive('retrieveProjects', retrieveProjects);
|
||||
|
||||
function RetrieveProjectsController() {
|
||||
var vm = this;
|
||||
|
||||
RetrieveProjectsController.$inject = ['$scope', 'nameFilter', '$routeParams'];
|
||||
|
||||
function RetrieveProjectsController($scope, nameFilter, $routeParams) {
|
||||
var vm = this;
|
||||
|
||||
vm.selectItem = selectItem;
|
||||
vm.filterProjects = filterProjects;
|
||||
vm.selectedId = vm.selectedProject.id;
|
||||
vm.filterInput = "";
|
||||
|
||||
$scope.$watch('vm.selectedProject', function(current, origin) {
|
||||
if(current) {
|
||||
var projectId = current.ProjectId || $routeParams.project_id;
|
||||
vm.selectedId = projectId;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function selectItem(item) {
|
||||
vm.selectedId = item.id;
|
||||
vm.selectedId = item.ProjectId;
|
||||
vm.selectedProject = item;
|
||||
}
|
||||
|
||||
var totalProjects = vm.projects;
|
||||
|
||||
function filterProjects(input) {
|
||||
|
||||
if(input == "") {
|
||||
vm.projects = totalProjects;
|
||||
}else{
|
||||
var filteredResults = [];
|
||||
for(var i = 0; i < totalProjects.length; i++) {
|
||||
var item = totalProjects[i];
|
||||
if(item.name.indexOf(input) >= 0) {
|
||||
filteredResults.push(item);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
vm.projects = filteredResults;
|
||||
}
|
||||
}
|
||||
|
||||
vm.isOpen = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -56,8 +46,6 @@
|
||||
}
|
||||
|
||||
return directive;
|
||||
|
||||
|
||||
}
|
||||
|
||||
})();
|
@ -6,9 +6,9 @@
|
||||
.module('harbor.details')
|
||||
.directive('switchPaneProjects', switchPaneProjects);
|
||||
|
||||
SwitchPaneProjectsController.$inject = ['$scope'];
|
||||
SwitchPaneProjectsController.$inject = ['$scope', '$routeParams'];
|
||||
|
||||
function SwitchPaneProjectsController($scope) {
|
||||
function SwitchPaneProjectsController($scope, $routeParams) {
|
||||
var vm = this;
|
||||
|
||||
$scope.$on('isOpen', function(e, val){
|
||||
@ -16,7 +16,9 @@
|
||||
});
|
||||
|
||||
$scope.$watch('vm.selectedProject', function(current, origin) {
|
||||
vm.projectName = current.name;
|
||||
if(current){
|
||||
vm.projectName = current.Name;
|
||||
}
|
||||
});
|
||||
|
||||
vm.switchPane = switchPane;
|
||||
|
@ -1,5 +1,5 @@
|
||||
<td style="padding: 15px;">//vm.username//</td>
|
||||
<td><switch-role roles="vm.roles" edit-mode="vm.editMode" user-id="vm.userId" role-id="vm.roleId"></switch-role></td>
|
||||
<td><switch-role roles="vm.roles" edit-mode="vm.editMode" user-id="vm.userId" role-name="vm.roleName"></switch-role></td>
|
||||
<td>
|
||||
<a href="javascript:void(0);" ng-click="vm.updateProjectMember({projectId: vm.projectId, userId: vm.userId, roleId: vm.roleId})">
|
||||
<span ng-if="!vm.editMode" class="glyphicon glyphicon-pencil"></span><span ng-if="vm.editMode" class="glyphicon glyphicon-ok"></span>
|
||||
|
@ -6,10 +6,16 @@
|
||||
.module('harbor.project.member')
|
||||
.directive('editProjectMember', editProjectMember);
|
||||
|
||||
EditProjectMemberController.$inject = ['roles', 'EditProjectMemberService', 'DeleteProjectMemberService'];
|
||||
EditProjectMemberController.$inject = ['$scope', 'roles', 'getRole','EditProjectMemberService', 'DeleteProjectMemberService'];
|
||||
|
||||
function EditProjectMemberController(roles, EditProjectMemberService) {
|
||||
function EditProjectMemberController($scope, roles, getRole, EditProjectMemberService, DeleteProjectMemberService) {
|
||||
var vm = this;
|
||||
|
||||
|
||||
$scope.$on('changedRoleId', function(e, val) {
|
||||
vm.roleId = val;
|
||||
});
|
||||
|
||||
vm.roles = roles();
|
||||
vm.editMode = false;
|
||||
vm.updateProjectMember = updateProjectMember;
|
||||
@ -18,8 +24,10 @@
|
||||
function updateProjectMember(e) {
|
||||
if(vm.editMode) {
|
||||
vm.editMode = false;
|
||||
|
||||
console.log('project_id:' + e.projectId + ', user_id:' + e.userId + ', role_id:' + e.roleId);
|
||||
|
||||
EditProjectMemberService(e.projectId, e.userId, e.roleId)
|
||||
.success(editProjectMemberComplete)
|
||||
.error(editProjectMemberFailed);
|
||||
|
||||
}else {
|
||||
vm.editMode = true;
|
||||
@ -27,8 +35,21 @@
|
||||
}
|
||||
|
||||
function deleteProjectMember(e) {
|
||||
console.log('project_id:' + e.projectId + ', user_id:' + e.userId);
|
||||
|
||||
DeleteProjectMemberService(e.projectId, e.userId)
|
||||
.success(editProjectMemberComplete)
|
||||
.error(editProjectMemberFailed);
|
||||
|
||||
}
|
||||
|
||||
function editProjectMemberComplete(data, status, headers) {
|
||||
console.log('editProjectMemberComplete: ' + status);
|
||||
}
|
||||
|
||||
function editProjectMemberFailed(e) {
|
||||
console.log('editProjectMemberFailed:' + e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function editProjectMember() {
|
||||
@ -38,7 +59,7 @@
|
||||
'scope': {
|
||||
'username': '=',
|
||||
'userId': '=',
|
||||
'roleId': '=',
|
||||
'roleName': '=',
|
||||
'projectId': '='
|
||||
},
|
||||
'controller': EditProjectMemberController,
|
||||
|
@ -17,7 +17,7 @@
|
||||
<th width="30%">Username</th><th width="40%">Role</th><th width="30%">Operation</th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="pr in vm.projectMembers" edit-project-member username="pr.username" project-id="pr.project_id" user-id="pr.id" role-id="pr.roleId"></tr>
|
||||
<tr ng-repeat="pr in vm.projectMembers" edit-project-member username="pr.username" project-id="vm.projectId" user-id="pr.UserId" role-name="pr.Rolename"></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
@ -4,21 +4,11 @@
|
||||
|
||||
angular
|
||||
.module('harbor.project.member')
|
||||
.constant('mockupProjectMembers', mockupProjectMembers)
|
||||
.directive('listProjectMember', listProjectMember);
|
||||
|
||||
function mockupProjectMembers() {
|
||||
var projectMembers = [
|
||||
{'id': '1', 'username': 'user1', 'roleId': '1', 'project_id': '5'},
|
||||
{'id': '2', 'username': 'user2', 'roleId': '3', 'project_id': '5'},
|
||||
{'id': '3', 'username': 'user3', 'roleId': '2', 'project_id': '5'}
|
||||
];
|
||||
return projectMembers;
|
||||
}
|
||||
|
||||
ListProjectMemberController.$inject = ['mockupProjectMembers', 'ListProjectMemberService'];
|
||||
ListProjectMemberController.$inject = ['ListProjectMemberService', '$routeParams'];
|
||||
|
||||
function ListProjectMemberController(mockupProjectMembers, ListProjectMemberService) {
|
||||
function ListProjectMemberController(ListProjectMemberService, $routeParams) {
|
||||
var vm = this;
|
||||
|
||||
vm.isOpen = false;
|
||||
@ -27,8 +17,12 @@
|
||||
vm.search = search;
|
||||
vm.addProjectMember = addProjectMember;
|
||||
|
||||
vm.projectId = $routeParams.project_id || 2;
|
||||
|
||||
retrieve(vm.username);
|
||||
|
||||
function search(e) {
|
||||
console.log("search for:" + e.username);
|
||||
retrieve(e.username);
|
||||
}
|
||||
|
||||
function addProjectMember() {
|
||||
@ -39,7 +33,19 @@
|
||||
}
|
||||
}
|
||||
|
||||
vm.projectMembers = mockupProjectMembers();
|
||||
function retrieve(username) {
|
||||
ListProjectMemberService(vm.projectId, {'username': username})
|
||||
.then(getProjectMemberComplete)
|
||||
.catch(getProjectMemberFailed);
|
||||
}
|
||||
|
||||
function getProjectMemberComplete(response) {
|
||||
vm.projectMembers = response.data;
|
||||
}
|
||||
|
||||
function getProjectMemberFailed(response) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -5,27 +5,28 @@
|
||||
angular
|
||||
.module('harbor.project.member')
|
||||
.constant('roles', roles)
|
||||
.factory('getRoleById', getRoleById);
|
||||
.factory('getRole', getRole);
|
||||
|
||||
function roles() {
|
||||
return [
|
||||
{'id': '1', 'name': 'Project Admin'},
|
||||
{'id': '2', 'name': 'Developer'},
|
||||
{'id': '3', 'name': 'Guest'}
|
||||
{'id': '1', 'name': 'Project Admin', 'roleName': 'projectAdmin'},
|
||||
{'id': '2', 'name': 'Developer', 'roleName': 'developer'},
|
||||
{'id': '3', 'name': 'Guest', 'roleName': 'guest'}
|
||||
];
|
||||
}
|
||||
|
||||
getRoleById.$inject = ['roles'];
|
||||
getRole.$inject = ['roles'];
|
||||
|
||||
function getRoleById(roles) {
|
||||
function getRole(roles) {
|
||||
var r = roles();
|
||||
return getRole;
|
||||
function getRole(roleId) {
|
||||
return get;
|
||||
function get(query) {
|
||||
|
||||
for(var i = 0; i < r.length; i++) {
|
||||
var role = r[i];
|
||||
if(role.id == roleId) {
|
||||
return role;
|
||||
if(query.key == 'roleName' && role.roleName == query.value
|
||||
|| query.key == 'roleId' && role.id == query.value) {
|
||||
return role;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
<ng-switch on="vm.editMode">
|
||||
<span ng-switch-default>//vm.currentRole.name//</span>
|
||||
<select ng-switch-when="true" ng-model="vm.currentRole" ng-options="role as role.name for role in vm.roles track by role.id" ng-click="vm.selectRole(vm.currentRole)">
|
||||
<select ng-switch-when="true" ng-model="vm.currentRole" ng-options="role as role.name for role in vm.roles track by role.roleName" ng-click="vm.selectRole(vm.currentRole)">
|
||||
</select>
|
||||
</ng-switch>
|
@ -6,17 +6,17 @@
|
||||
.module('harbor.project.member')
|
||||
.directive('switchRole', switchRole);
|
||||
|
||||
SwitchRoleController.$inject = ['getRoleById'];
|
||||
SwitchRoleController.$inject = ['getRole', '$scope'];
|
||||
|
||||
function SwitchRoleController(getRoleById) {
|
||||
function SwitchRoleController(getRole, $scope) {
|
||||
var vm = this;
|
||||
|
||||
vm.currentRole = getRoleById(vm.roleId);
|
||||
vm.currentRole = getRole({'key': 'roleName', 'value': vm.roleName});
|
||||
vm.selectRole = selectRole;
|
||||
|
||||
function selectRole(role) {
|
||||
vm.currentRole = getRoleById(role.id);
|
||||
vm.roleId = role.id;
|
||||
vm.currentRole = getRole({'key': 'roleName', 'value': role.roleName});
|
||||
$scope.$emit('changedRoleId', vm.currentRole.id);
|
||||
}
|
||||
|
||||
}
|
||||
@ -29,7 +29,7 @@
|
||||
'roles': '=',
|
||||
'editMode': '=',
|
||||
'userId': '=',
|
||||
'roleId': '='
|
||||
'roleName': '='
|
||||
},
|
||||
'controller' : SwitchRoleController,
|
||||
'controllerAs': 'vm',
|
||||
|
@ -2,185 +2,22 @@
|
||||
<div class="col-xs-12 col-md-12 each-tab-pane">
|
||||
<div class="form-inline">
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control" placeholder="" value="//vm.info//" size="30">
|
||||
<input type="text" class="form-control" placeholder="" ng-model="vm.filterInput" value="" size="30">
|
||||
<span class="input-group-btn">
|
||||
<button class="btn btn-primary" type="button"><span class="glyphicon glyphicon-search"></span></button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading" role="tab" id="heading1">
|
||||
<div class="panel-group" id="accordion" role="tablist" aria-multiselectable="false">
|
||||
<div class="panel panel-default" ng-repeat="repo in vm.repositories | name: vm.filterInput : ''">
|
||||
<div class="panel-heading" role="tab" id="heading//$index + 1//" >
|
||||
<h4 class="panel-title">
|
||||
<a role="button" data-toggle="collapse" data-parent="#accordion" href="ng/repository#/repositories#collapse1" aria-expanded="true" aria-controls="collapse1">
|
||||
<span class="glyphicon glyphicon-book"></span> myrepo/ubuntu
|
||||
<a role="button" data-toggle="collapse" data-parent="#accordion" href="ng/repository#/repositories#collapse//$index + 1//" aria-expanded="true" aria-controls="collapse//$index + 1//" ng-click="vm.expand({repoName: repo})">
|
||||
<span class="glyphicon glyphicon-book"></span> //repo//
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse1" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading1">
|
||||
<div class="panel-body">
|
||||
<table class="repository-table">
|
||||
<thead>
|
||||
<th width="20%"><span class="glyphicon glyphicon-tags"></span> Tag</th>
|
||||
<th width="30%">Image Details</th>
|
||||
<th width="40%">Pull Command</th>
|
||||
<th width="10%"></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>latest</td>
|
||||
<td><a href="#"><span class="glyphicon glyphicon-info-sign"></span></a></td>
|
||||
<td>docker pull myrepo/ubuntu:latest</td>
|
||||
<td><a href="#">Copy</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>14.04</td>
|
||||
<td><a href="#"><span class="glyphicon glyphicon-info-sign"></span></a></td>
|
||||
<td>docker pull myrepo/ubuntu:14.04</td>
|
||||
<td><a href="#">Copy</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="panel-heading" role="tab" id="heading2">
|
||||
<h4 class="panel-title">
|
||||
<a role="button" data-toggle="collapse" data-parent="#accordion" href="ng/repository#/repositories#collapse2" aria-expanded="true" aria-controls="collapse2">
|
||||
<span class="glyphicon glyphicon-book"></span> myrepo/mysql
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse2" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading2">
|
||||
<div class="panel-body">
|
||||
<table class="repository-table">
|
||||
<thead>
|
||||
<th width="20%"><span class="glyphicon glyphicon-tags"></span> Tag</th>
|
||||
<th width="30%">Image Details</th>
|
||||
<th width="40%">Pull Command</th>
|
||||
<th width="10%"></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>latest</td>
|
||||
<td><a href="#"><span class="glyphicon glyphicon-info-sign"></span></a></td>
|
||||
<td>docker pull myrepo/mysql:latest</td>
|
||||
<td><a href="#">Copy</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>5.6</td>
|
||||
<td><a href="#"><span class="glyphicon glyphicon-info-sign"></span></a></td>
|
||||
<td>docker pull myrepo/mysql:5.6</td>
|
||||
<td><a href="#">Copy</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel-heading" role="tab" id="heading3">
|
||||
<h4 class="panel-title">
|
||||
<a role="button" data-toggle="collapse" data-parent="#accordion" href="ng/repository#/repositories#collapse3" aria-expanded="true" aria-controls="collapse3">
|
||||
<span class="glyphicon glyphicon-book"></span> myrepo/nginx
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse3" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading3">
|
||||
<div class="panel-body">
|
||||
<table class="repository-table">
|
||||
<thead>
|
||||
<th width="20%"><span class="glyphicon glyphicon-tags"></span> Tag</th>
|
||||
<th width="30%">Image Details</th>
|
||||
<th width="40%">Pull Command</th>
|
||||
<th width="10%"></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>latest</td>
|
||||
<td><a href="#"><span class="glyphicon glyphicon-info-sign"></span></a></td>
|
||||
<td>docker pull myrepo/nginx:latest</td>
|
||||
<td><a href="#">Copy</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>1.9</td>
|
||||
<td><a href="#"><span class="glyphicon glyphicon-info-sign"></span></a></td>
|
||||
<td>docker pull myrepo/nginx:1.9</td>
|
||||
<td><a href="#">Copy</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="panel-heading" role="tab" id="heading4">
|
||||
<h4 class="panel-title">
|
||||
<a role="button" data-toggle="collapse" data-parent="#accordion" href="ng/repository#/repositories#collapse4" aria-expanded="true" aria-controls="collapse4">
|
||||
<span class="glyphicon glyphicon-book"></span> myrepo/registry
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse4" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading4">
|
||||
<div class="panel-body">
|
||||
<table class="repository-table">
|
||||
<thead>
|
||||
<th width="20%"><span class="glyphicon glyphicon-tags"></span> Tag</th>
|
||||
<th width="30%">Image Details</th>
|
||||
<th width="40%">Pull Command</th>
|
||||
<th width="10%"></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>latest</td>
|
||||
<td><a href="#"><span class="glyphicon glyphicon-info-sign"></span></a></td>
|
||||
<td>docker pull myrepo/registry:latest</td>
|
||||
<td><a href="#">Copy</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2.3</td>
|
||||
<td><a href="#"><span class="glyphicon glyphicon-info-sign"></span></a></td>
|
||||
<td>docker pull myrepo/registry:2.3</td>
|
||||
<td><a href="#">Copy</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="panel-heading" role="tab" id="heading5">
|
||||
<h4 class="panel-title">
|
||||
<a role="button" data-toggle="collapse" data-parent="#accordion" href="ng/repository#/repositories#collapse5" aria-expanded="true" aria-controls="collapse5">
|
||||
<span class="glyphicon glyphicon-book"></span> myrepo/alpine
|
||||
</a>
|
||||
</h4>
|
||||
</div>
|
||||
<div id="collapse5" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading5">
|
||||
<div class="panel-body">
|
||||
<table class="repository-table">
|
||||
<thead>
|
||||
<th width="20%"><span class="glyphicon glyphicon-tags"></span> Tag</th>
|
||||
<th width="30%">Image Details</th>
|
||||
<th width="40%">Pull Command</th>
|
||||
<th width="10%"></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>latest</td>
|
||||
<td><a href="#"><span class="glyphicon glyphicon-info-sign"></span></a></td>
|
||||
<td>docker pull myrepo/alpine:latest</td>
|
||||
<td><a href="#">Copy</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>1.2</td>
|
||||
<td><a href="#"><span class="glyphicon glyphicon-info-sign"></span></a></td>
|
||||
<td>docker pull myrepo/alpine:1.2</td>
|
||||
<td><a href="#">Copy</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<list-tag associate-id="$index + 1" repo-name="repo" tags="vm.tags"></list-tag>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -5,10 +5,41 @@
|
||||
.module('harbor.repository')
|
||||
.directive('listRepository', listRepository);
|
||||
|
||||
ListRepositoryController.$inject = ['ListRepositoryService'];
|
||||
ListRepositoryController.$inject = ['ListRepositoryService', 'ListTagService', 'nameFilter', '$routeParams'];
|
||||
|
||||
function ListRepositoryController(ListRepositoryService) {
|
||||
function ListRepositoryController(ListRepositoryService, ListTagService, nameFilter, $routeParams) {
|
||||
var vm = this;
|
||||
|
||||
vm.filterInput = "";
|
||||
|
||||
ListRepositoryService({'projectId': $routeParams.project_id, 'q': ''})
|
||||
.then(getRepositoryComplete)
|
||||
.catch(getRepositoryFailed);
|
||||
|
||||
function getRepositoryComplete(response) {
|
||||
vm.repositories = response.data;
|
||||
}
|
||||
|
||||
function getRepositoryFailed(repsonse) {
|
||||
|
||||
}
|
||||
|
||||
vm.expand = expand;
|
||||
|
||||
function expand(e) {
|
||||
vm.tags = [];
|
||||
ListTagService(e.repoName)
|
||||
.then(getTagComplete)
|
||||
.catch(getTagFailed);
|
||||
|
||||
function getTagComplete(response) {
|
||||
vm.tags = response.data;
|
||||
}
|
||||
|
||||
function getTagFailed(response) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function listRepository() {
|
||||
|
@ -0,0 +1,20 @@
|
||||
<div id="collapse//vm.associateId//" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading//vm.associateId//">
|
||||
<div class="panel-body">
|
||||
<table class="repository-table">
|
||||
<thead>
|
||||
<th width="20%"><span class="glyphicon glyphicon-tags"></span> Tag</th>
|
||||
<th width="30%">Image Details</th>
|
||||
<th width="40%">Pull Command</th>
|
||||
<th width="10%"></th>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-repeat="tag in vm.tags">
|
||||
<td>//tag//</td>
|
||||
<td><a href="#"><span class="glyphicon glyphicon-info-sign"></span></a></td>
|
||||
<td>docker pull //vm.repoName//://tag//</td>
|
||||
<td><a href="#">Copy</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
@ -0,0 +1,32 @@
|
||||
(function() {
|
||||
|
||||
'use strict';
|
||||
|
||||
angular
|
||||
.module('harbor.repository')
|
||||
.directive('listTag', listTag);
|
||||
|
||||
ListTagController.$inject = ['ListTagService'];
|
||||
|
||||
function ListTagController(ListTagService) {
|
||||
|
||||
}
|
||||
|
||||
function listTag() {
|
||||
var directive = {
|
||||
'restrict': 'E',
|
||||
'templateUrl': '/static/ng/resources/js/components/repository/list-tag.directive.html',
|
||||
'scope': {
|
||||
'associateId': '=',
|
||||
'repoName': '=',
|
||||
'tags': '='
|
||||
},
|
||||
'replace': true,
|
||||
'controller': ListTagController,
|
||||
'controllerAs': 'vm',
|
||||
'bindToController': true
|
||||
};
|
||||
return directive;
|
||||
}
|
||||
|
||||
})();
|
@ -1,10 +1,13 @@
|
||||
(function() {
|
||||
'use strict';
|
||||
angular
|
||||
.module('harbor.app')
|
||||
.config(function($interpolateProvider){
|
||||
'use strict';
|
||||
angular
|
||||
.module('harbor.app')
|
||||
.config(function($interpolateProvider){
|
||||
$interpolateProvider.startSymbol('//');
|
||||
$interpolateProvider.endSymbol('//');
|
||||
})
|
||||
.config(function($httpProvider) {
|
||||
$httpProvider.defaults.headers.common = {'Accept': 'application/json, text/javascript, */*; q=0.01'};
|
||||
});
|
||||
|
||||
})();
|
@ -8,7 +8,6 @@
|
||||
|
||||
function RepositoryController() {
|
||||
var vm = this;
|
||||
vm.info = "repository";
|
||||
}
|
||||
|
||||
})();
|
@ -12,8 +12,9 @@
|
||||
|
||||
return DeleteProjectMember;
|
||||
|
||||
function DeleteProjectMember(projectMember) {
|
||||
|
||||
function DeleteProjectMember(projectId, userId) {
|
||||
return $http
|
||||
.delete('/api/projects/' + projectId + '/members/' + userId);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -12,8 +12,11 @@
|
||||
|
||||
return EditProjectMember;
|
||||
|
||||
function EditProjectMember(projectMember) {
|
||||
|
||||
function EditProjectMember(projectId, userId, roleId) {
|
||||
return $http
|
||||
.put('/api/projects/' + projectId + '/members/' + userId, {
|
||||
'roles' : [ Number(roleId) ]
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -8,12 +8,19 @@
|
||||
|
||||
ListProjectMemberService.$inject = ['$http', '$log'];
|
||||
|
||||
function ListProjectMemberService() {
|
||||
function ListProjectMemberService($http, $log) {
|
||||
|
||||
return ListProjectMember;
|
||||
|
||||
function ListProjectMember () {
|
||||
|
||||
function ListProjectMember(projectId, queryParams) {
|
||||
console.log('project_member project_id:' + projectId);
|
||||
var username = queryParams.username;
|
||||
return $http
|
||||
.get('/api/projects/' + projectId + '/members', {
|
||||
params: {
|
||||
'username': username
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -11,8 +11,21 @@
|
||||
|
||||
return ListProject;
|
||||
|
||||
function ListProject(queryParams) {
|
||||
function ListProject(queryParams) {
|
||||
|
||||
$log.info(queryParams);
|
||||
|
||||
var isPublic = queryParams.isPublic;
|
||||
var projectName = queryParams.projectName;
|
||||
|
||||
return $http
|
||||
.get('/api/projects',{
|
||||
params: {
|
||||
'is_public': isPublic,
|
||||
'project_name': projectName
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
})();
|
@ -13,6 +13,17 @@
|
||||
|
||||
function RepositoryResult(queryParams) {
|
||||
$log.info(queryParams);
|
||||
|
||||
var projectId = queryParams.projectId;
|
||||
var q = queryParams.q;
|
||||
|
||||
return $http
|
||||
.get('/api/repositories', {
|
||||
'params':{
|
||||
'project_id': projectId,
|
||||
'q': q
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
})();
|
@ -0,0 +1,25 @@
|
||||
(function() {
|
||||
|
||||
'use strict';
|
||||
|
||||
angular
|
||||
.module('harbor.services.repository')
|
||||
.factory('ListTagService', ListTagService);
|
||||
|
||||
ListTagService.$inject = ['$http', '$log'];
|
||||
|
||||
function ListTagService($http, $log) {
|
||||
return ListTag;
|
||||
|
||||
function ListTag(repoName) {
|
||||
return $http
|
||||
.get('/api/repositories/tags', {
|
||||
'params': {
|
||||
'repo_name': repoName
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
})();
|
@ -49,11 +49,16 @@
|
||||
<script src="/static/ng/resources/js/layout/log/log.module.js"></script>
|
||||
<script src="/static/ng/resources/js/layout/log/log.controller.js"></script>
|
||||
|
||||
|
||||
<script src="/static/ng/resources/js/services/project/services.project.module.js"></script>
|
||||
<script src="/static/ng/resources/js/services/project/services.list-project.js"></script>
|
||||
|
||||
<script src="/static/ng/resources/js/services/user/services.user.module.js"></script>
|
||||
<script src="/static/ng/resources/js/services/user/services.current-user.js"></script>
|
||||
|
||||
<script src="/static/ng/resources/js/services/repository/services.repository.module.js"></script>
|
||||
<script src="/static/ng/resources/js/services/repository/services.list-repository.js"></script>
|
||||
<script src="/static/ng/resources/js/services/repository/services.list-tag.js"></script>
|
||||
|
||||
<script src="/static/ng/resources/js/services/project-member/services.project-member.module.js"></script>
|
||||
<script src="/static/ng/resources/js/services/project-member/services.add-project-member.js"></script>
|
||||
@ -78,6 +83,7 @@
|
||||
|
||||
<script src="/static/ng/resources/js/components/repository/repository.module.js"></script>
|
||||
<script src="/static/ng/resources/js/components/repository/list-repository.directive.js"></script>
|
||||
<script src="/static/ng/resources/js/components/repository/list-tag.directive.js"></script>
|
||||
|
||||
<script src="/static/ng/resources/js/components/project-member/project-member.module.js"></script>
|
||||
<script src="/static/ng/resources/js/components/project-member/project-member.config.js"></script>
|
||||
|
Loading…
Reference in New Issue
Block a user