diff --git a/awx/ui/client/legacy-styles/forms.less b/awx/ui/client/legacy-styles/forms.less
index 93ac6b76e7..b753dd8ad1 100644
--- a/awx/ui/client/legacy-styles/forms.less
+++ b/awx/ui/client/legacy-styles/forms.less
@@ -51,8 +51,8 @@
.Form-title--is_superuser{
height:15px;
- color: @btn-txt;
- background-color: @btn-bg;
+ color: @default-interface-txt;
+ background-color: @default-list-header-bg;
border-radius: 5px;
border: 1px solid @btn-bord;
font-size: 10px;
@@ -156,9 +156,19 @@
flex: 1 0 auto;
margin-bottom: 20px;
width: 33%;
+ max-width: 33%;
padding-right: 30px;
}
+.Form-formGroup--fullWidth {
+ max-width: none;
+}
+
+.Form-formGroup--checkbox{
+ display: flex;
+ align-items: flex-end;
+}
+
.Form-subForm {
width: 100%;
margin-bottom: 15px;
@@ -211,12 +221,17 @@
border:1px solid @field-border-sel;
}
+.Form-monospace{
+ font-family: Menlo,Monaco,Consolas,"Courier New",monospace!important;
+}
+
.ui-spinner{
height: 30px;
background-color: @field-secondary-bg;
border-radius: 5px;
border:1px solid @field-border;
color: @field-input-text;
+ width:100%
}
.ui-spinner-input{
@@ -480,10 +495,6 @@ input[type='radio']:checked:before {
color: @default-interface-txt;
}
-.Form-formGroup {
- max-width: 33%;
-}
-
@media only screen and (max-width: 650px) {
.Form-formGroup {
flex: 1 0 auto;
diff --git a/awx/ui/client/src/app.js b/awx/ui/client/src/app.js
index 0042de8cd9..9a2e38ccfd 100644
--- a/awx/ui/client/src/app.js
+++ b/awx/ui/client/src/app.js
@@ -233,6 +233,7 @@ var tower = angular.module('Tower', [
url: '/home',
templateUrl: urlPrefix + 'partials/home.html',
controller: Home,
+ params: {licenseMissing: null},
data: {
activityStream: true
},
@@ -789,6 +790,10 @@ var tower = angular.module('Tower', [
if (fromState.name === 'signIn'){
CheckLicense.notify();
}
+
+ if(fromState.name === 'license' && toParams.hasOwnProperty('licenseMissing')){
+ $rootScope.licenseMissing = toParams.licenseMissing;
+ }
var list, id;
// broadcast event change if editing crud object
if ($location.$$path && $location.$$path.split("/")[3] && $location.$$path.split("/")[3] === "schedules") {
diff --git a/awx/ui/client/src/forms/Credentials.js b/awx/ui/client/src/forms/Credentials.js
index 15ad2f03dc..6b9902fa97 100644
--- a/awx/ui/client/src/forms/Credentials.js
+++ b/awx/ui/client/src/forms/Credentials.js
@@ -79,24 +79,7 @@ export default
dataTitle: 'Type',
dataPlacement: 'right',
dataContainer: "body",
- hasSubForm: true,
- // helpCollapse: [{
- // hdr: 'Select a Credential Type',
- // content: '
\n' +
- // 'Machine \n' +
- // 'Authentication for remote machine access. This can include SSH keys, usernames, passwords, ' +
- // 'and sudo information. Machine credentials are used when submitting jobs to run playbooks against ' +
- // 'remote hosts. ' +
- // 'Source Control \n' +
- // 'Used to check out and synchronize playbook repositories with a remote source control ' +
- // 'management system such as Git, Subversion (svn), or Mercurial (hg). These credentials are ' +
- // 'used on the Projects tab. \n' +
- // 'Others (Cloud Providers) \n' +
- // 'Access keys for authenticating to the specific ' +
- // 'cloud provider, usually used for inventory sync ' +
- // 'and deployment. \n' +
- // ' \n'
- // }]
+ hasSubForm: true
},
access_key: {
label: 'Access Key',
@@ -254,7 +237,8 @@ export default
reqExpression: 'key_required',
init: true
},
- class: 'Form-textAreaLabel',
+ class: 'Form-textAreaLabel Form-formGroup--fullWidth',
+ elementClass: 'Form-monospace',
hintText: "{{ key_hint }}",
addRequired: false,
editRequired: false,
diff --git a/awx/ui/client/src/forms/Groups.js b/awx/ui/client/src/forms/Groups.js
index b43783ce0f..561dc558b2 100644
--- a/awx/ui/client/src/forms/Groups.js
+++ b/awx/ui/client/src/forms/Groups.js
@@ -38,7 +38,7 @@ export default
variables: {
label: 'Variables',
type: 'textarea',
- class: 'Form-textAreaLabel',
+ class: 'Form-textAreaLabel Form-formGroup--fullWidth',
addRequired: false,
editRequird: false,
rows: 12,
@@ -161,7 +161,7 @@ export default
label: 'Environment Variables', //"{{vars_label}}" ,
ngShow: "source && source.value=='custom' ",
type: 'textarea',
- class: 'Form-textAreaLabel',
+ class: 'Form-textAreaLabel Form-formGroup--fullWidth',
addRequired: false,
editRequired: false,
rows: 6,
@@ -180,7 +180,7 @@ export default
label: 'Source Variables', //"{{vars_label}}" ,
ngShow: "source && (source.value == 'file' || source.value == 'ec2')",
type: 'textarea',
- class: 'Form-textAreaLabel',
+ class: 'Form-textAreaLabel Form-formGroup--fullWidth',
addRequired: false,
editRequird: false,
rows: 6,
@@ -207,7 +207,7 @@ export default
"source.value == 'openstack')",
type: 'textarea',
addRequired: false,
- class: 'Form-textAreaLabel',
+ class: 'Form-textAreaLabel Form-formGroup--fullWidth',
editRequird: false,
rows: 6,
'default': '---',
diff --git a/awx/ui/client/src/forms/Inventories.js b/awx/ui/client/src/forms/Inventories.js
index e1ee63a3d3..2c649af601 100644
--- a/awx/ui/client/src/forms/Inventories.js
+++ b/awx/ui/client/src/forms/Inventories.js
@@ -49,6 +49,7 @@ export default
variables: {
label: 'Variables',
type: 'textarea',
+ class: 'Form-formGroup--fullWidth',
addRequired: false,
editRequird: false,
rows: 6,
diff --git a/awx/ui/client/src/forms/JobTemplates.js b/awx/ui/client/src/forms/JobTemplates.js
index 9ae3bea98f..b5e5c52e7d 100644
--- a/awx/ui/client/src/forms/JobTemplates.js
+++ b/awx/ui/client/src/forms/JobTemplates.js
@@ -239,7 +239,7 @@ export default
variables: {
label: 'Extra Variables',
type: 'textarea',
- class: 'Form-textAreaLabel',
+ class: 'Form-textAreaLabel Form-formGroup--fullWidth',
rows: 6,
addRequired: false,
editRequired: false,
diff --git a/awx/ui/client/src/inventory-scripts/add/add.controller.js b/awx/ui/client/src/inventory-scripts/add/add.controller.js
index af0f924940..66c54d49df 100644
--- a/awx/ui/client/src/inventory-scripts/add/add.controller.js
+++ b/awx/ui/client/src/inventory-scripts/add/add.controller.js
@@ -49,7 +49,6 @@ export default
script: scope.script
})
.success(function (data) {
- $rootScope.addedItem = data.id;
$state.go('inventoryScripts', {}, {reload: true});
Wait('stop');
})
diff --git a/awx/ui/client/src/inventory-scripts/edit/edit.controller.js b/awx/ui/client/src/inventory-scripts/edit/edit.controller.js
index a24c9d1766..7ed84066b8 100644
--- a/awx/ui/client/src/inventory-scripts/edit/edit.controller.js
+++ b/awx/ui/client/src/inventory-scripts/edit/edit.controller.js
@@ -79,9 +79,8 @@ export default
script: $scope.script
})
.success(function () {
- $state.transitionTo('inventoryScriptsList');
+ $state.transitionTo('inventoryScripts');
Wait('stop');
-
})
.error(function (data, status) {
ProcessErrors($scope, data, status, form, { hdr: 'Error!',
diff --git a/awx/ui/client/src/inventory-scripts/inventory-scripts.form.js b/awx/ui/client/src/inventory-scripts/inventory-scripts.form.js
index eb56f6df96..1bbf128caf 100644
--- a/awx/ui/client/src/inventory-scripts/inventory-scripts.form.js
+++ b/awx/ui/client/src/inventory-scripts/inventory-scripts.form.js
@@ -47,6 +47,8 @@ export default function() {
label: 'Custom Script',
type: 'textarea',
hintText: "Drag and drop an inventory script on the field below",
+ class: 'Form-formGroup--fullWidth',
+ elementClass: 'Form-monospace',
addRequired: true,
editRequired: true,
awDropFile: true,
diff --git a/awx/ui/client/src/job-detail/job-detail.controller.js b/awx/ui/client/src/job-detail/job-detail.controller.js
index de4011dd98..7c72a823bb 100644
--- a/awx/ui/client/src/job-detail/job-detail.controller.js
+++ b/awx/ui/client/src/job-detail/job-detail.controller.js
@@ -737,7 +737,7 @@ export default
return true;
};
- scope.toggleLessEvents = function(state) {
+ scope.toggleLessEvents = function() {
if (!scope.lessEvents) {
$('#events-summary').slideUp(200);
scope.lessEvents = true;
diff --git a/awx/ui/client/src/license/license.block.less b/awx/ui/client/src/license/license.block.less
index 475cdf0016..f76c1de0aa 100644
--- a/awx/ui/client/src/license/license.block.less
+++ b/awx/ui/client/src/license/license.block.less
@@ -54,6 +54,7 @@
color: @login-notice-text;
overflow-y: scroll;
overflow-x: visible;
+ white-space: pre-line;
}
.License-field label{
diff --git a/awx/ui/client/src/license/license.controller.js b/awx/ui/client/src/license/license.controller.js
index 291ae0d0a7..27a826a50f 100644
--- a/awx/ui/client/src/license/license.controller.js
+++ b/awx/ui/client/src/license/license.controller.js
@@ -40,33 +40,36 @@ export default
$window.open('https://www.ansible.com/license', '_blank');
};
- $scope.newLicense = {};
- $scope.submit = function(){
- Wait('start');
- CheckLicense.post($scope.newLicense.file, $scope.newLicense.eula)
- .success(function(){
- reset();
- init();
- $scope.success = true;
- // for animation purposes
- var successTimeout = setTimeout(function(){
- $scope.success = false;
- clearTimeout(successTimeout);
- }, 4000);
- if($rootScope.licenseMissing === true){
- $rootScope.licenseMissing = false;
- $state.go('dashboard');
- }
- else{
- $rootScope.licenseMissing = false;
- }
- });
- };
- var calcDaysRemaining = function(seconds){
- // calculate the number of days remaining on the license
- var duration = moment.duration(seconds, 'seconds');
- return duration.days();
- };
+ $scope.newLicense = {};
+ $scope.submit = function(){
+ Wait('start');
+ CheckLicense.post($scope.newLicense.file, $scope.newLicense.eula)
+ .success(function(){
+ reset();
+ init();
+ if($rootScope.licenseMissing === true){
+ $state.go('dashboard', {
+ licenseMissing: false
+ });
+ }
+ else{
+ $scope.success = true;
+ $rootScope.licenseMissing = false;
+ // for animation purposes
+ var successTimeout = setTimeout(function(){
+ $scope.success = false;
+ clearTimeout(successTimeout);
+ }, 4000);
+ }
+ });
+ };
+ var calcDaysRemaining = function(seconds){
+ // calculate the number of days remaining on the license
+ var duration = moment.duration(seconds, 'seconds').days();
+ duration = (duration!==1) ? `${duration} Days` : `${duration} Day`;
+ return duration;
+ };
+
var calcExpiresOn = function(days){
// calculate the expiration date of the license
diff --git a/awx/ui/client/src/license/license.partial.html b/awx/ui/client/src/license/license.partial.html
index fb1e88cbe1..24614bdc21 100644
--- a/awx/ui/client/src/license/license.partial.html
+++ b/awx/ui/client/src/license/license.partial.html
@@ -44,7 +44,7 @@
Time Remaining
- {{time.remaining}} Days
+ {{time.remaining}}
@@ -106,9 +106,7 @@
End User License Agreement
- {{ license.eula }}
-
+ class="License-eulaNotice">{{ license.eula }}
diff --git a/awx/ui/client/src/management-jobs/card/card.controller.js b/awx/ui/client/src/management-jobs/card/card.controller.js
index 37d50608fd..d1fcbff93a 100644
--- a/awx/ui/client/src/management-jobs/card/card.controller.js
+++ b/awx/ui/client/src/management-jobs/card/card.controller.js
@@ -7,16 +7,14 @@
// import listGenerator from 'tower/shared/list-generator/main';
export default
- [ 'Wait', '$location' , '$compile', 'CreateDialog',
- 'GetBasePath' , 'SearchInit' , 'PaginateInit',
- 'SchedulesList',
- 'Rest' , 'ProcessErrors', 'managementJobsListObject', '$rootScope',
- '$state','$scope',
- function( Wait, $location, $compile, CreateDialog,
- GetBasePath, SearchInit, PaginateInit,
- SchedulesList,
- Rest, ProcessErrors, managementJobsListObject, $rootScope,
- $state, $scope) {
+ [ 'Wait', '$location' , '$compile', 'CreateDialog', 'GetBasePath' ,
+ 'SearchInit' , 'PaginateInit', 'SchedulesList', 'Rest' ,
+ 'ProcessErrors', 'managementJobsListObject', '$rootScope', '$state',
+ '$scope', 'CreateSelect2',
+ function( Wait, $location, $compile, CreateDialog, GetBasePath,
+ SearchInit, PaginateInit, SchedulesList, Rest, ProcessErrors,
+ managementJobsListObject, $rootScope, $state, $scope,
+ CreateSelect2) {
var defaultUrl = GetBasePath('system_job_templates');
@@ -154,6 +152,14 @@ export default
// $('#configure-tower-dialog').dialog('close');
$('#prompt-for-days-facts').show();
$('#prompt-for-days-facts').dialog('open');
+ CreateSelect2({
+ element: '#keep_unit',
+ multiple: false
+ });
+ CreateSelect2({
+ element: '#granularity_keep_unit',
+ multiple: false
+ });
Wait('stop');
});
};
@@ -238,7 +244,7 @@ export default
};
$scope.chooseRunJob = function(id, name) {
- if(id === 4) {
+ if(this.card.job_type === "cleanup_facts") {
// Run only for 'Cleanup Fact Details'
$scope.submitCleanupJob(id, name);
} else {
diff --git a/awx/ui/client/src/management-jobs/card/card.partial.html b/awx/ui/client/src/management-jobs/card/card.partial.html
index b3e1047c22..7c01cd0b9b 100644
--- a/awx/ui/client/src/management-jobs/card/card.partial.html
+++ b/awx/ui/client/src/management-jobs/card/card.partial.html
@@ -16,17 +16,20 @@
{{ card.name }}
-
-
-
+ ng-click='chooseRunJob(card.id, card.name)'
+ data-placement="top" aw-tool-tip="Launch Management Job" data-original-title="" title="">
+ ng-click='configureSchedule(card.id)'
+ data-placement="top" aw-tool-tip="Schedule Management Job" data-original-title="" title="">
+
+
+
diff --git a/awx/ui/client/src/management-jobs/card/mgmtcards.block.less b/awx/ui/client/src/management-jobs/card/mgmtcards.block.less
index 768a1acff6..35c74ce147 100644
--- a/awx/ui/client/src/management-jobs/card/mgmtcards.block.less
+++ b/awx/ui/client/src/management-jobs/card/mgmtcards.block.less
@@ -22,6 +22,14 @@
border-left: 5px solid #337AB7;
}
+.MgmtCards-card--promptElements{
+ padding-top: 10px;
+}
+
+.MgmtCards-promptText{
+ color:@default-interface-txt;
+}
+
.MgmtCards-header {
display: flex;
flex-wrap: nowrap;
diff --git a/awx/ui/client/src/management-jobs/notifications/notification.controller.js b/awx/ui/client/src/management-jobs/notifications/notification.controller.js
index 89734ed6f5..0fed968d24 100644
--- a/awx/ui/client/src/management-jobs/notifications/notification.controller.js
+++ b/awx/ui/client/src/management-jobs/notifications/notification.controller.js
@@ -23,7 +23,7 @@ export default
view = GenerateList,
id = $stateParams.management_id;
- list.listTitle = `${management_job.name} | Notifications`;
+ list.listTitle = `${management_job.name}
Notifications`;
view.inject( list, {
mode: 'edit',
cancelButton: true,
diff --git a/awx/ui/client/src/notifications/add/add.controller.js b/awx/ui/client/src/notifications/add/add.controller.js
index ec7f1fdb24..1415c9bf05 100644
--- a/awx/ui/client/src/notifications/add/add.controller.js
+++ b/awx/ui/client/src/notifications/add/add.controller.js
@@ -110,8 +110,7 @@ export default
Wait('start');
Rest.setUrl(url);
Rest.post(params)
- .success(function (data) {
- $rootScope.addedItem = data.id;
+ .success(function () {
$state.go('notifications', {}, {reload: true});
Wait('stop');
})
diff --git a/awx/ui/client/src/notifications/edit/edit.controller.js b/awx/ui/client/src/notifications/edit/edit.controller.js
index 8a0577f14c..22dfd4f21e 100644
--- a/awx/ui/client/src/notifications/edit/edit.controller.js
+++ b/awx/ui/client/src/notifications/edit/edit.controller.js
@@ -81,7 +81,7 @@ export default
master.notification_type = $scope.notification_type;
CreateSelect2({
- element: '#notification_template_notification_typex',
+ element: '#notification_template_notification_type',
multiple: false
});
NotificationsTypeChange.getDetailFields($scope.notification_type.value).forEach(function(field) {
@@ -155,8 +155,7 @@ export default
Wait('start');
Rest.setUrl(url+ id+'/');
Rest.put(params)
- .success(function (data) {
- $rootScope.addedItem = data.id;
+ .success(function () {
$state.go('notifications', {}, {reload: true});
Wait('stop');
})
diff --git a/awx/ui/client/src/notifications/notification-templates-list/list.controller.js b/awx/ui/client/src/notifications/notification-templates-list/list.controller.js
index 6c6aefb133..90642e7f36 100644
--- a/awx/ui/client/src/notifications/notification-templates-list/list.controller.js
+++ b/awx/ui/client/src/notifications/notification-templates-list/list.controller.js
@@ -24,10 +24,6 @@ export default
scope: scope
});
-
- if (scope.removePostRefresh) {
- scope.removePostRefresh();
- }
scope.removePostRefresh = scope.$on('PostRefresh', function () {
Wait('stop');
if (scope.notification_templates) {
@@ -192,7 +188,7 @@ export default
msg: 'Call to ' + url + ' failed. DELETE returned status: ' + status });
});
};
- var bodyHtml = '
Are you sure you want to delete the inventory below?
' + name + '
';
+ var bodyHtml = '
Are you sure you want to delete the notification template below?
' + name + '
';
Prompt({
hdr: 'Delete',
body: bodyHtml,
diff --git a/awx/ui/client/src/notifications/notificationTemplates.form.js b/awx/ui/client/src/notifications/notificationTemplates.form.js
index 89abfb36a4..579e0189a8 100644
--- a/awx/ui/client/src/notifications/notificationTemplates.form.js
+++ b/awx/ui/client/src/notifications/notificationTemplates.form.js
@@ -66,12 +66,7 @@ export default function() {
ngShow: "notification_type.value == 'email' ",
subForm: 'typeSubForm'
},
- use_tls: {
- label: 'Use TLS',
- type: 'checkbox',
- ngShow: "notification_type.value == 'email' ",
- subForm: 'typeSubForm'
- },
+
host: {
label: 'Host',
type: 'text',
@@ -119,12 +114,6 @@ export default function() {
ngShow: "notification_type.value == 'email' || notification_type.value == 'irc' ",
subForm: 'typeSubForm'
},
- use_ssl: {
- labelBind: 'sslLabel',
- type: 'checkbox',
- ngShow: "notification_type.value == 'email' || notification_type.value == 'irc' ",
- subForm: 'typeSubForm'
- },
port: {
labelBind: 'portLabel',
type: 'number',
@@ -325,7 +314,8 @@ export default function() {
},
targets: {
label: 'Destination Channels or Users',
- type: 'text',
+ type: 'textarea',
+ rows: 3,
awPopOver: '
Type an option on each line. The pound symbol (#) is not required.
'+
'
For example: #support or support \n @username or username \n',
dataTitle: 'Destination Channels',
@@ -338,6 +328,18 @@ export default function() {
ngShow: "notification_type.value == 'irc' ",
subForm: 'typeSubForm'
},
+ use_tls: {
+ label: 'Use TLS',
+ type: 'checkbox',
+ ngShow: "notification_type.value == 'email' ",
+ subForm: 'typeSubForm'
+ },
+ use_ssl: {
+ labelBind: 'sslLabel',
+ type: 'checkbox',
+ ngShow: "notification_type.value == 'email' || notification_type.value == 'irc' ",
+ subForm: 'typeSubForm'
+ },
},
diff --git a/awx/ui/client/src/scheduler/schedulerForm.partial.html b/awx/ui/client/src/scheduler/schedulerForm.partial.html
index 52d6610292..c991a3d28d 100644
--- a/awx/ui/client/src/scheduler/schedulerForm.partial.html
+++ b/awx/ui/client/src/scheduler/schedulerForm.partial.html
@@ -593,7 +593,7 @@
-
+
Extra Variables
diff --git a/awx/ui/client/src/setup-menu/setup-menu.partial.html b/awx/ui/client/src/setup-menu/setup-menu.partial.html
index 9560afa313..f03ae05d08 100644
--- a/awx/ui/client/src/setup-menu/setup-menu.partial.html
+++ b/awx/ui/client/src/setup-menu/setup-menu.partial.html
@@ -1,9 +1,9 @@