-
-
+
{{ state.userCreationError }}
diff --git a/app/components/users/usersController.js b/app/components/users/usersController.js
index 0184e84f0..61159f62c 100644
--- a/app/components/users/usersController.js
+++ b/app/components/users/usersController.js
@@ -5,7 +5,8 @@ function ($q, $scope, $state, $sanitize, UserService, TeamService, TeamMembershi
userCreationError: '',
selectedItemCount: 0,
validUsername: false,
- pagination_count: Pagination.getPaginationCount('users')
+ pagination_count: Pagination.getPaginationCount('users'),
+ actionInProgress: false
};
$scope.sortType = 'RoleName';
$scope.sortReverse = false;
@@ -57,7 +58,7 @@ function ($q, $scope, $state, $sanitize, UserService, TeamService, TeamMembershi
};
$scope.addUser = function() {
- $('#createUserSpinner').show();
+ $scope.state.actionInProgress = true;
$scope.state.userCreationError = '';
var username = $sanitize($scope.formValues.Username);
var password = $sanitize($scope.formValues.Password);
@@ -75,22 +76,13 @@ function ($q, $scope, $state, $sanitize, UserService, TeamService, TeamMembershi
Notifications.error('Failure', err, 'Unable to create user');
})
.finally(function final() {
- $('#createUserSpinner').hide();
+ $scope.state.actionInProgress = false;
});
};
function deleteSelectedUsers() {
- $('#loadUsersSpinner').show();
- var counter = 0;
- var complete = function () {
- counter = counter - 1;
- if (counter === 0) {
- $('#loadUsersSpinner').hide();
- }
- };
angular.forEach($scope.users, function (user) {
if (user.Checked) {
- counter = counter + 1;
UserService.deleteUser(user.Id)
.then(function success(data) {
var index = $scope.users.indexOf(user);
@@ -99,9 +91,6 @@ function ($q, $scope, $state, $sanitize, UserService, TeamService, TeamMembershi
})
.catch(function error(err) {
Notifications.error('Failure', err, 'Unable to remove user');
- })
- .finally(function final() {
- complete();
});
}
});
@@ -133,7 +122,6 @@ function ($q, $scope, $state, $sanitize, UserService, TeamService, TeamMembershi
}
function initView() {
- $('#loadUsersSpinner').show();
var userDetails = Authentication.getUserDetails();
var isAdmin = userDetails.role === 1 ? true: false;
$scope.isAdmin = isAdmin;
@@ -154,9 +142,6 @@ function ($q, $scope, $state, $sanitize, UserService, TeamService, TeamMembershi
Notifications.error('Failure', err, 'Unable to retrieve users and teams');
$scope.users = [];
$scope.teams = [];
- })
- .finally(function final() {
- $('#loadUsersSpinner').hide();
});
}
diff --git a/app/components/volume/volume.html b/app/components/volume/volume.html
index 2b9d40af4..a16803988 100644
--- a/app/components/volume/volume.html
+++ b/app/components/volume/volume.html
@@ -1,7 +1,5 @@
-
-
-
+
Volumes > {{ volume.Id }}
diff --git a/app/components/volume/volumeController.js b/app/components/volume/volumeController.js
index 12b7053a5..2d1bb7b82 100644
--- a/app/components/volume/volumeController.js
+++ b/app/components/volume/volumeController.js
@@ -3,7 +3,6 @@ angular.module('volume', [])
function ($scope, $state, $transition$, VolumeService, ContainerService, Notifications) {
$scope.removeVolume = function removeVolume() {
- $('#loadingViewSpinner').show();
VolumeService.remove($scope.volume)
.then(function success(data) {
Notifications.success('Volume successfully removed', $transition$.params().id);
@@ -11,9 +10,6 @@ function ($scope, $state, $transition$, VolumeService, ContainerService, Notific
})
.catch(function error(err) {
Notifications.error('Failure', err, 'Unable to remove volume');
- })
- .finally(function final() {
- $('#loadingViewSpinner').hide();
});
};
@@ -24,7 +20,6 @@ function ($scope, $state, $transition$, VolumeService, ContainerService, Notific
}
function initView() {
- $('#loadingViewSpinner').show();
VolumeService.volume($transition$.params().id)
.then(function success(data) {
var volume = data;
@@ -41,9 +36,6 @@ function ($scope, $state, $transition$, VolumeService, ContainerService, Notific
})
.catch(function error(err) {
Notifications.error('Failure', err, 'Unable to retrieve volume details');
- })
- .finally(function final() {
- $('#loadingViewSpinner').hide();
});
}
diff --git a/app/components/volumes/volumes.html b/app/components/volumes/volumes.html
index fb9dd94b0..eaa98378f 100644
--- a/app/components/volumes/volumes.html
+++ b/app/components/volumes/volumes.html
@@ -3,7 +3,6 @@
-
Volumes
diff --git a/app/components/volumes/volumesController.js b/app/components/volumes/volumesController.js
index 2bc0453e8..836692b32 100644
--- a/app/components/volumes/volumesController.js
+++ b/app/components/volumes/volumesController.js
@@ -34,19 +34,8 @@ function ($q, $scope, VolumeService, Notifications, Pagination) {
};
$scope.removeAction = function () {
- $('#loadVolumesSpinner').show();
- var counter = 0;
-
- var complete = function () {
- counter = counter - 1;
- if (counter === 0) {
- $('#loadVolumesSpinner').hide();
- }
- };
-
angular.forEach($scope.volumes, function (volume) {
if (volume.Checked) {
- counter = counter + 1;
VolumeService.remove(volume)
.then(function success() {
Notifications.success('Volume deleted', volume.Id);
@@ -55,25 +44,21 @@ function ($q, $scope, VolumeService, Notifications, Pagination) {
})
.catch(function error(err) {
Notifications.error('Failure', err, 'Unable to remove volume');
- })
- .finally(function final() {
- complete();
});
}
});
};
function initView() {
- $('#loadVolumesSpinner').show();
-
+
$q.all({
attached: VolumeService.volumes({
- filters: {
+ filters: {
'dangling': ['false']
}
}),
dangling: VolumeService.volumes({
- filters: {
+ filters: {
'dangling': ['true']
}
})
@@ -88,9 +73,6 @@ function ($q, $scope, VolumeService, Notifications, Pagination) {
}));
}).catch(function error(err) {
Notifications.error('Failure', err, 'Unable to retrieve volumes');
- })
- .finally(function final() {
- $('#loadVolumesSpinner').hide();
});
}
initView();
diff --git a/app/config.js b/app/config.js
index 197bd6e76..6e35e4642 100644
--- a/app/config.js
+++ b/app/config.js
@@ -1,5 +1,6 @@
angular.module('portainer')
- .config(['$stateProvider', '$urlRouterProvider', '$httpProvider', 'localStorageServiceProvider', 'jwtOptionsProvider', 'AnalyticsProvider', '$uibTooltipProvider', '$compileProvider', function ($stateProvider, $urlRouterProvider, $httpProvider, localStorageServiceProvider, jwtOptionsProvider, AnalyticsProvider, $uibTooltipProvider, $compileProvider) {
+ .config(['$stateProvider', '$urlRouterProvider', '$httpProvider', 'localStorageServiceProvider', 'jwtOptionsProvider', 'AnalyticsProvider', '$uibTooltipProvider', '$compileProvider', 'cfpLoadingBarProvider',
+ function ($stateProvider, $urlRouterProvider, $httpProvider, localStorageServiceProvider, jwtOptionsProvider, AnalyticsProvider, $uibTooltipProvider, $compileProvider, cfpLoadingBarProvider) {
'use strict';
var environment = '@@ENVIRONMENT';
@@ -32,6 +33,9 @@ angular.module('portainer')
'outsideClick': 'outsideClick'
});
+ cfpLoadingBarProvider.includeSpinner = false;
+ cfpLoadingBarProvider.parentSelector = '#loadingbar-placeholder';
+
$urlRouterProvider.otherwise('/auth');
configureRoutes($stateProvider);
}]);
diff --git a/app/directives/accessControlForm/porAccessControlFormController.js b/app/directives/accessControlForm/porAccessControlFormController.js
index c567bf290..1daed21a0 100644
--- a/app/directives/accessControlForm/porAccessControlFormController.js
+++ b/app/directives/accessControlForm/porAccessControlFormController.js
@@ -31,8 +31,6 @@ function ($q, UserService, TeamService, Notifications, Authentication, ResourceC
}
function initComponent() {
- $('#loadingViewSpinner').show();
-
var userDetails = Authentication.getUserDetails();
var isAdmin = userDetails.role === 1 ? true: false;
ctrl.isAdmin = isAdmin;
@@ -66,9 +64,6 @@ function ($q, UserService, TeamService, Notifications, Authentication, ResourceC
})
.catch(function error(err) {
Notifications.error('Failure', err, 'Unable to retrieve access control information');
- })
- .finally(function final() {
- $('#loadingViewSpinner').hide();
});
}
diff --git a/app/directives/accessControlPanel/porAccessControlPanelController.js b/app/directives/accessControlPanel/porAccessControlPanelController.js
index 36cec2a97..5672135e0 100644
--- a/app/directives/accessControlPanel/porAccessControlPanelController.js
+++ b/app/directives/accessControlPanel/porAccessControlPanelController.js
@@ -71,8 +71,6 @@ function ($q, $state, UserService, TeamService, ResourceControlService, Notifica
}
function updateOwnership() {
- $('#loadingViewSpinner').show();
-
var resourceId = ctrl.resourceId;
var ownershipParameters = processOwnershipFormValues();
@@ -84,15 +82,10 @@ function ($q, $state, UserService, TeamService, ResourceControlService, Notifica
})
.catch(function error(err) {
Notifications.error('Failure', err, 'Unable to update access control');
- })
- .finally(function final() {
- $('#loadingViewSpinner').hide();
});
}
function initComponent() {
- $('#loadingViewSpinner').show();
-
var userDetails = Authentication.getUserDetails();
var isAdmin = userDetails.role === 1 ? true: false;
var userId = userDetails.ID;
@@ -146,9 +139,6 @@ function ($q, $state, UserService, TeamService, ResourceControlService, Notifica
})
.catch(function error(err) {
Notifications.error('Failure', err, 'Unable to retrieve access control information');
- })
- .finally(function final() {
- $('#loadingViewSpinner').hide();
});
}
diff --git a/app/directives/buttonSpinner.js b/app/directives/buttonSpinner.js
new file mode 100644
index 000000000..7d6bd614c
--- /dev/null
+++ b/app/directives/buttonSpinner.js
@@ -0,0 +1,14 @@
+angular
+.module('portainer')
+.directive('buttonSpinner', function buttonSpinner() {
+ var directive = {
+ restrict: 'A',
+ scope: {
+ spinning: '=buttonSpinner'
+ },
+ transclude: true,
+ template: '
'
+ };
+
+ return directive;
+});
diff --git a/app/directives/header.js b/app/directives/header.js
index 18451ce9b..a2facd4e6 100644
--- a/app/directives/header.js
+++ b/app/directives/header.js
@@ -6,7 +6,7 @@ angular
'ngModel': '='
},
transclude: true,
- template: '',
+ template: '',
restrict: 'EA'
};
return directive;
diff --git a/app/rest/api/auth.js b/app/rest/api/auth.js
index 17d4dc22d..179225cd2 100644
--- a/app/rest/api/auth.js
+++ b/app/rest/api/auth.js
@@ -3,7 +3,7 @@ angular.module('portainer.rest')
'use strict';
return $resource(API_ENDPOINT_AUTH, {}, {
login: {
- method: 'POST'
+ method: 'POST', ignoreLoadingBar: true
}
});
}]);
diff --git a/app/rest/api/endpoint.js b/app/rest/api/endpoint.js
index bef6f960b..f4a0e76ce 100644
--- a/app/rest/api/endpoint.js
+++ b/app/rest/api/endpoint.js
@@ -2,7 +2,7 @@ angular.module('portainer.rest')
.factory('Endpoints', ['$resource', 'API_ENDPOINT_ENDPOINTS', function EndpointsFactory($resource, API_ENDPOINT_ENDPOINTS) {
'use strict';
return $resource(API_ENDPOINT_ENDPOINTS + '/:id/:action', {}, {
- create: { method: 'POST' },
+ create: { method: 'POST', ignoreLoadingBar: true },
query: { method: 'GET', isArray: true },
get: { method: 'GET', params: { id: '@id' } },
update: { method: 'PUT', params: { id: '@id' } },
diff --git a/app/rest/api/registry.js b/app/rest/api/registry.js
index 819e19061..cbeec9f7c 100644
--- a/app/rest/api/registry.js
+++ b/app/rest/api/registry.js
@@ -2,7 +2,7 @@ angular.module('portainer.rest')
.factory('Registries', ['$resource', 'API_ENDPOINT_REGISTRIES', function RegistriesFactory($resource, API_ENDPOINT_REGISTRIES) {
'use strict';
return $resource(API_ENDPOINT_REGISTRIES + '/:id/:action', {}, {
- create: { method: 'POST' },
+ create: { method: 'POST', ignoreLoadingBar: true },
query: { method: 'GET', isArray: true },
get: { method: 'GET', params: { id: '@id' } },
update: { method: 'PUT', params: { id: '@id' } },
diff --git a/app/rest/api/resourceControl.js b/app/rest/api/resourceControl.js
index 5503ce0db..22a5af6b4 100644
--- a/app/rest/api/resourceControl.js
+++ b/app/rest/api/resourceControl.js
@@ -2,7 +2,7 @@ angular.module('portainer.rest')
.factory('ResourceControl', ['$resource', 'API_ENDPOINT_RESOURCE_CONTROLS', function ResourceControlFactory($resource, API_ENDPOINT_RESOURCE_CONTROLS) {
'use strict';
return $resource(API_ENDPOINT_RESOURCE_CONTROLS + '/:id', {}, {
- create: { method: 'POST' },
+ create: { method: 'POST', ignoreLoadingBar: true },
get: { method: 'GET', params: { id: '@id' } },
update: { method: 'PUT', params: { id: '@id' } },
remove: { method: 'DELETE', params: { id: '@id'} }
diff --git a/app/rest/api/settings.js b/app/rest/api/settings.js
index 9a70d8885..184504f54 100644
--- a/app/rest/api/settings.js
+++ b/app/rest/api/settings.js
@@ -3,8 +3,8 @@ angular.module('portainer.rest')
'use strict';
return $resource(API_ENDPOINT_SETTINGS + '/:subResource/:action', {}, {
get: { method: 'GET' },
- update: { method: 'PUT' },
- publicSettings: { method: 'GET', params: { subResource: 'public' } },
+ update: { method: 'PUT', ignoreLoadingBar: true },
+ publicSettings: { method: 'GET', params: { subResource: 'public' }, ignoreLoadingBar: true },
checkLDAPConnectivity: { method: 'PUT', params: { subResource: 'authentication', action: 'checkLDAP' } }
});
}]);
diff --git a/app/rest/api/stack.js b/app/rest/api/stack.js
index 6512c5128..9899b0043 100644
--- a/app/rest/api/stack.js
+++ b/app/rest/api/stack.js
@@ -7,8 +7,8 @@ angular.module('portainer.rest')
{
get: { method: 'GET', params: { id: '@id' } },
query: { method: 'GET', isArray: true },
- create: { method: 'POST' },
- update: { method: 'PUT', params: { id: '@id' } },
+ create: { method: 'POST', ignoreLoadingBar: true },
+ update: { method: 'PUT', params: { id: '@id' }, ignoreLoadingBar: true },
remove: { method: 'DELETE', params: { id: '@id'} },
getStackFile: { method: 'GET', params: { id : '@id', action: 'stackfile' } }
});
diff --git a/app/rest/api/team.js b/app/rest/api/team.js
index 0c98e8742..85537f70f 100644
--- a/app/rest/api/team.js
+++ b/app/rest/api/team.js
@@ -2,7 +2,7 @@ angular.module('portainer.rest')
.factory('Teams', ['$resource', 'API_ENDPOINT_TEAMS', function TeamsFactory($resource, API_ENDPOINT_TEAMS) {
'use strict';
return $resource(API_ENDPOINT_TEAMS + '/:id/:entity/:entityId', {}, {
- create: { method: 'POST' },
+ create: { method: 'POST', ignoreLoadingBar: true },
query: { method: 'GET', isArray: true },
get: { method: 'GET', params: { id: '@id' } },
update: { method: 'PUT', params: { id: '@id' } },
diff --git a/app/rest/api/teamMembership.js b/app/rest/api/teamMembership.js
index 51d503265..f7293d591 100644
--- a/app/rest/api/teamMembership.js
+++ b/app/rest/api/teamMembership.js
@@ -2,7 +2,7 @@ angular.module('portainer.rest')
.factory('TeamMemberships', ['$resource', 'API_ENDPOINT_TEAM_MEMBERSHIPS', function TeamMembershipsFactory($resource, API_ENDPOINT_TEAM_MEMBERSHIPS) {
'use strict';
return $resource(API_ENDPOINT_TEAM_MEMBERSHIPS + '/:id/:action', {}, {
- create: { method: 'POST' },
+ create: { method: 'POST', ignoreLoadingBar: true },
query: { method: 'GET', isArray: true },
update: { method: 'PUT', params: { id: '@id' } },
remove: { method: 'DELETE', params: { id: '@id'} }
diff --git a/app/rest/api/user.js b/app/rest/api/user.js
index 12a8df34a..6337d2949 100644
--- a/app/rest/api/user.js
+++ b/app/rest/api/user.js
@@ -2,15 +2,15 @@ angular.module('portainer.rest')
.factory('Users', ['$resource', 'API_ENDPOINT_USERS', function UsersFactory($resource, API_ENDPOINT_USERS) {
'use strict';
return $resource(API_ENDPOINT_USERS + '/:id/:entity/:entityId', {}, {
- create: { method: 'POST' },
+ create: { method: 'POST', ignoreLoadingBar: true },
query: { method: 'GET', isArray: true },
get: { method: 'GET', params: { id: '@id' } },
- update: { method: 'PUT', params: { id: '@id' } },
+ update: { method: 'PUT', params: { id: '@id' }, ignoreLoadingBar: true },
remove: { method: 'DELETE', params: { id: '@id'} },
queryMemberships: { method: 'GET', isArray: true, params: { id: '@id', entity: 'memberships' } },
// RPCs should be moved to a specific endpoint
- checkPassword: { method: 'POST', params: { id: '@id', entity: 'passwd' } },
- checkAdminUser: { method: 'GET', params: { id: 'admin', entity: 'check' }, isArray: true },
- initAdminUser: { method: 'POST', params: { id: 'admin', entity: 'init' } }
+ checkPassword: { method: 'POST', params: { id: '@id', entity: 'passwd' }, ignoreLoadingBar: true },
+ checkAdminUser: { method: 'GET', params: { id: 'admin', entity: 'check' }, isArray: true, ignoreLoadingBar: true },
+ initAdminUser: { method: 'POST', params: { id: 'admin', entity: 'init' }, ignoreLoadingBar: true }
});
}]);
diff --git a/app/rest/docker/config.js b/app/rest/docker/config.js
index 330692fbe..6504375c4 100644
--- a/app/rest/docker/config.js
+++ b/app/rest/docker/config.js
@@ -6,7 +6,7 @@ angular.module('portainer.rest')
}, {
get: { method: 'GET', params: { id: '@id' } },
query: { method: 'GET', isArray: true },
- create: { method: 'POST', params: { action: 'create' } },
+ create: { method: 'POST', params: { action: 'create' }, ignoreLoadingBar: true },
remove: { method: 'DELETE', params: { id: '@id' } }
});
}]);
diff --git a/app/rest/docker/container.js b/app/rest/docker/container.js
index 25ab3b2da..a3a37604b 100644
--- a/app/rest/docker/container.js
+++ b/app/rest/docker/container.js
@@ -15,11 +15,11 @@ angular.module('portainer.rest')
unpause: {method: 'POST', params: {id: '@id', action: 'unpause'}},
stats: {
method: 'GET', params: { id: '@id', stream: false, action: 'stats' },
- timeout: 4500
+ timeout: 4500, ignoreLoadingBar: true
},
top: {
method: 'GET', params: { id: '@id', action: 'top' },
- timeout: 4500
+ timeout: 4500, ignoreLoadingBar: true
},
start: {
method: 'POST', params: {id: '@id', action: 'start'},
@@ -27,7 +27,8 @@ angular.module('portainer.rest')
},
create: {
method: 'POST', params: {action: 'create'},
- transformResponse: genericHandler
+ transformResponse: genericHandler,
+ ignoreLoadingBar: true
},
remove: {
method: 'DELETE', params: {id: '@id', v: '@v', force: '@force'},
@@ -39,7 +40,7 @@ angular.module('portainer.rest')
},
exec: {
method: 'POST', params: {id: '@id', action: 'exec'},
- transformResponse: genericHandler
+ transformResponse: genericHandler, ignoreLoadingBar: true
},
inspect: {
method: 'GET', params: { id: '@id', action: 'json' }
diff --git a/app/rest/docker/containerCommit.js b/app/rest/docker/containerCommit.js
index c8007f47d..54b9d47eb 100644
--- a/app/rest/docker/containerCommit.js
+++ b/app/rest/docker/containerCommit.js
@@ -5,6 +5,6 @@ angular.module('portainer.rest')
endpointId: EndpointProvider.endpointID
},
{
- commit: {method: 'POST', params: {container: '@id', repo: '@repo', tag: '@tag'}}
+ commit: {method: 'POST', params: {container: '@id', repo: '@repo', tag: '@tag'}, ignoreLoadingBar: true}
});
}]);
diff --git a/app/rest/docker/containerLogs.js b/app/rest/docker/containerLogs.js
index 6b77fabb9..a08181686 100644
--- a/app/rest/docker/containerLogs.js
+++ b/app/rest/docker/containerLogs.js
@@ -11,7 +11,8 @@ angular.module('portainer.rest')
'stderr': params.stderr || 0,
'timestamps': params.timestamps || 0,
'tail': params.tail || 'all'
- }
+ },
+ ignoreLoadingBar: true
}).success(callback).error(function (data, status, headers, config) {
console.log(data);
});
diff --git a/app/rest/docker/exec.js b/app/rest/docker/exec.js
index 530975678..d852a3296 100644
--- a/app/rest/docker/exec.js
+++ b/app/rest/docker/exec.js
@@ -7,7 +7,7 @@ angular.module('portainer.rest')
{
resize: {
method: 'POST', params: {id: '@id', action: 'resize', h: '@height', w: '@width'},
- transformResponse: genericHandler
+ transformResponse: genericHandler, ignoreLoadingBar: true
}
});
}]);
diff --git a/app/rest/docker/image.js b/app/rest/docker/image.js
index 439a10861..fa08c6dad 100644
--- a/app/rest/docker/image.js
+++ b/app/rest/docker/image.js
@@ -11,17 +11,19 @@ angular.module('portainer.rest')
search: {method: 'GET', params: {action: 'search'}},
history: {method: 'GET', params: {action: 'history'}, isArray: true},
insert: {method: 'POST', params: {id: '@id', action: 'insert'}},
- tag: {method: 'POST', params: {id: '@id', action: 'tag', force: 0, repo: '@repo', tag: '@tag'}},
+ tag: {method: 'POST', params: {id: '@id', action: 'tag', force: 0, repo: '@repo', tag: '@tag'}, ignoreLoadingBar: true},
inspect: {method: 'GET', params: {id: '@id', action: 'json'}},
push: {
method: 'POST', params: {action: 'push', id: '@tag'},
isArray: true, transformResponse: jsonObjectsToArrayHandler,
- headers: { 'X-Registry-Auth': HttpRequestHelper.registryAuthenticationHeader }
+ headers: { 'X-Registry-Auth': HttpRequestHelper.registryAuthenticationHeader },
+ ignoreLoadingBar: true
},
create: {
method: 'POST', params: {action: 'create', fromImage: '@fromImage', tag: '@tag'},
isArray: true, transformResponse: jsonObjectsToArrayHandler,
- headers: { 'X-Registry-Auth': HttpRequestHelper.registryAuthenticationHeader }
+ headers: { 'X-Registry-Auth': HttpRequestHelper.registryAuthenticationHeader },
+ ignoreLoadingBar: true
},
remove: {
method: 'DELETE', params: {id: '@id', force: '@force'},
diff --git a/app/rest/docker/network.js b/app/rest/docker/network.js
index 561b00a9d..dd1a1e045 100644
--- a/app/rest/docker/network.js
+++ b/app/rest/docker/network.js
@@ -8,7 +8,7 @@ angular.module('portainer.rest')
{
query: {method: 'GET', isArray: true},
get: {method: 'GET'},
- create: {method: 'POST', params: {action: 'create'}, transformResponse: genericHandler},
+ create: {method: 'POST', params: {action: 'create'}, transformResponse: genericHandler, ignoreLoadingBar: true},
remove: { method: 'DELETE', transformResponse: genericHandler },
connect: {method: 'POST', params: {action: 'connect'}},
disconnect: {method: 'POST', params: {action: 'disconnect'}}
diff --git a/app/rest/docker/secret.js b/app/rest/docker/secret.js
index 38a593248..4edb6ca4d 100644
--- a/app/rest/docker/secret.js
+++ b/app/rest/docker/secret.js
@@ -6,7 +6,7 @@ angular.module('portainer.rest')
}, {
get: { method: 'GET', params: {id: '@id'} },
query: { method: 'GET', isArray: true },
- create: { method: 'POST', params: {action: 'create'} },
+ create: { method: 'POST', params: {action: 'create'}, ignoreLoadingBar: true },
remove: { method: 'DELETE', params: {id: '@id'} }
});
}]);
diff --git a/app/rest/docker/service.js b/app/rest/docker/service.js
index 466ded8e8..877d8fa30 100644
--- a/app/rest/docker/service.js
+++ b/app/rest/docker/service.js
@@ -9,7 +9,8 @@ angular.module('portainer.rest')
query: { method: 'GET', isArray: true, params: {filters: '@filters'} },
create: {
method: 'POST', params: {action: 'create'},
- headers: { 'X-Registry-Auth': HttpRequestHelper.registryAuthenticationHeader }
+ headers: { 'X-Registry-Auth': HttpRequestHelper.registryAuthenticationHeader },
+ ignoreLoadingBar: true
},
update: { method: 'POST', params: {id: '@id', action: 'update', version: '@version'} },
remove: { method: 'DELETE', params: {id: '@id'} }
diff --git a/app/rest/docker/system.js b/app/rest/docker/system.js
index 8636ef348..9e9a484d9 100644
--- a/app/rest/docker/system.js
+++ b/app/rest/docker/system.js
@@ -6,8 +6,8 @@ angular.module('portainer.rest')
endpointId: EndpointProvider.endpointID
},
{
- info: { method: 'GET', params: { action: 'info' } },
- version: { method: 'GET', params: { action: 'version' } },
+ info: { method: 'GET', params: { action: 'info' }, ignoreLoadingBar: true },
+ version: { method: 'GET', params: { action: 'version' }, ignoreLoadingBar: true },
events: {
method: 'GET', params: { action: 'events', since: '@since', until: '@until' },
isArray: true, transformResponse: jsonObjectsToArrayHandler
diff --git a/app/rest/docker/volume.js b/app/rest/docker/volume.js
index 1ae1264f9..32214303c 100644
--- a/app/rest/docker/volume.js
+++ b/app/rest/docker/volume.js
@@ -8,7 +8,7 @@ angular.module('portainer.rest')
{
query: { method: 'GET' },
get: { method: 'GET', params: {id: '@id'} },
- create: {method: 'POST', params: {action: 'create'}, transformResponse: genericHandler},
+ create: {method: 'POST', params: {action: 'create'}, transformResponse: genericHandler, ignoreLoadingBar: true},
remove: {
method: 'DELETE', transformResponse: genericHandler, params: {id: '@id'}
}
diff --git a/app/services/fileUpload.js b/app/services/fileUpload.js
index da121eec6..4efc3b5cd 100644
--- a/app/services/fileUpload.js
+++ b/app/services/fileUpload.js
@@ -10,7 +10,16 @@ angular.module('portainer.services')
service.createStack = function(stackName, swarmId, file, env) {
var endpointID = EndpointProvider.endpointID();
- return Upload.upload({ url: 'api/endpoints/' + endpointID + '/stacks?method=file', data: { file: file, Name: stackName, SwarmID: swarmId, Env: Upload.json(env) } });
+ return Upload.upload({
+ url: 'api/endpoints/' + endpointID + '/stacks?method=file',
+ data: {
+ file: file,
+ Name: stackName,
+ SwarmID: swarmId,
+ Env: Upload.json(env)
+ },
+ ignoreLoadingBar: true
+ });
};
service.uploadLDAPTLSFiles = function(TLSCAFile, TLSCertFile, TLSKeyFile) {
diff --git a/assets/css/app.css b/assets/css/app.css
index 3f6979afb..0e409c13d 100644
--- a/assets/css/app.css
+++ b/assets/css/app.css
@@ -1,8 +1,12 @@
-html, body, #content-wrapper, .page-content, #view {
+html, body, #page-wrapper, #content-wrapper, .page-content, #view {
height: 100%;
width: 100%;
}
+#view {
+ position: relative;
+}
+
.white-space-normal {
white-space: normal !important;
}
@@ -359,6 +363,11 @@ ul.sidebar .sidebar-list a.active {
padding-right: 0;
}
+.createResource {
+ margin-left: 5px;
+ font-size: 90%;
+}
+
ul.sidebar .sidebar-list .sidebar-sublist a {
text-indent: 35px;
font-size: 12px;
@@ -692,6 +701,19 @@ ul.sidebar .sidebar-list .sidebar-sublist a.active {
}
/*!toaster override*/
+/*angular-loading-bar override*/
+#loadingbar-placeholder {
+ margin-bottom: 0;
+ height: 3px;
+}
+
+#loading-bar .bar {
+ position: relative;
+ height: 3px;
+ background: #738bc0;
+}
+/*!angular-loading-bar override*/
+
.monospaced {
font-family: monospace;
font-weight: 600;
@@ -713,3 +735,7 @@ json-tree .branch-preview {
font-size: 11px;
opacity: .5;
}
+
+.row.header .meta .page {
+ padding-top: 7px;
+}
diff --git a/bower.json b/bower.json
index faa85bf65..c675f5646 100644
--- a/bower.json
+++ b/bower.json
@@ -1,6 +1,6 @@
{
"name": "portainer",
- "version": "1.15.1",
+ "version": "1.15.2",
"homepage": "https://github.com/portainer/portainer",
"authors": [
"Anthony Lapenna
"
@@ -53,7 +53,8 @@
"angularjs-slider": "^6.4.0",
"angular-ui-router": "~1.0.6",
"codemirror": "~5.30.0",
- "js-yaml": "~3.10.0"
+ "js-yaml": "~3.10.0",
+ "angular-loading-bar": "~0.9.0"
},
"resolutions": {
"angular": "1.5.11"
diff --git a/distribution/portainer.spec b/distribution/portainer.spec
index a2d06e102..79a2bc69f 100644
--- a/distribution/portainer.spec
+++ b/distribution/portainer.spec
@@ -1,5 +1,5 @@
Name: portainer
-Version: 1.15.1
+Version: 1.15.2
Release: 0
License: Zlib
Summary: A lightweight docker management UI
diff --git a/package.json b/package.json
index eb476ea2a..56a743e66 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"author": "Portainer.io",
"name": "portainer",
"homepage": "http://portainer.io",
- "version": "1.15.1",
+ "version": "1.15.2",
"repository": {
"type": "git",
"url": "git@github.com:portainer/portainer.git"
diff --git a/vendor.yml b/vendor.yml
index 134914a7d..7602aaadb 100644
--- a/vendor.yml
+++ b/vendor.yml
@@ -48,6 +48,7 @@ css:
- bower_components/codemirror/lib/codemirror.css
- bower_components/codemirror/addon/lint/lint.css
- bower_components/angular-json-tree/dist/angular-json-tree.css
+ - bower_components/angular-loading-bar/build/loading-bar.css
minified:
- bower_components/bootstrap/dist/css/bootstrap.min.css
- bower_components/rdash-ui/dist/css/rdash.min.css
@@ -60,6 +61,7 @@ css:
- bower_components/codemirror/lib/codemirror.css
- bower_components/codemirror/addon/lint/lint.css
- bower_components/angular-json-tree/dist/angular-json-tree.css
+ - bower_components/angular-loading-bar/build/loading-bar.min.css
angular:
regular:
- bower_components/angular/angular.js
@@ -77,6 +79,7 @@ angular:
- bower_components/angularjs-slider/dist/rzslider.js
- bower_components/angular-multi-select/isteven-multi-select.js
- bower_components/angular-json-tree/dist/angular-json-tree.js
+ - bower_components/angular-loading-bar/build/loading-bar.js
minified:
- bower_components/angular/angular.min.js
- bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js
@@ -93,3 +96,4 @@ angular:
- bower_components/angularjs-slider/dist/rzslider.min.js
- bower_components/angular-multi-select/isteven-multi-select.js
- bower_components/angular-json-tree/dist/angular-json-tree.min.js
+ - bower_components/angular-loading-bar/build/loading-bar.min.js