diff --git a/api/main.go b/api/main.go
index fab02cf04..82fbd5651 100644
--- a/api/main.go
+++ b/api/main.go
@@ -6,7 +6,7 @@ import (
// main is the entry point of the program
func main() {
- kingpin.Version("1.10.1")
+ kingpin.Version("1.10.2")
var (
endpoint = kingpin.Flag("host", "Dockerd endpoint").Default("unix:///var/run/docker.sock").Short('H').String()
addr = kingpin.Flag("bind", "Address and port to serve Portainer").Default(":9000").Short('p').String()
diff --git a/app/app.js b/app/app.js
index cf692c341..f06c050fc 100644
--- a/app/app.js
+++ b/app/app.js
@@ -5,6 +5,7 @@ angular.module('portainer', [
'ui.select',
'ngCookies',
'ngSanitize',
+ 'angularUtils.directives.dirPagination',
'portainer.services',
'portainer.helpers',
'portainer.filters',
@@ -188,4 +189,5 @@ angular.module('portainer', [
.constant('DOCKER_PORT', '') // Docker port, leave as an empty string if no port is requred. If you have a port, prefix it with a ':' i.e. :4243
.constant('CONFIG_ENDPOINT', 'settings')
.constant('TEMPLATES_ENDPOINT', 'templates')
- .constant('UI_VERSION', 'v1.10.1');
+ .constant('PAGINATION_MAX_ITEMS', 10)
+ .constant('UI_VERSION', 'v1.10.2');
diff --git a/app/components/container/container.html b/app/components/container/container.html
index 801898ff2..a638a403b 100644
--- a/app/components/container/container.html
+++ b/app/components/container/container.html
@@ -207,7 +207,6 @@
-
@@ -218,7 +217,7 @@
Actions
-
+
{{ key }}
{{ value.IPAddress || '-' }}
{{ value.Gateway || '-' }}
@@ -229,6 +228,9 @@
+
diff --git a/app/components/container/containerController.js b/app/components/container/containerController.js
index 87d996f44..27780b4da 100644
--- a/app/components/container/containerController.js
+++ b/app/components/container/containerController.js
@@ -1,12 +1,13 @@
angular.module('container', [])
-.controller('ContainerController', ['$scope', '$state','$stateParams', '$filter', 'Container', 'ContainerCommit', 'ImageHelper', 'Network', 'Messages',
-function ($scope, $state, $stateParams, $filter, Container, ContainerCommit, ImageHelper, Network, Messages) {
+.controller('ContainerController', ['$scope', '$state','$stateParams', '$filter', 'Container', 'ContainerCommit', 'ImageHelper', 'Network', 'Messages', 'Settings',
+function ($scope, $state, $stateParams, $filter, Container, ContainerCommit, ImageHelper, Network, Messages, Settings) {
$scope.activityTime = 0;
$scope.portBindings = [];
$scope.config = {
Image: '',
Registry: ''
};
+ $scope.pagination_count = Settings.pagination_count;
var update = function () {
$('#loadingViewSpinner').show();
diff --git a/app/components/containers/containers.html b/app/components/containers/containers.html
index a0b0f7629..97a9f677a 100644
--- a/app/components/containers/containers.html
+++ b/app/components/containers/containers.html
@@ -83,7 +83,7 @@
-
+
{{ container.Status|containerstatus }}
{{ container|swarmcontainername}}
@@ -106,6 +106,9 @@
+
diff --git a/app/components/containers/containersController.js b/app/components/containers/containersController.js
index caef7c94b..63db2d0b9 100644
--- a/app/components/containers/containersController.js
+++ b/app/components/containers/containersController.js
@@ -8,6 +8,7 @@ function ($scope, Container, ContainerHelper, Info, Settings, Messages, Config)
$scope.sortReverse = false;
$scope.state.selectedItemCount = 0;
$scope.swarm_mode = false;
+ $scope.pagination_count = Settings.pagination_count;
$scope.order = function (sortType) {
$scope.sortReverse = ($scope.sortType === sortType) ? !$scope.sortReverse : false;
diff --git a/app/components/createService/createServiceController.js b/app/components/createService/createServiceController.js
index 7cc0767e3..4f7619e6c 100644
--- a/app/components/createService/createServiceController.js
+++ b/app/components/createService/createServiceController.js
@@ -13,6 +13,7 @@ function ($scope, $state, Service, Volume, Network, ImageHelper, Messages) {
User: '',
Env: [],
Labels: [],
+ ContainerLabels: [],
Volumes: [],
Network: '',
ExtraNetworks: [],
@@ -59,6 +60,14 @@ function ($scope, $state, Service, Volume, Network, ImageHelper, Messages) {
$scope.formValues.Labels.splice(index, 1);
};
+ $scope.addContainerLabel = function() {
+ $scope.formValues.ContainerLabels.push({ name: '', value: ''});
+ };
+
+ $scope.removeContainerLabel = function(index) {
+ $scope.formValues.ContainerLabels.splice(index, 1);
+ };
+
function prepareImageConfig(config, input) {
var imageConfig = ImageHelper.createImageConfig(input.Image, input.Registry);
config.TaskTemplate.ContainerSpec.Image = imageConfig.repo + ':' + imageConfig.tag;
@@ -113,7 +122,15 @@ function ($scope, $state, Service, Volume, Network, ImageHelper, Messages) {
labels[label.name] = label.value;
}
});
- config.TaskTemplate.ContainerSpec.Labels = labels;
+ config.Labels = labels;
+
+ var containerLabels = {};
+ input.ContainerLabels.forEach(function (label) {
+ if (label.name && label.value) {
+ containerLabels[label.name] = label.value;
+ }
+ });
+ config.TaskTemplate.ContainerSpec.Labels = containerLabels;
}
function prepareVolumes(config, input) {
diff --git a/app/components/createService/createservice.html b/app/components/createService/createservice.html
index c6e68a7dc..a1d017fd8 100644
--- a/app/components/createService/createservice.html
+++ b/app/components/createService/createservice.html
@@ -284,6 +284,35 @@
+
+
+
diff --git a/app/components/events/events.html b/app/components/events/events.html
index f68971578..d0de750ab 100644
--- a/app/components/events/events.html
+++ b/app/components/events/events.html
@@ -49,13 +49,16 @@
-
+
{{ event.Time|getisodatefromtimestamp }}
{{ event.Type }}
{{ event.Details }}
+
diff --git a/app/components/events/eventsController.js b/app/components/events/eventsController.js
index 3ee19e4de..330e388ec 100644
--- a/app/components/events/eventsController.js
+++ b/app/components/events/eventsController.js
@@ -4,6 +4,7 @@ function ($scope, Settings, Messages, Events) {
$scope.state = {};
$scope.sortType = 'Time';
$scope.sortReverse = true;
+ $scope.pagination_count = Settings.pagination_count;
$scope.order = function(sortType) {
$scope.sortReverse = ($scope.sortType === sortType) ? !$scope.sortReverse : false;
diff --git a/app/components/images/images.html b/app/components/images/images.html
index d112a98d4..6e44d4e72 100644
--- a/app/components/images/images.html
+++ b/app/components/images/images.html
@@ -98,7 +98,7 @@
-
+
{{ image.Id|truncate:20}}
@@ -115,6 +115,9 @@
+
diff --git a/app/components/images/imagesController.js b/app/components/images/imagesController.js
index 99b2ceb44..685d287cb 100644
--- a/app/components/images/imagesController.js
+++ b/app/components/images/imagesController.js
@@ -1,10 +1,11 @@
angular.module('images', [])
-.controller('ImagesController', ['$scope', '$state', 'Config', 'Image', 'Messages',
-function ($scope, $state, Config, Image, Messages) {
+.controller('ImagesController', ['$scope', '$state', 'Config', 'Image', 'Messages', 'Settings',
+function ($scope, $state, Config, Image, Messages, Settings) {
$scope.state = {};
$scope.sortType = 'RepoTags';
$scope.sortReverse = true;
$scope.state.selectedItemCount = 0;
+ $scope.pagination_count = Settings.pagination_count;
$scope.config = {
Image: '',
diff --git a/app/components/networks/networks.html b/app/components/networks/networks.html
index cfdd446a5..b8ef43cd4 100644
--- a/app/components/networks/networks.html
+++ b/app/components/networks/networks.html
@@ -121,7 +121,7 @@
-
+
{{ network.Name|truncate:40}}
{{ network.Id }}
@@ -139,6 +139,9 @@
+
diff --git a/app/components/networks/networksController.js b/app/components/networks/networksController.js
index 4178cd047..e4ba34b9a 100644
--- a/app/components/networks/networksController.js
+++ b/app/components/networks/networksController.js
@@ -1,11 +1,12 @@
angular.module('networks', [])
-.controller('NetworksController', ['$scope', '$state', 'Network', 'Config', 'Messages',
-function ($scope, $state, Network, Config, Messages) {
+.controller('NetworksController', ['$scope', '$state', 'Network', 'Config', 'Messages', 'Settings',
+function ($scope, $state, Network, Config, Messages, Settings) {
$scope.state = {};
$scope.state.selectedItemCount = 0;
$scope.state.advancedSettings = false;
$scope.sortType = 'Name';
$scope.sortReverse = false;
+ $scope.pagination_count = Settings.pagination_count;
$scope.config = {
Name: ''
};
diff --git a/app/components/service/service.html b/app/components/service/service.html
index 175604154..194f06228 100644
--- a/app/components/service/service.html
+++ b/app/components/service/service.html
@@ -137,6 +137,37 @@
+
+ Container labels
+
+
+
+
@@ -190,7 +221,7 @@
-
+
{{ task.Id }}
{{ task.Status }}
{{ task.Slot }}
@@ -199,6 +230,9 @@
+
diff --git a/app/components/service/serviceController.js b/app/components/service/serviceController.js
index 5c40fde38..ca45c97b6 100644
--- a/app/components/service/serviceController.js
+++ b/app/components/service/serviceController.js
@@ -1,12 +1,13 @@
angular.module('service', [])
-.controller('ServiceController', ['$scope', '$stateParams', '$state', 'Service', 'ServiceHelper', 'Task', 'Node', 'Messages',
-function ($scope, $stateParams, $state, Service, ServiceHelper, Task, Node, Messages) {
+.controller('ServiceController', ['$scope', '$stateParams', '$state', 'Service', 'ServiceHelper', 'Task', 'Node', 'Messages', 'Settings',
+function ($scope, $stateParams, $state, Service, ServiceHelper, Task, Node, Messages, Settings) {
$scope.service = {};
$scope.tasks = [];
$scope.displayNode = false;
$scope.sortType = 'Status';
$scope.sortReverse = false;
+ $scope.pagination_count = Settings.pagination_count;
var previousServiceValues = {};
@@ -50,6 +51,14 @@ function ($scope, $stateParams, $state, Service, ServiceHelper, Task, Node, Mess
$scope.updateLabel = function updateLabel(service, label) {
service.hasChanges = service.hasChanges || label.value !== label.originalValue;
};
+ $scope.addContainerLabel = function addContainerLabel(service) {
+ service.hasChanges = true;
+ service.ServiceContainerLabels.push({ key: '', value: '', originalValue: '' });
+ };
+ $scope.removeContainerLabel = function removeContainerLabel(service, index) {
+ var removedElement = service.ServiceContainerLabels.splice(index, 1);
+ service.hasChanges = service.hasChanges || removedElement !== null;
+ };
$scope.cancelChanges = function changeServiceImage(service) {
Object.keys(previousServiceValues).forEach(function(attribute) {
@@ -60,6 +69,7 @@ function ($scope, $stateParams, $state, Service, ServiceHelper, Task, Node, Mess
// clear out environment variable changes
service.EnvironmentVariables = translateEnvironmentVariables(service.Env);
service.ServiceLabels = translateLabelsToServiceLabels(service.Labels);
+ service.ServiceContainerLabels = translateLabelsToServiceLabels(service.ContainerLabels);
service.hasChanges = false;
};
@@ -68,8 +78,9 @@ function ($scope, $stateParams, $state, Service, ServiceHelper, Task, Node, Mess
$('#loadServicesSpinner').show();
var config = ServiceHelper.serviceToConfig(service.Model);
config.Name = service.newServiceName;
+ config.Labels = translateServiceLabelsToLabels(service.ServiceLabels);
config.TaskTemplate.ContainerSpec.Env = translateEnvironmentVariablesToEnv(service.EnvironmentVariables);
- config.TaskTemplate.ContainerSpec.Labels = translateServiceLabelsToLabels(service.ServiceLabels);
+ config.TaskTemplate.ContainerSpec.Labels = translateServiceLabelsToLabels(service.ServiceContainerLabels);
config.TaskTemplate.ContainerSpec.Image = service.newServiceImage;
if (service.Mode === 'replicated') {
config.Mode.Replicated.Replicas = service.Replicas;
@@ -112,6 +123,7 @@ function ($scope, $stateParams, $state, Service, ServiceHelper, Task, Node, Mess
service.newServiceReplicas = service.Replicas;
service.EnvironmentVariables = translateEnvironmentVariables(service.Env);
service.ServiceLabels = translateLabelsToServiceLabels(service.Labels);
+ service.ServiceContainerLabels = translateLabelsToServiceLabels(service.ContainerLabels);
$scope.service = service;
Task.query({filters: {service: [service.Name]}}, function (tasks) {
@@ -152,7 +164,8 @@ function ($scope, $stateParams, $state, Service, ServiceHelper, Task, Node, Mess
if (env) {
var variables = [];
env.forEach(function(variable) {
- var keyValue = variable.split('=');
+ var idx = variable.indexOf('=');
+ var keyValue = [variable.slice(0,idx), variable.slice(idx+1)];
var originalValue = (keyValue.length > 1) ? keyValue[1] : '';
variables.push({ key: keyValue[0], value: originalValue, originalValue: originalValue, added: true});
});
diff --git a/app/components/services/services.html b/app/components/services/services.html
index 5dd47f3ba..ced183077 100644
--- a/app/components/services/services.html
+++ b/app/components/services/services.html
@@ -52,7 +52,7 @@
-
+
{{ service.Name }}
{{ service.Image }}
@@ -77,6 +77,9 @@
+
diff --git a/app/components/services/servicesController.js b/app/components/services/servicesController.js
index 52ff25a86..e30eb1e9a 100644
--- a/app/components/services/servicesController.js
+++ b/app/components/services/servicesController.js
@@ -1,10 +1,11 @@
angular.module('services', [])
-.controller('ServicesController', ['$scope', '$stateParams', '$state', 'Service', 'ServiceHelper', 'Messages',
-function ($scope, $stateParams, $state, Service, ServiceHelper, Messages) {
+.controller('ServicesController', ['$scope', '$stateParams', '$state', 'Service', 'ServiceHelper', 'Messages', 'Settings',
+function ($scope, $stateParams, $state, Service, ServiceHelper, Messages, Settings) {
$scope.state = {};
$scope.state.selectedItemCount = 0;
$scope.sortType = 'Name';
$scope.sortReverse = false;
+ $scope.pagination_count = Settings.pagination_count;
$scope.scaleService = function scaleService(service) {
$('#loadServicesSpinner').show();
diff --git a/app/components/stats/stats.html b/app/components/stats/stats.html
index 0d820bb02..961608f76 100644
--- a/app/components/stats/stats.html
+++ b/app/components/stats/stats.html
@@ -69,11 +69,14 @@
-
+
{{processInfo}}
+
diff --git a/app/components/stats/statsController.js b/app/components/stats/statsController.js
index c8c6368dc..88e6e1f34 100644
--- a/app/components/stats/statsController.js
+++ b/app/components/stats/statsController.js
@@ -7,6 +7,7 @@ function (Settings, $scope, Messages, $timeout, Container, ContainerTop, $stateP
$scope.state = {};
$scope.sortType = 'CMD';
$scope.sortReverse = false;
+ $scope.pagination_count = Settings.pagination_count;
$scope.order = function (sortType) {
$scope.sortReverse = ($scope.sortType === sortType) ? !$scope.sortReverse : false;
$scope.sortType = sortType;
diff --git a/app/components/swarm/swarm.html b/app/components/swarm/swarm.html
index 125b45c1e..5754c5973 100644
--- a/app/components/swarm/swarm.html
+++ b/app/components/swarm/swarm.html
@@ -117,7 +117,7 @@
-
+
{{ node.name }}
{{ node.cpu }}
{{ node.memory }}
@@ -127,6 +127,9 @@
+
@@ -182,7 +185,7 @@
-
+
{{ node.Description.Hostname }}
{{ node.Spec.Role }}
{{ node.Description.Resources.NanoCPUs / 1000000000 }}
@@ -192,6 +195,9 @@
+
diff --git a/app/components/swarm/swarmController.js b/app/components/swarm/swarmController.js
index a79954120..a04886564 100644
--- a/app/components/swarm/swarmController.js
+++ b/app/components/swarm/swarmController.js
@@ -1,6 +1,6 @@
angular.module('swarm', [])
-.controller('SwarmController', ['$scope', 'Info', 'Version', 'Node',
-function ($scope, Info, Version, Node) {
+.controller('SwarmController', ['$scope', 'Info', 'Version', 'Node', 'Settings',
+function ($scope, Info, Version, Node, Settings) {
$scope.sortType = 'Name';
$scope.sortReverse = true;
@@ -10,6 +10,7 @@ function ($scope, Info, Version, Node) {
$scope.swarm_mode = false;
$scope.totalCPU = 0;
$scope.totalMemory = 0;
+ $scope.pagination_count = Settings.pagination_count;
$scope.order = function(sortType) {
$scope.sortReverse = ($scope.sortType === sortType) ? !$scope.sortReverse : false;
diff --git a/app/components/templates/templates.html b/app/components/templates/templates.html
index b4557d364..49ef933c1 100644
--- a/app/components/templates/templates.html
+++ b/app/components/templates/templates.html
@@ -121,7 +121,7 @@
-
+
{{ tpl.title }}
{{ tpl.description }}
@@ -133,6 +133,9 @@
No templates available.
+
+
+
diff --git a/app/components/templates/templatesController.js b/app/components/templates/templatesController.js
index 179b256cc..1d442a9a3 100644
--- a/app/components/templates/templatesController.js
+++ b/app/components/templates/templatesController.js
@@ -1,6 +1,6 @@
angular.module('templates', [])
-.controller('TemplatesController', ['$scope', '$q', '$state', '$filter', 'Config', 'Info', 'Container', 'ContainerHelper', 'Image', 'Volume', 'Network', 'Templates', 'TemplateHelper', 'Messages',
-function ($scope, $q, $state, $filter, Config, Info, Container, ContainerHelper, Image, Volume, Network, Templates, TemplateHelper, Messages) {
+.controller('TemplatesController', ['$scope', '$q', '$state', '$filter', 'Config', 'Info', 'Container', 'ContainerHelper', 'Image', 'Volume', 'Network', 'Templates', 'TemplateHelper', 'Messages', 'Settings',
+function ($scope, $q, $state, $filter, Config, Info, Container, ContainerHelper, Image, Volume, Network, Templates, TemplateHelper, Messages, Settings) {
$scope.state = {
selectedTemplate: null,
showAdvancedOptions: false
@@ -10,6 +10,7 @@ function ($scope, $q, $state, $filter, Config, Info, Container, ContainerHelper,
name: "",
ports: []
};
+ $scope.pagination_count = Settings.pagination_count;
var selectedItem = -1;
@@ -183,7 +184,10 @@ function ($scope, $q, $state, $filter, Config, Info, Container, ContainerHelper,
function initTemplates() {
Templates.get(function (data) {
- $scope.templates = data;
+ $scope.templates = data.map(function(tpl,index){
+ tpl.index = index;
+ return tpl;
+ });
$('#loadTemplatesSpinner').hide();
}, function (e) {
$('#loadTemplatesSpinner').hide();
diff --git a/app/components/volumes/volumes.html b/app/components/volumes/volumes.html
index 609b00ccb..90c8894d9 100644
--- a/app/components/volumes/volumes.html
+++ b/app/components/volumes/volumes.html
@@ -53,7 +53,7 @@
-
+
{{ volume.Name|truncate:50 }}
{{ volume.Driver }}
@@ -67,6 +67,9 @@
+
diff --git a/app/components/volumes/volumesController.js b/app/components/volumes/volumesController.js
index 202b0835b..042458a90 100644
--- a/app/components/volumes/volumesController.js
+++ b/app/components/volumes/volumesController.js
@@ -1,6 +1,6 @@
angular.module('volumes', [])
-.controller('VolumesController', ['$scope', '$state', 'Volume', 'Messages',
-function ($scope, $state, Volume, Messages) {
+.controller('VolumesController', ['$scope', '$state', 'Volume', 'Messages', 'Settings',
+function ($scope, $state, Volume, Messages, Settings) {
$scope.state = {};
$scope.state.selectedItemCount = 0;
$scope.sortType = 'Name';
@@ -8,6 +8,7 @@ function ($scope, $state, Volume, Messages) {
$scope.config = {
Name: ''
};
+ $scope.pagination_count = Settings.pagination_count;
$scope.order = function(sortType) {
$scope.sortReverse = ($scope.sortType === sortType) ? !$scope.sortReverse : false;
@@ -54,7 +55,7 @@ function ($scope, $state, Volume, Messages) {
function fetchVolumes() {
$('#loadVolumesSpinner').show();
Volume.query({}, function (d) {
- $scope.volumes = d.Volumes;
+ $scope.volumes = d.Volumes || [];
$('#loadVolumesSpinner').hide();
}, function (e) {
$('#loadVolumesSpinner').hide();
diff --git a/app/shared/helpers.js b/app/shared/helpers.js
index 87ba6873f..2ccf027f7 100644
--- a/app/shared/helpers.js
+++ b/app/shared/helpers.js
@@ -41,8 +41,10 @@ angular.module('portainer.helpers', [])
serviceToConfig: function(service) {
return {
Name: service.Spec.Name,
+ Labels: service.Spec.Labels,
TaskTemplate: service.Spec.TaskTemplate,
Mode: service.Spec.Mode,
+ UpdateConfig: service.Spec.UpdateConfig,
Networks: service.Spec.Networks,
EndpointSpec: service.Spec.EndpointSpec
};
diff --git a/app/shared/services.js b/app/shared/services.js
index 62ba0f8c3..0a7bf27b3 100644
--- a/app/shared/services.js
+++ b/app/shared/services.js
@@ -213,7 +213,7 @@ angular.module('portainer.services', ['ngResource', 'ngSanitize'])
get: {method: 'GET', isArray: true}
});
}])
- .factory('Settings', ['DOCKER_ENDPOINT', 'DOCKER_PORT', 'UI_VERSION', function SettingsFactory(DOCKER_ENDPOINT, DOCKER_PORT, UI_VERSION) {
+ .factory('Settings', ['DOCKER_ENDPOINT', 'DOCKER_PORT', 'UI_VERSION', 'PAGINATION_MAX_ITEMS', function SettingsFactory(DOCKER_ENDPOINT, DOCKER_PORT, UI_VERSION, PAGINATION_MAX_ITEMS) {
'use strict';
var url = DOCKER_ENDPOINT;
if (DOCKER_PORT) {
@@ -225,7 +225,8 @@ angular.module('portainer.services', ['ngResource', 'ngSanitize'])
endpoint: DOCKER_ENDPOINT,
uiVersion: UI_VERSION,
url: url,
- firstLoad: firstLoad
+ firstLoad: firstLoad,
+ pagination_count: PAGINATION_MAX_ITEMS
};
}])
.factory('Messages', ['$rootScope', '$sanitize', function MessagesFactory($rootScope, $sanitize) {
diff --git a/app/shared/viewmodel.js b/app/shared/viewmodel.js
index 10f538aa2..e320c0752 100644
--- a/app/shared/viewmodel.js
+++ b/app/shared/viewmodel.js
@@ -35,8 +35,9 @@ function ServiceViewModel(data) {
} else {
this.Mode = 'global';
}
+ this.Labels = data.Spec.Labels;
if (data.Spec.TaskTemplate.ContainerSpec) {
- this.Labels = data.Spec.TaskTemplate.ContainerSpec.Labels;
+ this.ContainerLabels = data.Spec.TaskTemplate.ContainerSpec.Labels;
}
if (data.Spec.TaskTemplate.ContainerSpec.Env) {
this.Env = data.Spec.TaskTemplate.ContainerSpec.Env;
diff --git a/assets/css/app.css b/assets/css/app.css
index 5d3b23920..31b712997 100644
--- a/assets/css/app.css
+++ b/assets/css/app.css
@@ -202,3 +202,7 @@ input[type="radio"] {
font-size: 0.8em;
margin-bottom: 5px;
}
+
+.pagination-controls {
+ margin-left: 10px;
+}
diff --git a/bower.json b/bower.json
index efd0e8d09..793042685 100644
--- a/bower.json
+++ b/bower.json
@@ -1,6 +1,6 @@
{
"name": "portainer",
- "version": "1.10.1",
+ "version": "1.10.2",
"homepage": "https://github.com/portainer/portainer",
"authors": [
"Anthony Lapenna "
@@ -32,6 +32,7 @@
"angular-mocks": "~1.5.0",
"angular-resource": "~1.5.0",
"angular-ui-select": "~0.17.1",
+ "angular-utils-pagination": "~0.11.1",
"bootstrap": "~3.3.6",
"font-awesome": "~4.6.3",
"filesize": "~3.3.0",
diff --git a/gruntFile.js b/gruntFile.js
index 143f49ea2..00d99c317 100644
--- a/gruntFile.js
+++ b/gruntFile.js
@@ -196,6 +196,7 @@ module.exports = function (grunt) {
'bower_components/angular-ui-router/release/angular-ui-router.min.js',
'bower_components/angular-resource/angular-resource.min.js',
'bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js',
+ 'bower_components/angular-utils-pagination/dirPagination.js',
'bower_components/angular-ui-select/dist/select.min.js'],
dest: '<%= distdir %>/js/angular.js'
}
diff --git a/package.json b/package.json
index 6ac921697..1f34a2c0a 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"author": "Portainer.io",
"name": "portainer",
"homepage": "http://portainer.io",
- "version": "1.10.1",
+ "version": "1.10.2",
"repository": {
"type": "git",
"url": "git@github.com:portainer/portainer.git"