mirror of
https://github.com/portainer/portainer.git
synced 2025-07-19 13:29:41 +02:00
Raise cutoff level and provide tooltips for links in images and volumes datatables to avoid having to open the detail view to see the full name.
152 lines
8.5 KiB
HTML
152 lines
8.5 KiB
HTML
<div class="datatable">
|
|
<rd-widget>
|
|
<rd-widget-body classes="no-padding">
|
|
<div class="toolBar">
|
|
<div class="toolBarTitle">
|
|
<i class="fa" ng-class="$ctrl.titleIcon" aria-hidden="true" style="margin-right: 2px;"></i> {{ $ctrl.titleText }}
|
|
</div>
|
|
</div>
|
|
<div class="actionBar">
|
|
<button type="button" class="btn btn-sm btn-danger"
|
|
ng-disabled="$ctrl.state.selectedItemCount === 0" ng-click="$ctrl.removeAction($ctrl.state.selectedItems)">
|
|
<i class="fa fa-trash-alt space-right" aria-hidden="true"></i>Remove
|
|
</button>
|
|
<button type="button" class="btn btn-sm btn-primary" ui-sref="docker.volumes.new">
|
|
<i class="fa fa-plus space-right" aria-hidden="true"></i>Add volume
|
|
</button>
|
|
</div>
|
|
<div class="searchBar">
|
|
<i class="fa fa-search searchIcon" aria-hidden="true"></i>
|
|
<input type="text" class="searchInput" ng-model="$ctrl.state.textFilter" placeholder="Search..." auto-focus>
|
|
</div>
|
|
<div class="table-responsive">
|
|
<table class="table table-hover table-filters">
|
|
<thead>
|
|
<tr>
|
|
<th uib-dropdown dropdown-append-to-body auto-close="disabled" is-open="$ctrl.filters.usage.open">
|
|
<span class="md-checkbox">
|
|
<input id="select_all" type="checkbox" ng-model="$ctrl.state.selectAll" ng-change="$ctrl.selectAll()" />
|
|
<label for="select_all"></label>
|
|
</span>
|
|
<a ng-click="$ctrl.changeOrderBy('Id')">
|
|
Name
|
|
<i class="fa fa-sort-alpha-down" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'Id' && !$ctrl.state.reverseOrder"></i>
|
|
<i class="fa fa-sort-alpha-up" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'Id' && $ctrl.state.reverseOrder"></i>
|
|
</a>
|
|
<div>
|
|
<span uib-dropdown-toggle class="table-filter" ng-if="!$ctrl.filters.usage.enabled">Filter <i class="fa fa-filter" aria-hidden="true"></i></span>
|
|
<span uib-dropdown-toggle class="table-filter filter-active" ng-if="$ctrl.filters.usage.enabled">Filter <i class="fa fa-check" aria-hidden="true"></i></span>
|
|
</div>
|
|
<div class="dropdown-menu" uib-dropdown-menu>
|
|
<div class="tableMenu">
|
|
<div class="menuHeader">
|
|
Filter by usage
|
|
</div>
|
|
<div class="menuContent">
|
|
<div class="md-checkbox">
|
|
<input id="filter_usage_usedImages" type="checkbox" ng-model="$ctrl.filters.usage.showUsedVolumes" ng-change="$ctrl.onUsageFilterChange()"/>
|
|
<label for="filter_usage_usedImages">Used volumes</label>
|
|
</div>
|
|
<div class="md-checkbox">
|
|
<input id="filter_usage_unusedImages" type="checkbox" ng-model="$ctrl.filters.usage.showUnusedVolumes" ng-change="$ctrl.onUsageFilterChange()"/>
|
|
<label for="filter_usage_unusedImages">Unused volumes</label>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<a type="button" class="btn btn-default btn-sm" ng-click="$ctrl.filters.usage.open = false;">Close</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</th>
|
|
<th>
|
|
<a ng-click="$ctrl.changeOrderBy('StackName')">
|
|
Stack
|
|
<i class="fa fa-sort-alpha-down" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'StackName' && !$ctrl.state.reverseOrder"></i>
|
|
<i class="fa fa-sort-alpha-up" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'StackName' && $ctrl.state.reverseOrder"></i>
|
|
</a>
|
|
</th>
|
|
<th>
|
|
<a ng-click="$ctrl.changeOrderBy('Driver')">
|
|
Driver
|
|
<i class="fa fa-sort-alpha-down" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'Driver' && !$ctrl.state.reverseOrder"></i>
|
|
<i class="fa fa-sort-alpha-up" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'Driver' && $ctrl.state.reverseOrder"></i>
|
|
</a>
|
|
</th>
|
|
<th>
|
|
<a ng-click="$ctrl.changeOrderBy('Mountpoint')">
|
|
Mount point
|
|
<i class="fa fa-sort-alpha-down" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'Mountpoint' && !$ctrl.state.reverseOrder"></i>
|
|
<i class="fa fa-sort-alpha-up" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'Mountpoint' && $ctrl.state.reverseOrder"></i>
|
|
</a>
|
|
</th>
|
|
<th ng-if="$ctrl.showHostColumn">
|
|
<a ng-click="$ctrl.changeOrderBy('NodeName')">
|
|
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>
|
|
</a>
|
|
</th>
|
|
<th ng-if="$ctrl.showOwnershipColumn">
|
|
<a ng-click="$ctrl.changeOrderBy('ResourceControl.Ownership')">
|
|
Ownership
|
|
<i class="fa fa-sort-alpha-down" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'ResourceControl.Ownership' && !$ctrl.state.reverseOrder"></i>
|
|
<i class="fa fa-sort-alpha-up" aria-hidden="true" ng-if="$ctrl.state.orderBy === 'ResourceControl.Ownership' && $ctrl.state.reverseOrder"></i>
|
|
</a>
|
|
</th>
|
|
</tr>
|
|
</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))" ng-class="{active: item.Checked}">
|
|
<td>
|
|
<span class="md-checkbox">
|
|
<input id="select_{{ $index }}" type="checkbox" ng-model="item.Checked" ng-change="$ctrl.selectItem(item)"/>
|
|
<label for="select_{{ $index }}"></label>
|
|
</span>
|
|
<a ui-sref="docker.volumes.volume({ id: item.Id, nodeName: item.NodeName })" class="monospaced" title="{{ item.Id }}">{{ item.Id | truncate:40 }}</a>
|
|
<span style="margin-left: 10px;" class="label label-warning image-tag" ng-if="item.dangling">Unused</span>
|
|
</td>
|
|
<td>{{ item.StackName ? item.StackName : '-' }}</td>
|
|
<td>{{ item.Driver }}</td>
|
|
<td>{{ item.Mountpoint | truncatelr }}</td>
|
|
<td ng-if="$ctrl.showHostColumn">{{ item.NodeName ? item.NodeName : '-' }}</td>
|
|
<td ng-if="$ctrl.showOwnershipColumn">
|
|
<span>
|
|
<i ng-class="item.ResourceControl.Ownership | ownershipicon" aria-hidden="true"></i>
|
|
{{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = 'public' }}
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
<tr ng-if="!$ctrl.dataset">
|
|
<td colspan="6" class="text-center text-muted">Loading...</td>
|
|
</tr>
|
|
<tr ng-if="$ctrl.state.filteredDataSet.length === 0">
|
|
<td colspan="6" class="text-center text-muted">No volume available.</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div class="footer" ng-if="$ctrl.dataset">
|
|
<div class="infoBar" ng-if="$ctrl.state.selectedItemCount !== 0">
|
|
{{ $ctrl.state.selectedItemCount }} item(s) selected
|
|
</div>
|
|
<div class="paginationControls">
|
|
<form class="form-inline">
|
|
<span class="limitSelector">
|
|
<span style="margin-right: 5px;">
|
|
Items per page
|
|
</span>
|
|
<select class="form-control" ng-model="$ctrl.state.paginatedItemLimit" ng-change="$ctrl.changePaginationLimit()">
|
|
<option value="0">All</option>
|
|
<option value="10">10</option>
|
|
<option value="25">25</option>
|
|
<option value="50">50</option>
|
|
<option value="100">100</option>
|
|
</select>
|
|
</span>
|
|
<dir-pagination-controls max-size="5"></dir-pagination-controls>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</rd-widget-body>
|
|
</rd-widget>
|
|
</div>
|