diff --git a/awx/ui/static/js/controllers/JobTemplates.js b/awx/ui/static/js/controllers/JobTemplates.js index d7f8b522db..4952b56b47 100644 --- a/awx/ui/static/js/controllers/JobTemplates.js +++ b/awx/ui/static/js/controllers/JobTemplates.js @@ -358,8 +358,8 @@ function JobTemplatesEdit ($scope, $rootScope, $compile, $location, $log, $route } }) .error( function(data, status, headers, config) { - ProcessErrors(scope, data, status, form, - { hdr: 'Error!', msg: 'Failed to get playbook list for ' + url +'. GET returned status: ' + status }); + Alert('Missing Playbooks', 'Unable to retrieve the list of playbooks for this project. Choose a different ' + + ' project or make the playbooks available on the file system.', 'alert-info'); }); } } diff --git a/awx/ui/static/js/controllers/Jobs.js b/awx/ui/static/js/controllers/Jobs.js index a5cd3fdb94..7b002f4c95 100644 --- a/awx/ui/static/js/controllers/Jobs.js +++ b/awx/ui/static/js/controllers/Jobs.js @@ -215,8 +215,11 @@ function JobsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams, } }) .error( function(data, status, headers, config) { - ProcessErrors(scope, data, status, form, - { hdr: 'Error!', msg: 'Failed to get playbook list for ' + url +'. GET returned status: ' + status }); + //ProcessErrors(scope, data, status, form, + // { hdr: 'Error!', msg: 'Failed to get playbook list for ' + url +'. GET returned status: ' + status }); + + // Ignore the error. We get this error when the project or playbook has been deleted + }); } } diff --git a/awx/ui/static/js/forms/Credentials.js b/awx/ui/static/js/forms/Credentials.js index 0ef99843c9..3ba0e4b4fb 100644 --- a/awx/ui/static/js/forms/Credentials.js +++ b/awx/ui/static/js/forms/Credentials.js @@ -274,7 +274,7 @@ angular.module('CredentialFormDefinition', []) reset: { ngClick: 'formReset()', label: 'Reset', - icon: 'icon-trash', + icon: 'icon-undo', 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } diff --git a/awx/ui/static/js/forms/Groups.js b/awx/ui/static/js/forms/Groups.js index 435c49980e..04bb9e525c 100644 --- a/awx/ui/static/js/forms/Groups.js +++ b/awx/ui/static/js/forms/Groups.js @@ -246,7 +246,7 @@ angular.module('GroupFormDefinition', []) ngClick: 'formReset()', label: 'Reset', 'class': "btn btn-default", - icon: 'icon-trash', + icon: 'icon-undo', ngDisabled: true //Disabled when $pristine } }, diff --git a/awx/ui/static/js/forms/HostGroups.js b/awx/ui/static/js/forms/HostGroups.js index 7b960fd3e3..127b73748f 100644 --- a/awx/ui/static/js/forms/HostGroups.js +++ b/awx/ui/static/js/forms/HostGroups.js @@ -47,7 +47,7 @@ angular.module('HostGroupsFormDefinition', []) reset: { ngClick: 'formReset()', label: 'Reset', - icon: 'icon-trash', + icon: 'icon-undo', 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } diff --git a/awx/ui/static/js/forms/Hosts.js b/awx/ui/static/js/forms/Hosts.js index e5086055d6..4edd1b69cf 100644 --- a/awx/ui/static/js/forms/Hosts.js +++ b/awx/ui/static/js/forms/Hosts.js @@ -89,7 +89,7 @@ angular.module('HostFormDefinition', []) reset: { ngClick: 'formReset()', label: 'Reset', - icon: 'icon-trash', + icon: 'icon-undo', 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } diff --git a/awx/ui/static/js/forms/Inventories.js b/awx/ui/static/js/forms/Inventories.js index 787a7b5912..48dd7cd6e4 100644 --- a/awx/ui/static/js/forms/Inventories.js +++ b/awx/ui/static/js/forms/Inventories.js @@ -105,7 +105,7 @@ angular.module('InventoryFormDefinition', []) reset: { ngClick: 'formReset()', label: 'Reset', - icon: 'icon-trash', + icon: 'icon-undo', 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } diff --git a/awx/ui/static/js/forms/JobTemplates.js b/awx/ui/static/js/forms/JobTemplates.js index 38084aff0b..4095922b96 100644 --- a/awx/ui/static/js/forms/JobTemplates.js +++ b/awx/ui/static/js/forms/JobTemplates.js @@ -277,7 +277,7 @@ angular.module('JobTemplateFormDefinition', []) reset: { ngClick: 'formReset()', label: 'Reset', - icon: 'icon-trash', + icon: 'icon-undo', 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } diff --git a/awx/ui/static/js/forms/Jobs.js b/awx/ui/static/js/forms/Jobs.js index 6b5ae64dd6..862a8f17f8 100644 --- a/awx/ui/static/js/forms/Jobs.js +++ b/awx/ui/static/js/forms/Jobs.js @@ -27,15 +27,15 @@ angular.module('JobFormDefinition', []) active: true, ngShow: "job_id !== null" }, - hosts: { - href: "/#/jobs/{{ job_id }}/job_host_summaries", - label: 'Summary', - icon: 'icon-laptop' - }, events: { href: "/#/jobs/{{ job_id }}/job_events", label: 'Events', icon: 'icon-list-ul' + }, + hosts: { + href: "/#/jobs/{{ job_id }}/job_host_summaries", + label: 'Host Summary', + icon: 'icon-laptop' } }, @@ -292,7 +292,7 @@ angular.module('JobFormDefinition', []) reset: { ngClick: 'formReset()', label: 'Reset', - icon: 'icon-remove', + icon: 'icon-undo', 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } diff --git a/awx/ui/static/js/forms/Organizations.js b/awx/ui/static/js/forms/Organizations.js index 65e97d2f46..c3c5dfe47e 100644 --- a/awx/ui/static/js/forms/Organizations.js +++ b/awx/ui/static/js/forms/Organizations.js @@ -55,7 +55,7 @@ angular.module('OrganizationFormDefinition', []) reset: { ngClick: 'formReset()', label: 'Reset', - icon: 'icon-trash', + icon: 'icon-undo', 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } @@ -75,15 +75,6 @@ angular.module('OrganizationFormDefinition', []) label: 'Add', icon: 'icon-plus', awToolTip: 'Add a new user' - }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch('user')", - iconSize: 'large' } }, @@ -130,15 +121,6 @@ angular.module('OrganizationFormDefinition', []) icon: 'icon-plus', label: 'Add', awToolTip: 'Add new administrator' - }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch('admin')", - iconSize: 'large' } }, fields: { diff --git a/awx/ui/static/js/forms/Permissions.js b/awx/ui/static/js/forms/Permissions.js index 93eace81c8..0e98a6543d 100644 --- a/awx/ui/static/js/forms/Permissions.js +++ b/awx/ui/static/js/forms/Permissions.js @@ -108,7 +108,7 @@ angular.module('PermissionFormDefinition', []) reset: { ngClick: 'formReset()', label: 'Reset', - icon: 'icon-trash', + icon: 'icon-undo', 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } diff --git a/awx/ui/static/js/forms/Projects.js b/awx/ui/static/js/forms/Projects.js index fa26566ab2..89c4ae4fdf 100644 --- a/awx/ui/static/js/forms/Projects.js +++ b/awx/ui/static/js/forms/Projects.js @@ -209,7 +209,7 @@ angular.module('ProjectFormDefinition', []) reset: { ngClick: 'formReset()', label: 'Reset', - icon: 'icon-trash', + icon: 'icon-undo', 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } @@ -228,15 +228,6 @@ angular.module('ProjectFormDefinition', []) icon: 'icon-plus', label: 'Add', awToolTip: 'Add an organization' - }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch('organization')", - iconSize: 'large' } }, diff --git a/awx/ui/static/js/forms/Teams.js b/awx/ui/static/js/forms/Teams.js index 604d39217c..fee9a76d6a 100644 --- a/awx/ui/static/js/forms/Teams.js +++ b/awx/ui/static/js/forms/Teams.js @@ -67,7 +67,7 @@ angular.module('TeamFormDefinition', []) reset: { ngClick: 'formReset()', label: 'Reset', - icon: 'icon-trash', + icon: 'icon-undo', 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } @@ -87,15 +87,6 @@ angular.module('TeamFormDefinition', []) icon: 'icon-plus', label: 'Add', add: 'Add a new credential' - }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch('credential')", - iconSize: 'large' } }, @@ -140,15 +131,6 @@ angular.module('TeamFormDefinition', []) label: 'Add', awToolTip: 'Add a permission for this user', ngShow: 'PermissionAddAllowed' - }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch('permission')", - iconSize: 'large' } }, @@ -207,15 +189,6 @@ angular.module('TeamFormDefinition', []) ngClick: "add('projects')", icon: 'icon-plus', label: 'Add' - }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch('project')", - iconSize: 'large' } }, @@ -259,15 +232,6 @@ angular.module('TeamFormDefinition', []) icon: 'icon-plus', label: 'Add', awToolTip: 'Add a user' - }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch('user')", - iconSize: 'large' } }, diff --git a/awx/ui/static/js/forms/Users.js b/awx/ui/static/js/forms/Users.js index e05170a55b..65d8f32531 100644 --- a/awx/ui/static/js/forms/Users.js +++ b/awx/ui/static/js/forms/Users.js @@ -111,7 +111,7 @@ angular.module('UserFormDefinition', []) reset: { ngClick: 'formReset()', label: 'Reset', - icon: 'icon-trash', + icon: 'icon-undo', 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } @@ -131,15 +131,6 @@ angular.module('UserFormDefinition', []) icon: 'icon-plus', label: 'Add', awToolTip: 'Add a credential for this user' - }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch('credential')", - iconSize: 'large' } }, @@ -184,15 +175,6 @@ angular.module('UserFormDefinition', []) label: 'Add', awToolTip: 'Add a permission for this user', ngShow: 'PermissionAddAllowed' - }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch('permission')", - iconSize: 'large' } }, @@ -249,15 +231,6 @@ angular.module('UserFormDefinition', []) base: '/organizations', actions: { - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch('adminof')", - iconSize: 'large' - } }, fields: { @@ -278,15 +251,6 @@ angular.module('UserFormDefinition', []) open: false, actions: { - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch('organization')", - iconSize: 'large' - } }, fields: { @@ -307,15 +271,6 @@ angular.module('UserFormDefinition', []) open: false, actions: { - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch('team')", - iconSize: 'large' - } }, fields: { @@ -336,15 +291,6 @@ angular.module('UserFormDefinition', []) open: false, actions: { - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch('project')", - iconSize: 'large' - } }, fields: { diff --git a/awx/ui/static/js/helpers/related-search.js b/awx/ui/static/js/helpers/related-search.js index a1373529a6..1dc76846b5 100644 --- a/awx/ui/static/js/helpers/related-search.js +++ b/awx/ui/static/js/helpers/related-search.js @@ -42,16 +42,16 @@ angular.module('RelatedSearchHelper', ['RestServices', 'Utilities','RefreshRelat scope[iterator + 'SearchTypeLabel'] = 'Contains'; scope[iterator + 'SearchValue'] = null; scope[iterator + 'SelectShow'] = false; - scope[iterator + 'HideSearchType'] = false; + //scope[iterator + 'HideSearchType'] = false; + scope[iterator + 'ShowStartBtn'] = true; + scope[iterator + 'HideAllStartBtn'] = false; + f = scope[iterator + 'SearchField'] if (form.related[set].fields[f].searchType && ( form.related[set].fields[f].searchType == 'boolean' || form.related[set].fields[f].searchType == 'select')) { scope[iterator + 'SelectShow'] = true; scope[iterator + 'SearchSelectOpts'] = list.fields[f].searchOptions; } - if (form.related[set].fields[f].searchType && form.related[set].fields[f].searchType == 'int') { - scope[iterator + 'HideSearchType'] = true; - } if (form.related[set].fields[f].searchType && form.related[set].fields[f].searchType == 'gtzero') { scope[iterator + "InputHide"] = true; } @@ -79,11 +79,13 @@ angular.module('RelatedSearchHelper', ['RestServices', 'Utilities','RefreshRelat scope[iterator + 'SearchField'] = fld; scope[iterator + 'SearchValue'] = ''; scope[iterator + 'SelectShow'] = false; - scope[iterator + 'HideSearchType'] = false; + //scope[iterator + 'HideSearchType'] = false; scope[iterator + 'InputHide'] = false; + scope[iterator + 'ShowStartBtn'] = true; if (f.searchType !== undefined && f.searchType == 'gtzero') { scope[iterator + "InputHide"] = true; + scope[iterator + 'ShowStartBtn'] = false; } if (f.searchType !== undefined && (f.searchType == 'boolean' || f.searchType == 'select')) { @@ -91,7 +93,8 @@ angular.module('RelatedSearchHelper', ['RestServices', 'Utilities','RefreshRelat scope[iterator + 'SearchSelectOpts'] = f.searchOptions; } if (f.searchType !== undefined && f.searchType == 'int') { - scope[iterator + 'HideSearchType'] = true; + //scope[iterator + 'HideSearchType'] = true; + scope[model + 'SearchType'] = 'int'; } scope.search(iterator); @@ -116,6 +119,11 @@ angular.module('RelatedSearchHelper', ['RestServices', 'Utilities','RefreshRelat Wait('start'); scope[iterator + 'Loading'] = true; scope[iterator + 'HoldInput'] = true; + + if (scope[iterator + 'SearchValue']) { + // User typed a value in input field + scope[iterator + 'ShowStartBtn'] = false; + } if (iterator == 'host') { if (scope['hostSearchField'] == 'has_active_failures') { diff --git a/awx/ui/static/js/helpers/search.js b/awx/ui/static/js/helpers/search.js index c92bf72e99..545e6cc7a6 100644 --- a/awx/ui/static/js/helpers/search.js +++ b/awx/ui/static/js/helpers/search.js @@ -80,6 +80,8 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper']) scope[iterator + 'HideSearchType' + modifier] = false; scope[iterator + 'InputDisable' + modifier] = false; scope[iterator + 'ExtraParms' + modifier] = ''; + scope[iterator + 'ShowStartBtn' + modifier] = true; + scope[iterator + 'HideAllStartBtn' + modifier] = false; scope[iterator + 'SearchPlaceholder' + modifier] = (list.fields[scope[iterator + 'SearchField' + modifier]] && @@ -128,9 +130,12 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper']) scope[iterator + 'SearchType' + modifier] = 'icontains'; scope[iterator + 'SearchPlaceholder' + modifier] = (list.fields[fld].searchPlaceholder) ? list.fields[fld].searchPlaceholder : 'Search'; scope[iterator + 'InputDisable' + modifier] = (list.fields[fld].searchObject == 'all') ? true : false; + scope[iterator + 'ShowStartBtn' + modifier] = true; if (list.fields[fld].searchType && list.fields[fld].searchType == 'gtzero') { scope[iterator + "InputDisable" + modifier] = true; + scope[iterator + 'ShowStartBtn' + modifier] = false; + scope.search(iterator); } else if (list.fields[fld].searchSingleValue){ // Query a specific attribute for one specific value @@ -149,11 +154,13 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper']) else { scope[iterator + "SearchSelectValue" + modifier] = { value: list.fields[fld].searchValue }; } + scope[iterator + 'ShowStartBtn' + modifier] = false; } else if (list.fields[fld].searchType == 'in') { scope[iterator + "SearchType" + modifier] = 'in'; scope[iterator + "SearchValue" + modifier] = list.fields[fld].searchValue; scope[iterator + "InputDisable" + modifier] = true; + scope[iterator + 'ShowStartBtn' + modifier] = false; } else if (list.fields[fld].searchType && (list.fields[fld].searchType == 'boolean' || list.fields[fld].searchType == 'select' || list.fields[fld].searchType == 'select_or')) { @@ -161,14 +168,18 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper']) scope[iterator + 'SearchSelectOpts' + modifier] = list.fields[fld].searchOptions; } else if (list.fields[fld].searchType && list.fields[fld].searchType == 'int') { - scope[iterator + 'HideSearchType' + modifier] = true; + //scope[iterator + 'HideSearchType' + modifier] = true; + scope[iterator + 'SearchType' + modifier] = 'int'; } else if (list.fields[fld].searchType && list.fields[fld].searchType == 'isnull') { scope[iterator + 'SearchType' + modifier] = 'isnull'; scope[iterator + 'InputDisable' + modifier] = true; scope[iterator + 'SearchValue' + modifier] = 'true'; + scope[iterator + 'ShowStartBtn' + modifier] = false; } - scope.search(iterator); + + scope.search(iterator); + } scope.resetSearch = function(iterator) { @@ -247,7 +258,7 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper']) } scope.removePrepareSearch = scope.$on('prepareSearch', function(e, iterator, page, load, spin) { // - // Start build the search key/value pairs. This will process search widget, if the + // Start building the search key/value pairs. This will process each search widget, if the // selected field is an object type (used on activity stream). // Wait('start'); @@ -273,37 +284,45 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper']) var modifier = (i == 1) ? '' : i; if ( $('#search-widget-container' + modifier) ) { if (list.fields[scope[iterator + 'SearchField' + modifier]] && - list.fields[scope[iterator + 'SearchField' + modifier]].searchObject && - list.fields[scope[iterator + 'SearchField' + modifier]].searchObject !== 'all') { - if (scope[iterator + 'SearchValue' + modifier]) { - var objs = list.fields[scope[iterator + 'SearchField' + modifier]].searchObject; - var objUrl = GetBasePath('base') + objs + '/?name__icontains=' + scope[iterator + 'SearchValue' + modifier]; - Rest.setUrl(objUrl); - Rest.setHeader({ widget: i }); - Rest.setHeader({ object: objs }); - Rest.get() - .success( function(data, status, headers, config) { - var pk=''; - //limit result set to 30 - var len = (data.results.length > 30) ? 30 : data.results.length; - for (var j=0; j < len; j++) { - pk += "," + data.results[j].id; - } - pk = pk.replace(/^\,/,''); - scope.$emit('foundObject', iterator, page, load, spin, config.headers['widget'], pk); - if (data.results.length > 30) { - scope.$emit('resultWarning', config.headers['object'], data.results.length); - } - }) - .error( function(data, status, headers, config) { - Wait('stop'); - ProcessErrors(scope, data, status, null, - { hdr: 'Error!', msg: 'Retrieving list of ' + objs + ' where name contains: ' + scope[iterator + 'SearchValue' + modifier] + - ' GET returned status: ' + status }); - }); + list.fields[scope[iterator + 'SearchField' + modifier]].searchObject) { + if (list.fields[scope[iterator + 'SearchField' + modifier]].searchObject !== 'all') { + scope[iterator + 'HideAllStartBtn' + modifier] = false; + if (scope[iterator + 'SearchValue' + modifier]) { + scope[iterator + 'ShowStartBtn' + modifier] = false; + var objs = list.fields[scope[iterator + 'SearchField' + modifier]].searchObject; + var objUrl = GetBasePath('base') + objs + '/?name__icontains=' + scope[iterator + 'SearchValue' + modifier]; + Rest.setUrl(objUrl); + Rest.setHeader({ widget: i }); + Rest.setHeader({ object: objs }); + Rest.get() + .success( function(data, status, headers, config) { + var pk=''; + //limit result set to 30 + var len = (data.results.length > 30) ? 30 : data.results.length; + for (var j=0; j < len; j++) { + pk += "," + data.results[j].id; + } + pk = pk.replace(/^\,/,''); + scope.$emit('foundObject', iterator, page, load, spin, config.headers['widget'], pk); + if (data.results.length > 30) { + scope.$emit('resultWarning', config.headers['object'], data.results.length); + } + }) + .error( function(data, status, headers, config) { + Wait('stop'); + ProcessErrors(scope, data, status, null, + { hdr: 'Error!', msg: 'Retrieving list of ' + objs + ' where name contains: ' + scope[iterator + 'SearchValue' + modifier] + + ' GET returned status: ' + status }); + }); + } + else { + scope[iterator + 'ShowStartBtn' + modifier] = true; + scope.$emit('foundObject', iterator, page, load, spin, i, null); + } } else { - scope.$emit('foundObject', iterator, page, load, spin, i, null); + // Object Type set to All + scope[iterator + 'HideAllStartBtn' + modifier] = true; } } } @@ -330,6 +349,11 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper']) !list.fields[scope[iterator + 'SearchField' + modifier]].searchObject) { // if the search widget exists and its value is not an object, add its parameters to the query + + if (scope[iterator + 'SearchValue' + modifier]) { + // if user typed a value in the input box, show the reset link + scope[iterator + 'ShowStartBtn' + modifier] = false; + } if ( (!scope[iterator + 'SelectShow' + modifier] && !Empty(scope[iterator + 'SearchValue' + modifier])) || (scope[iterator + 'SelectShow' + modifier] && scope[iterator + 'SearchSelectValue' + modifier]) || diff --git a/awx/ui/static/js/lists/Credentials.js b/awx/ui/static/js/lists/Credentials.js index 643cc08c74..fb8194840f 100644 --- a/awx/ui/static/js/lists/Credentials.js +++ b/awx/ui/static/js/lists/Credentials.js @@ -62,15 +62,6 @@ angular.module('CredentialsListDefinition', []) "class": 'btn-success btn-xs', awToolTip: 'Create a new credential' }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' - }, stream: { 'class': "btn-primary btn-xs activity-btn", ngClick: "showActivity()", diff --git a/awx/ui/static/js/lists/HomeGroups.js b/awx/ui/static/js/lists/HomeGroups.js index 40f7f6824f..80a293fd70 100644 --- a/awx/ui/static/js/lists/HomeGroups.js +++ b/awx/ui/static/js/lists/HomeGroups.js @@ -110,15 +110,6 @@ angular.module('HomeGroupListDefinition', []) }, actions: { - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' - }, stream: { 'class': "btn-primary btn-xs activity-btn", ngClick: "showActivity()", diff --git a/awx/ui/static/js/lists/HomeHosts.js b/awx/ui/static/js/lists/HomeHosts.js index b191241abb..0891c97b80 100644 --- a/awx/ui/static/js/lists/HomeHosts.js +++ b/awx/ui/static/js/lists/HomeHosts.js @@ -81,15 +81,6 @@ angular.module('HomeHostListDefinition', []) }, actions: { - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' - }, stream: { 'class': "btn-primary btn-xs activity-btn", ngClick: "showActivity()", diff --git a/awx/ui/static/js/lists/Inventories.js b/awx/ui/static/js/lists/Inventories.js index 764e407c5f..c7ba2b425a 100644 --- a/awx/ui/static/js/lists/Inventories.js +++ b/awx/ui/static/js/lists/Inventories.js @@ -89,15 +89,6 @@ angular.module('InventoriesListDefinition', []) "class": 'btn-xs btn-success', awToolTip: 'Create a new inventory' }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' - }, stream: { 'class': "btn-primary btn-xs activity-btn", ngClick: "showActivity()", diff --git a/awx/ui/static/js/lists/InventorySummary.js b/awx/ui/static/js/lists/InventorySummary.js index 78c70ecb0a..9b04a26ad4 100644 --- a/awx/ui/static/js/lists/InventorySummary.js +++ b/awx/ui/static/js/lists/InventorySummary.js @@ -136,15 +136,6 @@ angular.module('InventorySummaryDefinition', []) ngClick: "refresh()", iconSize: 'large' }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' - }, stream: { 'class': "btn-primary btn-xs activity-btn", ngClick: "showActivity()", diff --git a/awx/ui/static/js/lists/JobEvents.js b/awx/ui/static/js/lists/JobEvents.js index 89601af91b..884db219a1 100644 --- a/awx/ui/static/js/lists/JobEvents.js +++ b/awx/ui/static/js/lists/JobEvents.js @@ -94,15 +94,6 @@ angular.module('JobEventsListDefinition', []) awToolTip: "Refresh the page", ngClick: "refresh()", iconSize: 'large' - }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' } }, diff --git a/awx/ui/static/js/lists/JobHosts.js b/awx/ui/static/js/lists/JobHosts.js index cc9db73d88..c76d8d910d 100644 --- a/awx/ui/static/js/lists/JobHosts.js +++ b/awx/ui/static/js/lists/JobHosts.js @@ -128,15 +128,6 @@ angular.module('JobHostDefinition', []) awToolTip: "Refresh the page", ngClick: "refresh()", iconSize: 'large' - }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' } }, diff --git a/awx/ui/static/js/lists/JobTemplates.js b/awx/ui/static/js/lists/JobTemplates.js index 59767ecd21..fde8d1d784 100644 --- a/awx/ui/static/js/lists/JobTemplates.js +++ b/awx/ui/static/js/lists/JobTemplates.js @@ -38,15 +38,6 @@ angular.module('JobTemplatesListDefinition', []) basePaths: ['job_templates'], awToolTip: 'Create a new template' }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' - }, stream: { 'class': "btn-primary btn-xs activity-btn", ngClick: "showActivity()", diff --git a/awx/ui/static/js/lists/Jobs.js b/awx/ui/static/js/lists/Jobs.js index 3a73d4c017..8475f4e056 100644 --- a/awx/ui/static/js/lists/Jobs.js +++ b/awx/ui/static/js/lists/Jobs.js @@ -83,15 +83,6 @@ angular.module('JobsListDefinition', []) awToolTip: "Refresh the page", ngClick: "refresh()", iconSize: 'large' - }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' } }, diff --git a/awx/ui/static/js/lists/Organizations.js b/awx/ui/static/js/lists/Organizations.js index 5397cbb563..e936b56fe7 100644 --- a/awx/ui/static/js/lists/Organizations.js +++ b/awx/ui/static/js/lists/Organizations.js @@ -36,15 +36,6 @@ angular.module('OrganizationListDefinition', []) "class": 'btn-success btn-xs', awToolTip: 'Create a new organization' }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' - }, stream: { 'class': "btn-primary btn-xs activity-btn", ngClick: "showActivity()", diff --git a/awx/ui/static/js/lists/Permissions.js b/awx/ui/static/js/lists/Permissions.js index ddff5c037d..92296fc367 100644 --- a/awx/ui/static/js/lists/Permissions.js +++ b/awx/ui/static/js/lists/Permissions.js @@ -51,15 +51,6 @@ angular.module('PermissionListDefinition', []) awToolTip: 'Add a new permission', ngShow: 'PermissionAddAllowed' }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' - }, stream: { 'class': "btn-primary btn-xs activity-btn", ngClick: "showActivity()", diff --git a/awx/ui/static/js/lists/Projects.js b/awx/ui/static/js/lists/Projects.js index e7bf6e338a..141ec8bb7a 100644 --- a/awx/ui/static/js/lists/Projects.js +++ b/awx/ui/static/js/lists/Projects.js @@ -37,7 +37,7 @@ angular.module('ProjectsListDefinition', []) nosort: true }, status: { - label: 'Update Status', + label: 'Status', ngClick: 'showSCMStatus(\{\{ project.id \}\})', awToolTip: 'View details of last SCM Update', dataPlacement: 'top', @@ -92,15 +92,6 @@ angular.module('ProjectsListDefinition', []) ngClick: "refresh()", iconSize: 'large' }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' - }, stream: { 'class': "btn-primary btn-xs activity-btn", ngClick: "showActivity()", diff --git a/awx/ui/static/js/lists/Streams.js b/awx/ui/static/js/lists/Streams.js index 8c2391c66b..3c284ea8f6 100644 --- a/awx/ui/static/js/lists/Streams.js +++ b/awx/ui/static/js/lists/Streams.js @@ -213,15 +213,6 @@ angular.module('StreamListDefinition', []) ngClick: "refreshStream()", iconSize: 'large' }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' - }, close: { dataPlacement: 'top', icon: "icon-arrow-left", diff --git a/awx/ui/static/js/lists/Teams.js b/awx/ui/static/js/lists/Teams.js index 82e3b04c64..3e3d871fac 100644 --- a/awx/ui/static/js/lists/Teams.js +++ b/awx/ui/static/js/lists/Teams.js @@ -43,15 +43,6 @@ angular.module('TeamsListDefinition', []) "class": 'btn-xs btn-success', awToolTip: 'Create a new team' }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' - }, stream: { 'class': "btn-primary btn-xs activity-btn", ngClick: "showActivity()", diff --git a/awx/ui/static/js/lists/Users.js b/awx/ui/static/js/lists/Users.js index 76e7ba1be9..46b10403e1 100644 --- a/awx/ui/static/js/lists/Users.js +++ b/awx/ui/static/js/lists/Users.js @@ -43,15 +43,6 @@ angular.module('UserListDefinition', []) "class": 'btn-success btn-xs', awToolTip: 'Create a new user' }, - reset: { - dataPlacement: 'top', - icon: "icon-undo", - mode: 'all', - 'class': 'btn-xs btn-primary', - awToolTip: "Reset the search filter", - ngClick: "resetSearch()", - iconSize: 'large' - }, stream: { 'class': "btn-primary btn-xs activity-btn", ngClick: "showActivity()", diff --git a/awx/ui/static/less/ansible-ui.less b/awx/ui/static/less/ansible-ui.less index 6444e60efe..b40fa44f2f 100644 --- a/awx/ui/static/less/ansible-ui.less +++ b/awx/ui/static/less/ansible-ui.less @@ -489,16 +489,37 @@ select.page-size { vertical-align: middle; } -.search-widget { - margin-bottom: 20px; -} +/* Search Widget */ + .search-widget { + margin-bottom: 20px; + } + + .search-widget label { + display: inline-block; + padding-right: 15px; + vertical-align: middle; + } + + #search_value_input { + padding-right: 25px; + } -.search-widget label { - display: inline-block; - padding-right: 15px; - vertical-align: middle; -} + .search-reset-start { + color: @grey; + float: right; + position: relative; + top: -25px; + left: -10px; + z-index: 10; + } + .search-reset-start:hover { + cursor: pointer; + } + + .ui-widget-content a.search-reset-start { + color: @grey; + } /* breadcrumbs */ .nav-path { diff --git a/awx/ui/static/lib/ansible/generator-helpers.js b/awx/ui/static/lib/ansible/generator-helpers.js index 0f35ef77b7..69c59694e2 100644 --- a/awx/ui/static/lib/ansible/generator-helpers.js +++ b/awx/ui/static/lib/ansible/generator-helpers.js @@ -491,7 +491,7 @@ angular.module('GeneratorHelpers', ['GeneratorHelpers']) html += "
\n"; - //html += (form.searchWidgetLabel) ? "" : ""; + html += "
\n"; @@ -529,21 +529,36 @@ angular.module('GeneratorHelpers', ['GeneratorHelpers']) html += "ng-options=\"c.name for c in " + iterator + "SearchSelectOpts" + modifier + "\" class=\"form-control search-select"; html += "\">\n"; - html += "\n"; - - // Go button - html += "
\n"; - html += "\n"; + + // Reset button for drop-down + html += "
\n"; + html += "\n"; html += "
\n"; html += "
\n"; + + html += "\n"; + + html += "\n"; + html += "
\n"; }