diff --git a/awx/ui/client/legacy-styles/ansible-ui.less b/awx/ui/client/legacy-styles/ansible-ui.less index 09ffa992b6..ef19b69111 100644 --- a/awx/ui/client/legacy-styles/ansible-ui.less +++ b/awx/ui/client/legacy-styles/ansible-ui.less @@ -1092,6 +1092,7 @@ input[type="checkbox"].checkbox-no-label { .icon-job-stopped:before, .icon-job-error:before, .icon-job-canceled:before, + .icon-job-stdout-download-tooltip:before, .icon-job-unreachable:before { content: "\f06a"; } @@ -1129,6 +1130,7 @@ input[type="checkbox"].checkbox-no-label { .icon-job-stopped, .icon-job-error, .icon-job-failed, + .icon-job-stdout-download-tooltip, .icon-job-canceled { color: @red; } diff --git a/awx/ui/client/src/job-results/job-results.block.less b/awx/ui/client/src/job-results/job-results.block.less index 55d9446c82..be8e330693 100644 --- a/awx/ui/client/src/job-results/job-results.block.less +++ b/awx/ui/client/src/job-results/job-results.block.less @@ -201,3 +201,13 @@ job-results-standard-out { .JobResults .CodeMirror-cursors { display: none; } + +.JobResults-downloadTooLarge { + display: flex; +} + +.JobResults-downloadTooLarge--icon { + display: flex; + align-items: center; + justify-content: center; +} diff --git a/awx/ui/client/src/job-results/job-results.controller.js b/awx/ui/client/src/job-results/job-results.controller.js index 30da9d4ea9..92d311a204 100644 --- a/awx/ui/client/src/job-results/job-results.controller.js +++ b/awx/ui/client/src/job-results/job-results.controller.js @@ -1,8 +1,11 @@ -export default ['jobData', 'jobDataOptions', 'jobLabels', 'jobFinished', 'count', '$scope', 'ParseTypeChange', 'ParseVariableString', 'jobResultsService', 'eventQueue', '$compile', '$log', 'Dataset', '$q', 'Rest', '$state', 'QuerySet', '$rootScope', 'moment', -function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTypeChange, ParseVariableString, jobResultsService, eventQueue, $compile, $log, Dataset, $q, Rest, $state, QuerySet, $rootScope, moment) { +export default ['jobData', 'jobDataOptions', 'jobLabels', 'jobFinished', 'count', '$scope', 'ParseTypeChange', 'ParseVariableString', 'jobResultsService', 'eventQueue', '$compile', '$log', 'Dataset', '$q', 'Rest', '$state', 'QuerySet', '$rootScope', 'moment', 'i18n', +function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTypeChange, ParseVariableString, jobResultsService, eventQueue, $compile, $log, Dataset, $q, Rest, $state, QuerySet, $rootScope, moment, i18n) { var toDestroy = []; var cancelRequests = false; + // download stdout tooltip text + $scope.standardOutTooltip = i18n._('Download Output'); + // this allows you to manage the timing of rest-call based events as // filters are updated. see processPage for more info var currentContext = 1; @@ -449,6 +452,16 @@ function(jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTy $(".header_task").hide(); $(".header_play").hide(); $scope.tooManyEvents = true; + $scope.standardOutTooltip = '
' + + i18n._('The output is too large to display. Please download.') + + '
' + + '
' + + '' + + '' + + '' + + '' + + '
' + + '
'; } else { $(".header_task").show(); $(".header_play").show(); diff --git a/awx/ui/client/src/job-results/job-results.partial.html b/awx/ui/client/src/job-results/job-results.partial.html index 16fc0bf3c0..58e272189c 100644 --- a/awx/ui/client/src/job-results/job-results.partial.html +++ b/awx/ui/client/src/job-results/job-results.partial.html @@ -488,7 +488,8 @@ job.status === 'canceled'" href="/api/v1/jobs/{{ job.id }}/stdout?format=txt_download"> diff --git a/awx/ui/tests/spec/job-results/job-results.controller-test.js b/awx/ui/tests/spec/job-results/job-results.controller-test.js index aec74d8edc..f3ef4f822d 100644 --- a/awx/ui/tests/spec/job-results/job-results.controller-test.js +++ b/awx/ui/tests/spec/job-results/job-results.controller-test.js @@ -4,7 +4,7 @@ describe('Controller: jobResultsController', () => { // Setup let jobResultsController; - let jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTypeChange, ParseVariableString, jobResultsService, eventQueue, $compile, eventResolve, populateResolve, $rScope, q, $log, Dataset, Rest, $state, QuerySet; + let jobData, jobDataOptions, jobLabels, jobFinished, count, $scope, ParseTypeChange, ParseVariableString, jobResultsService, eventQueue, $compile, eventResolve, populateResolve, $rScope, q, $log, Dataset, Rest, $state, QuerySet, i18n; jobData = { related: {} @@ -58,6 +58,12 @@ describe('Controller: jobResultsController', () => { 'encodeQueryset' ]); + i18n = { + _: function(txt) { + return txt; + } + }; + $provide.value('jobData', jobData); $provide.value('jobDataOptions', jobDataOptions); $provide.value('jobLabels', jobLabels); @@ -71,6 +77,7 @@ describe('Controller: jobResultsController', () => { $provide.value('Rest', Rest); $provide.value('$state', $state); $provide.value('QuerySet', QuerySet); + $provide.value('i18n', i18n); }); };