From ea43ff7c28f3523d73eea7fed5a3f19ca46310b9 Mon Sep 17 00:00:00 2001 From: kunw Date: Tue, 7 Jun 2016 16:49:38 +0800 Subject: [PATCH] updates for replication and destination UI. --- controllers/ng/navigationdetail.go | 34 +++++ static/ng/resources/css/admin-options.css | 17 +++ static/ng/resources/css/destination.css | 3 + static/ng/resources/css/replication.css | 67 ++++++++++ .../replication/create-policy.directive.html | 92 ++++++++++++++ .../replication/create-policy.directive.js | 32 +++++ .../list-replication.directive.html | 79 ++++++++++++ .../replication/list-replication.directive.js | 119 ++++++++++++++++++ .../replication/replication.module.js | 11 ++ .../configuration.directive.html | 62 +++++++++ .../configuration.directive.js | 54 ++++++++ .../create-destination.directive.html | 62 +++++++++ .../create-destination.directive.js | 47 +++++++ .../destination.directive.html | 38 ++++++ .../destination.directive.js | 51 ++++++++ .../replication.directive.html | 44 +++++++ .../replication.directive.js | 33 +++++ .../system-management.directive.html | 10 ++ .../system-management.directive.js | 26 ++++ .../system-management.module.js | 8 ++ .../components/user/list-user.directive.html | 35 ++++++ .../js/components/user/list-user.directive.js | 67 ++++++++++ .../navigation-admin-options.directive.html | 5 + .../navigation-admin-options.directive.js | 51 ++++++++ .../services.create-destination.js | 24 ++++ .../services.destination.module.js | 8 ++ .../destination/services.list-destination.js | 23 ++++ .../services.list-replication-job.js | 25 ++++ .../services.replication-job.module.js | 8 ++ .../services.create-replication-policy.js | 28 +++++ .../services.list-replication-policy.js | 27 ++++ .../services.replication-policy.module.js | 8 ++ views/ng/header.htm | 24 ++++ views/ng/navigation-detail.htm | 8 ++ 34 files changed, 1230 insertions(+) create mode 100644 controllers/ng/navigationdetail.go create mode 100644 static/ng/resources/css/admin-options.css create mode 100644 static/ng/resources/css/destination.css create mode 100644 static/ng/resources/css/replication.css create mode 100644 static/ng/resources/js/components/replication/create-policy.directive.html create mode 100644 static/ng/resources/js/components/replication/create-policy.directive.js create mode 100644 static/ng/resources/js/components/replication/list-replication.directive.html create mode 100644 static/ng/resources/js/components/replication/list-replication.directive.js create mode 100644 static/ng/resources/js/components/replication/replication.module.js create mode 100644 static/ng/resources/js/components/system-management/configuration.directive.html create mode 100644 static/ng/resources/js/components/system-management/configuration.directive.js create mode 100644 static/ng/resources/js/components/system-management/create-destination.directive.html create mode 100644 static/ng/resources/js/components/system-management/create-destination.directive.js create mode 100644 static/ng/resources/js/components/system-management/destination.directive.html create mode 100644 static/ng/resources/js/components/system-management/destination.directive.js create mode 100644 static/ng/resources/js/components/system-management/replication.directive.html create mode 100644 static/ng/resources/js/components/system-management/replication.directive.js create mode 100644 static/ng/resources/js/components/system-management/system-management.directive.html create mode 100644 static/ng/resources/js/components/system-management/system-management.directive.js create mode 100644 static/ng/resources/js/components/system-management/system-management.module.js create mode 100644 static/ng/resources/js/components/user/list-user.directive.html create mode 100644 static/ng/resources/js/components/user/list-user.directive.js create mode 100644 static/ng/resources/js/layout/navigation/navigation-admin-options.directive.html create mode 100644 static/ng/resources/js/layout/navigation/navigation-admin-options.directive.js create mode 100644 static/ng/resources/js/services/destination/services.create-destination.js create mode 100644 static/ng/resources/js/services/destination/services.destination.module.js create mode 100644 static/ng/resources/js/services/destination/services.list-destination.js create mode 100644 static/ng/resources/js/services/replication-job/services.list-replication-job.js create mode 100644 static/ng/resources/js/services/replication-job/services.replication-job.module.js create mode 100644 static/ng/resources/js/services/replication-policy/services.create-replication-policy.js create mode 100644 static/ng/resources/js/services/replication-policy/services.list-replication-policy.js create mode 100644 static/ng/resources/js/services/replication-policy/services.replication-policy.module.js create mode 100644 views/ng/header.htm create mode 100644 views/ng/navigation-detail.htm diff --git a/controllers/ng/navigationdetail.go b/controllers/ng/navigationdetail.go new file mode 100644 index 000000000..fc5006997 --- /dev/null +++ b/controllers/ng/navigationdetail.go @@ -0,0 +1,34 @@ +package ng + +import ( + "net/http" + + "github.com/vmware/harbor/dao" + "github.com/vmware/harbor/models" + "github.com/vmware/harbor/utils/log" +) + +type NavigationDetailController struct { + BaseController +} + +func (ndc *NavigationDetailController) Get() { + sessionUserID := ndc.GetSession("userId") + var isAdmin int + if sessionUserID != nil { + userID := sessionUserID.(int) + u, err := dao.GetUser(models.User{UserID: userID}) + if err != nil { + log.Errorf("Error occurred in GetUser, error: %v", err) + ndc.CustomAbort(http.StatusInternalServerError, "Internal error.") + } + if u == nil { + log.Warningf("User was deleted already, user id: %d, canceling request.", userID) + ndc.CustomAbort(http.StatusUnauthorized, "") + } + isAdmin = u.HasAdminRole + } + ndc.Data["IsAdmin"] = isAdmin + ndc.TplName = "ng/navigation-detail.htm" + ndc.Render() +} diff --git a/static/ng/resources/css/admin-options.css b/static/ng/resources/css/admin-options.css new file mode 100644 index 000000000..c361947ed --- /dev/null +++ b/static/ng/resources/css/admin-options.css @@ -0,0 +1,17 @@ +.switch-pane-admin-options { + display: inline; + width: 345px; + float: right; + list-style-type: none; +} + +.switch-pane-admin-options a, .switch-pane-admin-options span { + display: inline-block; + text-decoration: none; + float: left; +} + +.switch-pane-admin-options li .active { + border-bottom: 2px solid rgb(0, 84, 190); + font-weight: bold; +} \ No newline at end of file diff --git a/static/ng/resources/css/destination.css b/static/ng/resources/css/destination.css new file mode 100644 index 000000000..3a8b0842e --- /dev/null +++ b/static/ng/resources/css/destination.css @@ -0,0 +1,3 @@ +.create-destination { + height: 235px; +} \ No newline at end of file diff --git a/static/ng/resources/css/replication.css b/static/ng/resources/css/replication.css new file mode 100644 index 000000000..930489984 --- /dev/null +++ b/static/ng/resources/css/replication.css @@ -0,0 +1,67 @@ +.create-policy { + height: 535px; + overflow-y: auto; +} + +.form-group-custom { + margin-top: 10px; +} + +.h4-custom { + margin-top: 20px; +} + +.h4-custom-down { + display: inline-block; + margin-top: 20px; +} + +.hr-line { + margin-top: 0; + margin-bottom: 10px; +} + +.form-control-custom { + width: 100% !important; +} + +.pane-split { + overflow-x: hidden; + overflow-y: auto; + width: 100%; +} + +#upon-pane { + margin-top: 10px; + height: 270px; + min-height: 100px; + max-height: 270px; +} + +#upon-pane table>tbody>tr { + cursor: all-scroll; +} +#down-pane { + height: 80px; + min-height: 80px; +} + +.sub-pane-split { + margin: 15px; + height: auto; + min-height: 50px; + width: 100%; +} + +.well-split { + margin-bottom: 0; +} + +.split-handle { + margin-left: auto; + margin-right: auto; + width: 1em; + height: 1em; + cursor: ns-resize; + color: #C0C0C0; +} diff --git a/static/ng/resources/js/components/replication/create-policy.directive.html b/static/ng/resources/js/components/replication/create-policy.directive.html new file mode 100644 index 000000000..8c0384db8 --- /dev/null +++ b/static/ng/resources/js/components/replication/create-policy.directive.html @@ -0,0 +1,92 @@ + \ No newline at end of file diff --git a/static/ng/resources/js/components/replication/create-policy.directive.js b/static/ng/resources/js/components/replication/create-policy.directive.js new file mode 100644 index 000000000..84e6a2035 --- /dev/null +++ b/static/ng/resources/js/components/replication/create-policy.directive.js @@ -0,0 +1,32 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.replication') + .directive('createPolicy', createPolicy); + + function CreatePolicyController() { + var vm = this; + vm.enabled = true; + vm.save = save; + + function save(policy) { + console.log(angular.toJson(policy)); + } + } + + function createPolicy() { + var directive = { + 'restrict': 'E', + 'templateUrl': '/static/ng/resources/js/components/replication/create-policy.directive.html', + 'scope': true, + 'replace': true, + 'controller': CreatePolicyController, + 'controllerAs': 'vm', + 'bindToController': true + }; + return directive; + } + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/components/replication/list-replication.directive.html b/static/ng/resources/js/components/replication/list-replication.directive.html new file mode 100644 index 000000000..115c051cc --- /dev/null +++ b/static/ng/resources/js/components/replication/list-replication.directive.html @@ -0,0 +1,79 @@ +
+
+
+
+ + + + +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionDestinationStart TimeStatusActivationActions

No replication policies, add new replication policy.

//r.name////r.description////r.destination////r.start_time////r.status////r.activation//
+
+
+
//vm.projects ? vm.projects.length : 0// // 'items' | tr //
+

+

Replication Jobs

+
+
+
+ + + + +
+
+
+
+ + + + + + + + + + + + + + + + + + +
NameOperationStart TimeStatus

No replication jobs.

//r.name////r.operation////r.start_time////r.status//
+
+
+
+
+ \ No newline at end of file diff --git a/static/ng/resources/js/components/replication/list-replication.directive.js b/static/ng/resources/js/components/replication/list-replication.directive.js new file mode 100644 index 000000000..cb64af940 --- /dev/null +++ b/static/ng/resources/js/components/replication/list-replication.directive.js @@ -0,0 +1,119 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.replication') + .directive('listReplication', listReplication); + + ListReplicationController.$inject = ['getParameterByName', '$location', 'ListReplicationPolicyService', 'ListReplicationJobService']; + + function ListReplicationController(getParameterByName, $location, ListReplicationPolicyService, ListReplicationJobService) { + var vm = this; + + vm.projectId = getParameterByName('project_id', $location.absUrl()); + + vm.addReplication = addReplication; + vm.retrievePolicy = retrievePolicy; + vm.retrieveJob = retrieveJob; + vm.last = false; + + vm.retrievePolicy(); + + function retrievePolicy() { + ListReplicationPolicyService(vm.projectId, vm.replicationName) + .success(listReplicationPolicySuccess) + .error(listReplicationPolicyFailed); + } + + function retrieveJob(policyId) { + ListReplicationJobService(policyId, vm.replicationJobName) + .success(listReplicationJobSuccess) + .error(listReplicationJobFailed); + } + + function listReplicationPolicySuccess(data, status) { + vm.replicationPolicies = data || []; + } + + function listReplicationPolicyFailed(data, status) { + console.log('Failed list replication policy:' + data); + } + + function listReplicationJobSuccess(data, status) { + vm.replicationJobs = data || []; + } + + function listReplicationJobFailed(data, status) { + console.log('Failed list replication job:' + data); + } + + function addReplication() { + vm.modalTitle = 'Create New Policy'; + } + + } + + function listReplication($timeout) { + var directive = { + 'restrict': 'E', + 'templateUrl': '/static/ng/resources/js/components/replication/list-replication.directive.html', + 'scope': true, + 'link': link, + 'controller': ListReplicationController, + 'controllerAs': 'vm', + 'bindToController': true + }; + return directive; + + function link(scope, element, attrs, ctrl) { + var uponPaneHeight = element.find('#upon-pane').height(); + var handleHeight = element.find('.split-handle').height() + element.find('.split-handle').offset().top + element.find('.well').height() - 24; + + var maxDownPaneHeight = 245; + + element.find('.split-handle').on('mousedown', mousedownHandler); + + function mousedownHandler(e) { + e.preventDefault(); + $(document).on('mousemove', mousemoveHandler); + $(document).on('mouseup', mouseupHandler); + } + + function mousemoveHandler(e) { + if(element.find('#down-pane').height() <= maxDownPaneHeight) { + element.find('#upon-pane').css({'height' : (uponPaneHeight - (handleHeight - e.pageY)) + 'px'}); + element.find('#down-pane').css({'height' : (uponPaneHeight + (handleHeight - e.pageY - 196)) + 'px'}); + }else{ + element.find('#down-pane').css({'height' : (maxDownPaneHeight) + 'px'}); + $(document).off('mousemove'); + } + } + function mouseupHandler(e) { + $(document).off('mousedown'); + $(document).off('mousemove'); + } + + scope.$watch('vm.last', function(current) { + $timeout(function(){ + if(current) { + element.find('#upon-pane table>tbody>tr').on('click', trClickHandler); + element.find('#upon-pane table>tbody>tr:eq(0)').trigger('click'); + } + }); + }); + + function trClickHandler(e) { + element + .find('#upon-pane table>tbody>tr') + .css({'background-color': '#FFFFFF'}) + .css({'color': '#000'}); + $(this) + .css({'background-color': '#057ac9'}) + .css({'color': '#fff'}); + ctrl.retrieveJob($(this).attr('policy_id')); + } + } + } + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/components/replication/replication.module.js b/static/ng/resources/js/components/replication/replication.module.js new file mode 100644 index 000000000..73642a461 --- /dev/null +++ b/static/ng/resources/js/components/replication/replication.module.js @@ -0,0 +1,11 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.replication', [ + 'harbor.services.replication.policy', + 'harbor.services.replication.job' + ]); + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/components/system-management/configuration.directive.html b/static/ng/resources/js/components/system-management/configuration.directive.html new file mode 100644 index 000000000..2afdfa3e7 --- /dev/null +++ b/static/ng/resources/js/components/system-management/configuration.directive.html @@ -0,0 +1,62 @@ +
+
+
System Settings
+
+
+
+
+ +
+ +
+ Host name is required. +
+
+
+
+ +
+ +
+ Url protocol is required. +
+
+
+
+ +
+ +
+ Email server is required. +
+
+
+
+ +
+ +
+ LDAP URL is required. +
+
+
+
+
+
Registration
+
+
+
+
+ +
+ +
+
+
+
+ + +
+
+
+
\ No newline at end of file diff --git a/static/ng/resources/js/components/system-management/configuration.directive.js b/static/ng/resources/js/components/system-management/configuration.directive.js new file mode 100644 index 000000000..e37388ef1 --- /dev/null +++ b/static/ng/resources/js/components/system-management/configuration.directive.js @@ -0,0 +1,54 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.system.management') + .directive('configuration', configuration); + + ConfigurationController.$inject = []; + + function ConfigurationController() { + var vm = this; + + vm.registrationOptions = [ + { + 'name': 'on', + 'value': true + }, + { + 'name': 'off', + 'value': false + } + ]; + vm.currentRegistration = { + 'name': 'on', + 'value': true + }; + + vm.changeSettings = changeSettings; + + vm.selectRegistration = selectRegistration; + + function selectRegistration() { + + } + + function changeSettings(system) { + console.log(system); + } + } + + function configuration() { + var directive = { + 'restrict': 'E', + 'templateUrl': '/static/ng/resources/js/components/system-management/configuration.directive.html', + 'scope': true, + 'controller': ConfigurationController, + 'controllerAs': 'vm', + 'bindToController': true + }; + return directive; + } + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/components/system-management/create-destination.directive.html b/static/ng/resources/js/components/system-management/create-destination.directive.html new file mode 100644 index 000000000..e2a7c38cf --- /dev/null +++ b/static/ng/resources/js/components/system-management/create-destination.directive.html @@ -0,0 +1,62 @@ + \ No newline at end of file diff --git a/static/ng/resources/js/components/system-management/create-destination.directive.js b/static/ng/resources/js/components/system-management/create-destination.directive.js new file mode 100644 index 000000000..7b98ada52 --- /dev/null +++ b/static/ng/resources/js/components/system-management/create-destination.directive.js @@ -0,0 +1,47 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.system.management') + .directive('createDestination', createDestination); + + CreateDestinationController.$inject = ['CreateDestinationService']; + + function CreateDestinationController(CreateDestinationService) { + var vm = this; + vm.save = save; + + function save(destination) { + if(destination) { + console.log('destination:' + angular.toJson(destination)); + CreateDestinationService(destination.name, destination.endpoint, + destination.username, destination.password) + .success(createDestinationSuccess) + .error(createDestinationFailed); + } + } + + function createDestinationSuccess(data, status) { + alert('Successful created destination.'); + } + + function createDestinationFailed(data, status) { + console.log('Failed create destination:' + data); + } + + } + + function createDestination() { + var directive = { + 'restrict': 'E', + 'templateUrl': '/static/ng/resources/js/components/system-management/create-destination.directive.html', + 'scope': true, + 'controller': CreateDestinationController, + 'controllerAs': 'vm', + 'bindToController': true + }; + return directive; + } + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/components/system-management/destination.directive.html b/static/ng/resources/js/components/system-management/destination.directive.html new file mode 100644 index 000000000..408a582ca --- /dev/null +++ b/static/ng/resources/js/components/system-management/destination.directive.html @@ -0,0 +1,38 @@ +
+
+
+
+ + + + +
+ + +
+
+
+ + + + + + + + + + + + + + + + + + +
NameEndpointCreation TimeAction

No destinations, add new destination.

//r.name////r.url////r.creation_time//
+
+
+
//vm.destinations ? vm.destinations.length : 0// // 'items' | tr //
+
+
\ No newline at end of file diff --git a/static/ng/resources/js/components/system-management/destination.directive.js b/static/ng/resources/js/components/system-management/destination.directive.js new file mode 100644 index 000000000..8e93d63d6 --- /dev/null +++ b/static/ng/resources/js/components/system-management/destination.directive.js @@ -0,0 +1,51 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.system.management') + .directive('destination', destination); + + DestinationController.$inject = ['ListDestinationService']; + + function DestinationController(ListDestinationService) { + var vm = this; + + vm.retrieve = retrieve; + vm.search = search; + vm.retrieve(); + + function retrieve() { + ListDestinationService() + .success(listDestinationSuccess) + .error(listDestinationFailed); + } + + function search() { + vm.retrieve(); + } + + function listDestinationSuccess(data, status) { + vm.destinations = data; + } + + function listDestinationFailed(data, status) { + console.log('Failed list destination:' + data); + } + + + } + + function destination() { + var directive = { + 'restrict': 'E', + 'templateUrl': '/static/ng/resources/js/components/system-management/destination.directive.html', + 'scope': true, + 'controller': DestinationController, + 'controllerAs': 'vm', + 'bindToController': true + }; + return directive; + } + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/components/system-management/replication.directive.html b/static/ng/resources/js/components/system-management/replication.directive.html new file mode 100644 index 000000000..f715c1272 --- /dev/null +++ b/static/ng/resources/js/components/system-management/replication.directive.html @@ -0,0 +1,44 @@ +
+
+
+
+ + + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionProjectDestinationStart TimeStatusActivationActions

No replications.

//r.name////r.description////r.project////r.destination////r.start_time////r.status////r.activation//
+
+
+
//vm.replications ? vm.replications.length : 0// // 'items' | tr //
+
+
\ No newline at end of file diff --git a/static/ng/resources/js/components/system-management/replication.directive.js b/static/ng/resources/js/components/system-management/replication.directive.js new file mode 100644 index 000000000..c55aa5163 --- /dev/null +++ b/static/ng/resources/js/components/system-management/replication.directive.js @@ -0,0 +1,33 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.system.management') + .directive('replication', replication); + + ReplicationController.$inject = ['ListReplicationPolicyService']; + + function ReplicationController(ListReplicationPolicyService) { + var vm = this; + ListReplicationPolicyService() + .then(function(data) { + vm.replications = data; + }, function(data) { + + }); + } + + function replication() { + var directive = { + 'restrict': 'E', + 'templateUrl': '/static/ng/resources/js/components/system-management/replication.directive.html', + 'scope': true, + 'controller': ReplicationController, + 'controllerAs': 'vm', + 'bindToController': true + }; + return directive; + } + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/components/system-management/system-management.directive.html b/static/ng/resources/js/components/system-management/system-management.directive.html new file mode 100644 index 000000000..57e3affab --- /dev/null +++ b/static/ng/resources/js/components/system-management/system-management.directive.html @@ -0,0 +1,10 @@ +
+ + + +
+
+ + + +
diff --git a/static/ng/resources/js/components/system-management/system-management.directive.js b/static/ng/resources/js/components/system-management/system-management.directive.js new file mode 100644 index 000000000..4a6b97823 --- /dev/null +++ b/static/ng/resources/js/components/system-management/system-management.directive.js @@ -0,0 +1,26 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.system.management') + .directive('systemManagement', systemManagement); + + function SystemManagementController() { + var vm = this; + vm.target = 'destinations'; + } + + function systemManagement() { + var directive = { + 'restrict': 'E', + 'templateUrl': '/static/ng/resources/js/components/system-management/system-management.directive.html', + 'scope': true, + 'controller': SystemManagementController, + 'controllerAs': 'vm', + 'bindToController': true + }; + return directive; + } + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/components/system-management/system-management.module.js b/static/ng/resources/js/components/system-management/system-management.module.js new file mode 100644 index 000000000..78837cc7c --- /dev/null +++ b/static/ng/resources/js/components/system-management/system-management.module.js @@ -0,0 +1,8 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.system.management', []); + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/components/user/list-user.directive.html b/static/ng/resources/js/components/user/list-user.directive.html new file mode 100644 index 000000000..3a00ddd6c --- /dev/null +++ b/static/ng/resources/js/components/user/list-user.directive.html @@ -0,0 +1,35 @@ +
+
+
+ + + + +
+
+
+
+
+ + + + + + + + + + + + + +
// 'username' | tr //// 'role' | tr //// 'email' | tr //// 'registration_time' | tr //// 'operation' | tr //
//u.username//N/A//u.email////u.creation_time | dateL : 'YYYY-MM-DD HH:mm:ss'// +    +    +
+
+
+
//vm.users ? vm.users.length : 0// items
+
+
+ diff --git a/static/ng/resources/js/components/user/list-user.directive.js b/static/ng/resources/js/components/user/list-user.directive.js new file mode 100644 index 000000000..172a1ad77 --- /dev/null +++ b/static/ng/resources/js/components/user/list-user.directive.js @@ -0,0 +1,67 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.user') + .directive('listUser', listUser); + + ListUserController.$inject = ['ListUserService', 'DeleteUserService']; + + function ListUserController(ListUserService, DeleteUserService) { + var vm = this; + + vm.username = ''; + vm.searchUser = searchUser; + vm.deleteUser = deleteUser; + vm.retrieve = retrieve; + + vm.retrieve(); + + function searchUser() { + vm.retrieve(); + } + + function deleteUser(userId) { + DeleteUserService(userId) + .success(deleteUserSuccess) + .error(deleteUserFailed); + } + + function retrieve() { + ListUserService(vm.username) + .success(listUserSuccess) + .error(listUserFailed); + } + + function deleteUserSuccess(data, status) { + console.log('Successful delete user.'); + vm.retrieve(); + } + + function deleteUserFailed(data, status) { + console.log('Failed delete user.'); + } + + function listUserSuccess(data, status) { + vm.users = data; + } + + function listUserFailed(data, status) { + console.log('Failed list user:' + data); + } + } + + function listUser() { + var directive = { + 'restrict': 'E', + 'templateUrl': '/static/ng/resources/js/components/user/list-user.directive.html', + 'scope': true, + 'controller': ListUserController, + 'controllerAs': 'vm', + 'bindToController': true + }; + return directive; + } + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/layout/navigation/navigation-admin-options.directive.html b/static/ng/resources/js/layout/navigation/navigation-admin-options.directive.html new file mode 100644 index 000000000..d10b2fbfd --- /dev/null +++ b/static/ng/resources/js/layout/navigation/navigation-admin-options.directive.html @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/static/ng/resources/js/layout/navigation/navigation-admin-options.directive.js b/static/ng/resources/js/layout/navigation/navigation-admin-options.directive.js new file mode 100644 index 000000000..f102afa37 --- /dev/null +++ b/static/ng/resources/js/layout/navigation/navigation-admin-options.directive.js @@ -0,0 +1,51 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.layout.navigation') + .directive('navigationAdminOptions', navigationAdminOptions); + + NavigationAdminOptions.$inject = ['$location']; + + function NavigationAdminOptions($location) { + var vm = this; + vm.path = $location.path(); + } + + function navigationAdminOptions() { + var directive = { + 'restrict': 'E', + 'templateUrl': '/static/ng/resources/js/layout/navigation/navigation-admin-options.directive.html', + 'scope': { + 'target': '=' + }, + 'link': link, + 'controller': NavigationAdminOptions, + 'controllerAs': 'vm', + 'bindToController': true + }; + return directive; + + function link(scope, element, attrs, ctrl) { + var visited = ctrl.path.substring(1); + console.log('visited:' + visited); + + if(visited) { + element.find('a[tag="' + visited + '"]').addClass('active'); + }else{ + element.find('a:first').addClass('active'); + } + + element.find('a').on('click', click); + + function click(event) { + element.find('a').removeClass('active'); + $(event.target).addClass('active'); + ctrl.target = $(this).attr('tag'); + scope.$apply(); + } + } + } + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/services/destination/services.create-destination.js b/static/ng/resources/js/services/destination/services.create-destination.js new file mode 100644 index 000000000..571a4fb40 --- /dev/null +++ b/static/ng/resources/js/services/destination/services.create-destination.js @@ -0,0 +1,24 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.services.destination') + .factory('CreateDestinationService', CreateDestinationService); + + CreateDestinationService.$inject = ['$http']; + + function CreateDestinationService($http) { + return createDestination; + function createDestination(name, endpoint, username, password) { + return $http + .post('/api/targets', { + 'name': name, + 'url': endpoint, + 'username': username, + 'password': password + }); + } + } + +})() \ No newline at end of file diff --git a/static/ng/resources/js/services/destination/services.destination.module.js b/static/ng/resources/js/services/destination/services.destination.module.js new file mode 100644 index 000000000..2bd086471 --- /dev/null +++ b/static/ng/resources/js/services/destination/services.destination.module.js @@ -0,0 +1,8 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.services.destination', []); + +})(); diff --git a/static/ng/resources/js/services/destination/services.list-destination.js b/static/ng/resources/js/services/destination/services.list-destination.js new file mode 100644 index 000000000..bdc2925b1 --- /dev/null +++ b/static/ng/resources/js/services/destination/services.list-destination.js @@ -0,0 +1,23 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.services.destination') + .factory('ListDestinationService', ListDestinationService); + + ListDestinationService.$inject = ['$http']; + + function ListDestinationService($http) { + return listDestination; + function listDestination(name) { + return $http + .get('/api/targets', { + 'params': { + 'name': name + } + }); + } + } + +})() \ No newline at end of file diff --git a/static/ng/resources/js/services/replication-job/services.list-replication-job.js b/static/ng/resources/js/services/replication-job/services.list-replication-job.js new file mode 100644 index 000000000..79b5de1b6 --- /dev/null +++ b/static/ng/resources/js/services/replication-job/services.list-replication-job.js @@ -0,0 +1,25 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.services.replication.job') + .factory('ListReplicationJobService', ListReplicationJobService); + + ListReplicationJobService.$inject = ['$http']; + + function ListReplicationJobService($http) { + + return listReplicationJob; + + function listReplicationJob(policyId, name) { + return $http + .get('/api/jobs/replication/', { + 'params': { + 'policy_id': policyId, + 'name': name + } + }); + } + } +})(); \ No newline at end of file diff --git a/static/ng/resources/js/services/replication-job/services.replication-job.module.js b/static/ng/resources/js/services/replication-job/services.replication-job.module.js new file mode 100644 index 000000000..3dff96780 --- /dev/null +++ b/static/ng/resources/js/services/replication-job/services.replication-job.module.js @@ -0,0 +1,8 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.services.replication.job', []); + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/services/replication-policy/services.create-replication-policy.js b/static/ng/resources/js/services/replication-policy/services.create-replication-policy.js new file mode 100644 index 000000000..3f89a2d89 --- /dev/null +++ b/static/ng/resources/js/services/replication-policy/services.create-replication-policy.js @@ -0,0 +1,28 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.services.replication.policy') + .factory('CreateReplicationPolicyService', CreateReplicationPolicyService); + + CreateReplicationPolicyService.$inject = ['$http']; + + function CreateReplicationPolicyService($http) { + return createReplicaitonPolicy; + + function createReplicationPolicy(policy) { + return $http + .post('/api/policies/replication', { + 'project_id': policy.projectId, + 'target_id': policy.targetId, + 'name': policy.name, + 'enabled': policy.enabled, + 'description': policy.description, + 'cron_str': policy.cronStr, + 'start_time': policy.startTime + }) + } + } + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/services/replication-policy/services.list-replication-policy.js b/static/ng/resources/js/services/replication-policy/services.list-replication-policy.js new file mode 100644 index 000000000..fa7061914 --- /dev/null +++ b/static/ng/resources/js/services/replication-policy/services.list-replication-policy.js @@ -0,0 +1,27 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.services.replication.policy') + .factory('ListReplicationPolicyService', ListReplicationPolicyService); + + ListReplicationPolicyService.$inject = ['$http']; + + function ListReplicationPolicyService($http) { + + return listReplicationPolicy; + + function listReplicationPolicy(projectId, name) { + return $http + .get('/api/policies/replication', { + 'params': { + 'project_id': projectId, + 'name': name + } + }); + } + + } + +})(); \ No newline at end of file diff --git a/static/ng/resources/js/services/replication-policy/services.replication-policy.module.js b/static/ng/resources/js/services/replication-policy/services.replication-policy.module.js new file mode 100644 index 000000000..94a311e61 --- /dev/null +++ b/static/ng/resources/js/services/replication-policy/services.replication-policy.module.js @@ -0,0 +1,8 @@ +(function() { + + 'use strict'; + + angular + .module('harbor.services.replication.policy', []); + +})(); \ No newline at end of file diff --git a/views/ng/header.htm b/views/ng/header.htm new file mode 100644 index 000000000..b8d0de74a --- /dev/null +++ b/views/ng/header.htm @@ -0,0 +1,24 @@ + \ No newline at end of file diff --git a/views/ng/navigation-detail.htm b/views/ng/navigation-detail.htm new file mode 100644 index 000000000..98e8da761 --- /dev/null +++ b/views/ng/navigation-detail.htm @@ -0,0 +1,8 @@ + \ No newline at end of file