AC-1017 Added events and hosts links to the job status fly-out. Fixed a bug in search where claring the value and hitting enter did not switch the icon back to the magnifying glass. Linted Search.js and Hosts.js helpers.

This commit is contained in:
Chris Houseknecht
2014-02-06 00:58:30 -05:00
parent 9f40862676
commit e17d076e55
4 changed files with 658 additions and 719 deletions

View File

@@ -7,7 +7,7 @@
"jquery": true, "jquery": true,
"esnext": true, "esnext": true,
"globalstrict": true, "globalstrict": true,
"globals": { "angular":false, "alert":false, "$AnsibleConfig":true, "$basePath":true }, "globals": { "angular":false, "alert":false, "$AnsibleConfig":true, "$basePath":true, "jsyaml":false },
"strict": false, "strict": false,
"quotmark": false, "quotmark": false,
"smarttabs": true, "smarttabs": true,

File diff suppressed because it is too large Load Diff

View File

@@ -15,68 +15,70 @@
* *
*/ */
angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper']) angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
.factory('SearchInit', ['Alert', 'Rest', 'Refresh', '$location', 'GetBasePath', 'Empty', '$timeout', 'Wait', 'Store', .factory('SearchInit', ['Alert', 'Rest', 'Refresh', '$location', 'GetBasePath', 'Empty', '$timeout', 'Wait', 'Store',
function(Alert, Rest, Refresh, $location, GetBasePath, Empty, $timeout, Wait, Store) { function(Alert, Rest, Refresh, $location, GetBasePath, Empty, $timeout, Wait, Store) {
return function(params) { return function(params) {
var scope = params.scope; var scope = params.scope,
var set = params.set; set = params.set,
var defaultUrl = params.url; defaultUrl = params.url,
var list = params.list; list = params.list,
var iterator = (params.iterator) ? params.iterator : list.iterator; iterator = (params.iterator) ? params.iterator : list.iterator,
var setWidgets = (params.setWidgets == false) ? false : true; setWidgets = (params.setWidgets === false) ? false : true,
var sort_order = params.sort_order || ''; sort_order = params.sort_order || '',
var expected_objects=0, found_objects=0; widgets, i, modifier, current_params;
var params = { /*
set: set, current_params = {
defaultUrl: defaultUrl, set: set,
list: list, defaultUrl: defaultUrl,
iterator: iterator, list: list,
sort_order: sort_order iterator: iterator,
sort_order: sort_order
}; };
Store('CurrentSearchParams', params); // Save in case Activity Stream widget needs to restore Store('CurrentSearchParams', current_params); // Save in case Activity Stream widget needs to restore */
function setDefaults(widget) { function setDefaults(widget) {
// Set default values // Set default values
var modifier = (widget == undefined || widget == 1) ? '' : widget; var f, fld, fka, modifier;
modifier = (widget === undefined || widget === 1) ? '' : widget;
scope[iterator + 'SearchField' + modifier] = ''; scope[iterator + 'SearchField' + modifier] = '';
scope[iterator + 'SearchFieldLabel' + modifier] = ''; scope[iterator + 'SearchFieldLabel' + modifier] = '';
for (fld in list.fields) { for (fld in list.fields) {
if (list.fields[fld].searchWidget == undefined && widget == 1 || if (list.fields[fld].searchWidget === undefined && widget === 1 ||
list.fields[fld].searchWidget == widget) { list.fields[fld].searchWidget === widget) {
if (list.fields[fld].key) { if (list.fields[fld].key) {
if (list.fields[fld].sourceModel) { if (list.fields[fld].sourceModel) {
var fka = list.fields[fld].sourceModel + '__' + list.fields[fld].sourceField; fka = list.fields[fld].sourceModel + '__' + list.fields[fld].sourceField;
sort_order = (list.fields[fld].desc) ? '-' + fka : fka; sort_order = (list.fields[fld].desc) ? '-' + fka : fka;
} }
else { else {
sort_order = (list.fields[fld].desc) ? '-' + fld : fld; sort_order = (list.fields[fld].desc) ? '-' + fld : fld;
} }
if (list.fields[fld].searchable == undefined || list.fields[fld].searchable == true) { if (list.fields[fld].searchable === undefined || list.fields[fld].searchable === true) {
scope[iterator + 'SearchField' + modifier] = fld; scope[iterator + 'SearchField' + modifier] = fld;
scope[iterator + 'SearchFieldLabel' + modifier] = list.fields[fld].label; scope[iterator + 'SearchFieldLabel' + modifier] = list.fields[fld].label;
} }
break; break;
} }
} }
} }
if (Empty(scope[iterator + 'SearchField' + modifier])) { if (Empty(scope[iterator + 'SearchField' + modifier])) {
// A field marked as key may not be 'searchable'. Find the first searchable field. // A field marked as key may not be 'searchable'. Find the first searchable field.
for (fld in list.fields) { for (fld in list.fields) {
if (list.fields[fld].searchWidget == undefined && widget == 1 || if (list.fields[fld].searchWidget === undefined && widget === 1 ||
list.fields[fld].searchWidget == widget) { list.fields[fld].searchWidget === widget) {
if (list.fields[fld].searchable == undefined || list.fields[fld].searchable == true) { if (list.fields[fld].searchable === undefined || list.fields[fld].searchable === true) {
scope[iterator + 'SearchField' + modifier] = fld; scope[iterator + 'SearchField' + modifier] = fld;
scope[iterator + 'SearchFieldLabel' + modifier] = list.fields[fld].label; scope[iterator + 'SearchFieldLabel' + modifier] = list.fields[fld].label;
break; break;
} }
} }
} }
} }
scope[iterator + 'SearchType' + modifier] = 'icontains'; scope[iterator + 'SearchType' + modifier] = 'icontains';
@@ -99,59 +101,59 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
else { else {
// Set to a string value in the list definition // Set to a string value in the list definition
scope[iterator + 'SearchPlaceholder' + modifier] = list.fields[scope[iterator + 'SearchField' + modifier]].searchPlaceholder; scope[iterator + 'SearchPlaceholder' + modifier] = list.fields[scope[iterator + 'SearchField' + modifier]].searchPlaceholder;
} }
} }
else { else {
// Default value // Default value
scope[iterator + 'SearchPlaceholder' + modifier] = 'Search'; scope[iterator + 'SearchPlaceholder' + modifier] = 'Search';
} }
scope[iterator + 'InputDisable' + modifier] = scope[iterator + 'InputDisable' + modifier] =
(list.fields[scope[iterator + 'SearchField' + modifier]] && (list.fields[scope[iterator + 'SearchField' + modifier]] &&
list.fields[scope[iterator + 'SearchField' + modifier]].searchObject == 'all') ? true : false; list.fields[scope[iterator + 'SearchField' + modifier]].searchObject === 'all') ? true : false;
var f = scope[iterator + 'SearchField' + modifier]; f = scope[iterator + 'SearchField' + modifier];
if (list.fields[f]) { if (list.fields[f]) {
if ( list.fields[f].searchType && (list.fields[f].searchType == 'boolean' if ( list.fields[f].searchType && (list.fields[f].searchType === 'boolean' ||
|| list.fields[f].searchType == 'select') ) { list.fields[f].searchType === 'select') ) {
scope[iterator + 'SelectShow' + modifier] = true; scope[iterator + 'SelectShow' + modifier] = true;
scope[iterator + 'SearchSelectOpts' + modifier] = list.fields[f].searchOptions; scope[iterator + 'SearchSelectOpts' + modifier] = list.fields[f].searchOptions;
} }
if (list.fields[f].searchType && list.fields[f].searchType == 'int') { if (list.fields[f].searchType && list.fields[f].searchType === 'int') {
scope[iterator + 'HideSearchType' + modifier] = true; scope[iterator + 'HideSearchType' + modifier] = true;
} }
if (list.fields[f].searchType && list.fields[f].searchType == 'gtzero') { if (list.fields[f].searchType && list.fields[f].searchType === 'gtzero') {
scope[iterator + 'InputHide' + modifier] = true; scope[iterator + 'InputHide' + modifier] = true;
} }
} }
} }
if (setWidgets) { if (setWidgets) {
// Set default values for each search widget on the page // Set default values for each search widget on the page
var widgets = (list.searchWidgets) ? list.searchWidgets : 1; widgets = (list.searchWidgets) ? list.searchWidgets : 1;
for (var i=1; i <= widgets; i++) { for (i=1; i <= widgets; i++) {
var modifier = (i == 1) ? '' : i; modifier = (i === 1) ? '' : i;
if ( $('#search-widget-container' + modifier) ) { if ( $('#search-widget-container' + modifier) ) {
setDefaults(i); setDefaults(i);
} }
} }
} }
var params = { current_params = {
set: set, set: set,
defaultUrl: defaultUrl, defaultUrl: defaultUrl,
list: list, list: list,
iterator: iterator, iterator: iterator,
sort_order: sort_order sort_order: sort_order
}; };
Store('CurrentSearchParams', params); // Save in case Activity Stream widget needs to restore Store('CurrentSearchParams', current_params); // Save in case Activity Stream widget needs to restore
// Functions to handle search widget changes // Functions to handle search widget changes
scope.setSearchField = function(iterator, fld, label, widget) { scope.setSearchField = function(iterator, fld, label, widget) {
var modifier = (widget == undefined || widget == 1) ? '' : widget; var modifier = (widget === undefined || widget === 1) ? '' : widget;
scope[iterator + 'SearchFieldLabel' + modifier] = label; scope[iterator + 'SearchFieldLabel' + modifier] = label;
scope[iterator + 'SearchField' + modifier] = fld; scope[iterator + 'SearchField' + modifier] = fld;
scope[iterator + 'SearchValue' + modifier] = ''; scope[iterator + 'SearchValue' + modifier] = '';
@@ -159,7 +161,7 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
scope[iterator + 'HideSearchType' + modifier] = false; scope[iterator + 'HideSearchType' + modifier] = false;
scope[iterator + 'InputHide' + modifier] = false; scope[iterator + 'InputHide' + modifier] = false;
scope[iterator + 'SearchType' + modifier] = 'icontains'; scope[iterator + 'SearchType' + modifier] = 'icontains';
scope[iterator + 'InputDisable' + modifier] = (list.fields[fld].searchObject == 'all') ? true : false; scope[iterator + 'InputDisable' + modifier] = (list.fields[fld].searchObject === 'all') ? true : false;
scope[iterator + 'ShowStartBtn' + modifier] = true; scope[iterator + 'ShowStartBtn' + modifier] = true;
if (list.fields[scope[iterator + 'SearchField' + modifier]] && if (list.fields[scope[iterator + 'SearchField' + modifier]] &&
@@ -171,14 +173,14 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
else { else {
// Set to a string value in the list definition // Set to a string value in the list definition
scope[iterator + 'SearchPlaceholder' + modifier] = list.fields[scope[iterator + 'SearchField' + modifier]].searchPlaceholder; scope[iterator + 'SearchPlaceholder' + modifier] = list.fields[scope[iterator + 'SearchField' + modifier]].searchPlaceholder;
} }
} }
else { else {
// Default value // Default value
scope[iterator + 'SearchPlaceholder' + modifier] = 'Search'; scope[iterator + 'SearchPlaceholder' + modifier] = 'Search';
} }
if (list.fields[fld].searchType && list.fields[fld].searchType == 'gtzero') { if (list.fields[fld].searchType && list.fields[fld].searchType === 'gtzero') {
scope[iterator + "InputDisable" + modifier] = true; scope[iterator + "InputDisable" + modifier] = true;
scope[iterator + 'ShowStartBtn' + modifier] = false; scope[iterator + 'ShowStartBtn' + modifier] = false;
scope.search(iterator); scope.search(iterator);
@@ -191,54 +193,56 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
scope[iterator + 'InputDisable' + modifier] = true; scope[iterator + 'InputDisable' + modifier] = true;
scope[iterator + "SearchValue" + modifier] = list.fields[fld].searchValue; scope[iterator + "SearchValue" + modifier] = list.fields[fld].searchValue;
// For boolean type, SearchValue must be an object // For boolean type, SearchValue must be an object
if (list.fields[fld].searchType == 'boolean' && list.fields[fld].searchValue == 'true') { if (list.fields[fld].searchType === 'boolean' && list.fields[fld].searchValue === 'true') {
scope[iterator + "SearchSelectValue" + modifier] = { value: 1 }; scope[iterator + "SearchSelectValue" + modifier] = { value: 1 };
} }
else if (list.fields[fld].searchType == 'boolean' && list.fields[fld].searchValue == 'false') { else if (list.fields[fld].searchType === 'boolean' && list.fields[fld].searchValue === 'false') {
scope[iterator + "SearchSelectValue" + modifier] = { value: 0 }; scope[iterator + "SearchSelectValue" + modifier] = { value: 0 };
} }
else { else {
scope[iterator + "SearchSelectValue" + modifier] = { value: list.fields[fld].searchValue }; scope[iterator + "SearchSelectValue" + modifier] = { value: list.fields[fld].searchValue };
} }
scope[iterator + 'ShowStartBtn' + modifier] = false; scope[iterator + 'ShowStartBtn' + modifier] = false;
} }
else if (list.fields[fld].searchType == 'in') { else if (list.fields[fld].searchType === 'in') {
scope[iterator + "SearchType" + modifier] = 'in'; scope[iterator + "SearchType" + modifier] = 'in';
scope[iterator + "SearchValue" + modifier] = list.fields[fld].searchValue; scope[iterator + "SearchValue" + modifier] = list.fields[fld].searchValue;
scope[iterator + "InputDisable" + modifier] = true; scope[iterator + "InputDisable" + modifier] = true;
scope[iterator + 'ShowStartBtn' + modifier] = false; scope[iterator + 'ShowStartBtn' + modifier] = false;
} }
else if (list.fields[fld].searchType && (list.fields[fld].searchType == 'boolean' else if (list.fields[fld].searchType && (list.fields[fld].searchType === 'boolean' ||
|| list.fields[fld].searchType == 'select' || list.fields[fld].searchType == 'select_or')) { list.fields[fld].searchType === 'select' || list.fields[fld].searchType === 'select_or')) {
scope[iterator + 'SelectShow' + modifier] = true; scope[iterator + 'SelectShow' + modifier] = true;
scope[iterator + 'SearchSelectOpts' + modifier] = list.fields[fld].searchOptions; scope[iterator + 'SearchSelectOpts' + modifier] = list.fields[fld].searchOptions;
} }
else if (list.fields[fld].searchType && list.fields[fld].searchType == 'int') { 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'; scope[iterator + 'SearchType' + modifier] = 'int';
} }
else if (list.fields[fld].searchType && list.fields[fld].searchType == 'isnull') { else if (list.fields[fld].searchType && list.fields[fld].searchType === 'isnull') {
scope[iterator + 'SearchType' + modifier] = 'isnull'; scope[iterator + 'SearchType' + modifier] = 'isnull';
scope[iterator + 'InputDisable' + modifier] = true; scope[iterator + 'InputDisable' + modifier] = true;
scope[iterator + 'SearchValue' + modifier] = 'true'; scope[iterator + 'SearchValue' + modifier] = 'true';
scope[iterator + 'ShowStartBtn' + modifier] = false; scope[iterator + 'ShowStartBtn' + modifier] = false;
} }
scope.search(iterator); scope.search(iterator);
} };
scope.resetSearch = function(iterator) { scope.resetSearch = function(iterator) {
// Respdond to click of reset button // Respdond to click of reset button
var widgets = (list.searchWidgets) ? list.searchWidgets : 1; var i,
for (var i=1; i <= widgets; i++) { widgets = (list.searchWidgets) ? list.searchWidgets : 1;
for (i=1; i <= widgets; i++) {
// Clear each search widget // Clear each search widget
setDefaults(i); setDefaults(i);
} }
// Force removal of search keys from the URL // Force removal of search keys from the URL
window.location = '/#' + $location.path(); window.location = '/#' + $location.path();
scope.search(iterator); scope.search(iterator);
} };
if (scope.removeDoSearch) { if (scope.removeDoSearch) {
scope.removeDoSearch(); scope.removeDoSearch();
@@ -247,9 +251,8 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
// //
// Execute the search // Execute the search
// //
scope[iterator + 'Loading'] = (load == undefined || load == true) ? true : false; scope[iterator + 'Loading'] = (load === undefined || load === true) ? true : false;
var url = defaultUrl; var url = defaultUrl, connect;
var connect;
//finalize and execute the query //finalize and execute the query
scope[iterator + 'Page'] = (page) ? parseInt(page) - 1 : 0; scope[iterator + 'Page'] = (page) ? parseInt(page) - 1 : 0;
@@ -261,7 +264,7 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
url += '&' + scope[iterator + 'SearchParams']; url += '&' + scope[iterator + 'SearchParams'];
} }
} }
connect = (/\/$/.test(url)) ? '?' : '&'; connect = (/\/$/.test(url)) ? '?' : '&';
url += (scope[iterator + '_page_size']) ? connect + 'page_size=' + scope[iterator + '_page_size'] : ""; url += (scope[iterator + '_page_size']) ? connect + 'page_size=' + scope[iterator + '_page_size'] : "";
if (page) { if (page) {
connect = (/\/$/.test(url)) ? '?' : '&'; connect = (/\/$/.test(url)) ? '?' : '&';
@@ -273,7 +276,7 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
} }
url = url.replace(/\&\&/,'&'); url = url.replace(/\&\&/,'&');
Refresh({ scope: scope, set: set, iterator: iterator, url: url }); Refresh({ scope: scope, set: set, iterator: iterator, url: url });
}); });
if (scope.removePrepareSearch) { if (scope.removePrepareSearch) {
@@ -286,11 +289,11 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
// //
Wait('start'); Wait('start');
scope[iterator + 'SearchParams'] = ''; scope[iterator + 'SearchParams'] = '';
var widgets = (list.searchWidgets) ? list.searchWidgets : 1; var i, modifier,
var modifier; widgets = (list.searchWidgets) ? list.searchWidgets : 1;
for (var i=1; i <= widgets; i++) { for (i=1; i <= widgets; i++) {
var modifier = (i == 1) ? '' : i; modifier = (i === 1) ? '' : i;
if ( $('#search-widget-container' + modifier) ) { if ( $('#search-widget-container' + modifier) ) {
if (list.fields[scope[iterator + 'SearchField' + modifier]] && if (list.fields[scope[iterator + 'SearchField' + modifier]] &&
list.fields[scope[iterator + 'SearchField' + modifier]].searchObject) { list.fields[scope[iterator + 'SearchField' + modifier]].searchObject) {
@@ -303,21 +306,21 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
scope[iterator + 'ShowStartBtn' + modifier] = false; scope[iterator + 'ShowStartBtn' + modifier] = false;
if (list.fields[scope[iterator + 'SearchField' + modifier]].searchOnID) { if (list.fields[scope[iterator + 'SearchField' + modifier]].searchOnID) {
scope[iterator + 'SearchParams'] += '&' + scope[iterator + 'SearchParams'] += '&' +
list.fields[scope[iterator + 'SearchField' + modifier]].searchObject + list.fields[scope[iterator + 'SearchField' + modifier]].searchObject +
'__id=' + scope[iterator + 'SearchValue' + modifier]; '__id=' + scope[iterator + 'SearchValue' + modifier];
} }
else { else {
scope[iterator + 'SearchParams'] += '&' + scope[iterator + 'SearchParams'] += '&' +
list.fields[scope[iterator + 'SearchField' + modifier]].searchObject + list.fields[scope[iterator + 'SearchField' + modifier]].searchObject +
'__name__icontains=' + '__name__icontains=' +
scope[iterator + 'SearchValue' + modifier]; scope[iterator + 'SearchValue' + modifier];
} }
} }
else { else {
// Search value is empty // Search value is empty
scope[iterator + 'ShowStartBtn' + modifier] = true; scope[iterator + 'ShowStartBtn' + modifier] = true;
scope[iterator + 'SearchParams'] += '&' + scope[iterator + 'SearchParams'] += '&' +
list.fields[scope[iterator + 'SearchField' + modifier]].searchField + list.fields[scope[iterator + 'SearchField' + modifier]].searchField +
'=' + list.fields[scope[iterator + 'SearchField' + modifier]].searchObject; '=' + list.fields[scope[iterator + 'SearchField' + modifier]].searchObject;
} }
} }
@@ -329,20 +332,21 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
} }
} }
scope.$emit('prepareSearch2', iterator, page, load, spin); scope.$emit('prepareSearch2', iterator, page, load, spin);
}); });
if (scope.removePrepareSearch2) { if (scope.removePrepareSearch2) {
scope.removePrepareSearch2(); scope.removePrepareSearch2();
} }
scope.removePrepareSearch2 = scope.$on('prepareSearch2', function(e, iterator, page, load, spin) { scope.removePrepareSearch2 = scope.$on('prepareSearch2', function(e, iterator, page, load, spin) {
// Continue building the search by examining the remaining search widgets. If we're looking at activity_stream, // Continue building the search by examining the remaining search widgets. If we're looking at activity_stream,
// there's more than one. // there's more than one.
var widgets = (list.searchWidgets) ? list.searchWidgets : 1; var i, modifier,
var modifier; widgets = (list.searchWidgets) ? list.searchWidgets : 1;
for (var i=1; i <= widgets; i++) {
modifier = (i == 1) ? '' : i; for (i=1; i <= widgets; i++) {
scope[iterator + 'HoldInput' + modifier] = true; modifier = (i === 1) ? '' : i;
if ($('#search-widget-container' + modifier) && scope[iterator + 'HoldInput' + modifier] = true;
if ($('#search-widget-container' + modifier) &&
list.fields[scope[iterator + 'SearchField' + modifier]] && list.fields[scope[iterator + 'SearchField' + modifier]] &&
!list.fields[scope[iterator + 'SearchField' + modifier]].searchObject) { !list.fields[scope[iterator + 'SearchField' + modifier]].searchObject) {
@@ -352,65 +356,68 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
// if user typed a value in the input box, show the reset link // if user typed a value in the input box, show the reset link
scope[iterator + 'ShowStartBtn' + modifier] = false; scope[iterator + 'ShowStartBtn' + modifier] = false;
} }
else {
scope[iterator + 'ShowStartBtn' + modifier] = true;
}
if ( (!scope[iterator + 'SelectShow' + modifier] && !Empty(scope[iterator + 'SearchValue' + modifier])) || if ( (!scope[iterator + 'SelectShow' + modifier] && !Empty(scope[iterator + 'SearchValue' + modifier])) ||
(scope[iterator + 'SelectShow' + modifier] && scope[iterator + 'SearchSelectValue' + modifier]) || (scope[iterator + 'SelectShow' + modifier] && scope[iterator + 'SearchSelectValue' + modifier]) ||
(list.fields[scope[iterator + 'SearchField' + modifier]] && (list.fields[scope[iterator + 'SearchField' + modifier]] &&
list.fields[scope[iterator + 'SearchField' + modifier]].searchType == 'gtzero') ) { list.fields[scope[iterator + 'SearchField' + modifier]].searchType === 'gtzero') ) {
if (list.fields[scope[iterator + 'SearchField' + modifier]].searchField) { if (list.fields[scope[iterator + 'SearchField' + modifier]].searchField) {
scope[iterator + 'SearchParams'] += '&' + list.fields[scope[iterator + 'SearchField' + modifier]].searchField + '__'; scope[iterator + 'SearchParams'] += '&' + list.fields[scope[iterator + 'SearchField' + modifier]].searchField + '__';
} }
else if (list.fields[scope[iterator + 'SearchField' + modifier]].sourceModel) { else if (list.fields[scope[iterator + 'SearchField' + modifier]].sourceModel) {
// handle fields whose source is a related model e.g. inventories.organization // handle fields whose source is a related model e.g. inventories.organization
scope[iterator + 'SearchParams'] += '&' + list.fields[scope[iterator + 'SearchField' + modifier]].sourceModel + '__' + scope[iterator + 'SearchParams'] += '&' + list.fields[scope[iterator + 'SearchField' + modifier]].sourceModel + '__' +
list.fields[scope[iterator + 'SearchField' + modifier]].sourceField + '__'; list.fields[scope[iterator + 'SearchField' + modifier]].sourceField + '__';
} }
else if ( (list.fields[scope[iterator + 'SearchField' + modifier]].searchType == 'select') && else if ( (list.fields[scope[iterator + 'SearchField' + modifier]].searchType === 'select') &&
(scope[iterator + 'SearchSelectValue' + modifier].value == '' || (scope[iterator + 'SearchSelectValue' + modifier].value === '' ||
scope[iterator + 'SearchSelectValue' + modifier].value == null) ) { scope[iterator + 'SearchSelectValue' + modifier].value === null) ) {
scope[iterator + 'SearchParams'] += '&' + scope[iterator + 'SearchField' + modifier] + '__'; scope[iterator + 'SearchParams'] += '&' + scope[iterator + 'SearchField' + modifier] + '__';
} }
else { else {
scope[iterator + 'SearchParams'] += '&' + scope[iterator + 'SearchField' + modifier] + '__'; scope[iterator + 'SearchParams'] += '&' + scope[iterator + 'SearchField' + modifier] + '__';
} }
if ( list.fields[scope[iterator + 'SearchField' + modifier]].searchType && if ( list.fields[scope[iterator + 'SearchField' + modifier]].searchType &&
(list.fields[scope[iterator + 'SearchField' + modifier]].searchType == 'int' || (list.fields[scope[iterator + 'SearchField' + modifier]].searchType === 'int' ||
list.fields[scope[iterator + 'SearchField' + modifier]].searchType == 'boolean' ) ) { list.fields[scope[iterator + 'SearchField' + modifier]].searchType === 'boolean' ) ) {
scope[iterator + 'SearchParams'] += 'int='; scope[iterator + 'SearchParams'] += 'int=';
} }
else if ( list.fields[scope[iterator + 'SearchField' + modifier]].searchType && else if ( list.fields[scope[iterator + 'SearchField' + modifier]].searchType &&
list.fields[scope[iterator + 'SearchField' + modifier]].searchType == 'gtzero' ) { list.fields[scope[iterator + 'SearchField' + modifier]].searchType === 'gtzero' ) {
scope[iterator + 'SearchParams'] += 'gt=0'; scope[iterator + 'SearchParams'] += 'gt=0';
} }
else if ( (list.fields[scope[iterator + 'SearchField' + modifier]].searchType == 'select') && else if ( (list.fields[scope[iterator + 'SearchField' + modifier]].searchType === 'select') &&
(scope[iterator + 'SearchSelectValue' + modifier].value == '' || (scope[iterator + 'SearchSelectValue' + modifier].value === '' ||
scope[iterator + 'SearchSelectValue' + modifier].value == null) ) { scope[iterator + 'SearchSelectValue' + modifier].value === null) ) {
scope[iterator + 'SearchParams'] += 'iexact='; scope[iterator + 'SearchParams'] += 'iexact=';
} }
else { else {
scope[iterator + 'SearchParams'] += scope[iterator + 'SearchType' + modifier] + '='; scope[iterator + 'SearchParams'] += scope[iterator + 'SearchType' + modifier] + '=';
} }
if ( list.fields[scope[iterator + 'SearchField' + modifier]].searchType && if ( list.fields[scope[iterator + 'SearchField' + modifier]].searchType &&
(list.fields[scope[iterator + 'SearchField' + modifier]].searchType == 'boolean' (list.fields[scope[iterator + 'SearchField' + modifier]].searchType === 'boolean' ||
|| list.fields[scope[iterator + 'SearchField' + modifier]].searchType == 'select') ) { list.fields[scope[iterator + 'SearchField' + modifier]].searchType === 'select') ) {
scope[iterator + 'SearchParams'] += scope[iterator + 'SearchSelectValue' + modifier].value; scope[iterator + 'SearchParams'] += scope[iterator + 'SearchSelectValue' + modifier].value;
} }
else { else {
if ( (!list.fields[scope[iterator + 'SearchField' + modifier]].searchType) || if ( (!list.fields[scope[iterator + 'SearchField' + modifier]].searchType) ||
(list.fields[scope[iterator + 'SearchField' + modifier]].searchType && (list.fields[scope[iterator + 'SearchField' + modifier]].searchType &&
list.fields[scope[iterator + 'SearchField' + modifier]].searchType !== 'or' && list.fields[scope[iterator + 'SearchField' + modifier]].searchType !== 'or' &&
list.fields[scope[iterator + 'SearchField' + modifier]].searchType !== 'gtzero') ) { list.fields[scope[iterator + 'SearchField' + modifier]].searchType !== 'gtzero') ) {
scope[iterator + 'SearchParams'] += escape(scope[iterator + 'SearchValue' + modifier]); scope[iterator + 'SearchParams'] += encodeURI(scope[iterator + 'SearchValue' + modifier]);
} }
} }
} }
} }
} }
if ( (iterator == 'inventory' && scope.inventoryFailureFilter) || if ( (iterator === 'inventory' && scope.inventoryFailureFilter) ||
(iterator == 'host' && scope.hostFailureFilter) ) { (iterator === 'host' && scope.hostFailureFilter) ) {
//Things that bypass the search widget. Should go back and add a second widget possibly on //Things that bypass the search widget. Should go back and add a second widget possibly on
//inventory pages and eliminate this //inventory pages and eliminate this
scope[iterator + 'SearchParams'] += '&has_active_failures=true'; scope[iterator + 'SearchParams'] += '&has_active_failures=true';
@@ -418,84 +425,84 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
if (sort_order) { if (sort_order) {
scope[iterator + 'SearchParams'] += (scope[iterator + 'SearchParams']) ? '&' : ''; scope[iterator + 'SearchParams'] += (scope[iterator + 'SearchParams']) ? '&' : '';
scope[iterator + 'SearchParams'] += 'order_by=' + escape(sort_order); scope[iterator + 'SearchParams'] += 'order_by=' + encodeURI(sort_order);
} }
scope.$emit('doSearch', iterator, page, load, spin); scope.$emit('doSearch', iterator, page, load, spin);
}); });
scope.startSearch = function(e,iterator) { scope.startSearch = function(e,iterator) {
// If use clicks enter while on input field, start the search // If use clicks enter while on input field, start the search
if (e.keyCode == 13) { if (e.keyCode === 13) {
scope.search(iterator); scope.search(iterator);
} }
} };
scope.search = function(iterator, page, load) { scope.search = function(iterator, page, load) {
// Called to initiate a searh. // Called to initiate a searh.
// Page is optional. Added to accomodate back function on Job Events detail. // Page is optional. Added to accomodate back function on Job Events detail.
// Spin optional -set to false if spin not desired. // Spin optional -set to false if spin not desired.
// Load optional -set to false if loading message not desired // Load optional -set to false if loading message not desired
var load = (load === undefined) ? true : false; load = (load === undefined) ? true : false;
if (load) { if (load) {
scope[set] = []; scope[set] = [];
} }
scope.$emit('prepareSearch', iterator, page, load); scope.$emit('prepareSearch', iterator, page, load);
} };
scope.sort = function(fld) { scope.sort = function(fld) {
// reset sort icons back to 'icon-sort' on all columns // reset sort icons back to 'icon-sort' on all columns
// except the one clicked // except the one clicked
$('.list-header').each(function(index) { $('.list-header').each(function() {
if ($(this).attr('id') != fld + '-header') { if ($(this).attr('id') !== fld + '-header') {
var icon = $(this).find('i'); var icon = $(this).find('i');
icon.attr('class','fa fa-sort'); icon.attr('class','fa fa-sort');
} }
}); });
// Toggle the icon for the clicked column // Toggle the icon for the clicked column
// and set the sort direction // and set the sort direction
var icon = $('#' + fld + '-header i'); var icon = $('#' + fld + '-header i'),
var direction = ''; direction = '';
if (icon.hasClass('fa-sort')) { if (icon.hasClass('fa-sort')) {
icon.removeClass('fa-sort'); icon.removeClass('fa-sort');
icon.addClass('fa-sort-up'); icon.addClass('fa-sort-up');
} }
else if (icon.hasClass('fa-sort-up')) { else if (icon.hasClass('fa-sort-up')) {
icon.removeClass('fa-sort-up'); icon.removeClass('fa-sort-up');
icon.addClass('fa-sort-down'); icon.addClass('fa-sort-down');
direction = '-'; direction = '-';
} }
else if (icon.hasClass('fa-sort-down')) { else if (icon.hasClass('fa-sort-down')) {
icon.removeClass('fa-sort-down'); icon.removeClass('fa-sort-down');
icon.addClass('fa-sort-up'); icon.addClass('fa-sort-up');
} }
// Set the sorder order value and call the API to refresh the list with the new order // Set the sorder order value and call the API to refresh the list with the new order
if (list.fields[fld].searchField) { if (list.fields[fld].searchField) {
sort_order = direction + list.fields[fld].searchField; sort_order = direction + list.fields[fld].searchField;
} }
else if (list.fields[fld].sortField) { else if (list.fields[fld].sortField) {
sort_order = direction + list.fields[fld].sortField; sort_order = direction + list.fields[fld].sortField;
} }
else { else {
if (list.fields[fld].sourceModel) { if (list.fields[fld].sourceModel) {
sort_order = direction + list.fields[fld].sourceModel + '__' + list.fields[fld].sourceField; sort_order = direction + list.fields[fld].sourceModel + '__' + list.fields[fld].sourceField;
} }
else { else {
sort_order = direction + fld; sort_order = direction + fld;
} }
} }
scope.search(list.iterator); scope.search(list.iterator);
} };
// Call after modal dialogs to remove any lingering callbacks // Call after modal dialogs to remove any lingering callbacks
scope.searchCleanup = function() { scope.searchCleanup = function() {
scope.removeDoSearch(); scope.removeDoSearch();
scope.removePrepareSearch(); scope.removePrepareSearch();
scope.removePrepareSearch2(); scope.removePrepareSearch2();
} };
} };
}]); }]);

View File

@@ -211,6 +211,12 @@ textarea {
opacity: 1.0; opacity: 1.0;
} }
/* Host flyout- uses popver */
.popover-content .host-flyout {
font-size: 12px;
i, a { font-size: 12px; }
}
.alert { .alert {
margin-top: 15px; margin-top: 15px;
margin-bottom: 15px; margin-bottom: 15px;