2017-12-06 11:04:02 +00:00
< div class = "datatable" >
< rd-widget >
< rd-widget-body classes = "no-padding" >
< div class = "toolBar" >
< div class = "toolBarTitle" >
2018-06-06 16:12:35 +00:00
< i class = "fa" ng-class = "$ctrl.titleIcon" aria-hidden = "true" style = "margin-right: 2px;" > < / i > {{ $ctrl.titleText }}
2017-12-06 11:04:02 +00:00
< / div >
< div class = "settings" >
2018-07-05 07:24:53 +00:00
< span class = "setting" ng-class = "{ 'setting-active': $ctrl.columnVisibility.state.open }" uib-dropdown dropdown-append-to-body auto-close = "disabled" is-open = "$ctrl.columnVisibility.state.open" >
< span uib-dropdown-toggle > < i class = "fa fa-columns space-right" aria-hidden = "true" > < / i > Columns< / span >
< div class = "dropdown-menu dropdown-menu-right" uib-dropdown-menu >
< div class = "tableMenu" >
< div class = "menuHeader" >
Show / Hide Columns
< / div >
< div class = "menuContent" >
< div class = "md-checkbox" >
< input id = "col_vis_state" ng-click = "$ctrl.onColumnVisibilityChange()" type = "checkbox" ng-model = "$ctrl.columnVisibility.columns.state.display" / >
< label for = "col_vis_state" ng-bind = "$ctrl.columnVisibility.columns.state.label" > < / label >
< / div >
< div class = "md-checkbox" >
< input id = "col_vis_actions" ng-click = "$ctrl.onColumnVisibilityChange()" type = "checkbox" ng-model = "$ctrl.columnVisibility.columns.actions.display" / >
< label for = "col_vis_actions" ng-bind = "$ctrl.columnVisibility.columns.actions.label" > < / label >
< / div >
< div class = "md-checkbox" >
< input id = "col_vis_stack" ng-click = "$ctrl.onColumnVisibilityChange()" type = "checkbox" ng-model = "$ctrl.columnVisibility.columns.stack.display" / >
< label for = "col_vis_stack" ng-bind = "$ctrl.columnVisibility.columns.stack.label" > < / label >
< / div >
< div class = "md-checkbox" >
< input id = "col_vis_image" ng-click = "$ctrl.onColumnVisibilityChange()" type = "checkbox" ng-model = "$ctrl.columnVisibility.columns.image.display" / >
< label for = "col_vis_image" ng-bind = "$ctrl.columnVisibility.columns.image.label" > < / label >
< / div >
< div class = "md-checkbox" >
< input id = "col_vis_created" ng-click = "$ctrl.onColumnVisibilityChange()" type = "checkbox" ng-model = "$ctrl.columnVisibility.columns.created.display" / >
< label for = "col_vis_created" ng-bind = "$ctrl.columnVisibility.columns.created.label" > < / label >
< / div >
< div class = "md-checkbox" >
< input id = "col_vis_ip" ng-click = "$ctrl.onColumnVisibilityChange()" type = "checkbox" ng-model = "$ctrl.columnVisibility.columns.ip.display" / >
< label for = "col_vis_ip" ng-bind = "$ctrl.columnVisibility.columns.ip.label" > < / label >
< / div >
< div class = "md-checkbox" ng-if = "$ctrl.showHostColumn" >
< input id = "col_vis_host" ng-click = "$ctrl.onColumnVisibilityChange()" type = "checkbox" ng-model = "$ctrl.columnVisibility.columns.host.display" / >
< label for = "col_vis_host" ng-bind = "$ctrl.columnVisibility.columns.host.label" > < / label >
< / div >
< div class = "md-checkbox" >
< input id = "col_vis_ports" ng-click = "$ctrl.onColumnVisibilityChange()" type = "checkbox" ng-model = "$ctrl.columnVisibility.columns.ports.display" / >
< label for = "col_vis_ports" ng-bind = "$ctrl.columnVisibility.columns.ports.label" > < / label >
< / div >
< div class = "md-checkbox" >
< input id = "col_vis_ownership" ng-click = "$ctrl.onColumnVisibilityChange()" type = "checkbox" ng-model = "$ctrl.columnVisibility.columns.ownership.display" / >
< label for = "col_vis_ownership" ng-bind = "$ctrl.columnVisibility.columns.ownership.label" > < / label >
< / div >
< / div >
< div >
< a type = "button" class = "btn btn-default btn-sm" ng-click = "$ctrl.columnVisibility.state.open = false;" > Close< / a >
< / div >
< / div >
< / div >
< / span >
2017-12-06 11:04:02 +00:00
< span class = "setting" ng-class = "{ 'setting-active': $ctrl.settings.open }" uib-dropdown dropdown-append-to-body auto-close = "disabled" is-open = "$ctrl.settings.open" >
< span uib-dropdown-toggle > < i class = "fa fa-cog" aria-hidden = "true" > < / i > Settings< / span >
< div class = "dropdown-menu dropdown-menu-right" uib-dropdown-menu >
< div class = "tableMenu" >
< div class = "menuHeader" >
Table settings
< / div >
< div class = "menuContent" >
< div class = "md-checkbox" >
< input id = "setting_container_trunc" type = "checkbox" ng-model = "$ctrl.settings.truncateContainerName" ng-change = "$ctrl.onSettingsContainerNameTruncateChange()" / >
< label for = "setting_container_trunc" > Truncate container name< / label >
< / div >
< / div >
< div class = "menuHeader" >
Quick actions
< / div >
< div class = "menuContent" >
< div class = "md-checkbox" >
< input id = "setting_show_stats" type = "checkbox" ng-model = "$ctrl.settings.showQuickActionStats" ng-change = "$ctrl.onSettingsQuickActionChange()" / >
< label for = "setting_show_stats" > Stats< / label >
< / div >
< div class = "md-checkbox" >
< input id = "setting_show_logs" type = "checkbox" ng-model = "$ctrl.settings.showQuickActionLogs" ng-change = "$ctrl.onSettingsQuickActionChange()" / >
< label for = "setting_show_logs" > Logs< / label >
< / div >
< div class = "md-checkbox" >
< input id = "setting_show_console" type = "checkbox" ng-model = "$ctrl.settings.showQuickActionConsole" ng-change = "$ctrl.onSettingsQuickActionChange()" / >
< label for = "setting_show_console" > Console< / label >
< / div >
< div class = "md-checkbox" >
< input id = "setting_show_inspect" type = "checkbox" ng-model = "$ctrl.settings.showQuickActionInspect" ng-change = "$ctrl.onSettingsQuickActionChange()" / >
< label for = "setting_show_inspect" > Inspect< / label >
< / div >
< / div >
< div >
< a type = "button" class = "btn btn-default btn-sm" ng-click = "$ctrl.settings.open = false;" > Close< / a >
< / div >
< / div >
< / div >
< / span >
< / div >
< / div >
2018-10-28 09:27:06 +00:00
< containers-datatable-actions ng-if = "!$ctrl.offlineMode"
2018-06-11 13:13:19 +00:00
selected-items="$ctrl.state.selectedItems"
selected-item-count="$ctrl.state.selectedItemCount"
no-stopped-items-selected="$ctrl.state.noStoppedItemsSelected"
no-running-items-selected="$ctrl.state.noRunningItemsSelected"
no-paused-items-selected="$ctrl.state.noPausedItemsSelected"
show-add-action="$ctrl.showAddAction"
>< / containers-datatable-actions >
2018-07-11 14:18:44 +00:00
< div class = "searchBar" >
2017-12-06 11:04:02 +00:00
< i class = "fa fa-search searchIcon" aria-hidden = "true" > < / i >
2018-12-06 19:54:34 +00:00
< input type = "text" class = "searchInput" ng-model = "$ctrl.state.textFilter" ng-change = "$ctrl.onTextFilterChange()" placeholder = "Search..." auto-focus >
2017-12-06 11:04:02 +00:00
< / div >
< div class = "table-responsive" >
2018-07-20 16:31:34 +00:00
< table class = "table table-hover table-filters nowrap-cells" >
2017-12-06 11:04:02 +00:00
< thead >
< tr >
< th >
2018-10-28 09:27:06 +00:00
< span class = "md-checkbox" ng-if = "!$ctrl.offlineMode" >
2017-12-06 11:04:02 +00:00
< 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('Names')" >
Name
2018-03-13 05:36:53 +00:00
< i class = "fa fa-sort-alpha-down" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'Names' && !$ctrl.state.reverseOrder" > < / i >
< i class = "fa fa-sort-alpha-up" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'Names' && $ctrl.state.reverseOrder" > < / i >
2017-12-06 11:04:02 +00:00
< / a >
< / th >
2018-07-05 07:24:53 +00:00
< th uib-dropdown dropdown-append-to-body auto-close = "disabled" is-open = "$ctrl.filters.state.open" ng-show = "$ctrl.columnVisibility.columns.state.display" >
2017-12-06 11:04:02 +00:00
< a ng-click = "$ctrl.changeOrderBy('Status')" >
State
2018-03-13 05:36:53 +00:00
< i class = "fa fa-sort-alpha-down" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'Status' && !$ctrl.state.reverseOrder" > < / i >
< i class = "fa fa-sort-alpha-up" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'Status' && $ctrl.state.reverseOrder" > < / i >
2017-12-06 11:04:02 +00:00
< / a >
< div >
< span uib-dropdown-toggle class = "table-filter" ng-if = "!$ctrl.filters.state.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.state.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 state
< / div >
< div class = "menuContent" >
< div class = "md-checkbox" ng-repeat = "filter in $ctrl.filters.state.values track by $index" >
< input id = "filter_state_{{ $index }}" type = "checkbox" ng-model = "filter.display" ng-change = "$ctrl.onStateFilterChange()" / >
< label for = "filter_state_{{ $index }}" > {{ filter.label }}< / label >
< / div >
< / div >
< div >
< a type = "button" class = "btn btn-default btn-sm" ng-click = "$ctrl.filters.state.open = false;" > Close< / a >
< / div >
< / div >
< / div >
< / th >
2018-07-05 07:24:53 +00:00
< th ng-if = "$ctrl.settings.showQuickActionStats || $ctrl.settings.showQuickActionLogs || $ctrl.settings.showQuickActionConsole || $ctrl.settings.showQuickActionInspect" ng-show = "$ctrl.columnVisibility.columns.actions.display" >
2017-12-06 11:04:02 +00:00
Quick actions
< / th >
2018-07-05 07:24:53 +00:00
< th ng-show = "$ctrl.columnVisibility.columns.stack.display" >
2017-12-06 11:04:02 +00:00
< a ng-click = "$ctrl.changeOrderBy('StackName')" >
Stack
2018-03-13 05:36:53 +00:00
< 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 >
2017-12-06 11:04:02 +00:00
< / a >
< / th >
2018-07-05 07:24:53 +00:00
< th ng-show = "$ctrl.columnVisibility.columns.image.display" >
2017-12-06 11:04:02 +00:00
< a ng-click = "$ctrl.changeOrderBy('Image')" >
Image
2018-03-13 05:36:53 +00:00
< i class = "fa fa-sort-alpha-down" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'Image' && !$ctrl.state.reverseOrder" > < / i >
< i class = "fa fa-sort-alpha-up" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'Image' && $ctrl.state.reverseOrder" > < / i >
2017-12-06 11:04:02 +00:00
< / a >
< / th >
2018-07-05 07:24:53 +00:00
< th ng-show = "$ctrl.columnVisibility.columns.created.display" >
< a ng-click = "$ctrl.changeOrderBy('Created')" >
< i class = "fa fa-sort-alpha-down" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'Created' && !$ctrl.state.reverseOrder" > < / i >
< i class = "fa fa-sort-alpha-up" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'Created' && $ctrl.state.reverseOrder" > < / i >
Created
< / a >
< / th >
< th ng-show = "$ctrl.columnVisibility.columns.ip.display" >
2017-12-06 11:04:02 +00:00
< a ng-click = "$ctrl.changeOrderBy('IP')" >
IP Address
2018-03-13 05:36:53 +00:00
< i class = "fa fa-sort-alpha-down" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'IP' && !$ctrl.state.reverseOrder" > < / i >
< i class = "fa fa-sort-alpha-up" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'IP' && $ctrl.state.reverseOrder" > < / i >
2017-12-06 11:04:02 +00:00
< / a >
< / th >
2018-07-05 07:24:53 +00:00
< th ng-if = "$ctrl.showHostColumn" ng-show = "$ctrl.columnVisibility.columns.host.display" >
2018-05-06 07:15:57 +00:00
< 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 >
2018-07-05 07:24:53 +00:00
< th ng-show = "$ctrl.columnVisibility.columns.ports.display" >
2017-12-06 11:04:02 +00:00
< a ng-click = "$ctrl.changeOrderBy('Ports')" >
Published Ports
2018-03-13 05:36:53 +00:00
< i class = "fa fa-sort-alpha-down" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'Ports' && !$ctrl.state.reverseOrder" > < / i >
< i class = "fa fa-sort-alpha-up" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'Ports' && $ctrl.state.reverseOrder" > < / i >
2017-12-06 11:04:02 +00:00
< / a >
< / th >
2018-07-05 07:24:53 +00:00
< th ng-if = "$ctrl.showOwnershipColumn" ng-show = "$ctrl.columnVisibility.columns.ownership.display" >
2017-12-06 11:04:02 +00:00
< a ng-click = "$ctrl.changeOrderBy('ResourceControl.Ownership')" >
Ownership
2018-03-13 05:36:53 +00:00
< 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 >
2017-12-06 11:04:02 +00:00
< / 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 >
2018-10-28 09:27:06 +00:00
< span class = "md-checkbox" ng-if = "!$ctrl.offlineMode" >
2017-12-06 11:04:02 +00:00
< input id = "select_{{ $index }}" type = "checkbox" ng-model = "item.Checked" ng-change = "$ctrl.selectItem(item)" / >
< label for = "select_{{ $index }}" > < / label >
< / span >
2018-10-28 09:27:06 +00:00
< a ng-if = "!$ctrl.offlineMode" ui-sref = "docker.containers.container({ id: item.Id, nodeName: item.NodeName })" title = "{{ item | containername }}" > {{ item | containername | truncate: $ctrl.settings.containerNameTruncateSize }}< / a >
< span ng-if = "$ctrl.offlineMode" > {{ item | containername | truncate: $ctrl.settings.containerNameTruncateSize }}< / span >
2017-12-06 11:04:02 +00:00
< / td >
2018-07-05 07:24:53 +00:00
< td ng-show = "$ctrl.columnVisibility.columns.state.display" >
2017-12-06 11:04:02 +00:00
< span ng-if = "['starting','healthy','unhealthy'].indexOf(item.Status) !== -1" class = "label label-{{ item.Status|containerstatusbadge }} interactive" uib-tooltip = "This container has a health check" > {{ item.Status }}< / span >
< span ng-if = "['starting','healthy','unhealthy'].indexOf(item.Status) === -1" class = "label label-{{ item.Status|containerstatusbadge }}" > {{ item.Status }}< / span >
< / td >
2018-10-28 09:27:06 +00:00
< td ng-if = "!$ctrl.offlineMode && ($ctrl.settings.showQuickActionStats || $ctrl.settings.showQuickActionLogs || $ctrl.settings.showQuickActionConsole || $ctrl.settings.showQuickActionInspect)" ng-show = "$ctrl.columnVisibility.columns.actions.display" >
2018-10-31 02:50:38 +00:00
< container-quick-actions container-id = "item.Id" node-name = "item.NodeName" status = "item.Status" state = "$ctrl.settings" > < / container-quick-actions >
2017-12-06 11:04:02 +00:00
< / td >
2018-10-28 09:27:06 +00:00
< td ng-if = "$ctrl.offlineMode" >
< / td >
2018-07-05 07:24:53 +00:00
< td ng-show = "$ctrl.columnVisibility.columns.stack.display" > {{ item.StackName ? item.StackName : '-' }}< / td >
2018-10-28 09:27:06 +00:00
< td ng-show = "$ctrl.columnVisibility.columns.image.display" >
< a ng-if = "!$ctrl.offlineMode" ui-sref = "docker.images.image({ id: item.Image })" > {{ item.Image | trimshasum }}< / a >
< span ng-if = "$ctrl.offlineMode" > {{ item.Image | trimshasum }}< / span >
< / td >
2018-07-05 07:24:53 +00:00
< td ng-show = "$ctrl.columnVisibility.columns.created.display" >
{{item.Created | getisodatefromtimestamp}}
< / td >
< td ng-show = "$ctrl.columnVisibility.columns.ip.display" > {{ item.IP ? item.IP : '-' }}< / td >
< td ng-if = "$ctrl.showHostColumn" ng-show = "$ctrl.columnVisibility.columns.host.display" > {{ item.NodeName ? item.NodeName : '-' }}< / td >
< td ng-show = "$ctrl.columnVisibility.columns.ports.display" >
2018-06-21 11:09:57 +00:00
< a ng-if = "item.Ports.length > 0" ng-repeat = "p in item.Ports" class = "image-tag" ng-href = "http://{{ $ctrl.state.publicURL || p.host }}:{{p.public}}" target = "_blank" >
2018-03-13 05:36:53 +00:00
< i class = "fa fa-external-link-alt" aria-hidden = "true" > < / i > {{ p.public }}:{{ p.private }}
2017-12-06 11:04:02 +00:00
< / a >
< span ng-if = "item.Ports.length == 0" > -< / span >
< / td >
2018-07-05 07:24:53 +00:00
< td ng-if = "$ctrl.showOwnershipColumn" ng-show = "$ctrl.columnVisibility.columns.ownership.display" >
2017-12-06 11:04:02 +00:00
< span >
< i ng-class = "item.ResourceControl.Ownership | ownershipicon" aria-hidden = "true" > < / i >
2018-08-19 05:57:28 +00:00
{{ item.ResourceControl.Ownership ? item.ResourceControl.Ownership : item.ResourceControl.Ownership = 'administrators' }}
2017-12-06 11:04:02 +00:00
< / span >
< / td >
< / tr >
< tr ng-if = "!$ctrl.dataset" >
2018-05-06 07:15:57 +00:00
< td colspan = "9" class = "text-center text-muted" > Loading...< / td >
2017-12-06 11:04:02 +00:00
< / tr >
< tr ng-if = "$ctrl.state.filteredDataSet.length === 0" >
2018-05-06 07:15:57 +00:00
< td colspan = "9" class = "text-center text-muted" > No container available.< / td >
2017-12-06 11:04:02 +00:00
< / 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 >