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/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 @@

-
+