Compare commits
1 Commits
vault/rele
...
feat/ee-19
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b56531e67d |
@@ -13,6 +13,10 @@
|
||||
</div>
|
||||
<div class="menuContent">
|
||||
<div>
|
||||
<div class="md-checkbox">
|
||||
<input id="setting_anonymous_volumes" type="checkbox" ng-model="$ctrl.settings.showAnonymousVolumes" ng-change="$ctrl.onSettingsAnonymousVolumesChange()" />
|
||||
<label for="setting_anonymous_volumes">Show anonymous volumes</label>
|
||||
</div>
|
||||
<div class="md-checkbox">
|
||||
<input id="setting_auto_refresh" type="checkbox" ng-model="$ctrl.settings.repeater.autoRefresh" ng-change="$ctrl.onSettingsRepeaterChange()" />
|
||||
<label for="setting_auto_refresh">Auto refresh</label>
|
||||
@@ -136,10 +140,10 @@
|
||||
</a>
|
||||
</th>
|
||||
<th ng-if="$ctrl.showHostColumn">
|
||||
<a ng-click="$ctrl.changeOrderBy('NodeName')">
|
||||
<a ng-click="$ctrl.changeOrderBy('DisplayName')">
|
||||
Host
|
||||
<i class="fa fa-sort-alpha-down" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'NodeName' && !$ctrl.state.reverseOrder"></i>
|
||||
<i class="fa fa-sort-alpha-up" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'NodeName' && $ctrl.state.reverseOrder"></i>
|
||||
<i class="fa fa-sort-alpha-down" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'DisplayName' && !$ctrl.state.reverseOrder"></i>
|
||||
<i class="fa fa-sort-alpha-up" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'DisplayName' && $ctrl.state.reverseOrder"></i>
|
||||
</a>
|
||||
</th>
|
||||
<th>
|
||||
@@ -153,7 +157,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr
|
||||
dir-paginate="item in ($ctrl.state.filteredDataSet = ($ctrl.dataset | filter: $ctrl.applyFilters | filter:$ctrl.state.textFilter | orderBy:$ctrl.state.orderBy:$ctrl.state.reverseOrder | itemsPerPage: $ctrl.state.paginatedItemLimit))"
|
||||
dir-paginate="item in ($ctrl.state.filteredDataSet = ($ctrl.dataset | filter:$ctrl.applyFilters | filter:$ctrl.anonymousVolumesFilters | filter:$ctrl.state.textFilter | orderBy:$ctrl.state.orderBy:$ctrl.state.reverseOrder | itemsPerPage: $ctrl.state.paginatedItemLimit))"
|
||||
ng-class="{ active: item.Checked }"
|
||||
>
|
||||
<td>
|
||||
@@ -176,7 +180,7 @@
|
||||
<td>{{ item.Driver }}</td>
|
||||
<td>{{ item.Mountpoint | truncatelr }}</td>
|
||||
<td>{{ item.CreatedAt | getisodate }}</td>
|
||||
<td ng-if="$ctrl.showHostColumn">{{ item.NodeName ? item.NodeName : '-' }}</td>
|
||||
<td ng-if="$ctrl.showHostColumn">{{ item.DisplayName ? item.DisplayName : '-' }}</td>
|
||||
<td>
|
||||
<span>
|
||||
<i ng-class="item.ResourceControl.Ownership | ownershipicon" aria-hidden="true"></i>
|
||||
|
||||
@@ -25,6 +25,16 @@ angular.module('portainer.docker').controller('VolumesDatatableController', [
|
||||
return false;
|
||||
};
|
||||
|
||||
this.applyFilters = anonymousVolumesFilters.bind(this);
|
||||
function anonymousVolumesFilters(value) {
|
||||
var volume = value;
|
||||
var isAnonymous = volume.Id.match('[A-z0-9]{32}') != null;
|
||||
if (isAnonymous && !this.settings.showAnonymousVolumes) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
this.onstateFilterChange = function () {
|
||||
var filters = this.filters.state;
|
||||
var filtered = false;
|
||||
@@ -35,6 +45,10 @@ angular.module('portainer.docker').controller('VolumesDatatableController', [
|
||||
DatatableService.setDataTableFilters(this.tableKey, this.filters);
|
||||
};
|
||||
|
||||
this.onSettingsAnonymousVolumesChange = function () {
|
||||
DatatableService.setDataTableSettings(this.tableKey, this.settings);
|
||||
};
|
||||
|
||||
this.$onInit = function () {
|
||||
this.setDefaults();
|
||||
this.prepareTableFromDataset();
|
||||
@@ -64,6 +78,13 @@ angular.module('portainer.docker').controller('VolumesDatatableController', [
|
||||
if (storedSettings !== null) {
|
||||
this.settings = storedSettings;
|
||||
this.settings.open = false;
|
||||
if (typeof this.settings.showAnonymousVolumes == 'undefined') {
|
||||
// Anonymous volumes will be shown by default.
|
||||
this.settings.showAnonymousVolumes = true;
|
||||
}
|
||||
} else {
|
||||
// Anonymous volumes will be shown by default.
|
||||
this.settings.showAnonymousVolumes = true;
|
||||
}
|
||||
this.onSettingsRepeaterChange();
|
||||
};
|
||||
|
||||
@@ -53,13 +53,45 @@ angular.module('portainer.docker').controller('VolumesController', [
|
||||
.then(function success(data) {
|
||||
var services = data.services;
|
||||
$scope.offlineMode = EndpointProvider.offlineMode();
|
||||
$scope.volumes = data.attached
|
||||
// Aggregate volume
|
||||
var attachedVolumes = new Array();
|
||||
var merged = false;
|
||||
for (let volume of data.attached) {
|
||||
volume.DisplayName = volume.NodeName;
|
||||
merged = false;
|
||||
for (let attvlm of attachedVolumes) {
|
||||
if (attvlm.Id === volume.Id && attvlm.ResourceId === volume.ResourceId) {
|
||||
attvlm.DisplayName = attvlm.DisplayName + ', ' + volume.DisplayName;
|
||||
merged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!merged) {
|
||||
attachedVolumes.push(volume);
|
||||
}
|
||||
}
|
||||
var danglingVolumes = new Array();
|
||||
for (let volume of data.dangling) {
|
||||
volume.DisplayName = volume.NodeName;
|
||||
merged = false;
|
||||
for (let attvlm of danglingVolumes) {
|
||||
if (attvlm.Id === volume.Id && attvlm.ResourceId === volume.ResourceId) {
|
||||
attvlm.DisplayName = attvlm.DisplayName + ', ' + volume.DisplayName;
|
||||
merged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!merged) {
|
||||
danglingVolumes.push(volume);
|
||||
}
|
||||
}
|
||||
$scope.volumes = attachedVolumes
|
||||
.map(function (volume) {
|
||||
volume.dangling = false;
|
||||
return volume;
|
||||
})
|
||||
.concat(
|
||||
data.dangling.map(function (volume) {
|
||||
danglingVolumes.map(function (volume) {
|
||||
volume.dangling = true;
|
||||
if (VolumeHelper.isVolumeUsedByAService(volume, services)) {
|
||||
volume.dangling = false;
|
||||
|
||||
Reference in New Issue
Block a user