diff --git a/awx/ui/static/js/controllers/JobDetail.js b/awx/ui/static/js/controllers/JobDetail.js index 6a1eeb733b..023d5670b7 100644 --- a/awx/ui/static/js/controllers/JobDetail.js +++ b/awx/ui/static/js/controllers/JobDetail.js @@ -214,7 +214,7 @@ function JobDetailController ($scope, $compile, $routeParams, ClearScope, Breadc // In the case that the job is already completed, or an error already happened, // populate scope.job_status info - scope.job_status.status = data.status; + scope.job_status.status = (data.status === 'waiting' || data.status === 'new') ? 'pending' : data.status; scope.job_status.started = data.started; scope.job_status.status_class = ((data.status === 'error' || data.status === 'failed') && data.job_explanation) ? "alert alert-danger" : ""; scope.job_status.finished = data.finished; diff --git a/awx/ui/static/js/lists/CompletedJobs.js b/awx/ui/static/js/lists/CompletedJobs.js index d58041e105..7991e012cb 100644 --- a/awx/ui/static/js/lists/CompletedJobs.js +++ b/awx/ui/static/js/lists/CompletedJobs.js @@ -24,7 +24,9 @@ angular.module('CompletedJobsDefinition', []) label: 'Job ID', ngClick:"viewJobLog(completed_job.id)", searchType: 'int', - columnClass: 'col-md-1 col-sm-2 col-xs-2' + columnClass: 'col-md-1 col-sm-2 col-xs-2', + awToolTip: "{{ completed_job.status_tip }}", + dataPlacement: 'top' }, status: { label: 'Status', @@ -94,7 +96,19 @@ angular.module('CompletedJobsDefinition', []) awToolTip: 'Delete the job', dataPlacement: 'top' }, - dropdown: { + job_details: { + mode: 'all', + href: '/#/jobs/{{ completed_job.id }}', + awToolTip: 'View job details', + dataPlacement: 'top' + }, + stdout: { + mode: 'all', + href: '/#/jobs/{{ completed_job.id }}/stdout', + awToolTip: 'View standard output. Opens in a new window or tab.', + dataPlacement: 'top' + } + /*dropdown: { type: 'DropDown', ngShow: "completed_job.type === 'job'", label: 'View', @@ -105,6 +119,6 @@ angular.module('CompletedJobsDefinition', []) { ngHref: '/#/job_events/{{ completed_job.id }}', label: 'Events', ngHide: "completed_job.status == 'new'" }, { ngHref: '/#/job_host_summaries/{{ completed_job.id }}', label: 'Host Summary' } ] - } + }*/ } }); diff --git a/awx/ui/static/js/lists/QueuedJobs.js b/awx/ui/static/js/lists/QueuedJobs.js index 835b510c8f..dc2c08b9ff 100644 --- a/awx/ui/static/js/lists/QueuedJobs.js +++ b/awx/ui/static/js/lists/QueuedJobs.js @@ -26,7 +26,9 @@ angular.module('QueuedJobsDefinition', []) key: true, desc: true, searchType: 'int', - columnClass: 'col-md-1 col-sm-2 col-xs-2' + columnClass: 'col-md-1 col-sm-2 col-xs-2', + awToolTip: "{{ queued_job.status_tip }}", + awTipPlacement: "top", }, status: { label: 'Status', @@ -78,6 +80,12 @@ angular.module('QueuedJobsDefinition', []) ngClick: 'deleteJob(queued_job.id)', awToolTip: 'Delete the job', dataPlacement: 'top' + }, + job_details: { + mode: 'all', + href: '/#/jobs/{{ queued_job.id }}', + awToolTip: 'View job details', + dataPlacement: 'top' } } }); diff --git a/awx/ui/static/js/lists/RunningJobs.js b/awx/ui/static/js/lists/RunningJobs.js index baa8b3a4b0..eee50d58ba 100644 --- a/awx/ui/static/js/lists/RunningJobs.js +++ b/awx/ui/static/js/lists/RunningJobs.js @@ -26,7 +26,9 @@ angular.module('RunningJobsDefinition', []) key: true, desc: true, searchType: 'int', - columnClass: 'col-md-1 col-sm-2 col-xs-2' + columnClass: 'col-md-1 col-sm-2 col-xs-2', + awToolTip: "{{ running_job.status_tip }}", + awTipPlacement: "top", }, status: { label: 'Status', @@ -79,7 +81,19 @@ angular.module('RunningJobsDefinition', []) awToolTip: 'Cancel the job', dataPlacement: 'top' }, - dropdown: { + job_details: { + mode: 'all', + href: '/#/jobs/{{ running_job.id }}', + awToolTip: 'View job details', + dataPlacement: 'top' + }, + stdout: { + mode: 'all', + href: '/#/jobs/{{ running_job.id }}/stdout', + awToolTip: 'View standard output. Opens in a new window or tab.', + dataPlacement: 'top' + } + /*dropdown: { type: 'DropDown', ngShow: "running_job.type === 'job'", label: 'View', @@ -90,6 +104,6 @@ angular.module('RunningJobsDefinition', []) { ngHref: '/#/job_events/{{ running_job.id }}', label: 'Events' }, { ngHref: '/#/job_host_summaries/{{ running_job.id }}', label: 'Host Summary' } ] - } + }*/ } }); diff --git a/awx/ui/static/less/ansible-ui.less b/awx/ui/static/less/ansible-ui.less index dbb2b9153b..5c66544036 100644 --- a/awx/ui/static/less/ansible-ui.less +++ b/awx/ui/static/less/ansible-ui.less @@ -633,6 +633,7 @@ legend { .pagination > li > a { padding: 3px 6px; + font-size: 10px; } .modal-body { diff --git a/awx/ui/static/less/jobs.less b/awx/ui/static/less/jobs.less index d317a1b7cb..0db77e8f9a 100644 --- a/awx/ui/static/less/jobs.less +++ b/awx/ui/static/less/jobs.less @@ -20,9 +20,15 @@ thead >tr >th, .page-row { font-size: 12px; color: #666; + } + .pagination li { + } .pagination li a { - font-size: 13px; + font-size: 12px; + padding-left: 3px; + padding-right: 3px; + padding-bottom: 2px; } i[class*="icon-job-"] { font-size: 13px; diff --git a/awx/ui/static/lib/ansible/generator-helpers.js b/awx/ui/static/lib/ansible/generator-helpers.js index bd076ae76e..af59a0ddde 100644 --- a/awx/ui/static/lib/ansible/generator-helpers.js +++ b/awx/ui/static/lib/ansible/generator-helpers.js @@ -144,6 +144,12 @@ angular.module('GeneratorHelpers', []) case 'schedule': icon = "fa-calendar"; break; + case 'stdout': + icon = "fa-external-link"; + break; + case 'job_details': + icon = 'fa-list-ul'; + break; } icon += (size) ? " " + size : ""; return Icon(icon); diff --git a/awx/ui/static/partials/job_detail.html b/awx/ui/static/partials/job_detail.html index 9213e4cb68..9172494da2 100644 --- a/awx/ui/static/partials/job_detail.html +++ b/awx/ui/static/partials/job_detail.html @@ -20,7 +20,7 @@
{{ job_status.status }}
{{ job_status.explanation }}
- +