diff --git a/static/ng/resources/css/repository.css b/static/ng/resources/css/repository.css index 10e59c320..b6e3b4e88 100644 --- a/static/ng/resources/css/repository.css +++ b/static/ng/resources/css/repository.css @@ -86,3 +86,13 @@ .each-tab-pane { padding: 0 10px; } + +.inline-block { + display: inline-block; +} + +.datetime-picker-title { + float: left; + line-height: 2.5em; + margin: 0 0.5em 0 0; +} diff --git a/static/ng/resources/js/components/details/details.config.js b/static/ng/resources/js/components/details/details.config.js index 0acff68ac..e611db496 100644 --- a/static/ng/resources/js/components/details/details.config.js +++ b/static/ng/resources/js/components/details/details.config.js @@ -5,7 +5,8 @@ angular .module('harbor.details') .config(routeConfig) - .filter('name', nameFilter); + .filter('name', nameFilter) + .filter('dateL', localizeDate); function routeConfig($routeProvider) { $routeProvider @@ -51,4 +52,12 @@ } } + function localizeDate() { + return filter; + + function filter(input, pattern) { + return moment(new Date(input || '')).format(pattern); + } + } + })(); \ No newline at end of file diff --git a/static/ng/resources/js/components/details/details.controller.js b/static/ng/resources/js/components/details/details.controller.js index 3279c74e9..99a3fe0a2 100644 --- a/static/ng/resources/js/components/details/details.controller.js +++ b/static/ng/resources/js/components/details/details.controller.js @@ -5,7 +5,7 @@ angular .module('harbor.details') .controller('DetailsController', DetailsController); - + DetailsController.$inject = ['ListProjectService', '$scope']; function DetailsController(ListProjectService, $scope) { @@ -14,8 +14,8 @@ vm.closeRetrievePane = closeRetrievePane; $scope.$on('selectedProjectId', function(e, val) { - $scope.$broadcast('currentProjectId',val); - }); + $scope.$broadcast('currentProjectId', val); + }); ListProjectService({'isPublic' : 0, 'projectName' : ''}) .then(getProjectComplete) diff --git a/static/ng/resources/js/components/details/retrieve-projects.directive.html b/static/ng/resources/js/components/details/retrieve-projects.directive.html index 3d909c08d..cdfc6faeb 100644 --- a/static/ng/resources/js/components/details/retrieve-projects.directive.html +++ b/static/ng/resources/js/components/details/retrieve-projects.directive.html @@ -11,7 +11,7 @@
diff --git a/static/ng/resources/js/components/details/retrieve-projects.directive.js b/static/ng/resources/js/components/details/retrieve-projects.directive.js index c6eeac667..c95ce8e4d 100644 --- a/static/ng/resources/js/components/details/retrieve-projects.directive.js +++ b/static/ng/resources/js/components/details/retrieve-projects.directive.js @@ -10,22 +10,20 @@ function RetrieveProjectsController($scope, nameFilter) { var vm = this; - - vm.selectItem = selectItem; - vm.filterInput = ""; - + $scope.$watch('vm.selectedProject', function(current, origin) { if(current) { - var projectId = current.ProjectId; - vm.selectedId = projectId; + vm.selectedId = current.ProjectId; } }); + vm.filterInput = ""; + vm.selectItem = selectItem; + function selectItem(item) { vm.selectedId = item.ProjectId; vm.selectedProject = item; vm.isOpen = false; - $scope.$emit('selectedProjectId', vm.selectedId); } } @@ -39,6 +37,7 @@ 'isOpen': '=', 'selectedProject': '=' }, + link: link, replace: true, controller: RetrieveProjectsController, bindToController: true, @@ -46,6 +45,10 @@ } return directive; + + function link(scope, element, attrs, ctrl) { + + } } })(); \ No newline at end of file diff --git a/static/ng/resources/js/components/details/switch-pane-projects.directive.js b/static/ng/resources/js/components/details/switch-pane-projects.directive.js index 0f9f7cd21..d59b116bd 100644 --- a/static/ng/resources/js/components/details/switch-pane-projects.directive.js +++ b/static/ng/resources/js/components/details/switch-pane-projects.directive.js @@ -15,11 +15,11 @@ vm.isOpen = val; }); - $scope.$watch('vm.selectedProject', function(current, origin) { - if(current){ - vm.projectName = current.Name; - } - }); +// $scope.$watch('vm.selectedProject', function(current, origin) { +// if(current){ +// vm.projectName = current.Name; +// } +// }); vm.switchPane = switchPane; @@ -30,6 +30,7 @@ vm.isOpen = true; } } + } function switchPaneProjects() { @@ -41,12 +42,22 @@ 'selectedProject': '=', 'isOpen': '=' }, + link: link, controller: SwitchPaneProjectsController, controllerAs: 'vm', bindToController: true } return directive; + + function link(scope, element, attrs, ctrl) { + scope.$watch('vm.selectedProject', function(current, origin) { + if(current){ + scope.$emit('selectedProjectId', current.ProjectId); + ctrl.projectName = current.Name; + } + }); + } } diff --git a/static/ng/resources/js/components/log/advanced-search.directive.html b/static/ng/resources/js/components/log/advanced-search.directive.html index 57370f862..4e39c1b5b 100644 --- a/static/ng/resources/js/components/log/advanced-search.directive.html +++ b/static/ng/resources/js/components/log/advanced-search.directive.html @@ -18,15 +18,28 @@
-
- From: - - -    - To: - - + +
+ From: + +
+ + + + +
+
+ +
+ To: +
+ + + + +
+
diff --git a/static/ng/resources/js/components/log/advanced-search.directive.js b/static/ng/resources/js/components/log/advanced-search.directive.js index 389128718..a8d4dc0d5 100644 --- a/static/ng/resources/js/components/log/advanced-search.directive.js +++ b/static/ng/resources/js/components/log/advanced-search.directive.js @@ -10,7 +10,7 @@ function AdvancedSearchController($scope, ListLogService) { var vm = this; - + vm.checkOperation = checkOperation; vm.opAll = true; @@ -19,7 +19,8 @@ vm.opPush = true; vm.opDelete = true; vm.opOthers = true; - + vm.others = ""; + vm.op = []; vm.op.push('all'); function checkOperation(e) { @@ -47,10 +48,25 @@ if(vm.opDelete) { vm.op.push('delete'); } - if(vm.opOthers) { + if(vm.opOthers && vm.others != "") { vm.op.push(vm.others); + } + } + + vm.pickUp = pickUp; + + function pickUp(e) { + switch(e.key){ + case 'fromDate': + vm.fromDate = e.value; + break; + case 'toDate': + vm.toDate = e.value; + break; } + $scope.$apply(); } + } function advancedSearch() { @@ -61,13 +77,31 @@ 'isOpen': '=', 'op': '=', 'others': '=', + 'fromDate': '=', + 'toDate': '=', 'search': '&' }, + 'link': link, 'controller': AdvancedSearchController, 'controllerAs': 'vm', 'bindToController': true }; return directive; + + function link(scope, element, attrs, ctrl) { + element.find('.datetimepicker').datetimepicker({ + locale: 'en-US', + ignoreReadonly: true, + format: 'L', + showClear: true + }); + element.find('#fromDatePicker').on('blur', function(){ + ctrl.pickUp({'key': 'fromDate', 'value': $(this).val()}); + }); + element.find('#toDatePicker').on('blur', function(){ + ctrl.pickUp({'key': 'toDate', 'value': $(this).val()}); + }); + } } })(); \ No newline at end of file diff --git a/static/ng/resources/js/components/log/list-log.directive.html b/static/ng/resources/js/components/log/list-log.directive.html index 63927dcd9..a6cde460e 100644 --- a/static/ng/resources/js/components/log/list-log.directive.html +++ b/static/ng/resources/js/components/log/list-log.directive.html @@ -4,15 +4,15 @@
- + - +
- +
@@ -20,7 +20,7 @@ - +
//log.Username////log.RepoName////log.Operation////log.OpTime////log.Username////log.RepoName////log.Operation////log.OpTime | dateL : 'YYYY-MM-DD HH:mm:ss'//
diff --git a/static/ng/resources/js/components/log/list-log.directive.js b/static/ng/resources/js/components/log/list-log.directive.js index acbacc886..44c8a15a3 100644 --- a/static/ng/resources/js/components/log/list-log.directive.js +++ b/static/ng/resources/js/components/log/list-log.directive.js @@ -6,58 +6,49 @@ .module('harbor.log') .directive('listLog', listLog); - ListLogController.$inject = ['ListLogService', '$routeParams']; + ListLogController.$inject = ['$scope','ListLogService']; - function ListLogController(ListLogService, $routeParams) { + function ListLogController($scope, ListLogService) { var vm = this; vm.isOpen = false; - vm.projectId = $routeParams.project_id; - + vm.beginTimestamp = 0; vm.endTimestamp = 0; vm.keywords = ""; vm.username = ""; - + vm.op = []; - vm.others = ""; - - + vm.search = search; - vm.aSearch= aSearch; - - vm.advancedSearch = advancedSearch; + vm.showAdvancedSearch = showAdvancedSearch; - - var queryParams = { - 'beginTimestamp' : vm.beginTimestamp, - 'endTimestamp' : vm.endTimestamp, - 'keywords' : vm.keywords, - 'projectId': vm.projectId, - 'username' : vm.username - }; - - retrieve(queryParams); - + $scope.$watch('vm.projectId', function(current, origin) { + if(current) { + vm.queryParams = { + 'beginTimestamp' : vm.beginTimestamp, + 'endTimestamp' : vm.endTimestamp, + 'keywords' : vm.keywords, + 'projectId': current, + 'username' : vm.username + }; + retrieve(vm.queryParams); + } + }); function search(e) { - queryParams.username = e.username; - retrieve(queryParams); - } - - function aSearch(e) { - if(e.op == 'all') { - queryParams.keywords = ''; + if(e.op[0] == 'all') { + vm.queryParams.keywords = ''; }else { - queryParams.keywords = e.op.join('/') ; + vm.queryParams.keywords = e.op.join('/') ; } - if(e.others != "") { - queryParams.keywords += '/' + e.others; - } - queryParams.username = vm.username; + vm.queryParams.username = e.username; - retrieve(queryParams); + vm.queryParams.beginTimestamp = toUTCSeconds(vm.fromDate, 0, 0, 0); + vm.queryParams.endTimestamp = toUTCSeconds(vm.toDate, 23, 59, 59); + + retrieve(vm.queryParams); } - function advancedSearch() { + function showAdvancedSearch() { if(vm.isOpen){ vm.isOpen = false; }else{ @@ -70,14 +61,32 @@ .then(listLogComplete) .catch(listLogFailed); } - - + function listLogComplete(response) { vm.logs = response.data; } function listLogFailed(e){ console.log('listLogFailed:' + e); } + + function toUTCSeconds(date, hour, min, sec) { + if(date == "") { + return 0; + } + + var t = new Date(date); + t.setHours(hour); + t.setMinutes(min); + t.setSeconds(sec); + var utcTime = new Date(t.getUTCFullYear(), + t.getUTCMonth(), + t.getUTCDate(), + t.getUTCHours(), + t.getUTCMinutes(), + t.getUTCSeconds()); + return utcTime.getTime() / 1000; + } + } function listLog() { @@ -85,6 +94,9 @@ restrict: 'E', templateUrl: '/static/ng/resources/js/components/log/list-log.directive.html', replace: true, + scope: { + 'projectId': '=' + }, controller: ListLogController, controllerAs: 'vm', bindToController: true diff --git a/static/ng/resources/js/components/project-member/add-project-member.directive.js b/static/ng/resources/js/components/project-member/add-project-member.directive.js index 7c769436c..06b634f06 100644 --- a/static/ng/resources/js/components/project-member/add-project-member.directive.js +++ b/static/ng/resources/js/components/project-member/add-project-member.directive.js @@ -22,6 +22,9 @@ .success(addProjectMemberComplete) .error(addProjectMemberFailed); vm.isOpen = false; + vm.username = ""; + vm.optRole = 1; + vm.reload(); } function cancel() { @@ -43,7 +46,8 @@ 'restrict': 'E', 'templateUrl': '/static/ng/resources/js/components/project-member/add-project-member.directive.html', 'scope': { - 'isOpen': '=' + 'isOpen': '=', + 'reload': '&' }, 'controller': AddProjectMemberController, 'controllerAs': 'vm', diff --git a/static/ng/resources/js/components/project-member/edit-project-member.directive.js b/static/ng/resources/js/components/project-member/edit-project-member.directive.js index f99d476b1..9fa72291a 100644 --- a/static/ng/resources/js/components/project-member/edit-project-member.directive.js +++ b/static/ng/resources/js/components/project-member/edit-project-member.directive.js @@ -39,7 +39,7 @@ DeleteProjectMemberService(e.projectId, e.userId) .success(editProjectMemberComplete) .error(editProjectMemberFailed); - + vm.reload(); } function editProjectMemberComplete(data, status, headers) { @@ -60,7 +60,8 @@ 'username': '=', 'userId': '=', 'roleName': '=', - 'projectId': '=' + 'projectId': '=', + 'reload': '&' }, 'controller': EditProjectMemberController, 'controllerAs': 'vm', diff --git a/static/ng/resources/js/components/project-member/list-project-member.directive.html b/static/ng/resources/js/components/project-member/list-project-member.directive.html index cc4f37471..72c069a7e 100644 --- a/static/ng/resources/js/components/project-member/list-project-member.directive.html +++ b/static/ng/resources/js/components/project-member/list-project-member.directive.html @@ -10,14 +10,14 @@
- +
- +
UsernameRoleOperation
diff --git a/static/ng/resources/js/components/project-member/list-project-member.directive.js b/static/ng/resources/js/components/project-member/list-project-member.directive.js index 262250100..dcad6e8a7 100644 --- a/static/ng/resources/js/components/project-member/list-project-member.directive.js +++ b/static/ng/resources/js/components/project-member/list-project-member.directive.js @@ -6,22 +6,24 @@ .module('harbor.project.member') .directive('listProjectMember', listProjectMember); - ListProjectMemberController.$inject = ['$scope', 'ListProjectMemberService', '$routeParams']; + ListProjectMemberController.$inject = ['$scope', '$q', 'ListProjectMemberService']; - function ListProjectMemberController($scope, ListProjectMemberService, $routeParams) { + function ListProjectMemberController($scope, $q, ListProjectMemberService) { var vm = this; - vm.projectId = $routeParams.project_id; - vm.isOpen = false; vm.username = ""; vm.search = search; vm.addProjectMember = addProjectMember; + vm.retrieve = retrieve; - retrieve(vm.projectId , vm.username); - - + $scope.$watch('vm.projectId', function(current, origin) { + if(current) { + vm.retrieve(current , vm.username); + } + }); + function search(e) { console.log('project_id:' + e.projectId); retrieve(e.projectId, e.username); @@ -56,12 +58,20 @@ restrict: 'E', templateUrl: '/static/ng/resources/js/components/project-member/list-project-member.directive.html', replace: true, + scope: { + 'projectId': '=' + }, + link: link, controller: ListProjectMemberController, controllerAs: 'vm', bindToController: true } - + return directive; + + function link(scope, element, attrs, ctrl) { + + } } })(); \ No newline at end of file diff --git a/static/ng/resources/js/components/repository/list-repository.directive.html b/static/ng/resources/js/components/repository/list-repository.directive.html index 988b165b8..7a76f2fc7 100644 --- a/static/ng/resources/js/components/repository/list-repository.directive.html +++ b/static/ng/resources/js/components/repository/list-repository.directive.html @@ -9,7 +9,7 @@
-
+