+ Note: For facts collected older than the time period specified, save one fact scan (snapshot) per time window (frequency). For example, facts older than 30 days are purged, while one weekly fact scan is kept.
+ Caution: Setting both numerical variables to "0" will delete all facts.
+
+
+
+
+
A value is required.
+
This is not a valid number.
+
+
+
+
+
+
+
+
+
Please enter the number of days you would like to keep this data.
+
Please enter a valid number.
+
Please enter a non-negative number.
+
Please enter a number smaller than 9999.
+
+
+
+
+
+
+
+
+
+
+
+
+
Please enter the number of days you would like to keep this data.
+
Please enter a valid number.
+
Please enter a non-negative number.
+
Please enter a number smaller than 9999.
+
+
+
+
+
+
+
+
+
+ The scheduler options are invalid or incomplete.
+
diff --git a/awx/ui/client/src/scheduler/scheduler.controller.js b/awx/ui/client/src/scheduler/scheduler.controller.js
index d53ea19e28..d1209b91da 100644
--- a/awx/ui/client/src/scheduler/scheduler.controller.js
+++ b/awx/ui/client/src/scheduler/scheduler.controller.js
@@ -21,9 +21,13 @@ export default [
ClearScope();
var base, e, id, url, parentObject;
-
base = $location.path().replace(/^\//, '').split('/')[0];
-
+ if (base == 'management_jobs') {
+ $scope.base = base = 'system_job_templates';
+ }
+ if ($stateParams.job_type){
+ $scope.job_type = $stateParams.job_type;
+ }
if ($scope.removePostRefresh) {
$scope.removePostRefresh();
}
diff --git a/awx/ui/client/src/scheduler/schedulerAdd.controller.js b/awx/ui/client/src/scheduler/schedulerAdd.controller.js
index 26be29c03a..a278af8a28 100644
--- a/awx/ui/client/src/scheduler/schedulerAdd.controller.js
+++ b/awx/ui/client/src/scheduler/schedulerAdd.controller.js
@@ -47,7 +47,8 @@ export default ['$compile', '$state', '$stateParams', 'AddSchedule', 'Wait', '$s
AddSchedule({
scope: $scope,
- callback: 'SchedulesRefresh'
+ callback: 'SchedulesRefresh',
+ base: $scope.base ? $scope.base : null
});
var callSelect2 = function() {
diff --git a/awx/ui/client/src/scheduler/schedulerEdit.controller.js b/awx/ui/client/src/scheduler/schedulerEdit.controller.js
index fb8d8052b5..05e9d7eef3 100644
--- a/awx/ui/client/src/scheduler/schedulerEdit.controller.js
+++ b/awx/ui/client/src/scheduler/schedulerEdit.controller.js
@@ -51,7 +51,8 @@ export default ['$compile', '$state', '$stateParams', 'EditSchedule', 'Wait', '$
EditSchedule({
scope: $scope,
id: parseInt($stateParams.schedule_id),
- callback: 'SchedulesRefresh'
+ callback: 'SchedulesRefresh',
+ base: $scope.base ? $scope.base: null
});
var callSelect2 = function() {
diff --git a/awx/ui/client/src/shared/Modal.js b/awx/ui/client/src/shared/Modal.js
index 2c17b1e14c..37ae34f97a 100644
--- a/awx/ui/client/src/shared/Modal.js
+++ b/awx/ui/client/src/shared/Modal.js
@@ -106,7 +106,7 @@ angular.module('ModalDialog', ['Utilities', 'ParseHelper'])
resizable: resizable,
create: function () {
// Fix the close button
- $('.ui-dialog[aria-describedby="' + id + '"]').find('.ui-dialog-titlebar button').empty().attr({'class': 'close'}).text('x');
+ $('.ui-dialog[aria-describedby="' + id + '"]').find('.ui-dialog-titlebar button').empty().attr({'class': 'close'}).html('');
setTimeout(function() {
// Make buttons bootstrapy
diff --git a/awx/ui/client/src/shared/branding/colors.default.less b/awx/ui/client/src/shared/branding/colors.default.less
index fbde1449ac..dd53943e88 100644
--- a/awx/ui/client/src/shared/branding/colors.default.less
+++ b/awx/ui/client/src/shared/branding/colors.default.less
@@ -12,6 +12,7 @@
@default-err-hov: #FF1105;
@default-succ: #3CB878;
@default-succ-hov: #60D66F;
+@default-succ-disabled: lighten(@default-succ, 30);
@default-link: #1678C4;
@default-link-hov: #4498DA;
@default-button-hov: #F2F2F2;
diff --git a/awx/ui/client/src/shared/branding/colors.less b/awx/ui/client/src/shared/branding/colors.less
index 4d9d801584..839b79a174 100644
--- a/awx/ui/client/src/shared/branding/colors.less
+++ b/awx/ui/client/src/shared/branding/colors.less
@@ -5,6 +5,7 @@
@blue-dark: #2a6496; /* link hover */
@grey: #A9A9A9;
@grey-txt: #707070;
+@grey-border: #DDDDDD;
@info: #d9edf7; /* alert info background color */
@info-border: #bce8f1; /* alert info border color */
@info-color: #3a87ad;
diff --git a/awx/ui/client/src/shared/form-generator.js b/awx/ui/client/src/shared/form-generator.js
index ed9aa488ae..693a090f68 100644
--- a/awx/ui/client/src/shared/form-generator.js
+++ b/awx/ui/client/src/shared/form-generator.js
@@ -1476,6 +1476,9 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat
}
html += "\n";
} else {
+ var inSubForm = false;
+ var currentSubForm = undefined;
+ var hasSubFormField;
// original, single-column form
section = '';
group = '';
@@ -1502,9 +1505,33 @@ angular.module('FormGenerator', [GeneratorHelpers.name, 'Utilities', listGenerat
html += "
\n";
section = field.section;
}
+
+ // To hide/show the subform when the value changes on parent
+ if (field.hasSubForm === true) {
+ hasSubFormField = fld;
+ }
+
+ // Add a subform container
+ if(field.subForm && currentSubForm === undefined) {
+ currentSubForm = field.subForm;
+ var subFormTitle = this.form.subFormTitles[field.subForm];
+
+ html += '
';
+ html += ''+ subFormTitle +'';
+ }
+ else if (!field.subForm && currentSubForm !== undefined) {
+ currentSubForm = undefined;
+ html += '
';
+ }
+
html += this.buildField(fld, field, options, this.form);
+
}
}
+ if (currentSubForm) {
+ currentSubForm = undefined;
+ html += '';
+ }
if (section !== '') {
html += "\n\n";
}
diff --git a/awx/ui/client/src/shared/list-generator/list-generator.factory.js b/awx/ui/client/src/shared/list-generator/list-generator.factory.js
index 304478ab3c..3d974db190 100644
--- a/awx/ui/client/src/shared/list-generator/list-generator.factory.js
+++ b/awx/ui/client/src/shared/list-generator/list-generator.factory.js
@@ -299,44 +299,47 @@ export default ['$location', '$compile', '$rootScope', 'SearchWidget', 'Paginate
list = this.list,
base, size, action, fld, cnt, field_action, fAction, itm;
- if(options.title !== false){
- html += "
";
- html += "
";
+ if (options.mode !== 'lookup') {
+ if(options.title !== false){
+ html += "
";
+ html += "
";
- if (list.listTitle) {
+ if (list.listTitle) {
- html += "
" + list.listTitle + "
";
- // We want to show the list title badge by default and only hide it when the list config specifically passes a false flag
- list.listTitleBadge = (typeof list.listTitleBadge === 'boolean' && list.listTitleBadge == false) ? false : true;
- if(list.listTitleBadge) {
- html += "{{(" + list.iterator + "_total_rows | number:0)}}";
- }
+ html += "
" + list.listTitle + "
";
+ // We want to show the list title badge by default and only hide it when the list config specifically passes a false flag
+ list.listTitleBadge = (typeof list.listTitleBadge === 'boolean' && list.listTitleBadge == false) ? false : true;
+ if(list.listTitleBadge) {
+ html += "{{(" + list.iterator + "_total_rows | number:0)}}";
+ }
+ }
+
+ html += "
";
+ if(list.toolbarAuxAction) {
+ html += "
";
+ html += list.toolbarAuxAction;
+ html += "
";
+ }
+ html += "
";
+ html += "
\n";
+
+ for (action in list.actions) {
+ list.actions[action] = _.defaults(list.actions[action], { dataPlacement: "top" });
+ }
+
+ html += "
\n";
+ html += "
";
+ html += "
";
+ }
}
- html += "
";
- if(list.toolbarAuxAction) {
- html += "
";
- html += list.toolbarAuxAction;
- html += "
";
- }
- html += "
";
- html += "
\n";
-
- for (action in list.actions) {
- list.actions[action] = _.defaults(list.actions[action], { dataPlacement: "top" });
- }
-
- html += "
\n";
- html += "
";
- html += "
";
- }
if (options.mode === 'edit' && list.editInstructions) {
html += "
\n";
- html += "\n";
+ html += "\n";
html += "Hint: " + list.editInstructions + "\n";
html += "
";
html += (list.emptyListText) ? list.emptyListText : "PLEASE ADD ITEMS TO THIS LIST";
html += "
";
-
if (options.showSearch=== undefined || options.showSearch === true) {
// Only show the search bar if we are loading results or if we have at least 1 base result
html += "
';
}
+ // Change layout if a lookup list, place radio buttons before labels
+ if (options.mode === 'lookup') {
+ if(options.input_type==="radio"){ //added by JT so that lookup forms can be either radio inputs or check box inputs
+ innerTable += "
";
+ }
+ else { // its assumed that options.input_type = checkbox
+ innerTable += "
";
+ }
+ }
+
cnt = 2;
base = (list.base) ? list.base : list.name;
base = base.replace(/^\//, '');
@@ -475,7 +491,7 @@ export default ['$location', '$compile', '$rootScope', 'SearchWidget', 'Paginate
}
}
- if (options.mode === 'select' || options.mode === 'lookup') {
+ if (options.mode === 'select') {
if(options.input_type==="radio"){ //added by JT so that lookup forms can be either radio inputs or check box inputs
innerTable += "
\n";
}
+
innerTable += "\n";
// Message for loading
@@ -611,7 +628,9 @@ export default ['$location', '$compile', '$rootScope', 'SearchWidget', 'Paginate
if (list.multiSelect) {
html += buildSelectAll().prop('outerHTML');
}
-
+ else if (options.mode === 'lookup') {
+ html += "
";
+ }
for (fld in list.fields) {
if ((list.fields[fld].searchOnly === undefined || list.fields[fld].searchOnly === false) &&
!(options.mode === 'lookup' && list.fields[fld].excludeModal === true)) {
@@ -643,9 +662,10 @@ export default ['$location', '$compile', '$rootScope', 'SearchWidget', 'Paginate
html += "\n";
}
}
- if (options.mode === 'select' || options.mode === 'lookup') {
- html += "
Select
";
- } else if (options.mode === 'edit' && list.fieldActions) {
+ if (options.mode === 'select') {
+ html += "
Select
";
+ }
+ else if (options.mode === 'edit' && list.fieldActions) {
html += "