From 1497d128f3da62a9ec6f0a36a84fa78ed9378a89 Mon Sep 17 00:00:00 2001 From: Chris Houseknecht Date: Tue, 5 Nov 2013 22:28:31 +0000 Subject: [PATCH] Jobs list on Job Templates detail page now closely matches the Jobs tab. Status looks the same, is clickable and offers matching tooltip. --- awx/ui/static/js/controllers/JobTemplates.js | 25 ++++++++++++++++++-- awx/ui/static/js/controllers/Jobs.js | 17 +++++-------- awx/ui/static/js/forms/JobTemplates.js | 24 ++++++++++++------- awx/ui/static/less/ansible-ui.less | 5 ++++ 4 files changed, 49 insertions(+), 22 deletions(-) diff --git a/awx/ui/static/js/controllers/JobTemplates.js b/awx/ui/static/js/controllers/JobTemplates.js index 4d0bbb54a7..653401672b 100644 --- a/awx/ui/static/js/controllers/JobTemplates.js +++ b/awx/ui/static/js/controllers/JobTemplates.js @@ -292,7 +292,8 @@ JobTemplatesAdd.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$l function JobTemplatesEdit ($scope, $rootScope, $compile, $location, $log, $routeParams, JobTemplateForm, GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, RelatedSearchInit, RelatedPaginateInit, ReturnToCaller, ClearScope, InventoryList, CredentialList, - ProjectList, LookUpInit, PromptPasswords, GetBasePath, md5Setup, ParseTypeChange) + ProjectList, LookUpInit, PromptPasswords, GetBasePath, md5Setup, ParseTypeChange, + JobStatusToolTip, FormatDate) { ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior //scope. @@ -389,6 +390,25 @@ function JobTemplatesEdit ($scope, $rootScope, $compile, $location, $log, $route checkSCMStatus(); } }); + + // Set the status/badge for each related job + if (scope.removeRelatedJobs) { + scope.removeRelatedJobs(); + } + scope.removeRelatedJobs = scope.$on('relatedjobs', function() { + if (scope['jobs'] && scope['jobs'].length) { + var cDate; + for (var i=0; i < scope['jobs'].length; i++) { + // Convert created date to local time zone + cDate = new Date(scope['jobs'][i].created); + scope['jobs'][i].created = FormatDate(cDate); + // Set tooltip and link + scope['jobs'][i].statusBadgeToolTip = JobStatusToolTip(scope['jobs'][i].status) + + " Click to view status details."; + scope['jobs'][i].statusLinkTo = '/#/jobs/' + scope['jobs'][i].id; + } + } + }); // Retrieve each related set and populate the playbook list if (scope.jobTemplateLoadedRemove) { @@ -610,5 +630,6 @@ function JobTemplatesEdit ($scope, $rootScope, $compile, $location, $log, $route JobTemplatesEdit.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'JobTemplateForm', 'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'RelatedSearchInit', 'RelatedPaginateInit', 'ReturnToCaller', 'ClearScope', 'InventoryList', 'CredentialList', - 'ProjectList', 'LookUpInit', 'PromptPasswords', 'GetBasePath', 'md5Setup', 'ParseTypeChange' + 'ProjectList', 'LookUpInit', 'PromptPasswords', 'GetBasePath', 'md5Setup', 'ParseTypeChange', + 'JobStatusToolTip', 'FormatDate' ]; diff --git a/awx/ui/static/js/controllers/Jobs.js b/awx/ui/static/js/controllers/Jobs.js index b900af9677..bfe9635ff9 100644 --- a/awx/ui/static/js/controllers/Jobs.js +++ b/awx/ui/static/js/controllers/Jobs.js @@ -34,23 +34,18 @@ function JobsListCtrl ($scope, $rootScope, $location, $log, $routeParams, Rest, scope[ngc] = ""; }); - if (scope[list.name]) { - // Convert created date to local time zone + if (scope['jobs'] && scope['jobs'].length) { var cDate; - for (var i=0; i < scope[list.name].length; i++) { - cDate = new Date(scope[list.name][i].created); - scope[list.name][i].created = FormatDate(cDate); - } - } - - if (scope.jobs && scope.jobs.length) { - for (var i=0; i < scope.jobs.length; i++) { + for (var i=0; i < scope['jobs'].length; i++) { + // Convert created date to local time zone + cDate = new Date(scope['jobs'][i].created); + scope['jobs'][i].created = FormatDate(cDate); + // Set tooltip and link scope.jobs[i].statusBadgeToolTip = JobStatusToolTip(scope.jobs[i].status) + " Click to view status details."; scope.jobs[i].statusLinkTo = '/#/jobs/' + scope.jobs[i].id; } } - }); diff --git a/awx/ui/static/js/forms/JobTemplates.js b/awx/ui/static/js/forms/JobTemplates.js index 438b7d9cee..0a3e07a969 100644 --- a/awx/ui/static/js/forms/JobTemplates.js +++ b/awx/ui/static/js/forms/JobTemplates.js @@ -267,26 +267,32 @@ angular.module('JobTemplateFormDefinition', []) desc: true, searchType: 'int' }, - name: { - label: 'Name', - link: true - }, - description: { - label: 'Description' + created: { + label: 'Date', + link: false, + searchable: false }, status: { label: 'Status', - icon: 'icon-circle', "class": 'job-\{\{ job.status \}\}', searchType: 'select', + linkTo: "\{\{ job.statusLinkTo \}\}", searchOptions: [ - { name: "new", value: "new" }, + { name: "new", value: "new" }, + { name: "waiting", value: "waiting" }, { name: "pending", value: "pending" }, { name: "running", value: "running" }, { name: "successful", value: "successful" }, { name: "error", value: "error" }, { name: "failed", value: "failed" }, - { name: "canceled", value: "canceled" } ] + { name: "canceled", value: "canceled" } ], + badgeIcon: 'icon-job-\{\{ job.status \}\}', + badgePlacement: 'left', + badgeToolTip: "\{\{ job.statusBadgeToolTip \}\}", + badgeTipPlacement: 'top', + badgeNgHref: "\{\{ job.statusLinkTo \}\}", + awToolTip: "\{\{ job.statusBadgeToolTip \}\}", + dataPlacement: 'top' } }, diff --git a/awx/ui/static/less/ansible-ui.less b/awx/ui/static/less/ansible-ui.less index 60fa49d480..ad0279cf66 100644 --- a/awx/ui/static/less/ansible-ui.less +++ b/awx/ui/static/less/ansible-ui.less @@ -55,6 +55,11 @@ body { font-weight: bold; } +/* Disable textarea re-sizing as a general rule */ +textarea { + resize: none; +} + /* Working... spinner */ .spinny { display: none;