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" >
< i class = "fa" ng-class = "$ctrl.titleIcon" aria-hidden = "true" style = "margin-right: 2px;" > < / i > {{ $ctrl.title }}
< / div >
< div class = "settings" >
< span class = "setting" ng-class = "{ 'setting-active': $ctrl.state.displayTextFilter }" ng-click = "$ctrl.updateDisplayTextFilter()" ng-if = "$ctrl.showTextFilter" >
< i class = "fa fa-search" aria-hidden = "true" > < / i > Search
< / span >
< 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 >
< div class = "actionBar" >
< div class = "btn-group" role = "group" aria-label = "..." >
< button type = "button" class = "btn btn-sm btn-success" ng-click = "$ctrl.startAction($ctrl.state.selectedItems)"
ng-disabled="$ctrl.state.selectedItemCount === 0 || $ctrl.state.noStoppedItemsSelected">
< i class = "fa fa-play space-right" aria-hidden = "true" > < / i > Start
< / button >
< button type = "button" class = "btn btn-sm btn-danger" ng-click = "$ctrl.stopAction($ctrl.state.selectedItems)"
ng-disabled="$ctrl.state.selectedItemCount === 0 || $ctrl.state.noRunningItemsSelected">
< i class = "fa fa-stop space-right" aria-hidden = "true" > < / i > Stop
< / button >
< button type = "button" class = "btn btn-sm btn-danger" ng-click = "$ctrl.killAction($ctrl.state.selectedItems)"
ng-disabled="$ctrl.state.selectedItemCount === 0">
< i class = "fa fa-bomb space-right" aria-hidden = "true" > < / i > Kill
< / button >
< button type = "button" class = "btn btn-sm btn-primary" ng-click = "$ctrl.restartAction($ctrl.state.selectedItems)"
ng-disabled="$ctrl.state.selectedItemCount === 0">
2018-03-13 05:36:53 +00:00
< i class = "fa fa-sync space-right" aria-hidden = "true" > < / i > Restart
2017-12-06 11:04:02 +00:00
< / button >
< button type = "button" class = "btn btn-sm btn-primary" ng-click = "$ctrl.pauseAction($ctrl.state.selectedItems)"
ng-disabled="$ctrl.state.selectedItemCount === 0 || $ctrl.state.noRunningItemsSelected">
< i class = "fa fa-pause space-right" aria-hidden = "true" > < / i > Pause
< / button >
< button type = "button" class = "btn btn-sm btn-primary" ng-click = "$ctrl.resumeAction($ctrl.state.selectedItems)"
ng-disabled="$ctrl.state.selectedItemCount === 0 || $ctrl.state.noPausedItemsSelected">
< i class = "fa fa-play space-right" aria-hidden = "true" > < / i > Resume
< / button >
< button type = "button" class = "btn btn-sm btn-danger"
ng-disabled="$ctrl.state.selectedItemCount === 0" ng-click="$ctrl.removeAction($ctrl.state.selectedItems)">
2018-03-13 05:36:53 +00:00
< i class = "fa fa-trash-alt space-right" aria-hidden = "true" > < / i > Remove
2017-12-06 11:04:02 +00:00
< / button >
< / div >
2018-02-01 12:27:52 +00:00
< button type = "button" class = "btn btn-sm btn-primary" ui-sref = "docker.containers.new" >
2017-12-06 11:04:02 +00:00
< i class = "fa fa-plus space-right" aria-hidden = "true" > < / i > Add container
< / button >
< / div >
< div class = "searchBar" ng-if = "$ctrl.state.displayTextFilter" >
< i class = "fa fa-search searchIcon" aria-hidden = "true" > < / i >
2018-02-06 15:58:05 +00:00
< input type = "text" class = "searchInput" ng-model = "$ctrl.state.textFilter" placeholder = "Search..." auto-focus >
2017-12-06 11:04:02 +00:00
< / div >
< div class = "table-responsive" >
< table class = "table table-hover table-filters" >
< thead >
< tr >
< th >
< 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('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 >
< th uib-dropdown dropdown-append-to-body auto-close = "disabled" is-open = "$ctrl.filters.state.open" >
< 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 >
< th ng-if = "$ctrl.settings.showQuickActionStats || $ctrl.settings.showQuickActionLogs || $ctrl.settings.showQuickActionConsole || $ctrl.settings.showQuickActionInspect" >
Quick actions
< / th >
< th >
< 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 >
< th >
< 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 >
< th >
< 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 >
< th ng-if = "$ctrl.swarmContainers" >
< a ng-click = "$ctrl.changeOrderBy('Host')" >
Host IP
2018-03-13 05:36:53 +00:00
< i class = "fa fa-sort-alpha-down" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'Host' && !$ctrl.state.reverseOrder" > < / i >
< i class = "fa fa-sort-alpha-up" aria-hidden = "true" ng-if = "$ctrl.state.orderBy === 'Host' && $ctrl.state.reverseOrder" > < / i >
2017-12-06 11:04:02 +00:00
< / a >
< / th >
< th >
< 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 >
< th ng-if = "$ctrl.showOwnershipColumn" >
< 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 >
< 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 >
2018-02-01 12:27:52 +00:00
< a ui-sref = "docker.containers.container({ id: item.Id })" ng-if = "!$ctrl.swarmContainers" > {{ item | containername | truncate: $ctrl.settings.containerNameTruncateSize }}< / a >
< a ui-sref = "docker.containers.container({ id: item.Id })" ng-if = "$ctrl.swarmContainers" > {{ item | swarmcontainername | truncate: $ctrl.settings.containerNameTruncateSize }}< / a >
2017-12-06 11:04:02 +00:00
< / td >
< td >
< 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 >
< td ng-if = "$ctrl.settings.showQuickActionStats || $ctrl.settings.showQuickActionLogs || $ctrl.settings.showQuickActionConsole || $ctrl.settings.showQuickActionInspect" >
< div class = "btn-group btn-group-xs" role = "group" aria-label = "..." style = "display:inline-flex;" >
2018-03-13 05:36:53 +00:00
< a ng-if = "$ctrl.settings.showQuickActionStats" style = "margin: 0 2.5px;" ui-sref = "docker.containers.container.stats({id: item.Id})" title = "Stats" > < i class = "fa fa-chart-area space-right" aria-hidden = "true" > < / i > < / a >
< a ng-if = "$ctrl.settings.showQuickActionLogs" style = "margin: 0 2.5px;" ui-sref = "docker.containers.container.logs({id: item.Id})" title = "Logs" > < i class = "far fa-file-alt space-right" aria-hidden = "true" > < / i > < / a >
2018-02-17 08:44:29 +00:00
< a ng-if = "$ctrl.settings.showQuickActionConsole" style = "margin: 0 2.5px;" ui-sref = "docker.containers.container.console({id: item.Id})" title = "Console" > < i class = "fa fa-terminal space-right" aria-hidden = "true" > < / i > < / a >
< a ng-if = "$ctrl.settings.showQuickActionInspect" style = "margin: 0 2.5px;" ui-sref = "docker.containers.container.inspect({id: item.Id})" title = "Inspect" > < i class = "fa fa-info-circle space-right" aria-hidden = "true" > < / i > < / a >
2017-12-06 11:04:02 +00:00
< / div >
< / td >
< td > {{ item.StackName ? item.StackName : '-' }}< / td >
2018-02-01 12:27:52 +00:00
< td > < a ui-sref = "docker.images.image({ id: item.Image })" > {{ item.Image | trimshasum }}< / a > < / td >
2017-12-06 11:04:02 +00:00
< td > {{ item.IP ? item.IP : '-' }}< / td >
< td ng-if = "$ctrl.swarmContainers" > {{ item.hostIP }}< / td >
< td >
< a ng-if = "item.Ports.length > 0" ng-repeat = "p in item.Ports" class = "image-tag" ng-href = "http://{{ $ctrl.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 >
< 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 = "8" class = "text-center text-muted" > Loading...< / td >
< / tr >
< tr ng-if = "$ctrl.state.filteredDataSet.length === 0" >
< td colspan = "8" class = "text-center text-muted" > No container 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 >