diff --git a/app/docker/components/container-quick-actions/containerQuickActions.js b/app/docker/components/container-quick-actions/containerQuickActions.js
index 3fb616d7c..619cf7efa 100644
--- a/app/docker/components/container-quick-actions/containerQuickActions.js
+++ b/app/docker/components/container-quick-actions/containerQuickActions.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('containerQuickActions', {
- templateUrl: 'app/docker/components/container-quick-actions/containerQuickActions.html',
+ templateUrl: './containerQuickActions.html',
bindings: {
containerId: '<',
nodeName: '<',
diff --git a/app/docker/components/container-restart-policy/container-restart-policy.js b/app/docker/components/container-restart-policy/container-restart-policy.js
index 0a8d7edf2..60e4f0c4b 100644
--- a/app/docker/components/container-restart-policy/container-restart-policy.js
+++ b/app/docker/components/container-restart-policy/container-restart-policy.js
@@ -1,6 +1,6 @@
angular.module('portainer.docker')
.component('containerRestartPolicy', {
- templateUrl: 'app/docker/components/container-restart-policy/container-restart-policy.html',
+ templateUrl: './container-restart-policy.html',
controller: 'ContainerRestartPolicyController',
bindings: {
'name': '<',
diff --git a/app/docker/components/dashboard-cluster-agent-info/dashboard-cluster-agent-info.js b/app/docker/components/dashboard-cluster-agent-info/dashboard-cluster-agent-info.js
index 54dc0caf6..88aae5cec 100644
--- a/app/docker/components/dashboard-cluster-agent-info/dashboard-cluster-agent-info.js
+++ b/app/docker/components/dashboard-cluster-agent-info/dashboard-cluster-agent-info.js
@@ -1,4 +1,4 @@
angular.module('portainer.docker').component('dashboardClusterAgentInfo', {
- templateUrl: 'app/docker/components/dashboard-cluster-agent-info/dashboardClusterAgentInfo.html',
+ templateUrl: './dashboardClusterAgentInfo.html',
controller: 'DashboardClusterAgentInfoController'
});
diff --git a/app/docker/components/datatables/configs-datatable/configsDatatable.js b/app/docker/components/datatables/configs-datatable/configsDatatable.js
index b6735f28b..b7294eb2a 100644
--- a/app/docker/components/datatables/configs-datatable/configsDatatable.js
+++ b/app/docker/components/datatables/configs-datatable/configsDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('configsDatatable', {
- templateUrl: 'app/docker/components/datatables/configs-datatable/configsDatatable.html',
+ templateUrl: './configsDatatable.html',
controller: 'GenericDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/container-networks-datatable/containerNetworksDatatable.js b/app/docker/components/datatables/container-networks-datatable/containerNetworksDatatable.js
index d807b7019..7ac1b5580 100644
--- a/app/docker/components/datatables/container-networks-datatable/containerNetworksDatatable.js
+++ b/app/docker/components/datatables/container-networks-datatable/containerNetworksDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('containerNetworksDatatable', {
- templateUrl: 'app/docker/components/datatables/container-networks-datatable/containerNetworksDatatable.html',
+ templateUrl: './containerNetworksDatatable.html',
controller: 'GenericDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/container-processes-datatable/containerProcessesDatatable.js b/app/docker/components/datatables/container-processes-datatable/containerProcessesDatatable.js
index 8c0dfbffe..1a0abdc3a 100644
--- a/app/docker/components/datatables/container-processes-datatable/containerProcessesDatatable.js
+++ b/app/docker/components/datatables/container-processes-datatable/containerProcessesDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('containerProcessesDatatable', {
- templateUrl: 'app/docker/components/datatables/container-processes-datatable/containerProcessesDatatable.html',
+ templateUrl: './containerProcessesDatatable.html',
controller: 'GenericDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/containers-datatable/actions/containersDatatableActions.js b/app/docker/components/datatables/containers-datatable/actions/containersDatatableActions.js
index 996b5e2c6..2f82916a1 100644
--- a/app/docker/components/datatables/containers-datatable/actions/containersDatatableActions.js
+++ b/app/docker/components/datatables/containers-datatable/actions/containersDatatableActions.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('containersDatatableActions', {
- templateUrl: 'app/docker/components/datatables/containers-datatable/actions/containersDatatableActions.html',
+ templateUrl: './containersDatatableActions.html',
controller: 'ContainersDatatableActionsController',
bindings: {
selectedItems: '=',
diff --git a/app/docker/components/datatables/containers-datatable/containersDatatable.js b/app/docker/components/datatables/containers-datatable/containersDatatable.js
index 478f17367..6a5d6abfb 100644
--- a/app/docker/components/datatables/containers-datatable/containersDatatable.js
+++ b/app/docker/components/datatables/containers-datatable/containersDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('containersDatatable', {
- templateUrl: 'app/docker/components/datatables/containers-datatable/containersDatatable.html',
+ templateUrl: './containersDatatable.html',
controller: 'ContainersDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/containers-datatable/containersDatatableController.js b/app/docker/components/datatables/containers-datatable/containersDatatableController.js
index 68a3d925b..09f75e0a9 100644
--- a/app/docker/components/datatables/containers-datatable/containersDatatableController.js
+++ b/app/docker/components/datatables/containers-datatable/containersDatatableController.js
@@ -1,3 +1,5 @@
+import _ from 'lodash-es';
+
angular.module('portainer.docker')
.controller('ContainersDatatableController', ['PaginationService', 'DatatableService', 'EndpointProvider',
function (PaginationService, DatatableService, EndpointProvider) {
@@ -197,7 +199,7 @@ function (PaginationService, DatatableService, EndpointProvider) {
for (var i = 0; i < datasetFilters.length; i++) {
var filter = datasetFilters[i];
- existingFilter = _.find(storedFilters, ['label', filter.label]);
+ var existingFilter = _.find(storedFilters, ['label', filter.label]);
if (existingFilter && !existingFilter.display) {
filter.display = existingFilter.display;
this.filters.state.enabled = true;
diff --git a/app/docker/components/datatables/events-datatable/eventsDatatable.js b/app/docker/components/datatables/events-datatable/eventsDatatable.js
index 10ef2976b..54afd6665 100644
--- a/app/docker/components/datatables/events-datatable/eventsDatatable.js
+++ b/app/docker/components/datatables/events-datatable/eventsDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('eventsDatatable', {
- templateUrl: 'app/docker/components/datatables/events-datatable/eventsDatatable.html',
+ templateUrl: './eventsDatatable.html',
controller: 'GenericDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/host-jobs-datatable/jobsDatatable.js b/app/docker/components/datatables/host-jobs-datatable/jobsDatatable.js
index 8c599cae3..741e25148 100644
--- a/app/docker/components/datatables/host-jobs-datatable/jobsDatatable.js
+++ b/app/docker/components/datatables/host-jobs-datatable/jobsDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('jobsDatatable', {
- templateUrl: 'app/docker/components/datatables/host-jobs-datatable/jobsDatatable.html',
+ templateUrl: './jobsDatatable.html',
controller: 'JobsDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/host-jobs-datatable/jobsDatatableController.js b/app/docker/components/datatables/host-jobs-datatable/jobsDatatableController.js
index 02016fcde..d156c0d88 100644
--- a/app/docker/components/datatables/host-jobs-datatable/jobsDatatableController.js
+++ b/app/docker/components/datatables/host-jobs-datatable/jobsDatatableController.js
@@ -1,3 +1,5 @@
+import _ from 'lodash-es';
+
angular.module('portainer.docker')
.controller('JobsDatatableController', ['$q', '$state', 'PaginationService', 'DatatableService', 'ContainerService', 'ModalService', 'Notifications',
function ($q, $state, PaginationService, DatatableService, ContainerService, ModalService, Notifications) {
@@ -73,7 +75,7 @@ angular.module('portainer.docker')
for (var i = 0; i < datasetFilters.length; i++) {
var filter = datasetFilters[i];
- existingFilter = _.find(storedFilters, ['label', filter.label]);
+ var existingFilter = _.find(storedFilters, ['label', filter.label]);
if (existingFilter && !existingFilter.display) {
filter.display = existingFilter.display;
this.filters.state.enabled = true;
diff --git a/app/docker/components/datatables/images-datatable/imagesDatatable.js b/app/docker/components/datatables/images-datatable/imagesDatatable.js
index 57ed625c7..fdc8ff994 100644
--- a/app/docker/components/datatables/images-datatable/imagesDatatable.js
+++ b/app/docker/components/datatables/images-datatable/imagesDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('imagesDatatable', {
- templateUrl: 'app/docker/components/datatables/images-datatable/imagesDatatable.html',
+ templateUrl: './imagesDatatable.html',
controller: 'ImagesDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.js b/app/docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.js
index d18e47ab7..340808226 100644
--- a/app/docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.js
+++ b/app/docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('macvlanNodesDatatable', {
- templateUrl: 'app/docker/components/datatables/macvlan-nodes-datatable/macvlanNodesDatatable.html',
+ templateUrl: './macvlanNodesDatatable.html',
controller: 'GenericDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/networks-datatable/networksDatatable.js b/app/docker/components/datatables/networks-datatable/networksDatatable.js
index ca9112f98..448a8b5a8 100644
--- a/app/docker/components/datatables/networks-datatable/networksDatatable.js
+++ b/app/docker/components/datatables/networks-datatable/networksDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('networksDatatable', {
- templateUrl: 'app/docker/components/datatables/networks-datatable/networksDatatable.html',
+ templateUrl: './networksDatatable.html',
controller: 'NetworksDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.js b/app/docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.js
index f638f4625..e76a209c0 100644
--- a/app/docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.js
+++ b/app/docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('nodeTasksDatatable', {
- templateUrl: 'app/docker/components/datatables/node-tasks-datatable/nodeTasksDatatable.html',
+ templateUrl: './nodeTasksDatatable.html',
controller: 'GenericDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/nodes-datatable/nodesDatatable.js b/app/docker/components/datatables/nodes-datatable/nodesDatatable.js
index 7a461e5a6..a36fb2e40 100644
--- a/app/docker/components/datatables/nodes-datatable/nodesDatatable.js
+++ b/app/docker/components/datatables/nodes-datatable/nodesDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('nodesDatatable', {
- templateUrl: 'app/docker/components/datatables/nodes-datatable/nodesDatatable.html',
+ templateUrl: './nodesDatatable.html',
controller: 'GenericDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/secrets-datatable/secretsDatatable.js b/app/docker/components/datatables/secrets-datatable/secretsDatatable.js
index 181473aa6..091cafe49 100644
--- a/app/docker/components/datatables/secrets-datatable/secretsDatatable.js
+++ b/app/docker/components/datatables/secrets-datatable/secretsDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('secretsDatatable', {
- templateUrl: 'app/docker/components/datatables/secrets-datatable/secretsDatatable.html',
+ templateUrl: './secretsDatatable.html',
controller: 'GenericDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.html b/app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.html
index 40f255ae0..ebabb9b4c 100644
--- a/app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.html
+++ b/app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.html
@@ -60,8 +60,8 @@
{{ item.Status.State }}
- {{ item.Id }}Roz
- {{ item.Id }}Doz
+ {{ item.Id }}
+ {{ item.Id }}
|
diff --git a/app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.js b/app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.js
index ce15b64db..b93bbb957 100644
--- a/app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.js
+++ b/app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('serviceTasksDatatable', {
- templateUrl: 'app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatable.html',
+ templateUrl: './serviceTasksDatatable.html',
controller: 'ServiceTasksDatatableController',
bindings: {
dataset: '<',
diff --git a/app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatableController.js b/app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatableController.js
index 46c12d67c..7a7ba1763 100644
--- a/app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatableController.js
+++ b/app/docker/components/datatables/service-tasks-datatable/serviceTasksDatatableController.js
@@ -1,3 +1,5 @@
+import _ from 'lodash-es';
+
angular.module('portainer.docker')
.controller('ServiceTasksDatatableController', ['DatatableService',
function (DatatableService) {
diff --git a/app/docker/components/datatables/services-datatable/actions/servicesDatatableActions.js b/app/docker/components/datatables/services-datatable/actions/servicesDatatableActions.js
index 32c16717f..310b63751 100644
--- a/app/docker/components/datatables/services-datatable/actions/servicesDatatableActions.js
+++ b/app/docker/components/datatables/services-datatable/actions/servicesDatatableActions.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('servicesDatatableActions', {
- templateUrl: 'app/docker/components/datatables/services-datatable/actions/servicesDatatableActions.html',
+ templateUrl: './servicesDatatableActions.html',
controller: 'ServicesDatatableActionsController',
bindings: {
selectedItems: '=',
diff --git a/app/docker/components/datatables/services-datatable/servicesDatatable.js b/app/docker/components/datatables/services-datatable/servicesDatatable.js
index ebd81487e..a7491a861 100644
--- a/app/docker/components/datatables/services-datatable/servicesDatatable.js
+++ b/app/docker/components/datatables/services-datatable/servicesDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('servicesDatatable', {
- templateUrl: 'app/docker/components/datatables/services-datatable/servicesDatatable.html',
+ templateUrl: './servicesDatatable.html',
controller: 'ServicesDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/services-datatable/servicesDatatableController.js b/app/docker/components/datatables/services-datatable/servicesDatatableController.js
index b265863b4..adee53500 100644
--- a/app/docker/components/datatables/services-datatable/servicesDatatableController.js
+++ b/app/docker/components/datatables/services-datatable/servicesDatatableController.js
@@ -1,3 +1,5 @@
+import _ from 'lodash-es';
+
angular.module('portainer.docker')
.controller('ServicesDatatableController', ['PaginationService', 'DatatableService', 'EndpointProvider',
function (PaginationService, DatatableService, EndpointProvider) {
diff --git a/app/docker/components/datatables/tasks-datatable/tasksDatatable.js b/app/docker/components/datatables/tasks-datatable/tasksDatatable.js
index f24e14446..d5c1318f3 100644
--- a/app/docker/components/datatables/tasks-datatable/tasksDatatable.js
+++ b/app/docker/components/datatables/tasks-datatable/tasksDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('tasksDatatable', {
- templateUrl: 'app/docker/components/datatables/tasks-datatable/tasksDatatable.html',
+ templateUrl: './tasksDatatable.html',
controller: 'TasksDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/datatables/volumes-datatable/volumesDatatable.html b/app/docker/components/datatables/volumes-datatable/volumesDatatable.html
index ca92dad87..475290f84 100644
--- a/app/docker/components/datatables/volumes-datatable/volumesDatatable.html
+++ b/app/docker/components/datatables/volumes-datatable/volumesDatatable.html
@@ -79,6 +79,13 @@
+ |
+
+ Created
+
+
+
+ |
Host
@@ -112,6 +119,7 @@
| {{ item.StackName ? item.StackName : '-' }} |
{{ item.Driver }} |
{{ item.Mountpoint | truncatelr }} |
+ {{ item.CreatedAt | getisodate }} |
{{ item.NodeName ? item.NodeName : '-' }} |
diff --git a/app/docker/components/datatables/volumes-datatable/volumesDatatable.js b/app/docker/components/datatables/volumes-datatable/volumesDatatable.js
index 4c878677a..2a71ef19b 100644
--- a/app/docker/components/datatables/volumes-datatable/volumesDatatable.js
+++ b/app/docker/components/datatables/volumes-datatable/volumesDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('volumesDatatable', {
- templateUrl: 'app/docker/components/datatables/volumes-datatable/volumesDatatable.html',
+ templateUrl: './volumesDatatable.html',
controller: 'VolumesDatatableController',
bindings: {
titleText: '@',
diff --git a/app/docker/components/dockerSidebarContent/docker-sidebar-content.js b/app/docker/components/dockerSidebarContent/docker-sidebar-content.js
index 2a33aabbc..c57b8fd92 100644
--- a/app/docker/components/dockerSidebarContent/docker-sidebar-content.js
+++ b/app/docker/components/dockerSidebarContent/docker-sidebar-content.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('dockerSidebarContent', {
- templateUrl: 'app/docker/components/dockerSidebarContent/dockerSidebarContent.html',
+ templateUrl: './dockerSidebarContent.html',
bindings: {
endpointApiVersion: '<',
swarmManagement: '<',
diff --git a/app/docker/components/host-overview/host-overview.js b/app/docker/components/host-overview/host-overview.js
index 4eae6a787..e2ff7856b 100644
--- a/app/docker/components/host-overview/host-overview.js
+++ b/app/docker/components/host-overview/host-overview.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('hostOverview', {
- templateUrl: 'app/docker/components/host-overview/host-overview.html',
+ templateUrl: './host-overview.html',
bindings: {
hostDetails: '<',
engineDetails: '<',
diff --git a/app/docker/components/host-view-panels/devices-panel/devices-panel.js b/app/docker/components/host-view-panels/devices-panel/devices-panel.js
index 1bd32e1f6..8049add85 100644
--- a/app/docker/components/host-view-panels/devices-panel/devices-panel.js
+++ b/app/docker/components/host-view-panels/devices-panel/devices-panel.js
@@ -1,6 +1,5 @@
angular.module('portainer.docker').component('devicesPanel', {
- templateUrl:
- 'app/docker/components/host-view-panels/devices-panel/devices-panel.html',
+ templateUrl: './devices-panel.html',
bindings: {
devices: '<'
}
diff --git a/app/docker/components/host-view-panels/disks-panel/disks-panel.js b/app/docker/components/host-view-panels/disks-panel/disks-panel.js
index ae96224ee..3997a89b3 100644
--- a/app/docker/components/host-view-panels/disks-panel/disks-panel.js
+++ b/app/docker/components/host-view-panels/disks-panel/disks-panel.js
@@ -1,6 +1,5 @@
angular.module('portainer.docker').component('disksPanel', {
- templateUrl:
- 'app/docker/components/host-view-panels/disks-panel/disks-panel.html',
+ templateUrl: './disks-panel.html',
bindings: {
disks: '<'
}
diff --git a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.js b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.js
index 666dd5254..12bb2fb1e 100644
--- a/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.js
+++ b/app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.js
@@ -1,6 +1,5 @@
angular.module('portainer.docker').component('engineDetailsPanel', {
- templateUrl:
- 'app/docker/components/host-view-panels/engine-details-panel/engine-details-panel.html',
+ templateUrl: './engine-details-panel.html',
bindings: {
engine: '<'
}
diff --git a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.js b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.js
index 8f1b55270..5d25a626e 100644
--- a/app/docker/components/host-view-panels/host-details-panel/host-details-panel.js
+++ b/app/docker/components/host-view-panels/host-details-panel/host-details-panel.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('hostDetailsPanel', {
- templateUrl: 'app/docker/components/host-view-panels/host-details-panel/host-details-panel.html',
+ templateUrl: './host-details-panel.html',
bindings: {
host: '<',
isJobEnabled: '<',
diff --git a/app/docker/components/host-view-panels/node-availability-select/node-availability-select.js b/app/docker/components/host-view-panels/node-availability-select/node-availability-select.js
index b09730f37..b396d65f7 100644
--- a/app/docker/components/host-view-panels/node-availability-select/node-availability-select.js
+++ b/app/docker/components/host-view-panels/node-availability-select/node-availability-select.js
@@ -1,6 +1,5 @@
angular.module('portainer.docker').component('nodeAvailabilitySelect', {
- templateUrl:
- 'app/docker/components/host-view-panels/node-availability-select/node-availability-select.html',
+ templateUrl: './node-availability-select.html',
controller: 'NodeAvailabilitySelectController',
bindings: {
availability: '<',
diff --git a/app/docker/components/host-view-panels/node-labels-table/node-labels-table.js b/app/docker/components/host-view-panels/node-labels-table/node-labels-table.js
index 5d6d6c320..78041b712 100644
--- a/app/docker/components/host-view-panels/node-labels-table/node-labels-table.js
+++ b/app/docker/components/host-view-panels/node-labels-table/node-labels-table.js
@@ -1,6 +1,5 @@
angular.module('portainer.docker').component('nodeLabelsTable', {
- templateUrl:
- 'app/docker/components/host-view-panels/node-labels-table/node-labels-table.html',
+ templateUrl: './node-labels-table.html',
controller: 'NodeLabelsTableController',
bindings: {
labels: '<',
diff --git a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js
index 7eea3e708..ad5bf7a7a 100644
--- a/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js
+++ b/app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.js
@@ -1,6 +1,5 @@
angular.module('portainer.docker').component('swarmNodeDetailsPanel', {
- templateUrl:
- 'app/docker/components/host-view-panels/swarm-node-details-panel/swarm-node-details-panel.html',
+ templateUrl: './swarm-node-details-panel.html',
controller: 'SwarmNodeDetailsPanelController',
bindings: {
details: '<',
diff --git a/app/docker/components/imageRegistry/por-image-registry.js b/app/docker/components/imageRegistry/por-image-registry.js
index b41813d94..568b12ce5 100644
--- a/app/docker/components/imageRegistry/por-image-registry.js
+++ b/app/docker/components/imageRegistry/por-image-registry.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('porImageRegistry', {
- templateUrl: 'app/docker/components/imageRegistry/porImageRegistry.html',
+ templateUrl: './porImageRegistry.html',
controller: 'porImageRegistryController',
bindings: {
'image': '=',
diff --git a/app/docker/components/imageRegistry/porImageRegistryController.js b/app/docker/components/imageRegistry/porImageRegistryController.js
index fbf0df70b..6c47fb80a 100644
--- a/app/docker/components/imageRegistry/porImageRegistryController.js
+++ b/app/docker/components/imageRegistry/porImageRegistryController.js
@@ -1,3 +1,5 @@
+import _ from 'lodash-es';
+
angular.module('portainer.docker')
.controller('porImageRegistryController', ['$q', 'RegistryService', 'DockerHubService', 'ImageService', 'Notifications',
function ($q, RegistryService, DockerHubService, ImageService, Notifications) {
diff --git a/app/docker/components/log-viewer/log-viewer.js b/app/docker/components/log-viewer/log-viewer.js
index b0864aea4..0be45bc3c 100644
--- a/app/docker/components/log-viewer/log-viewer.js
+++ b/app/docker/components/log-viewer/log-viewer.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('logViewer', {
- templateUrl: 'app/docker/components/log-viewer/logViewer.html',
+ templateUrl: './logViewer.html',
controller: 'LogViewerController',
bindings: {
data: '=',
diff --git a/app/docker/components/log-viewer/logViewerController.js b/app/docker/components/log-viewer/logViewerController.js
index b4c198b8c..9fdc62663 100644
--- a/app/docker/components/log-viewer/logViewerController.js
+++ b/app/docker/components/log-viewer/logViewerController.js
@@ -1,3 +1,5 @@
+import moment from 'moment';
+
angular.module('portainer.docker')
.controller('LogViewerController', ['clipboard',
function (clipboard) {
diff --git a/app/docker/components/network-macvlan-form/network-macvlan-form.js b/app/docker/components/network-macvlan-form/network-macvlan-form.js
index f9981f1cd..d9f07d4c8 100644
--- a/app/docker/components/network-macvlan-form/network-macvlan-form.js
+++ b/app/docker/components/network-macvlan-form/network-macvlan-form.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('networkMacvlanForm', {
- templateUrl: 'app/docker/components/network-macvlan-form/networkMacvlanForm.html',
+ templateUrl: './networkMacvlanForm.html',
controller: 'NetworkMacvlanFormController',
bindings: {
data: '=',
diff --git a/app/docker/components/network-macvlan-form/networkMacvlanFormModel.js b/app/docker/components/network-macvlan-form/networkMacvlanFormModel.js
index 10ed60510..ebc88e524 100644
--- a/app/docker/components/network-macvlan-form/networkMacvlanFormModel.js
+++ b/app/docker/components/network-macvlan-form/networkMacvlanFormModel.js
@@ -1,4 +1,4 @@
-function MacvlanFormData() {
+export function MacvlanFormData() {
this.Scope = 'local';
this.SelectedNetworkConfig = '';
this.DatatableState = {
diff --git a/app/docker/components/volumesNFSForm/volumes-nfs-form.js b/app/docker/components/volumesNFSForm/volumes-nfs-form.js
index 423c3bed0..d4f3f971a 100644
--- a/app/docker/components/volumesNFSForm/volumes-nfs-form.js
+++ b/app/docker/components/volumesNFSForm/volumes-nfs-form.js
@@ -1,5 +1,5 @@
angular.module('portainer.docker').component('volumesNfsForm', {
- templateUrl: 'app/docker/components/volumesNFSForm/volumesnfsForm.html',
+ templateUrl: './volumesnfsForm.html',
bindings: {
data: '='
}
diff --git a/app/docker/components/volumesNFSForm/volumesNFSFormModel.js b/app/docker/components/volumesNFSForm/volumesNFSFormModel.js
index a1204dccb..30be7b9c2 100644
--- a/app/docker/components/volumesNFSForm/volumesNFSFormModel.js
+++ b/app/docker/components/volumesNFSForm/volumesNFSFormModel.js
@@ -1,4 +1,4 @@
-function VolumesNFSFormData() {
+export function VolumesNFSFormData() {
this.useNFS = false;
this.serverAddress = '';
this.mountPoint = '';
diff --git a/app/docker/filters/filters.js b/app/docker/filters/filters.js
index a07f1be0d..315f62014 100644
--- a/app/docker/filters/filters.js
+++ b/app/docker/filters/filters.js
@@ -1,3 +1,5 @@
+import _ from 'lodash-es';
+
function includeString(text, values) {
return values.some(function(val){
return text.indexOf(val) !== -1;
@@ -258,7 +260,7 @@ angular.module('portainer.docker')
.filter('imagelayercommand', function () {
'use strict';
return function (createdBy) {
- return createdBy.replace('/bin/sh -c #(nop) ', '').replace('/bin/sh -c ', 'RUN ');
+ return createdBy.replace('/bin/sh -c #(nop) ', '').replace('/bin/sh -c ', 'RUN ');
};
})
.filter('trimshasum', function () {
diff --git a/app/docker/helpers/constraintsHelper.js b/app/docker/helpers/constraintsHelper.js
index b2700deba..f006dcf09 100644
--- a/app/docker/helpers/constraintsHelper.js
+++ b/app/docker/helpers/constraintsHelper.js
@@ -1,3 +1,5 @@
+import _ from 'lodash-es';
+
function ConstraintModel(op, key, value) {
this.op = op;
this.value = value;
diff --git a/app/docker/helpers/containerHelper.js b/app/docker/helpers/containerHelper.js
index 345f2d1e9..759162b72 100644
--- a/app/docker/helpers/containerHelper.js
+++ b/app/docker/helpers/containerHelper.js
@@ -1,4 +1,7 @@
-angular.module('portainer.docker').factory('ContainerHelper', [function ContainerHelperFactory() {
+import splitargs from 'splitargs/src/splitargs'
+
+angular.module('portainer.docker')
+.factory('ContainerHelper', [function ContainerHelperFactory() {
'use strict';
var helper = {};
diff --git a/app/docker/helpers/imageHelper.js b/app/docker/helpers/imageHelper.js
index df3b76fd9..b46951c83 100644
--- a/app/docker/helpers/imageHelper.js
+++ b/app/docker/helpers/imageHelper.js
@@ -1,3 +1,5 @@
+import _ from 'lodash-es';
+
angular.module('portainer.docker')
.factory('ImageHelper', [function ImageHelperFactory() {
'use strict';
diff --git a/app/docker/helpers/infoHelper.js b/app/docker/helpers/infoHelper.js
index 4582cc821..c16221375 100644
--- a/app/docker/helpers/infoHelper.js
+++ b/app/docker/helpers/infoHelper.js
@@ -1,3 +1,5 @@
+import _ from 'lodash-es';
+
angular.module('portainer.docker')
.factory('InfoHelper', [function InfoHelperFactory() {
'use strict';
diff --git a/app/docker/helpers/serviceHelper.js b/app/docker/helpers/serviceHelper.js
index 3411a6848..f9d2fb689 100644
--- a/app/docker/helpers/serviceHelper.js
+++ b/app/docker/helpers/serviceHelper.js
@@ -1,3 +1,5 @@
+import moment from 'moment';
+
angular.module('portainer.docker')
.factory('ServiceHelper', [function ServiceHelperFactory() {
'use strict';
diff --git a/app/docker/models/config.js b/app/docker/models/config.js
index 214909b5a..8f1d83873 100644
--- a/app/docker/models/config.js
+++ b/app/docker/models/config.js
@@ -1,4 +1,6 @@
-function ConfigViewModel(data) {
+import { ResourceControlViewModel } from '../../portainer/models/resourceControl';
+
+export function ConfigViewModel(data) {
this.Id = data.ID;
this.CreatedAt = data.CreatedAt;
this.UpdatedAt = data.UpdatedAt;
diff --git a/app/docker/models/container.js b/app/docker/models/container.js
index 6666f1e03..c23b7b891 100644
--- a/app/docker/models/container.js
+++ b/app/docker/models/container.js
@@ -1,4 +1,7 @@
-function createStatus(statusText) {
+import _ from 'lodash-es';
+import { ResourceControlViewModel } from '../../portainer/models/resourceControl';
+
+export function createStatus(statusText) {
var status = _.toLower(statusText);
if (status.indexOf('paused') > -1) {
@@ -19,7 +22,7 @@ function createStatus(statusText) {
return 'running';
}
-function ContainerViewModel(data) {
+export function ContainerViewModel(data) {
this.Id = data.Id;
this.Status = createStatus(data.Status);
this.State = data.State;
@@ -62,7 +65,7 @@ function ContainerViewModel(data) {
}
}
-function ContainerStatsViewModel(data) {
+export function ContainerStatsViewModel(data) {
this.read = data.read;
this.preread = data.preread;
if(data.memory_stats.privateworkingset !== undefined) { // Windows
@@ -88,7 +91,7 @@ function ContainerStatsViewModel(data) {
this.Networks = _.values(data.networks);
}
-function ContainerDetailsViewModel(data) {
+export function ContainerDetailsViewModel(data) {
this.Model = data;
this.Id = data.Id;
this.State = data.State;
diff --git a/app/docker/models/containerCapabilities.js b/app/docker/models/containerCapabilities.js
index 0ff22239e..61706cc51 100644
--- a/app/docker/models/containerCapabilities.js
+++ b/app/docker/models/containerCapabilities.js
@@ -38,7 +38,7 @@ var capDesc = {
'BLOCK_SUSPEND': 'Employ features that can block system suspend.'
};
-function ContainerCapabilities() {
+export function ContainerCapabilities() {
// all capabilities can be found at https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities
return [
new ContainerCapability('SETPCAP', true),
@@ -83,7 +83,7 @@ function ContainerCapabilities() {
});
}
-function ContainerCapability(cap, allowed) {
+export function ContainerCapability(cap, allowed) {
this.capability = cap;
this.allowed = allowed;
this.description = capDesc[cap];
diff --git a/app/docker/models/event.js b/app/docker/models/event.js
index dc49c63b5..46f9f8c10 100644
--- a/app/docker/models/event.js
+++ b/app/docker/models/event.js
@@ -149,7 +149,7 @@ function createEventDetails(event) {
return details;
}
-function EventViewModel(data) {
+export function EventViewModel(data) {
// Type, Action, Actor unavailable in Docker < 1.10
this.Time = data.time;
if (data.Type) {
diff --git a/app/docker/models/image.js b/app/docker/models/image.js
index c964a331b..414e0b77d 100644
--- a/app/docker/models/image.js
+++ b/app/docker/models/image.js
@@ -1,4 +1,4 @@
-function ImageViewModel(data) {
+export function ImageViewModel(data) {
this.Id = data.Id;
this.Tag = data.Tag;
this.Repository = data.Repository;
@@ -23,7 +23,7 @@ function ImageViewModel(data) {
}
}
-function ImageBuildModel(data) {
+export function ImageBuildModel(data) {
this.hasError = false;
var buildLogs = [];
diff --git a/app/docker/models/imageDetails.js b/app/docker/models/imageDetails.js
index 7864f10f6..8e8285ca7 100644
--- a/app/docker/models/imageDetails.js
+++ b/app/docker/models/imageDetails.js
@@ -1,4 +1,4 @@
-function ImageDetailsViewModel(data) {
+export function ImageDetailsViewModel(data) {
this.Id = data.Id;
this.Tag = data.Tag;
this.Parent = data.Parent;
diff --git a/app/docker/models/imageLayer.js b/app/docker/models/imageLayer.js
index 15d79b785..4c4f79e99 100644
--- a/app/docker/models/imageLayer.js
+++ b/app/docker/models/imageLayer.js
@@ -1,4 +1,4 @@
-function ImageLayerViewModel(order, data) {
+export function ImageLayerViewModel(order, data) {
this.Order = order;
this.Id = data.Id;
this.Created = data.Created;
diff --git a/app/docker/models/network.js b/app/docker/models/network.js
index da60a10af..35e419850 100644
--- a/app/docker/models/network.js
+++ b/app/docker/models/network.js
@@ -1,4 +1,6 @@
-function NetworkViewModel(data) {
+import { ResourceControlViewModel } from "../../portainer/models/resourceControl";
+
+export function NetworkViewModel(data) {
this.Id = data.Id;
this.Name = data.Name;
this.Scope = data.Scope;
diff --git a/app/docker/models/node.js b/app/docker/models/node.js
index 9ec201403..4057141f4 100644
--- a/app/docker/models/node.js
+++ b/app/docker/models/node.js
@@ -1,4 +1,4 @@
-function NodeViewModel(data) {
+export function NodeViewModel(data) {
this.Model = data;
this.Id = data.ID;
this.Version = data.Version.Index;
diff --git a/app/docker/models/plugin.js b/app/docker/models/plugin.js
index fde1ab840..3d3ad18d6 100644
--- a/app/docker/models/plugin.js
+++ b/app/docker/models/plugin.js
@@ -1,7 +1,7 @@
// This model is based on https://github.com/moby/moby/blob/0ac25dfc751fa4304ab45afd5cd8705c2235d101/api/types/plugin.go#L8-L31
// instead of the official documentation.
// See: https://github.com/moby/moby/issues/34241
-function PluginViewModel(data) {
+export function PluginViewModel(data) {
this.Id = data.Id;
this.Name = data.Name;
this.Enabled = data.Enabled;
diff --git a/app/docker/models/secret.js b/app/docker/models/secret.js
index d6c54c22e..ccf098420 100644
--- a/app/docker/models/secret.js
+++ b/app/docker/models/secret.js
@@ -1,4 +1,6 @@
-function SecretViewModel(data) {
+import { ResourceControlViewModel } from '../../portainer/models/resourceControl'
+
+export function SecretViewModel(data) {
this.Id = data.ID;
this.CreatedAt = data.CreatedAt;
this.UpdatedAt = data.UpdatedAt;
diff --git a/app/docker/models/service.js b/app/docker/models/service.js
index a49392f2c..7bfd68d6c 100644
--- a/app/docker/models/service.js
+++ b/app/docker/models/service.js
@@ -1,4 +1,6 @@
-function ServiceViewModel(data, runningTasks, allTasks) {
+import { ResourceControlViewModel } from '../../portainer/models/resourceControl';
+
+export function ServiceViewModel(data, runningTasks, allTasks) {
this.Model = data;
this.Id = data.ID;
this.Tasks = [];
diff --git a/app/docker/models/swarm.js b/app/docker/models/swarm.js
index 9ed805335..a7e66cbd3 100644
--- a/app/docker/models/swarm.js
+++ b/app/docker/models/swarm.js
@@ -1,3 +1,3 @@
-function SwarmViewModel(data) {
+export function SwarmViewModel(data) {
this.Id = data.ID;
}
diff --git a/app/docker/models/task.js b/app/docker/models/task.js
index 5714c1509..6e16b3a56 100644
--- a/app/docker/models/task.js
+++ b/app/docker/models/task.js
@@ -1,4 +1,4 @@
-function TaskViewModel(data) {
+export function TaskViewModel(data) {
this.Id = data.ID;
this.Created = data.CreatedAt;
this.Updated = data.UpdatedAt;
diff --git a/app/docker/models/volume.js b/app/docker/models/volume.js
index 5ac1d366d..ae2ac1904 100644
--- a/app/docker/models/volume.js
+++ b/app/docker/models/volume.js
@@ -1,5 +1,8 @@
-function VolumeViewModel(data) {
+import { ResourceControlViewModel } from "../../portainer/models/resourceControl";
+
+export function VolumeViewModel(data) {
this.Id = data.Name;
+ this.CreatedAt = data.CreatedAt;
this.Driver = data.Driver;
this.Options = data.Options;
this.Labels = data.Labels;
diff --git a/app/docker/rest/build.js b/app/docker/rest/build.js
index 565c35f4f..e48d12d51 100644
--- a/app/docker/rest/build.js
+++ b/app/docker/rest/build.js
@@ -1,3 +1,5 @@
+import { jsonObjectsToArrayHandler } from './response/handlers';
+
angular.module('portainer.docker')
.factory('Build', ['$resource', 'API_ENDPOINT_ENDPOINTS', 'EndpointProvider', function BuildFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {
'use strict';
diff --git a/app/docker/rest/container.js b/app/docker/rest/container.js
index 131806d2c..7841ba2b2 100644
--- a/app/docker/rest/container.js
+++ b/app/docker/rest/container.js
@@ -1,3 +1,5 @@
+import { logsHandler, genericHandler } from "./response/handlers";
+
angular.module('portainer.docker')
.factory('Container', ['$resource', 'API_ENDPOINT_ENDPOINTS', 'EndpointProvider', 'ContainersInterceptor',
function ContainerFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, ContainersInterceptor) {
diff --git a/app/docker/rest/exec.js b/app/docker/rest/exec.js
index c77af4679..6ad7b4f35 100644
--- a/app/docker/rest/exec.js
+++ b/app/docker/rest/exec.js
@@ -1,3 +1,5 @@
+import { genericHandler } from './response/handlers';
+
angular.module('portainer.docker')
.factory('Exec', ['$resource', 'API_ENDPOINT_ENDPOINTS', 'EndpointProvider',
function ExecFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {
diff --git a/app/docker/rest/image.js b/app/docker/rest/image.js
index b71adab6c..fff8921d7 100644
--- a/app/docker/rest/image.js
+++ b/app/docker/rest/image.js
@@ -1,3 +1,6 @@
+import { jsonObjectsToArrayHandler, deleteImageHandler } from './response/handlers';
+import { imageGetResponse } from './response/image';
+
angular.module('portainer.docker')
.factory('Image', ['$resource', 'API_ENDPOINT_ENDPOINTS', 'EndpointProvider', 'HttpRequestHelper', 'ImagesInterceptor',
function ImageFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, HttpRequestHelper, ImagesInterceptor) {
diff --git a/app/docker/rest/network.js b/app/docker/rest/network.js
index e19222d7b..192a442fe 100644
--- a/app/docker/rest/network.js
+++ b/app/docker/rest/network.js
@@ -1,3 +1,5 @@
+import { genericHandler } from './response/handlers';
+
angular.module('portainer.docker')
.factory('Network', ['$resource', 'API_ENDPOINT_ENDPOINTS', 'EndpointProvider', 'NetworksInterceptor',
function NetworkFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, NetworksInterceptor) {
diff --git a/app/docker/rest/response/handlers.js b/app/docker/rest/response/handlers.js
index 7937c1f4e..1a3854c34 100644
--- a/app/docker/rest/response/handlers.js
+++ b/app/docker/rest/response/handlers.js
@@ -9,14 +9,16 @@ function isJSON(jsonString) {
return o;
}
}
- catch (e) { }
+ catch (e) {
+ //empty
+ }
return false;
}
// The Docker API often returns a list of JSON object.
// This handler wrap the JSON objects in an array.
// Used by the API in: Image push, Image create, Events query.
-function jsonObjectsToArrayHandler(data) {
+export function jsonObjectsToArrayHandler(data) {
var str = '[' + data.replace(/\n/g, ' ').replace(/\}\s*\{/g, '}, {') + ']';
return angular.fromJson(str);
}
@@ -27,7 +29,7 @@ function jsonObjectsToArrayHandler(data) {
// This handler ensure a valid JSON object is returned in any case.
// Used by the API in: container deletion, network deletion, network creation, volume creation,
// container exec, exec resize.
-function genericHandler(data) {
+export function genericHandler(data) {
var response = {};
// No data is returned when deletion is successful (Docker 1.9 -> 1.12)
if (!data) {
@@ -46,7 +48,7 @@ function genericHandler(data) {
// The Docker API returns the logs as a single string.
// This handler wraps the data in a JSON object under the "logs" property.
-function logsHandler(data) {
+export function logsHandler(data) {
return {
logs: data
};
@@ -57,7 +59,7 @@ function logsHandler(data) {
// container the error (Docker = 1.12).
// This handler returns the original array on success or a newly created array containing
// only one JSON object with the field message filled with the error message on failure.
-function deleteImageHandler(data) {
+export function deleteImageHandler(data) {
// A string is returned on failure (Docker < 1.12)
var response = [];
if (!isJSON(data)) {
diff --git a/app/docker/rest/response/image.js b/app/docker/rest/response/image.js
index 4db1ef506..c2e63cd82 100644
--- a/app/docker/rest/response/image.js
+++ b/app/docker/rest/response/image.js
@@ -2,7 +2,7 @@
// ngResource will transform it as an array of chars.
// This functions simply creates a response object and assign
// the data to a field.
-function imageGetResponse(data) {
+export function imageGetResponse(data) {
var response = {};
response.file = data;
return response;
diff --git a/app/docker/rest/service.js b/app/docker/rest/service.js
index e87dcd927..dca148145 100644
--- a/app/docker/rest/service.js
+++ b/app/docker/rest/service.js
@@ -1,3 +1,5 @@
+import { logsHandler } from './response/handlers';
+
angular.module('portainer.docker')
.factory('Service', ['$resource', 'API_ENDPOINT_ENDPOINTS', 'EndpointProvider', 'HttpRequestHelper',
function ServiceFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, HttpRequestHelper) {
diff --git a/app/docker/rest/system.js b/app/docker/rest/system.js
index d22ae14c1..4286bd74f 100644
--- a/app/docker/rest/system.js
+++ b/app/docker/rest/system.js
@@ -1,3 +1,5 @@
+import { jsonObjectsToArrayHandler } from './response/handlers';
+
angular.module('portainer.docker')
.factory('System', ['$resource', 'API_ENDPOINT_ENDPOINTS', 'EndpointProvider', 'InfoInterceptor', 'VersionInterceptor',
function SystemFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, InfoInterceptor, VersionInterceptor) {
diff --git a/app/docker/rest/task.js b/app/docker/rest/task.js
index ed21d5ee5..b4860784f 100644
--- a/app/docker/rest/task.js
+++ b/app/docker/rest/task.js
@@ -1,3 +1,5 @@
+import { logsHandler } from './response/handlers';
+
angular.module('portainer.docker')
.factory('Task', ['$resource', 'API_ENDPOINT_ENDPOINTS', 'EndpointProvider', function TaskFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider) {
'use strict';
diff --git a/app/docker/rest/volume.js b/app/docker/rest/volume.js
index 8e7d6daae..6ad6e6bdd 100644
--- a/app/docker/rest/volume.js
+++ b/app/docker/rest/volume.js
@@ -1,3 +1,5 @@
+import { genericHandler } from './response/handlers';
+
angular.module('portainer.docker')
.factory('Volume', ['$resource', 'API_ENDPOINT_ENDPOINTS', 'EndpointProvider', 'VolumesInterceptor',
function VolumeFactory($resource, API_ENDPOINT_ENDPOINTS, EndpointProvider, VolumesInterceptor) {
diff --git a/app/docker/services/buildService.js b/app/docker/services/buildService.js
index 60e7383cd..53f50688e 100644
--- a/app/docker/services/buildService.js
+++ b/app/docker/services/buildService.js
@@ -1,3 +1,5 @@
+import { ImageBuildModel } from "../models/image";
+
angular.module('portainer.docker')
.factory('BuildService', ['$q', 'Build', 'FileUploadService', function BuildServiceFactory($q, Build, FileUploadService) {
'use strict';
diff --git a/app/docker/services/configService.js b/app/docker/services/configService.js
index 9063004a9..520e190a6 100644
--- a/app/docker/services/configService.js
+++ b/app/docker/services/configService.js
@@ -1,3 +1,5 @@
+import { ConfigViewModel } from '../models/config';
+
angular.module('portainer.docker')
.factory('ConfigService', ['$q', 'Config', function ConfigServiceFactory($q, Config) {
'use strict';
diff --git a/app/docker/services/containerService.js b/app/docker/services/containerService.js
index 698ccd0dd..439f7cd26 100644
--- a/app/docker/services/containerService.js
+++ b/app/docker/services/containerService.js
@@ -1,3 +1,5 @@
+import { ContainerDetailsViewModel, ContainerViewModel, ContainerStatsViewModel } from '../models/container';
+
angular.module('portainer.docker')
.factory('ContainerService', ['$q', 'Container', 'ResourceControlService', 'LogHelper',
function ContainerServiceFactory($q, Container, ResourceControlService, LogHelper) {
diff --git a/app/docker/services/imageService.js b/app/docker/services/imageService.js
index dd93badad..21bf6dd41 100644
--- a/app/docker/services/imageService.js
+++ b/app/docker/services/imageService.js
@@ -1,3 +1,8 @@
+import _ from 'lodash-es';
+import { ImageViewModel } from '../models/image';
+import { ImageDetailsViewModel } from "../models/imageDetails";
+import { ImageLayerViewModel } from "../models/imageLayer";
+
angular.module('portainer.docker')
.factory('ImageService', ['$q', 'Image', 'ImageHelper', 'RegistryService', 'HttpRequestHelper', 'ContainerService', 'FileUploadService',
function ImageServiceFactory($q, Image, ImageHelper, RegistryService, HttpRequestHelper, ContainerService, FileUploadService) {
diff --git a/app/docker/services/networkService.js b/app/docker/services/networkService.js
index a481ec4f9..4031a2d0c 100644
--- a/app/docker/services/networkService.js
+++ b/app/docker/services/networkService.js
@@ -1,3 +1,5 @@
+import { NetworkViewModel } from '../models/network';
+
angular.module('portainer.docker')
.factory('NetworkService', ['$q', 'Network', function NetworkServiceFactory($q, Network) {
'use strict';
diff --git a/app/docker/services/nodeService.js b/app/docker/services/nodeService.js
index 5ebfeeee4..7dae3f46f 100644
--- a/app/docker/services/nodeService.js
+++ b/app/docker/services/nodeService.js
@@ -1,3 +1,5 @@
+import { NodeViewModel } from '../models/node';
+
angular.module('portainer.docker').factory('NodeService', [
'$q', 'Node',
function NodeServiceFactory($q, Node) {
diff --git a/app/docker/services/pluginService.js b/app/docker/services/pluginService.js
index ad73dee1c..49c6d2afb 100644
--- a/app/docker/services/pluginService.js
+++ b/app/docker/services/pluginService.js
@@ -1,3 +1,6 @@
+import _ from 'lodash-es';
+import { PluginViewModel } from "../models/plugin";
+
angular.module('portainer.docker')
.factory('PluginService', ['$q', 'Plugin', 'SystemService', function PluginServiceFactory($q, Plugin, SystemService) {
'use strict';
diff --git a/app/docker/services/secretService.js b/app/docker/services/secretService.js
index 460f6ef5c..f12494929 100644
--- a/app/docker/services/secretService.js
+++ b/app/docker/services/secretService.js
@@ -1,3 +1,5 @@
+import { SecretViewModel } from '../models/secret';
+
angular.module('portainer.docker')
.factory('SecretService', ['$q', 'Secret', function SecretServiceFactory($q, Secret) {
'use strict';
diff --git a/app/docker/services/serviceService.js b/app/docker/services/serviceService.js
index 444d09287..0696f09ff 100644
--- a/app/docker/services/serviceService.js
+++ b/app/docker/services/serviceService.js
@@ -1,3 +1,6 @@
+import { ServiceViewModel } from '../models/service';
+
+
angular.module('portainer.docker')
.factory('ServiceService', ['$q', 'Service', 'ServiceHelper', 'TaskService', 'ResourceControlService', 'LogHelper',
function ServiceServiceFactory($q, Service, ServiceHelper, TaskService, ResourceControlService, LogHelper) {
diff --git a/app/docker/services/swarmService.js b/app/docker/services/swarmService.js
index 5f1955a22..308163ef5 100644
--- a/app/docker/services/swarmService.js
+++ b/app/docker/services/swarmService.js
@@ -1,3 +1,5 @@
+import { SwarmViewModel } from '../models/swarm';
+
angular.module('portainer.docker')
.factory('SwarmService', ['$q', 'Swarm', function SwarmServiceFactory($q, Swarm) {
'use strict';
diff --git a/app/docker/services/systemService.js b/app/docker/services/systemService.js
index f89cf1961..5fa9e8327 100644
--- a/app/docker/services/systemService.js
+++ b/app/docker/services/systemService.js
@@ -1,3 +1,5 @@
+import { EventViewModel } from '../models/event';
+
angular.module('portainer.docker')
.factory('SystemService', ['$q', 'System', 'SystemEndpoint', function SystemServiceFactory($q, System, SystemEndpoint) {
'use strict';
diff --git a/app/docker/services/taskService.js b/app/docker/services/taskService.js
index b18b5814c..472ca051c 100644
--- a/app/docker/services/taskService.js
+++ b/app/docker/services/taskService.js
@@ -1,3 +1,5 @@
+import { TaskViewModel } from '../models/task';
+
angular.module('portainer.docker')
.factory('TaskService', ['$q', 'Task', 'LogHelper',
function TaskServiceFactory($q, Task, LogHelper) {
diff --git a/app/docker/services/volumeService.js b/app/docker/services/volumeService.js
index 449ec661c..5f3aaf31a 100644
--- a/app/docker/services/volumeService.js
+++ b/app/docker/services/volumeService.js
@@ -1,3 +1,5 @@
+import { VolumeViewModel } from '../models/volume';
+
angular.module('portainer.docker')
.factory('VolumeService', ['$q', 'Volume', 'VolumeHelper', 'ResourceControlService', function VolumeServiceFactory($q, Volume, VolumeHelper, ResourceControlService) {
'use strict';
diff --git a/app/docker/views/configs/configs.html b/app/docker/views/configs/configs.html
index 445153dc0..907d6d2db 100644
--- a/app/docker/views/configs/configs.html
+++ b/app/docker/views/configs/configs.html
@@ -11,10 +11,10 @@
diff --git a/app/docker/views/configs/configsController.js b/app/docker/views/configs/configsController.js
index 9d073542b..08c16d2bd 100644
--- a/app/docker/views/configs/configsController.js
+++ b/app/docker/views/configs/configsController.js
@@ -1,38 +1,43 @@
-angular.module('portainer.docker')
-.controller('ConfigsController', ['$scope', '$state', 'ConfigService', 'Notifications',
-function ($scope, $state, ConfigService, Notifications) {
+import angular from 'angular';
- $scope.removeAction = function (selectedItems) {
- var actionCount = selectedItems.length;
- angular.forEach(selectedItems, function (config) {
- ConfigService.remove(config.Id)
- .then(function success() {
- Notifications.success('Config successfully removed', config.Name);
- var index = $scope.configs.indexOf(config);
- $scope.configs.splice(index, 1);
- })
- .catch(function error(err) {
- Notifications.error('Failure', err, 'Unable to remove config');
- })
- .finally(function final() {
- --actionCount;
- if (actionCount === 0) {
- $state.reload();
- }
- });
- });
- };
+class ConfigsController {
- function initView() {
- ConfigService.configs()
- .then(function success(data) {
- $scope.configs = data;
- })
- .catch(function error(err) {
- $scope.configs = [];
- Notifications.error('Failure', err, 'Unable to retrieve configs');
- });
+ /* @ngInject */
+ constructor($state, ConfigService, Notifications) {
+ this.$state = $state;
+ this.ConfigService = ConfigService;
+ this.Notifications = Notifications;
+
+ this.removeAction = this.removeAction.bind(this);
}
- initView();
-}]);
+ async $onInit() {
+ this.configs = [];
+ try {
+ this.configs = await this.ConfigService.configs();
+ } catch (err) {
+ this.Notifications.error('Failure', err, 'Unable to retrieve configs');
+ }
+ }
+
+ async removeAction(selectedItems) {
+ let actionCount = selectedItems.length;
+ for (const config of selectedItems) {
+ try {
+ await this.ConfigService.remove(config.Id);
+ this.Notifications.success('Config successfully removed', config.Name);
+ const index = this.configs.indexOf(config);
+ this.configs.splice(index, 1);
+ } catch (err) {
+ this.Notifications.error('Failure', err, 'Unable to remove config');
+ } finally {
+ --actionCount;
+ if (actionCount === 0) {
+ this.$state.reload();
+ }
+ }
+ }
+ }
+}
+export default ConfigsController;
+angular.module('portainer.docker').controller('ConfigsController', ConfigsController);
diff --git a/app/docker/views/configs/create/createConfigController.js b/app/docker/views/configs/create/createConfigController.js
index c2f70685c..1ac6b3b39 100644
--- a/app/docker/views/configs/create/createConfigController.js
+++ b/app/docker/views/configs/create/createConfigController.js
@@ -1,118 +1,142 @@
-angular.module('portainer.docker')
-.controller('CreateConfigController', ['$scope', '$state', '$transition$', 'Notifications', 'ConfigService', 'Authentication', 'FormValidator', 'ResourceControlService',
-function ($scope, $state, $transition$, Notifications, ConfigService, Authentication, FormValidator, ResourceControlService) {
- $scope.formValues = {
- Name: '',
- Labels: [],
- AccessControlData: new AccessControlFormData(),
- ConfigContent: ''
- };
+import _ from "lodash-es";
+import { AccessControlFormData } from "Portainer/components/accessControlForm/porAccessControlFormModel";
- $scope.state = {
- formValidationError: ''
- };
+import angular from "angular";
- $scope.addLabel = function() {
- $scope.formValues.Labels.push({ name: '', value: ''});
- };
+class CreateConfigController {
+ /* @ngInject */
+ constructor($state, $transition$, Notifications, ConfigService, Authentication, FormValidator, ResourceControlService) {
+ this.$state = $state;
+ this.$transition$ = $transition$;
+ this.Notifications = Notifications;
+ this.ConfigService = ConfigService;
+ this.Authentication = Authentication;
+ this.FormValidator = FormValidator;
+ this.ResourceControlService = ResourceControlService;
- $scope.removeLabel = function(index) {
- $scope.formValues.Labels.splice(index, 1);
- };
+ this.formValues = {
+ Name: "",
+ Labels: [],
+ AccessControlData: new AccessControlFormData(),
+ ConfigContent: ""
+ };
- function prepareLabelsConfig(config) {
- var labels = {};
- $scope.formValues.Labels.forEach(function (label) {
+ this.state = {
+ formValidationError: ""
+ };
+
+ this.editorUpdate = this.editorUpdate.bind(this);
+ }
+
+ addLabel() {
+ this.formValues.Labels.push({ name: "", value: "" });
+ }
+
+ removeLabel(index) {
+ this.formValues.Labels.splice(index, 1);
+ }
+
+ prepareLabelsConfig(config) {
+ let labels = {};
+ this.formValues.Labels.forEach(function(label) {
if (label.name && label.value) {
- labels[label.name] = label.value;
+ labels[label.name] = label.value;
}
});
config.Labels = labels;
}
- function prepareConfigData(config) {
- var configData = $scope.formValues.ConfigContent;
+ prepareConfigData(config) {
+ let configData = this.formValues.ConfigContent;
config.Data = btoa(unescape(encodeURIComponent(configData)));
}
- function prepareConfiguration() {
- var config = {};
- config.Name = $scope.formValues.Name;
- prepareConfigData(config);
- prepareLabelsConfig(config);
+ prepareConfiguration() {
+ let config = {};
+ config.Name = this.formValues.Name;
+ this.prepareConfigData(config);
+ this.prepareLabelsConfig(config);
return config;
}
- function validateForm(accessControlData, isAdmin) {
- $scope.state.formValidationError = '';
- var error = '';
- error = FormValidator.validateAccessControl(accessControlData, isAdmin);
+ validateForm(accessControlData, isAdmin) {
+ this.state.formValidationError = "";
+ let error = "";
+ error = this.FormValidator.validateAccessControl(
+ accessControlData,
+ isAdmin
+ );
if (error) {
- $scope.state.formValidationError = error;
+ this.state.formValidationError = error;
return false;
}
return true;
}
- $scope.create = function () {
- var accessControlData = $scope.formValues.AccessControlData;
- var userDetails = Authentication.getUserDetails();
- var isAdmin = userDetails.role === 1;
+ async create() {
+ let accessControlData = this.formValues.AccessControlData;
+ let userDetails = this.Authentication.getUserDetails();
+ let isAdmin = userDetails.role === 1;
- if ($scope.formValues.ConfigContent === '') {
- $scope.state.formValidationError = 'Config content must not be empty';
+ if (this.formValues.ConfigContent === "") {
+ this.state.formValidationError = "Config content must not be empty";
return;
}
- if (!validateForm(accessControlData, isAdmin)) {
+ if (!this.validateForm(accessControlData, isAdmin)) {
return;
}
- var config = prepareConfiguration();
+ let config = this.prepareConfiguration();
- ConfigService.create(config)
- .then(function success(data) {
- var configIdentifier = data.ID;
- var userId = userDetails.ID;
- return ResourceControlService.applyResourceControl('config', configIdentifier, userId, accessControlData, []);
- })
- .then(function success() {
- Notifications.success('Config successfully created');
- $state.go('docker.configs', {}, {reload: true});
- })
- .catch(function error(err) {
- Notifications.error('Failure', err, 'Unable to create config');
- });
- };
-
- $scope.editorUpdate = function(cm) {
- $scope.formValues.ConfigContent = cm.getValue();
- };
-
- function initView() {
- if (!$transition$.params().id) {
- $scope.formValues.displayCodeEditor = true;
- return;
+ try {
+ let data = await this.ConfigService.create(config);
+ let configIdentifier = data.ID;
+ let userId = userDetails.ID;
+ await this.ResourceControlService.applyResourceControl(
+ "config",
+ configIdentifier,
+ userId,
+ accessControlData,
+ []
+ );
+ this.Notifications.success("Config successfully created");
+ this.$state.go("docker.configs", {}, { reload: true });
+ } catch (err) {
+ this.Notifications.error("Failure", err, "Unable to create config");
}
-
- ConfigService.config($transition$.params().id)
- .then(function success(data) {
- $scope.formValues.Name = data.Name + '_copy';
- $scope.formValues.Data = data.Data;
- var labels = _.keys(data.Labels);
- for (var i = 0; i < labels.length; i++) {
- var labelName = labels[i];
- var labelValue = data.Labels[labelName];
- $scope.formValues.Labels.push({ name: labelName, value: labelValue});
- }
- $scope.formValues.displayCodeEditor = true;
- })
- .catch(function error(err) {
- $scope.formValues.displayCodeEditor = true;
- Notifications.error('Failure', err, 'Unable to clone config');
- });
}
- initView();
-}]);
+ editorUpdate(cm) {
+ this.formValues.ConfigContent = cm.getValue();
+ }
+
+ async $onInit() {
+ if (!this.$transition$.params().id) {
+ this.formValues.displayCodeEditor = true;
+ return;
+ }
+
+ try {
+ let data = await this.ConfigService.config(this.$transition$.params().id);
+ this.formValues.Name = data.Name + "_copy";
+ this.formValues.Data = data.Data;
+ let labels = _.keys(data.Labels);
+ for (let i = 0; i < labels.length; i++) {
+ let labelName = labels[i];
+ let labelValue = data.Labels[labelName];
+ this.formValues.Labels.push({ name: labelName, value: labelValue });
+ }
+ this.formValues.displayCodeEditor = true;
+ } catch (err) {
+ this.formValues.displayCodeEditor = true;
+ this.Notifications.error("Failure", err, "Unable to clone config");
+ }
+ }
+}
+
+export default CreateConfigController;
+angular
+ .module("portainer.docker")
+ .controller("CreateConfigController", CreateConfigController);
diff --git a/app/docker/views/configs/create/createconfig.html b/app/docker/views/configs/create/createconfig.html
index 158cc4c2f..dbbfeda36 100644
--- a/app/docker/views/configs/create/createconfig.html
+++ b/app/docker/views/configs/create/createconfig.html
@@ -14,19 +14,19 @@
diff --git a/app/docker/views/images/edit/imageController.js b/app/docker/views/images/edit/imageController.js
index 29d91d8da..f090b6fdc 100644
--- a/app/docker/views/images/edit/imageController.js
+++ b/app/docker/views/images/edit/imageController.js
@@ -1,3 +1,5 @@
+import _ from 'lodash-es';
+
angular.module('portainer.docker')
.controller('ImageController', ['$q', '$scope', '$transition$', '$state', '$timeout', 'ImageService', 'RegistryService', 'Notifications', 'HttpRequestHelper', 'ModalService', 'FileSaver', 'Blob',
function ($q, $scope, $transition$, $state, $timeout, ImageService, RegistryService, Notifications, HttpRequestHelper, ModalService, FileSaver, Blob) {
diff --git a/app/docker/views/images/imagesController.js b/app/docker/views/images/imagesController.js
index 0504ceaea..382747c49 100644
--- a/app/docker/views/images/imagesController.js
+++ b/app/docker/views/images/imagesController.js
@@ -1,3 +1,5 @@
+import _ from 'lodash-es';
+
angular.module('portainer.docker')
.controller('ImagesController', ['$scope', '$state', 'ImageService', 'Notifications', 'ModalService', 'HttpRequestHelper', 'FileSaver', 'Blob', 'EndpointProvider',
function ($scope, $state, ImageService, Notifications, ModalService, HttpRequestHelper, FileSaver, Blob, EndpointProvider) {
@@ -51,7 +53,7 @@ function ($scope, $state, ImageService, Notifications, ModalService, HttpRequest
if (untagged) {
Notifications.warning('', 'Cannot download a untagged image');
- return false;
+ return false;
}
}
diff --git a/app/docker/views/networks/create/createNetworkController.js b/app/docker/views/networks/create/createNetworkController.js
index eb92079f3..b1da064c8 100644
--- a/app/docker/views/networks/create/createNetworkController.js
+++ b/app/docker/views/networks/create/createNetworkController.js
@@ -1,3 +1,6 @@
+import { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';
+import { MacvlanFormData } from '../../../components/network-macvlan-form/networkMacvlanFormModel';
+
angular.module('portainer.docker')
.controller('CreateNetworkController', ['$q', '$scope', '$state', 'PluginService', 'Notifications', 'NetworkService', 'LabelHelper', 'Authentication', 'ResourceControlService', 'FormValidator', 'HttpRequestHelper',
function ($q, $scope, $state, PluginService, Notifications, NetworkService, LabelHelper, Authentication, ResourceControlService, FormValidator, HttpRequestHelper) {
diff --git a/app/docker/views/networks/edit/networkController.js b/app/docker/views/networks/edit/networkController.js
index c26800ec1..27ec8787e 100644
--- a/app/docker/views/networks/edit/networkController.js
+++ b/app/docker/views/networks/edit/networkController.js
@@ -2,6 +2,8 @@ angular.module('portainer.docker')
.controller('NetworkController', ['$scope', '$state', '$transition$', '$filter', 'NetworkService', 'Container', 'Notifications', 'HttpRequestHelper', 'PREDEFINED_NETWORKS',
function ($scope, $state, $transition$, $filter, NetworkService, Container, Notifications, HttpRequestHelper, PREDEFINED_NETWORKS) {
+ $scope.network = {};
+
$scope.removeNetwork = function removeNetwork() {
NetworkService.remove($transition$.params().id, $transition$.params().id)
.then(function success() {
diff --git a/app/docker/views/nodes/node-browser/node-browser.js b/app/docker/views/nodes/node-browser/node-browser.js
index 3e7269384..a43fa97fe 100644
--- a/app/docker/views/nodes/node-browser/node-browser.js
+++ b/app/docker/views/nodes/node-browser/node-browser.js
@@ -1,4 +1,4 @@
angular.module('portainer.docker').component('nodeBrowserView', {
- templateUrl: 'app/docker/views/nodes/node-browser/node-browser.html',
+ templateUrl: './node-browser.html',
controller: 'NodeBrowserController'
});
diff --git a/app/docker/views/nodes/node-details/node-details-view.js b/app/docker/views/nodes/node-details/node-details-view.js
index 5b1c76e2b..e0ba268cf 100644
--- a/app/docker/views/nodes/node-details/node-details-view.js
+++ b/app/docker/views/nodes/node-details/node-details-view.js
@@ -1,4 +1,4 @@
angular.module('portainer.docker').component('nodeDetailsView', {
- templateUrl: 'app/docker/views/nodes/node-details/node-details-view.html',
+ templateUrl: './node-details-view.html',
controller: 'NodeDetailsViewController'
});
diff --git a/app/docker/views/nodes/node-job/node-job.js b/app/docker/views/nodes/node-job/node-job.js
index 0b25f9b2c..334752fff 100644
--- a/app/docker/views/nodes/node-job/node-job.js
+++ b/app/docker/views/nodes/node-job/node-job.js
@@ -1,4 +1,4 @@
angular.module('portainer.docker').component('nodeJobView', {
- templateUrl: 'app/docker/views/nodes/node-job/node-job.html',
+ templateUrl: './node-job.html',
controller: 'NodeJobController'
});
diff --git a/app/docker/views/secrets/create/createSecretController.js b/app/docker/views/secrets/create/createSecretController.js
index 9b644d83a..b4fd89ac5 100644
--- a/app/docker/views/secrets/create/createSecretController.js
+++ b/app/docker/views/secrets/create/createSecretController.js
@@ -1,3 +1,5 @@
+import { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';
+
angular.module('portainer.docker')
.controller('CreateSecretController', ['$scope', '$state', 'Notifications', 'SecretService', 'LabelHelper', 'Authentication', 'ResourceControlService', 'FormValidator',
function ($scope, $state, Notifications, SecretService, LabelHelper, Authentication, ResourceControlService, FormValidator) {
diff --git a/app/docker/views/services/create/createServiceController.js b/app/docker/views/services/create/createServiceController.js
index 9f69ad0b5..0460d2c3b 100644
--- a/app/docker/views/services/create/createServiceController.js
+++ b/app/docker/views/services/create/createServiceController.js
@@ -1,4 +1,12 @@
- angular.module('portainer.docker')
+import _ from 'lodash-es';
+import { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';
+
+require('./includes/update-restart.html')
+require('./includes/secret.html')
+require('./includes/config.html')
+require('./includes/resources-placement.html')
+
+angular.module('portainer.docker')
.controller('CreateServiceController', ['$q', '$scope', '$state', '$timeout', 'Service', 'ServiceHelper', 'ConfigService', 'ConfigHelper', 'SecretHelper', 'SecretService', 'VolumeService', 'NetworkService', 'ImageHelper', 'LabelHelper', 'Authentication', 'ResourceControlService', 'Notifications', 'FormValidator', 'PluginService', 'RegistryService', 'HttpRequestHelper', 'NodeService', 'SettingsService', 'WebhookService','EndpointProvider',
function ($q, $scope, $state, $timeout, Service, ServiceHelper, ConfigService, ConfigHelper, SecretHelper, SecretService, VolumeService, NetworkService, ImageHelper, LabelHelper, Authentication, ResourceControlService, Notifications, FormValidator, PluginService, RegistryService, HttpRequestHelper, NodeService, SettingsService, WebhookService,EndpointProvider) {
diff --git a/app/docker/views/services/edit/serviceController.js b/app/docker/views/services/edit/serviceController.js
index 882e9c4cd..530acb591 100644
--- a/app/docker/views/services/edit/serviceController.js
+++ b/app/docker/views/services/edit/serviceController.js
@@ -1,3 +1,21 @@
+require('./includes/configs.html')
+require('./includes/constraints.html')
+require('./includes/container-specs.html')
+require('./includes/containerlabels.html')
+require('./includes/environmentvariables.html')
+require('./includes/hosts.html')
+require('./includes/logging.html')
+require('./includes/mounts.html')
+require('./includes/networks.html')
+require('./includes/placementPreferences.html')
+require('./includes/ports.html')
+require('./includes/resources.html')
+require('./includes/restart.html')
+require('./includes/secrets.html')
+require('./includes/servicelabels.html')
+require('./includes/tasks.html')
+require('./includes/updateconfig.html')
+
angular.module('portainer.docker')
.controller('ServiceController', ['$q', '$scope', '$transition$', '$state', '$location', '$timeout', '$anchorScroll', 'ServiceService', 'ConfigService', 'ConfigHelper', 'SecretService', 'ImageService', 'SecretHelper', 'Service', 'ServiceHelper', 'LabelHelper', 'TaskService', 'NodeService', 'ContainerService', 'TaskHelper', 'Notifications', 'ModalService', 'PluginService', 'Authentication', 'SettingsService', 'VolumeService', 'ImageHelper', 'WebhookService', 'EndpointProvider', 'clipboard','WebhookHelper',
function ($q, $scope, $transition$, $state, $location, $timeout, $anchorScroll, ServiceService, ConfigService, ConfigHelper, SecretService, ImageService, SecretHelper, Service, ServiceHelper, LabelHelper, TaskService, NodeService, ContainerService, TaskHelper, Notifications, ModalService, PluginService, Authentication, SettingsService, VolumeService, ImageHelper, WebhookService, EndpointProvider, clipboard, WebhookHelper) {
@@ -542,12 +560,13 @@ function ($q, $scope, $transition$, $state, $location, $timeout, $anchorScroll,
});
}
- $scope.updateServiceAttribute = function updateServiceAttribute(service, name) {
+ $scope.updateServiceAttribute = updateServiceAttribute;
+ function updateServiceAttribute(service, name) {
if (service[name] !== originalService[name] || !(name in originalService)) {
service.hasChanges = true;
}
previousServiceValues.push(name);
- };
+ }
function updateServiceArray(service, name) {
previousServiceValues.push(name);
diff --git a/app/docker/views/services/logs/serviceLogsController.js b/app/docker/views/services/logs/serviceLogsController.js
index deb5c34bc..69027e649 100644
--- a/app/docker/views/services/logs/serviceLogsController.js
+++ b/app/docker/views/services/logs/serviceLogsController.js
@@ -1,3 +1,5 @@
+import moment from 'moment';
+
angular.module('portainer.docker')
.controller('ServiceLogsController', ['$scope', '$transition$', '$interval', 'ServiceService', 'Notifications',
function ($scope, $transition$, $interval, ServiceService, Notifications) {
diff --git a/app/docker/views/swarm/swarmController.js b/app/docker/views/swarm/swarmController.js
index 7a27f0ca6..68de0224f 100644
--- a/app/docker/views/swarm/swarmController.js
+++ b/app/docker/views/swarm/swarmController.js
@@ -28,7 +28,7 @@ function ($q, $scope, SystemService, NodeService, Notifications, StateManager, A
// If connected to a replica, information for node1 is available at element #5
// The next 10 elements are information related to the node
var node_offset = info[0][1] === 'primary' ? 4 : 5;
- for (i = 0; i < node_count; i++) {
+ for (let i = 0; i < node_count; i++) {
extractNodeInfo(info, node_offset);
node_offset += 9;
}
diff --git a/app/docker/views/tasks/logs/taskLogsController.js b/app/docker/views/tasks/logs/taskLogsController.js
index 19768de1d..31edb86b4 100644
--- a/app/docker/views/tasks/logs/taskLogsController.js
+++ b/app/docker/views/tasks/logs/taskLogsController.js
@@ -1,3 +1,5 @@
+import moment from 'moment';
+
angular.module('portainer.docker')
.controller('TaskLogsController', ['$scope', '$transition$', '$interval', 'TaskService', 'ServiceService', 'Notifications',
function ($scope, $transition$, $interval, TaskService, ServiceService, Notifications) {
diff --git a/app/docker/views/volumes/create/createVolumeController.js b/app/docker/views/volumes/create/createVolumeController.js
index ef5fc60ca..7afb52013 100644
--- a/app/docker/views/volumes/create/createVolumeController.js
+++ b/app/docker/views/volumes/create/createVolumeController.js
@@ -1,3 +1,6 @@
+import { AccessControlFormData } from '../../../../portainer/components/accessControlForm/porAccessControlFormModel';
+import { VolumesNFSFormData } from '../../../components/volumesNFSForm/volumesNFSFormModel';
+
angular.module('portainer.docker')
.controller('CreateVolumeController', ['$q', '$scope', '$state', 'VolumeService', 'PluginService', 'ResourceControlService', 'Authentication', 'Notifications', 'FormValidator', 'HttpRequestHelper',
function ($q, $scope, $state, VolumeService, PluginService, ResourceControlService, Authentication, Notifications, FormValidator, HttpRequestHelper) {
diff --git a/app/docker/views/volumes/edit/volume.html b/app/docker/views/volumes/edit/volume.html
index 0760cf207..4942357f1 100644
--- a/app/docker/views/volumes/edit/volume.html
+++ b/app/docker/views/volumes/edit/volume.html
@@ -19,6 +19,10 @@
|
+
+ Created |
+ {{ volume.CreatedAt | getisodate }} |
+
Mount path |
{{ volume.Mountpoint }} |
diff --git a/app/extensions/_module.js b/app/extensions/_module.js
index 5a936d2cf..7ad877aa6 100644
--- a/app/extensions/_module.js
+++ b/app/extensions/_module.js
@@ -1,3 +1,4 @@
angular.module('portainer.extensions', [
- 'portainer.extensions.registrymanagement'
+ 'portainer.extensions.registrymanagement',
+ 'portainer.extensions.oauth'
]);
diff --git a/app/extensions/oauth/__module.js b/app/extensions/oauth/__module.js
new file mode 100644
index 000000000..8292353a5
--- /dev/null
+++ b/app/extensions/oauth/__module.js
@@ -0,0 +1,2 @@
+angular.module('portainer.extensions.oauth', ['ngResource'])
+ .constant('API_ENDPOINT_OAUTH', 'api/auth/oauth');
diff --git a/app/extensions/oauth/components/oauth-providers-selector/oauth-provider-selector-controller.js b/app/extensions/oauth/components/oauth-providers-selector/oauth-provider-selector-controller.js
new file mode 100644
index 000000000..818fef20a
--- /dev/null
+++ b/app/extensions/oauth/components/oauth-providers-selector/oauth-provider-selector-controller.js
@@ -0,0 +1,63 @@
+angular.module('portainer.extensions.oauth')
+ .controller('OAuthProviderSelectorController', function OAuthProviderSelectorController() {
+ var ctrl = this;
+
+ this.providers = [
+ {
+ authUrl: 'https://login.microsoftonline.com/TENANT_ID/oauth2/authorize',
+ accessTokenUrl: 'https://login.microsoftonline.com/TENANT_ID/oauth2/token',
+ resourceUrl: 'https://graph.windows.net/TENANT_ID/me?api-version=2013-11-08',
+ userIdentifier: 'userPrincipalName',
+ scopes: 'id,email,name',
+ name: 'microsoft'
+ },
+ {
+ authUrl: 'https://accounts.google.com/o/oauth2/auth',
+ accessTokenUrl: 'https://accounts.google.com/o/oauth2/token',
+ resourceUrl: 'https://www.googleapis.com/oauth2/v1/userinfo?alt=json',
+ userIdentifier: 'email',
+ scopes: 'profile email',
+ name: 'google'
+ },
+ {
+ authUrl: 'https://github.com/login/oauth/authorize',
+ accessTokenUrl: 'https://github.com/login/oauth/access_token',
+ resourceUrl: 'https://api.github.com/user',
+ userIdentifier: 'login',
+ scopes: 'id email name',
+ name: 'github'
+ },
+ {
+ authUrl: '',
+ accessTokenUrl: '',
+ resourceUrl: '',
+ userIdentifier: '',
+ scopes: '',
+ name: 'custom'
+ }
+ ];
+
+ this.$onInit = onInit;
+
+ function onInit() {
+ if (ctrl.provider.authUrl) {
+ ctrl.provider = getProviderByURL(ctrl.provider.authUrl);
+ } else {
+ ctrl.provider = ctrl.providers[0];
+ }
+ ctrl.onSelect(ctrl.provider, false);
+ }
+
+ function getProviderByURL(providerAuthURL) {
+ if (providerAuthURL.indexOf('login.microsoftonline.com') !== -1) {
+ return ctrl.providers[0];
+ }
+ else if (providerAuthURL.indexOf('accounts.google.com') !== -1) {
+ return ctrl.providers[1];
+ }
+ else if (providerAuthURL.indexOf('github.com') !== -1) {
+ return ctrl.providers[2];
+ }
+ return ctrl.providers[3];
+ }
+ });
diff --git a/app/extensions/oauth/components/oauth-providers-selector/oauth-providers-selector.html b/app/extensions/oauth/components/oauth-providers-selector/oauth-providers-selector.html
new file mode 100644
index 000000000..56023908e
--- /dev/null
+++ b/app/extensions/oauth/components/oauth-providers-selector/oauth-providers-selector.html
@@ -0,0 +1,49 @@
+
+ Provider
+
+
+
+
diff --git a/app/extensions/oauth/components/oauth-providers-selector/oauth-providers-selector.js b/app/extensions/oauth/components/oauth-providers-selector/oauth-providers-selector.js
new file mode 100644
index 000000000..76d8c789b
--- /dev/null
+++ b/app/extensions/oauth/components/oauth-providers-selector/oauth-providers-selector.js
@@ -0,0 +1,8 @@
+angular.module('portainer.extensions.oauth').component('oauthProvidersSelector', {
+ templateUrl: './oauth-providers-selector.html',
+ bindings: {
+ onSelect: '<',
+ provider: '='
+ },
+ controller: 'OAuthProviderSelectorController'
+});
diff --git a/app/extensions/oauth/components/oauth-settings/oauth-settings-controller.js b/app/extensions/oauth/components/oauth-settings/oauth-settings-controller.js
new file mode 100644
index 000000000..dcf36cd1c
--- /dev/null
+++ b/app/extensions/oauth/components/oauth-settings/oauth-settings-controller.js
@@ -0,0 +1,76 @@
+import _ from 'lodash-es';
+
+angular.module('portainer.extensions.oauth')
+ .controller('OAuthSettingsController', function OAuthSettingsController() {
+ var ctrl = this;
+
+ this.state = {
+ provider: {},
+ overrideConfiguration: false,
+ microsoftTenantID: ''
+ };
+
+ this.$onInit = onInit;
+ this.onSelectProvider = onSelectProvider;
+ this.onMicrosoftTenantIDChange = onMicrosoftTenantIDChange;
+ this.useDefaultProviderConfiguration = useDefaultProviderConfiguration;
+
+ function onMicrosoftTenantIDChange() {
+ var tenantID = ctrl.state.microsoftTenantID;
+
+ ctrl.settings.AuthorizationURI = _.replace('https://login.microsoftonline.com/TENANT_ID/oauth2/authorize', 'TENANT_ID', tenantID);
+ ctrl.settings.AccessTokenURI = _.replace('https://login.microsoftonline.com/TENANT_ID/oauth2/token', 'TENANT_ID', tenantID);
+ ctrl.settings.ResourceURI = _.replace('https://graph.windows.net/TENANT_ID/me?api-version=2013-11-08', 'TENANT_ID', tenantID);
+ }
+
+ function useDefaultProviderConfiguration() {
+ ctrl.settings.AuthorizationURI = ctrl.state.provider.authUrl;
+ ctrl.settings.AccessTokenURI = ctrl.state.provider.accessTokenUrl;
+ ctrl.settings.ResourceURI = ctrl.state.provider.resourceUrl;
+ ctrl.settings.UserIdentifier = ctrl.state.provider.userIdentifier;
+ ctrl.settings.Scopes = ctrl.state.provider.scopes;
+
+ if (ctrl.state.provider.name === 'microsoft' && ctrl.state.microsoftTenantID !== '') {
+ onMicrosoftTenantIDChange();
+ }
+ }
+
+ function useExistingConfiguration() {
+ var provider = ctrl.state.provider;
+ ctrl.settings.AuthorizationURI = ctrl.settings.AuthorizationURI === '' ? provider.authUrl : ctrl.settings.AuthorizationURI;
+ ctrl.settings.AccessTokenURI = ctrl.settings.AccessTokenURI === '' ? provider.accessTokenUrl : ctrl.settings.AccessTokenURI;
+ ctrl.settings.ResourceURI = ctrl.settings.ResourceURI === '' ? provider.resourceUrl : ctrl.settings.ResourceURI;
+ ctrl.settings.UserIdentifier = ctrl.settings.UserIdentifier === '' ? provider.userIdentifier : ctrl.settings.UserIdentifier;
+ ctrl.settings.Scopes = ctrl.settings.Scopes === '' ? provider.scopes : ctrl.settings.Scopes;
+
+ if (provider.name === 'microsoft' && ctrl.state.microsoftTenantID !== '') {
+ onMicrosoftTenantIDChange();
+ }
+ }
+
+ function onSelectProvider(provider, overrideConfiguration) {
+ ctrl.state.provider = provider;
+
+ if (overrideConfiguration) {
+ useDefaultProviderConfiguration();
+ } else {
+ useExistingConfiguration();
+ }
+ }
+
+ function onInit() {
+ if (ctrl.settings.RedirectURI === '') {
+ ctrl.settings.RedirectURI = window.location.origin;
+ }
+
+ if (ctrl.settings.AuthorizationURI !== '') {
+ ctrl.state.provider.authUrl = ctrl.settings.AuthorizationURI;
+
+ if (ctrl.settings.AuthorizationURI.indexOf('login.microsoftonline.com') > -1) {
+ var tenantID = ctrl.settings.AuthorizationURI.match(/login.microsoftonline.com\/(.*?)\//)[1];
+ ctrl.state.microsoftTenantID = tenantID;
+ onMicrosoftTenantIDChange();
+ }
+ }
+ }
+ });
diff --git a/app/extensions/oauth/components/oauth-settings/oauth-settings.html b/app/extensions/oauth/components/oauth-settings/oauth-settings.html
new file mode 100644
index 000000000..955ad0665
--- /dev/null
+++ b/app/extensions/oauth/components/oauth-settings/oauth-settings.html
@@ -0,0 +1,215 @@
+
+
+ Automatic user provisioning
+
+
+
+ With automatic user provisioning enabled, Portainer will create user(s) automatically with standard user role. If
+ disabled, users must be created beforehand in Portainer in order to login.
+
+
+
+
+
+
+
+
+
+
+
+
OAuth Configuration
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/extensions/oauth/components/oauth-settings/oauth-settings.js b/app/extensions/oauth/components/oauth-settings/oauth-settings.js
new file mode 100644
index 000000000..f3770c45b
--- /dev/null
+++ b/app/extensions/oauth/components/oauth-settings/oauth-settings.js
@@ -0,0 +1,8 @@
+angular.module('portainer.extensions.oauth').component('oauthSettings', {
+ templateUrl: './oauth-settings.html',
+ bindings: {
+ settings: '=',
+ teams: '<'
+ },
+ controller: 'OAuthSettingsController'
+});
diff --git a/app/extensions/oauth/services/rest/oauth.js b/app/extensions/oauth/services/rest/oauth.js
new file mode 100644
index 000000000..f33e7b30f
--- /dev/null
+++ b/app/extensions/oauth/services/rest/oauth.js
@@ -0,0 +1,13 @@
+angular.module('portainer.extensions.oauth')
+.factory('OAuth', ['$resource', 'API_ENDPOINT_OAUTH', function OAuthFactory($resource, API_ENDPOINT_OAUTH) {
+ 'use strict';
+ return $resource(API_ENDPOINT_OAUTH + '/:action', {}, {
+ validate: {
+ method: 'POST',
+ ignoreLoadingBar: true,
+ params: {
+ action: 'validate'
+ }
+ }
+ });
+}]);
\ No newline at end of file
diff --git a/app/extensions/registry-management/_module.js b/app/extensions/registry-management/_module.js
index 44599be3b..9fdde0c5d 100644
--- a/app/extensions/registry-management/_module.js
+++ b/app/extensions/registry-management/_module.js
@@ -7,7 +7,7 @@ angular.module('portainer.extensions.registrymanagement', [])
url: '/configure',
views: {
'content@': {
- templateUrl: 'app/extensions/registry-management/views/configure/configureregistry.html',
+ templateUrl: './views/configure/configureregistry.html',
controller: 'ConfigureRegistryController'
}
}
@@ -18,7 +18,7 @@ angular.module('portainer.extensions.registrymanagement', [])
url: '/repositories',
views: {
'content@': {
- templateUrl: 'app/extensions/registry-management/views/repositories/registryRepositories.html',
+ templateUrl: './views/repositories/registryRepositories.html',
controller: 'RegistryRepositoriesController'
}
}
@@ -29,7 +29,7 @@ angular.module('portainer.extensions.registrymanagement', [])
url: '/:repository',
views: {
'content@': {
- templateUrl: 'app/extensions/registry-management/views/repositories/edit/registryRepository.html',
+ templateUrl: './views/repositories/edit/registryRepository.html',
controller: 'RegistryRepositoryController'
}
}
diff --git a/app/extensions/registry-management/components/registries-repositories-datatable/registryRepositoriesDatatable.js b/app/extensions/registry-management/components/registries-repositories-datatable/registryRepositoriesDatatable.js
index a8cd8a27a..44351bf65 100644
--- a/app/extensions/registry-management/components/registries-repositories-datatable/registryRepositoriesDatatable.js
+++ b/app/extensions/registry-management/components/registries-repositories-datatable/registryRepositoriesDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.extensions.registrymanagement').component('registryRepositoriesDatatable', {
- templateUrl: 'app/extensions/registry-management/components/registries-repositories-datatable/registryRepositoriesDatatable.html',
+ templateUrl: './registryRepositoriesDatatable.html',
controller: 'GenericDatatableController',
bindings: {
titleText: '@',
diff --git a/app/extensions/registry-management/components/registries-repository-tags-datatable/registriesRepositoryTagsDatatable.js b/app/extensions/registry-management/components/registries-repository-tags-datatable/registriesRepositoryTagsDatatable.js
index 5c18c6a1c..1799e4f3f 100644
--- a/app/extensions/registry-management/components/registries-repository-tags-datatable/registriesRepositoryTagsDatatable.js
+++ b/app/extensions/registry-management/components/registries-repository-tags-datatable/registriesRepositoryTagsDatatable.js
@@ -1,5 +1,5 @@
angular.module('portainer.extensions.registrymanagement').component('registriesRepositoryTagsDatatable', {
- templateUrl: 'app/extensions/registry-management/components/registries-repository-tags-datatable/registriesRepositoryTagsDatatable.html',
+ templateUrl: './registriesRepositoryTagsDatatable.html',
controller: 'GenericDatatableController',
bindings: {
titleText: '@',
diff --git a/app/extensions/registry-management/helpers/localRegistryHelper.js b/app/extensions/registry-management/helpers/localRegistryHelper.js
index b4a0bd22a..f5d494694 100644
--- a/app/extensions/registry-management/helpers/localRegistryHelper.js
+++ b/app/extensions/registry-management/helpers/localRegistryHelper.js
@@ -1,3 +1,5 @@
+import { RepositoryTagViewModel } from '../models/repositoryTag';
+
angular.module('portainer.extensions.registrymanagement')
.factory('RegistryV2Helper', [function RegistryV2HelperFactory() {
'use strict';
diff --git a/app/extensions/registry-management/models/registryRepository.js b/app/extensions/registry-management/models/registryRepository.js
index d3f7f02a7..47e9d4009 100644
--- a/app/extensions/registry-management/models/registryRepository.js
+++ b/app/extensions/registry-management/models/registryRepository.js
@@ -1,4 +1,4 @@
-function RegistryRepositoryViewModel(data) {
+export function RegistryRepositoryViewModel(data) {
this.Name = data.name;
this.TagsCount = data.tags.length;
}
\ No newline at end of file
diff --git a/app/extensions/registry-management/models/repositoryTag.js b/app/extensions/registry-management/models/repositoryTag.js
index 1139bbf13..a36e501d9 100644
--- a/app/extensions/registry-management/models/repositoryTag.js
+++ b/app/extensions/registry-management/models/repositoryTag.js
@@ -1,4 +1,4 @@
-function RepositoryTagViewModel(name, imageId, os, arch, size, digest, repositoryName, fsLayers, history, manifestv2) {
+export function RepositoryTagViewModel(name, imageId, os, arch, size, digest, repositoryName, fsLayers, history, manifestv2) {
this.Name = name;
this.ImageId = imageId;
this.Os = os;
diff --git a/app/extensions/registry-management/rest/catalog.js b/app/extensions/registry-management/rest/catalog.js
index 728a18dcd..62b2b8a11 100644
--- a/app/extensions/registry-management/rest/catalog.js
+++ b/app/extensions/registry-management/rest/catalog.js
@@ -1,3 +1,5 @@
+import linkGetResponse from './transform/linkGetResponse'
+
angular.module('portainer.extensions.registrymanagement')
.factory('RegistryCatalog', ['$resource', 'API_ENDPOINT_REGISTRIES',
function RegistryCatalogFactory($resource, API_ENDPOINT_REGISTRIES) {
diff --git a/app/extensions/registry-management/rest/transform/linkGetResponse.js b/app/extensions/registry-management/rest/transform/linkGetResponse.js
index 5307701ca..7c3a18b65 100644
--- a/app/extensions/registry-management/rest/transform/linkGetResponse.js
+++ b/app/extensions/registry-management/rest/transform/linkGetResponse.js
@@ -1,4 +1,4 @@
-function linkGetResponse(data, headers) {
+export default function linkGetResponse(data, headers) {
var response = angular.fromJson(data);
var link = headers('link');
if (link) {
diff --git a/app/extensions/registry-management/services/registryAPIService.js b/app/extensions/registry-management/services/registryAPIService.js
index 18089bff9..58062b6e1 100644
--- a/app/extensions/registry-management/services/registryAPIService.js
+++ b/app/extensions/registry-management/services/registryAPIService.js
@@ -1,3 +1,6 @@
+import _ from 'lodash-es';
+import { RegistryRepositoryViewModel } from '../models/registryRepository';
+
angular.module('portainer.extensions.registrymanagement')
.factory('RegistryV2Service', ['$q', 'RegistryCatalog', 'RegistryTags', 'RegistryManifests', 'RegistryV2Helper',
function RegistryV2ServiceFactory($q, RegistryCatalog, RegistryTags, RegistryManifests, RegistryV2Helper) {
diff --git a/app/extensions/registry-management/views/configure/configureRegistryController.js b/app/extensions/registry-management/views/configure/configureRegistryController.js
index bbed8be30..75311e01a 100644
--- a/app/extensions/registry-management/views/configure/configureRegistryController.js
+++ b/app/extensions/registry-management/views/configure/configureRegistryController.js
@@ -1,3 +1,5 @@
+import { RegistryManagementConfigurationDefaultModel } from '../../../../portainer/models/registry';
+
angular.module('portainer.extensions.registrymanagement')
.controller('ConfigureRegistryController', ['$scope', '$state', '$transition$', 'RegistryService', 'RegistryV2Service', 'Notifications',
function ($scope, $state, $transition$, RegistryService, RegistryV2Service, Notifications) {
diff --git a/app/extensions/registry-management/views/repositories/edit/registryRepositoryController.js b/app/extensions/registry-management/views/repositories/edit/registryRepositoryController.js
index 04c7b0e46..03f0b961d 100644
--- a/app/extensions/registry-management/views/repositories/edit/registryRepositoryController.js
+++ b/app/extensions/registry-management/views/repositories/edit/registryRepositoryController.js
@@ -1,3 +1,5 @@
+import _ from 'lodash-es';
+
angular.module('portainer.app')
.controller('RegistryRepositoryController', ['$q', '$scope', '$transition$', '$state', 'RegistryV2Service', 'RegistryService', 'ModalService', 'Notifications',
function ($q, $scope, $transition$, $state, RegistryV2Service, RegistryService, ModalService, Notifications) {
diff --git a/app/extensions/storidge/__module.js b/app/extensions/storidge/__module.js
index 1c15a8452..298bb86a4 100644
--- a/app/extensions/storidge/__module.js
+++ b/app/extensions/storidge/__module.js
@@ -15,7 +15,7 @@ angular.module('extension.storidge', [])
url: '/profiles',
views: {
'content@': {
- templateUrl: 'app/extensions/storidge/views/profiles/profiles.html',
+ templateUrl: './views/profiles/profiles.html',
controller: 'StoridgeProfilesController'
}
}
@@ -26,7 +26,7 @@ angular.module('extension.storidge', [])
url: '/:id',
views: {
'content@': {
- templateUrl: 'app/extensions/storidge/views/profiles/edit/profile.html',
+ templateUrl: './views/profiles/edit/profile.html',
controller: 'StoridgeProfileController'
}
}
@@ -73,7 +73,7 @@ angular.module('extension.storidge', [])
},
views: {
'content@': {
- templateUrl: 'app/extensions/storidge/views/profiles/create/createprofile.html',
+ templateUrl: './views/profiles/create/createprofile.html',
controller: 'StoridgeCreateProfileController'
}
}
@@ -84,7 +84,7 @@ angular.module('extension.storidge', [])
url: '/cluster',
views: {
'content@': {
- templateUrl: 'app/extensions/storidge/views/cluster/cluster.html',
+ templateUrl: './views/cluster/cluster.html',
controller: 'StoridgeClusterController'
}
}
@@ -106,7 +106,7 @@ angular.module('extension.storidge', [])
url: '/events',
views: {
'content@': {
- templateUrl: 'app/extensions/storidge/views/monitor/monitor.html',
+ templateUrl: './views/monitor/monitor.html',
controller: 'StoridgeMonitorController'
}
}
diff --git a/app/extensions/storidge/components/cluster-events-datatable/storidgeClusterEventsDatatable.js b/app/extensions/storidge/components/cluster-events-datatable/storidgeClusterEventsDatatable.js
index 9aabd5496..34d897b48 100644
--- a/app/extensions/storidge/components/cluster-events-datatable/storidgeClusterEventsDatatable.js
+++ b/app/extensions/storidge/components/cluster-events-datatable/storidgeClusterEventsDatatable.js
@@ -1,5 +1,5 @@
angular.module('extension.storidge').component('storidgeClusterEventsDatatable', {
- templateUrl: 'app/extensions/storidge/components/cluster-events-datatable/storidgeClusterEventsDatatable.html',
+ templateUrl: './storidgeClusterEventsDatatable.html',
controller: 'GenericDatatableController',
bindings: {
titleText: '@',
diff --git a/app/extensions/storidge/components/nodes-datatable/storidgeNodesDatatable.js b/app/extensions/storidge/components/nodes-datatable/storidgeNodesDatatable.js
index 45a0be227..4f22e67e7 100644
--- a/app/extensions/storidge/components/nodes-datatable/storidgeNodesDatatable.js
+++ b/app/extensions/storidge/components/nodes-datatable/storidgeNodesDatatable.js
@@ -1,5 +1,5 @@
angular.module('extension.storidge').component('storidgeNodesDatatable', {
- templateUrl: 'app/extensions/storidge/components/nodes-datatable/storidgeNodesDatatable.html',
+ templateUrl: './storidgeNodesDatatable.html',
controller: 'StoridgeNodesDatatableController',
bindings: {
titleText: '@',
diff --git a/app/extensions/storidge/components/profileSelector/storidgeProfileSelector.js b/app/extensions/storidge/components/profileSelector/storidgeProfileSelector.js
index 46d38607b..ea5c93dee 100644
--- a/app/extensions/storidge/components/profileSelector/storidgeProfileSelector.js
+++ b/app/extensions/storidge/components/profileSelector/storidgeProfileSelector.js
@@ -1,5 +1,5 @@
angular.module('extension.storidge').component('storidgeProfileSelector', {
- templateUrl: 'app/extensions/storidge/components/profileSelector/storidgeProfileSelector.html',
+ templateUrl: './storidgeProfileSelector.html',
controller: 'StoridgeProfileSelectorController',
bindings: {
'storidgeProfile': '='
diff --git a/app/extensions/storidge/components/profiles-datatable/storidgeProfilesDatatable.js b/app/extensions/storidge/components/profiles-datatable/storidgeProfilesDatatable.js
index 1b68eb929..1fb5f51d5 100644
--- a/app/extensions/storidge/components/profiles-datatable/storidgeProfilesDatatable.js
+++ b/app/extensions/storidge/components/profiles-datatable/storidgeProfilesDatatable.js
@@ -1,5 +1,5 @@
angular.module('extension.storidge').component('storidgeProfilesDatatable', {
- templateUrl: 'app/extensions/storidge/components/profiles-datatable/storidgeProfilesDatatable.html',
+ templateUrl: './storidgeProfilesDatatable.html',
controller: 'GenericDatatableController',
bindings: {
titleText: '@',
diff --git a/app/extensions/storidge/models/events.js b/app/extensions/storidge/models/events.js
index 3fab0d639..b056e7484 100644
--- a/app/extensions/storidge/models/events.js
+++ b/app/extensions/storidge/models/events.js
@@ -1,4 +1,4 @@
-function StoridgeEventModel(data) {
+export function StoridgeEventModel(data) {
this.Time = data.time;
this.Category = data.category;
this.Module = data.module;
diff --git a/app/extensions/storidge/models/info.js b/app/extensions/storidge/models/info.js
index 2db3299ca..7d0f2f92f 100644
--- a/app/extensions/storidge/models/info.js
+++ b/app/extensions/storidge/models/info.js
@@ -1,4 +1,4 @@
-function StoridgeInfoModel(data) {
+export function StoridgeInfoModel(data) {
this.Domain = data.domain;
this.Nodes = data.nodes;
this.Status = data.status;
diff --git a/app/extensions/storidge/models/node.js b/app/extensions/storidge/models/node.js
index 01511167e..6ad1563ed 100644
--- a/app/extensions/storidge/models/node.js
+++ b/app/extensions/storidge/models/node.js
@@ -1,4 +1,4 @@
-function StoridgeNodeModel(name, data) {
+export function StoridgeNodeModel(name, data) {
this.Name = name;
this.IP = data.ip;
this.Role = data.role;
diff --git a/app/extensions/storidge/models/profile.js b/app/extensions/storidge/models/profile.js
index e78f7fa52..dd49ff9e4 100644
--- a/app/extensions/storidge/models/profile.js
+++ b/app/extensions/storidge/models/profile.js
@@ -1,4 +1,4 @@
-function StoridgeProfileDefaultModel() {
+export function StoridgeProfileDefaultModel() {
this.Directory = '/cio/';
this.Capacity = 20;
this.Redundancy = 2;
@@ -20,12 +20,12 @@ function StoridgeProfileDefaultModel() {
this.Labels = [];
}
-function StoridgeProfileListModel(data) {
+export function StoridgeProfileListModel(data) {
this.Name = data;
this.Checked = false;
}
-function StoridgeProfileModel(name, data) {
+export function StoridgeProfileModel(name, data) {
this.Name = name;
this.Directory = data.directory;
this.Capacity = data.capacity;
@@ -75,7 +75,7 @@ function StoridgeProfileModel(name, data) {
}
}
-function StoridgeCreateProfileRequest(model) {
+export function StoridgeCreateProfileRequest(model) {
this.name = model.Name;
this.capacity = model.Capacity;
this.directory = model.Directory;
diff --git a/app/extensions/storidge/services/chartService.js b/app/extensions/storidge/services/chartService.js
index 7dd468a38..e320ba8f0 100644
--- a/app/extensions/storidge/services/chartService.js
+++ b/app/extensions/storidge/services/chartService.js
@@ -1,3 +1,6 @@
+import Chart from 'chart.js';
+import filesize from 'filesize';
+
angular.module('extension.storidge')
.factory('StoridgeChartService', [function StoridgeChartService() {
'use strict';
diff --git a/app/extensions/storidge/services/clusterService.js b/app/extensions/storidge/services/clusterService.js
index 97dfa2514..61f78a1ae 100644
--- a/app/extensions/storidge/services/clusterService.js
+++ b/app/extensions/storidge/services/clusterService.js
@@ -1,3 +1,6 @@
+import { StoridgeInfoModel } from '../models/info';
+import { StoridgeEventModel } from '../models/events';
+
angular.module('extension.storidge')
.factory('StoridgeClusterService', ['$q', 'Storidge', function StoridgeClusterServiceFactory($q, Storidge) {
'use strict';
diff --git a/app/extensions/storidge/services/nodeService.js b/app/extensions/storidge/services/nodeService.js
index 53f220367..914c0f231 100644
--- a/app/extensions/storidge/services/nodeService.js
+++ b/app/extensions/storidge/services/nodeService.js
@@ -1,3 +1,5 @@
+import { StoridgeNodeModel } from '../models/node';
+
angular.module('extension.storidge')
.factory('StoridgeNodeService', ['$q', 'Storidge', function StoridgeNodeServiceFactory($q, Storidge) {
'use strict';
diff --git a/app/extensions/storidge/services/profileService.js b/app/extensions/storidge/services/profileService.js
index 3770ab056..0e4d683a2 100644
--- a/app/extensions/storidge/services/profileService.js
+++ b/app/extensions/storidge/services/profileService.js
@@ -1,3 +1,9 @@
+import {
+ StoridgeCreateProfileRequest,
+ StoridgeProfileListModel,
+ StoridgeProfileModel
+} from '../models/profile';
+
angular.module('extension.storidge')
.factory('StoridgeProfileService', ['$q', 'Storidge', function StoridgeProfileServiceFactory($q, Storidge) {
'use strict';
diff --git a/app/extensions/storidge/views/monitor/monitorController.js b/app/extensions/storidge/views/monitor/monitorController.js
index d8dc5eda6..4bf94a613 100644
--- a/app/extensions/storidge/views/monitor/monitorController.js
+++ b/app/extensions/storidge/views/monitor/monitorController.js
@@ -1,3 +1,5 @@
+import moment from 'moment';
+
angular.module('extension.storidge')
.controller('StoridgeMonitorController', ['$q', '$scope', '$interval', '$document', 'Notifications', 'StoridgeClusterService', 'StoridgeChartService',
function ($q, $scope, $interval, $document, Notifications, StoridgeClusterService, StoridgeChartService) {
diff --git a/app/extensions/storidge/views/profiles/create/createProfileController.js b/app/extensions/storidge/views/profiles/create/createProfileController.js
index c46f62f28..84901871a 100644
--- a/app/extensions/storidge/views/profiles/create/createProfileController.js
+++ b/app/extensions/storidge/views/profiles/create/createProfileController.js
@@ -1,3 +1,5 @@
+import { StoridgeProfileDefaultModel } from '../../../models/profile';
+
angular.module('extension.storidge')
.controller('StoridgeCreateProfileController', ['$scope', '$state', '$transition$', 'Notifications', 'StoridgeProfileService',
function ($scope, $state, $transition$, Notifications, StoridgeProfileService) {
diff --git a/app/extensions/storidge/views/profiles/profilesController.js b/app/extensions/storidge/views/profiles/profilesController.js
index 25276b1f5..2214739c7 100644
--- a/app/extensions/storidge/views/profiles/profilesController.js
+++ b/app/extensions/storidge/views/profiles/profilesController.js
@@ -1,3 +1,5 @@
+import { StoridgeProfileDefaultModel } from '../../models/profile';
+
angular.module('extension.storidge')
.controller('StoridgeProfilesController', ['$q', '$scope', '$state', 'Notifications', 'StoridgeProfileService',
function ($q, $scope, $state, Notifications, StoridgeProfileService) {
diff --git a/index.html b/app/index.html
similarity index 63%
rename from index.html
rename to app/index.html
index 704ec3d3e..2fd12be28 100644
--- a/index.html
+++ b/app/index.html
@@ -1,36 +1,24 @@
-
-
+
Portainer
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
@@ -52,7 +40,7 @@
@@ -72,5 +60,5 @@
-
-
+
+