AC-1292 Host container on inventory edit page now automatically resizes and adjusts rows per page.

This commit is contained in:
chouseknecht
2014-05-20 17:17:14 -04:00
parent ea9843a66c
commit c9bb424d98
5 changed files with 113 additions and 83 deletions

View File

@@ -475,7 +475,7 @@ function InventoriesEdit($scope, $location, $routeParams, $compile, $log, $rootS
GetSyncStatusMsg, InjectHosts, HostsReload, GroupsEdit, GroupsDelete, Breadcrumbs, LoadBreadCrumbs, Empty, Rest, ProcessErrors, GetSyncStatusMsg, InjectHosts, HostsReload, GroupsEdit, GroupsDelete, Breadcrumbs, LoadBreadCrumbs, Empty, Rest, ProcessErrors,
InventoryUpdate, Alert, ToggleChildren, ViewUpdateStatus, GroupsCancelUpdate, Find, EditInventoryProperties, HostsEdit, InventoryUpdate, Alert, ToggleChildren, ViewUpdateStatus, GroupsCancelUpdate, Find, EditInventoryProperties, HostsEdit,
HostsDelete, ToggleHostEnabled, CopyMoveGroup, CopyMoveHost, Stream, GetBasePath, ShowJobSummary, ApplyEllipsis, WatchInventoryWindowResize, HostsDelete, ToggleHostEnabled, CopyMoveGroup, CopyMoveHost, Stream, GetBasePath, ShowJobSummary, ApplyEllipsis, WatchInventoryWindowResize,
HelpDialog, InventoryGroupsHelp, Store, ViewJob) { HelpDialog, InventoryGroupsHelp, Store, ViewJob, SetContainerHeights) {
ClearScope(); ClearScope();
@@ -564,6 +564,9 @@ function InventoriesEdit($scope, $location, $routeParams, $compile, $log, $rootS
$scope.selected_group_id = null; $scope.selected_group_id = null;
} }
// Resize the containers based on viewport width/height
SetContainerHeights({ scope: $scope, reloadHosts: false });
// Add hosts view // Add hosts view
$scope.show_failures = false; $scope.show_failures = false;
InjectHosts({ InjectHosts({
@@ -590,7 +593,7 @@ function InventoriesEdit($scope, $location, $routeParams, $compile, $log, $rootS
ApplyEllipsis('#groups_table .group-name a'); ApplyEllipsis('#groups_table .group-name a');
ApplyEllipsis('#hosts_table .host-name a'); ApplyEllipsis('#hosts_table .host-name a');
}, 2500); //give the window time to display }, 2500); //give the window time to display
WatchInventoryWindowResize(); WatchInventoryWindowResize({ scope: $scope });
inventoryAutoHelp = Store('inventoryAutoHelp'); inventoryAutoHelp = Store('inventoryAutoHelp');
if (inventoryAutoHelp !== 'off' && $scope.autoShowGroupHelp) { if (inventoryAutoHelp !== 'off' && $scope.autoShowGroupHelp) {
@@ -859,5 +862,5 @@ InventoriesEdit.$inject = ['$scope', '$location', '$routeParams', '$compile', '$
'LoadBreadCrumbs', 'Empty', 'Rest', 'ProcessErrors', 'InventoryUpdate', 'Alert', 'ToggleChildren', 'ViewUpdateStatus', 'GroupsCancelUpdate', 'LoadBreadCrumbs', 'Empty', 'Rest', 'ProcessErrors', 'InventoryUpdate', 'Alert', 'ToggleChildren', 'ViewUpdateStatus', 'GroupsCancelUpdate',
'Find', 'EditInventoryProperties', 'HostsEdit', 'HostsDelete', 'ToggleHostEnabled', 'CopyMoveGroup', 'CopyMoveHost', 'Find', 'EditInventoryProperties', 'HostsEdit', 'HostsDelete', 'ToggleHostEnabled', 'CopyMoveGroup', 'CopyMoveHost',
'Stream', 'GetBasePath', 'ShowJobSummary', 'ApplyEllipsis', 'WatchInventoryWindowResize', 'HelpDialog', 'InventoryGroupsHelp', 'Store', 'Stream', 'GetBasePath', 'ShowJobSummary', 'ApplyEllipsis', 'WatchInventoryWindowResize', 'HelpDialog', 'InventoryGroupsHelp', 'Store',
'ViewJob' 'ViewJob', 'SetContainerHeights'
]; ];

View File

@@ -615,11 +615,11 @@ function($compile, SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize, Sched
.factory('GroupsEdit', ['$rootScope', '$location', '$log', '$routeParams', '$compile', 'Rest', 'Alert', 'GroupForm', 'GenerateForm', .factory('GroupsEdit', ['$rootScope', '$location', '$log', '$routeParams', '$compile', 'Rest', 'Alert', 'GroupForm', 'GenerateForm',
'Prompt', 'ProcessErrors', 'GetBasePath', 'SetNodeName', 'ParseTypeChange', 'GetSourceTypeOptions', 'InventoryUpdate', 'Prompt', 'ProcessErrors', 'GetBasePath', 'SetNodeName', 'ParseTypeChange', 'GetSourceTypeOptions', 'InventoryUpdate',
'LookUpInit', 'Empty', 'Wait', 'GetChoices', 'UpdateGroup', 'SourceChange', 'Find','WatchInventoryWindowResize', 'LookUpInit', 'Empty', 'Wait', 'GetChoices', 'UpdateGroup', 'SourceChange', 'Find',
'ParseVariableString', 'ToJSON', 'GroupsScheduleListInit', 'SourceForm', 'SetSchedulesInnerDialogSize', 'BuildTree', 'ParseVariableString', 'ToJSON', 'GroupsScheduleListInit', 'SourceForm', 'SetSchedulesInnerDialogSize', 'BuildTree',
function ($rootScope, $location, $log, $routeParams, $compile, Rest, Alert, GroupForm, GenerateForm, Prompt, ProcessErrors, function ($rootScope, $location, $log, $routeParams, $compile, Rest, Alert, GroupForm, GenerateForm, Prompt, ProcessErrors,
GetBasePath, SetNodeName, ParseTypeChange, GetSourceTypeOptions, InventoryUpdate, LookUpInit, Empty, Wait, GetBasePath, SetNodeName, ParseTypeChange, GetSourceTypeOptions, InventoryUpdate, LookUpInit, Empty, Wait,
GetChoices, UpdateGroup, SourceChange, Find, WatchInventoryWindowResize, ParseVariableString, ToJSON, GroupsScheduleListInit, GetChoices, UpdateGroup, SourceChange, Find, ParseVariableString, ToJSON, GroupsScheduleListInit,
SourceForm, SetSchedulesInnerDialogSize, BuildTree) { SourceForm, SetSchedulesInnerDialogSize, BuildTree) {
return function (params) { return function (params) {
@@ -1044,7 +1044,7 @@ function($compile, SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize, Sched
} else { } else {
Wait('stop'); Wait('stop');
} }
WatchInventoryWindowResize(); //WatchInventoryWindowResize();
parent_scope.removeAddTreeRefreshed(); parent_scope.removeAddTreeRefreshed();
if (modal_scope.searchCleanUp) { if (modal_scope.searchCleanUp) {
modal_scope.searchCleanup(); modal_scope.searchCleanup();
@@ -1178,9 +1178,9 @@ function($compile, SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize, Sched
//if (modal_scope.searchCleanup) { //if (modal_scope.searchCleanup) {
// modal_scope.searchCleanup(); // modal_scope.searchCleanup();
//} //}
if (base === 'inventories') { //if (base === 'inventories') {
WatchInventoryWindowResize(); // WatchInventoryWindowResize();
} //}
}; };
// Save // Save
@@ -1469,9 +1469,9 @@ function($compile, SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize, Sched
]) ])
.factory('ShowUpdateStatus', ['$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'GenerateForm', .factory('ShowUpdateStatus', ['$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'GenerateForm',
'Prompt', 'ProcessErrors', 'GetBasePath', 'FormatDate', 'InventoryStatusForm', 'Wait', 'Empty', 'WatchInventoryWindowResize', 'Prompt', 'ProcessErrors', 'GetBasePath', 'FormatDate', 'InventoryStatusForm', 'Wait',
function ($rootScope, $location, $log, $routeParams, Rest, Alert, GenerateForm, Prompt, ProcessErrors, GetBasePath, function ($rootScope, $location, $log, $routeParams, Rest, Alert, GenerateForm, Prompt, ProcessErrors, GetBasePath,
FormatDate, InventoryStatusForm, Wait, Empty, WatchInventoryWindowResize) { FormatDate, InventoryStatusForm, Wait) {
return function (params) { return function (params) {
var group_name = params.group_name, var group_name = params.group_name,
@@ -1563,7 +1563,7 @@ function($compile, SchedulerInit, Rest, Wait, SetSchedulesInnerDialogSize, Sched
}); });
$('#status-modal-dialog').dialog('destroy'); $('#status-modal-dialog').dialog('destroy');
$('#inventory-modal-container').empty(); $('#inventory-modal-container').empty();
WatchInventoryWindowResize(); //WatchInventoryWindowResize();
}, },
open: function () { open: function () {
Wait('stop'); Wait('stop');

View File

@@ -4,7 +4,7 @@
* HostsHelper * HostsHelper
* *
* Routines that handle host add/edit/delete on the Inventory detail page. * Routines that handle host add/edit/delete on the Inventory detail page.
* *
*/ */
/* jshint loopfunc: true */ /* jshint loopfunc: true */
@@ -16,11 +16,11 @@ angular.module('HostsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', 'H
'InventoryHelper', 'RelatedSearchHelper', 'InventoryFormDefinition', 'SelectionHelper', 'InventoryHelper', 'RelatedSearchHelper', 'InventoryFormDefinition', 'SelectionHelper',
'HostGroupsFormDefinition', 'VariablesHelper', 'ModalDialog', 'LogViewerHelper' 'HostGroupsFormDefinition', 'VariablesHelper', 'ModalDialog', 'LogViewerHelper'
]) ])
.factory('SetEnabledMsg', [ function() { .factory('SetEnabledMsg', [ function() {
return function(host) { return function(host) {
if (host.has_inventory_sources) { if (host.has_inventory_sources) {
// Inventory sync managed, so not clickable // Inventory sync managed, so not clickable
host.enabledToolTip = (host.enabled) ? 'Host is available' : 'Host is not available'; host.enabledToolTip = (host.enabled) ? 'Host is available' : 'Host is not available';
} }
else { else {
@@ -51,13 +51,13 @@ angular.module('HostsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', 'H
host.enabled_flag = host.enabled; host.enabled_flag = host.enabled;
SetEnabledMsg(host); SetEnabledMsg(host);
}; };
}]) }])
.factory('SetStatus', ['SetEnabledMsg', 'Empty', function(SetEnabledMsg, Empty) { .factory('SetStatus', ['SetEnabledMsg', 'Empty', function(SetEnabledMsg, Empty) {
return function(params) { return function(params) {
var scope = params.scope, var scope = params.scope,
host = params.host, host = params.host,
i, html, title; i, html, title;
@@ -68,7 +68,7 @@ angular.module('HostsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', 'H
} }
return a; return a;
} }
function noRecentJobs() { function noRecentJobs() {
title = 'No job data'; title = 'No job data';
html = "<p>No recent job data available for this host.</p>\n" + html = "<p>No recent job data available for this host.</p>\n" +
@@ -77,7 +77,7 @@ angular.module('HostsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', 'H
function setMsg(host) { function setMsg(host) {
var j, job, jobs; var j, job, jobs;
if (host.has_active_failures === true || (host.has_active_failures === false && host.last_job !== null)) { if (host.has_active_failures === true || (host.has_active_failures === false && host.last_job !== null)) {
if (host.has_active_failures === true) { if (host.has_active_failures === true) {
host.badgeToolTip = 'Most recent job failed. Click to view jobs.'; host.badgeToolTip = 'Most recent job failed. Click to view jobs.';
@@ -161,19 +161,18 @@ angular.module('HostsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', 'H
}]) }])
.factory('HostsReload', [ '$routeParams', 'Empty', 'InventoryHosts', 'GetBasePath', 'SearchInit', 'PaginateInit', 'Wait', .factory('HostsReload', [ '$routeParams', 'Empty', 'InventoryHosts', 'GetBasePath', 'SearchInit', 'PaginateInit', 'Wait',
'SetHostStatus', 'SetStatus', 'ApplyEllipsis', 'SetHostStatus', 'SetStatus', 'ApplyEllipsis', 'SetContainerHeights', 'GetHostContainerRows',
function($routeParams, Empty, InventoryHosts, GetBasePath, SearchInit, PaginateInit, Wait, SetHostStatus, SetStatus, function($routeParams, Empty, InventoryHosts, GetBasePath, SearchInit, PaginateInit, Wait, SetHostStatus, SetStatus,
ApplyEllipsis) { ApplyEllipsis, SetContainerHeights) {
return function(params) { return function(params) {
var scope = params.scope, var scope = params.scope,
group_id = params.group_id, group_id = params.group_id,
inventory_id = params.inventory_id, inventory_id = params.inventory_id,
list = InventoryHosts, list = InventoryHosts,
url = ( !Empty(group_id) ) ? GetBasePath('groups') + group_id + '/all_hosts/' : url = ( !Empty(group_id) ) ? GetBasePath('groups') + group_id + '/all_hosts/' :
GetBasePath('inventory') + inventory_id + '/hosts/'; GetBasePath('inventory') + inventory_id + '/hosts/';
scope.search_place_holder='Search ' + scope.selected_group_name; scope.search_place_holder='Search ' + scope.selected_group_name;
if (scope.removePostRefresh) { if (scope.removePostRefresh) {
@@ -191,6 +190,9 @@ function($routeParams, Empty, InventoryHosts, GetBasePath, SearchInit, PaginateI
scope.$emit('HostReloadComplete'); scope.$emit('HostReloadComplete');
}); });
// Size containers based on viewport
SetContainerHeights({ scope: scope, reloadHosts: false });
SearchInit({ scope: scope, set: 'hosts', list: list, url: url }); SearchInit({ scope: scope, set: 'hosts', list: list, url: url });
PaginateInit({ scope: scope, list: list, url: url }); PaginateInit({ scope: scope, list: list, url: url });
@@ -234,12 +236,12 @@ function(GenerateList, InventoryHosts, HostsReload) {
.factory('ToggleHostEnabled', [ 'GetBasePath', 'Rest', 'Wait', 'ProcessErrors', 'Alert', 'Find', 'SetEnabledMsg', .factory('ToggleHostEnabled', [ 'GetBasePath', 'Rest', 'Wait', 'ProcessErrors', 'Alert', 'Find', 'SetEnabledMsg',
function(GetBasePath, Rest, Wait, ProcessErrors, Alert, Find, SetEnabledMsg) { function(GetBasePath, Rest, Wait, ProcessErrors, Alert, Find, SetEnabledMsg) {
return function(params) { return function(params) {
var id = params.host_id, var id = params.host_id,
external_source = params.external_source, external_source = params.external_source,
scope = params.scope, scope = params.scope,
host; host;
function setMsg(host) { function setMsg(host) {
host.enabled = (host.enabled) ? false : true; host.enabled = (host.enabled) ? false : true;
host.enabled_flag = host.enabled; host.enabled_flag = host.enabled;
@@ -251,7 +253,7 @@ function(GetBasePath, Rest, Wait, ProcessErrors, Alert, Find, SetEnabledMsg) {
Wait('start'); Wait('start');
host = Find({ list: scope.hosts, key: 'id', val: id }); host = Find({ list: scope.hosts, key: 'id', val: id });
setMsg(host); setMsg(host);
Rest.setUrl(GetBasePath('hosts') + id + '/'); Rest.setUrl(GetBasePath('hosts') + id + '/');
Rest.put(host) Rest.put(host)
.success( function() { .success( function() {
@@ -277,7 +279,7 @@ function(GetBasePath, Rest, Wait, ProcessErrors, Alert, Find, SetEnabledMsg) {
function($rootScope, $location, $log, $routeParams, Rest, Alert, HostList, GenerateList, Prompt, SearchInit, function($rootScope, $location, $log, $routeParams, Rest, Alert, HostList, GenerateList, Prompt, SearchInit,
PaginateInit, ProcessErrors, GetBasePath, HostsAdd, HostsReload, SelectionInit) { PaginateInit, ProcessErrors, GetBasePath, HostsAdd, HostsReload, SelectionInit) {
return function(params) { return function(params) {
var inventory_id = params.inventory_id, var inventory_id = params.inventory_id,
group_id = params.group_id, group_id = params.group_id,
list = HostList, list = HostList,
@@ -287,7 +289,7 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostList, Gener
list.iterator = 'subhost'; //Override the iterator and name so the scope of the modal dialog list.iterator = 'subhost'; //Override the iterator and name so the scope of the modal dialog
list.name = 'subhosts'; //will not conflict with the parent scope list.name = 'subhosts'; //will not conflict with the parent scope
scope = generator.inject(list, { scope = generator.inject(list, {
id: 'form-modal-body', id: 'form-modal-body',
@@ -295,13 +297,13 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostList, Gener
breadCrumbs: false, breadCrumbs: false,
selectButton: false selectButton: false
}); });
defaultUrl = GetBasePath('inventory') + inventory_id + '/hosts/?not__groups__id=' + scope.group_id; defaultUrl = GetBasePath('inventory') + inventory_id + '/hosts/?not__groups__id=' + scope.group_id;
scope.formModalActionLabel = 'Select'; scope.formModalActionLabel = 'Select';
scope.formModalHeader = 'Add Existing Hosts'; scope.formModalHeader = 'Add Existing Hosts';
scope.formModalCancelShow = true; scope.formModalCancelShow = true;
SelectionInit({ scope: scope, list: list, url: GetBasePath('groups') + group_id + '/hosts/' }); SelectionInit({ scope: scope, list: list, url: GetBasePath('groups') + group_id + '/hosts/' });
if (scope.removeModalClosed) { if (scope.removeModalClosed) {
@@ -311,11 +313,11 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostList, Gener
// if the modal closed, assume something got changed and reload the host list // if the modal closed, assume something got changed and reload the host list
HostsReload(params); HostsReload(params);
}); });
$('.popover').popover('hide'); //remove any lingering pop-overs $('.popover').popover('hide'); //remove any lingering pop-overs
$('#form-modal .btn-none').removeClass('btn-none').addClass('btn-success'); $('#form-modal .btn-none').removeClass('btn-none').addClass('btn-success');
$('#form-modal').modal({ backdrop: 'static', keyboard: false }); $('#form-modal').modal({ backdrop: 'static', keyboard: false });
SearchInit({ scope: scope, set: 'subhosts', list: list, url: defaultUrl }); SearchInit({ scope: scope, set: 'subhosts', list: list, url: defaultUrl });
PaginateInit({ scope: scope, list: list, url: defaultUrl, mode: 'lookup' }); PaginateInit({ scope: scope, list: list, url: defaultUrl, mode: 'lookup' });
scope.search(list.iterator); scope.search(list.iterator);
@@ -334,12 +336,12 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostList, Gener
.factory('HostsCreate', ['$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'HostForm', 'GenerateForm', .factory('HostsCreate', ['$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'HostForm', 'GenerateForm',
'Prompt', 'ProcessErrors', 'GetBasePath', 'HostsReload', 'ParseTypeChange', 'Wait', 'WatchInventoryWindowResize', 'Prompt', 'ProcessErrors', 'GetBasePath', 'HostsReload', 'ParseTypeChange', 'Wait',
'ToJSON', 'ToJSON',
function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, GenerateForm, Prompt, ProcessErrors, function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, GenerateForm, Prompt, ProcessErrors,
GetBasePath, HostsReload, ParseTypeChange, Wait, WatchInventoryWindowResize, ToJSON) { GetBasePath, HostsReload, ParseTypeChange, Wait, ToJSON) {
return function(params) { return function(params) {
var parent_scope = params.scope, var parent_scope = params.scope,
inventory_id = parent_scope.inventory_id, inventory_id = parent_scope.inventory_id,
group_id = parent_scope.selected_group_id, group_id = parent_scope.selected_group_id,
@@ -348,14 +350,14 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, Gener
generator = GenerateForm, generator = GenerateForm,
scope = generator.inject(form, {mode: 'add', modal: true, related: false}), scope = generator.inject(form, {mode: 'add', modal: true, related: false}),
master={}; master={};
scope.formModalActionLabel = 'Save'; scope.formModalActionLabel = 'Save';
scope.formModalHeader = 'Create New Host'; scope.formModalHeader = 'Create New Host';
scope.formModalCancelShow = true; scope.formModalCancelShow = true;
scope.parseType = 'yaml'; scope.parseType = 'yaml';
ParseTypeChange({ scope: scope, field_id: 'host_variables' }); ParseTypeChange({ scope: scope, field_id: 'host_variables' });
if (scope.removeHostsReload) { if (scope.removeHostsReload) {
scope.removeHostsReload(); scope.removeHostsReload();
} }
@@ -366,21 +368,21 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, Gener
$('#form-modal .btn-none').removeClass('btn-none').addClass('btn-success'); $('#form-modal .btn-none').removeClass('btn-none').addClass('btn-success');
//$('#form-modal').unbind('hidden'); //$('#form-modal').unbind('hidden');
//$('#form-modal').on('hidden', function () { scope.$emit('hostsReload'); }); //$('#form-modal').on('hidden', function () { scope.$emit('hostsReload'); });
generator.reset(); generator.reset();
master={}; master={};
if (!scope.$$phase) { if (!scope.$$phase) {
scope.$digest(); scope.$digest();
} }
if (scope.removeHostSaveComplete) { if (scope.removeHostSaveComplete) {
scope.removeHostSaveComplete(); scope.removeHostSaveComplete();
} }
scope.removeHostSaveComplete = scope.$on('HostSaveComplete', function() { scope.removeHostSaveComplete = scope.$on('HostSaveComplete', function() {
Wait('stop'); Wait('stop');
$('#form-modal').modal('hide'); $('#form-modal').modal('hide');
HostsReload({ HostsReload({
scope: parent_scope, scope: parent_scope,
group_id: parent_scope.selected_group_id, group_id: parent_scope.selected_group_id,
@@ -388,14 +390,14 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, Gener
inventory_id: parent_scope.inventory_id inventory_id: parent_scope.inventory_id
}); });
WatchInventoryWindowResize(); //WatchInventoryWindowResize();
}); });
// Save // Save
scope.formModalAction = function() { scope.formModalAction = function() {
Wait('start'); Wait('start');
var fld, data={}; var fld, data={};
scope.formModalActionDisabled = true; scope.formModalActionDisabled = true;
data.variables = ToJSON(scope.parseType, scope.variables, true); data.variables = ToJSON(scope.parseType, scope.variables, true);
@@ -424,23 +426,23 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, Gener
// Defaults // Defaults
generator.reset(); generator.reset();
}; };
scope.cancelModal = function() { scope.cancelModal = function() {
WatchInventoryWindowResize(); // WatchInventoryWindowResize();
}; };
}; };
}]) }])
.factory('HostsEdit', ['$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'HostForm', 'GenerateForm', .factory('HostsEdit', ['$rootScope', '$location', '$log', '$routeParams', 'Rest', 'Alert', 'HostForm', 'GenerateForm',
'Prompt', 'ProcessErrors', 'GetBasePath', 'HostsReload', 'ParseTypeChange', 'Wait', 'Find', 'SetStatus', 'ApplyEllipsis', 'Prompt', 'ProcessErrors', 'GetBasePath', 'HostsReload', 'ParseTypeChange', 'Wait', 'Find', 'SetStatus', 'ApplyEllipsis',
'WatchInventoryWindowResize', 'ToJSON', 'ParseVariableString', 'CreateDialog', 'TextareaResize', 'Empty', 'ToJSON', 'ParseVariableString', 'CreateDialog', 'TextareaResize', 'Empty',
function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, GenerateForm, Prompt, ProcessErrors, function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, GenerateForm, Prompt, ProcessErrors,
GetBasePath, HostsReload, ParseTypeChange, Wait, Find, SetStatus, ApplyEllipsis, WatchInventoryWindowResize, ToJSON, GetBasePath, HostsReload, ParseTypeChange, Wait, Find, SetStatus, ApplyEllipsis, ToJSON,
ParseVariableString, CreateDialog, TextareaResize, Empty) { ParseVariableString, CreateDialog, TextareaResize, Empty) {
return function(params) { return function(params) {
var parent_scope = params.scope, var parent_scope = params.scope,
host_id = params.host_id, host_id = params.host_id,
inventory_id = params.inventory_id, inventory_id = params.inventory_id,
@@ -453,10 +455,10 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, Gener
master = {}, master = {},
relatedSets = {}, relatedSets = {},
group, buttons; group, buttons;
generator.inject(HostForm, { mode: 'edit', id: 'host-modal-dialog', breadCrumbs: false, related: false, scope: scope }); generator.inject(HostForm, { mode: 'edit', id: 'host-modal-dialog', breadCrumbs: false, related: false, scope: scope });
generator.reset(); generator.reset();
buttons = [{ buttons = [{
label: "Cancel", label: "Cancel",
onClick: function() { onClick: function() {
@@ -488,7 +490,6 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, Gener
Wait('stop'); Wait('stop');
scope.codeMirror.destroy(); scope.codeMirror.destroy();
$('#host-modal-dialog').empty(); $('#host-modal-dialog').empty();
WatchInventoryWindowResize();
}, },
onResizeStop: function() { onResizeStop: function() {
TextareaResize({ TextareaResize({
@@ -509,7 +510,7 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, Gener
}, },
callback: 'HostEditDialogReady' callback: 'HostEditDialogReady'
}); });
scope.parseType = 'yaml'; scope.parseType = 'yaml';
if (scope.hostVariablesLoadedRemove) { if (scope.hostVariablesLoadedRemove) {
@@ -553,7 +554,7 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, Gener
} }
master.variables = scope.variables; master.variables = scope.variables;
}); });
Wait('start'); Wait('start');
// Retrieve detail record and prepopulate the form // Retrieve detail record and prepopulate the form
@@ -638,7 +639,7 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, Gener
} }
// Restore ellipsis response to window resize // Restore ellipsis response to window resize
WatchInventoryWindowResize(); //WatchInventoryWindowResize();
}); });
// Save changes to the parent // Save changes to the parent
@@ -646,7 +647,7 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, Gener
Wait('start'); Wait('start');
var fld, data={}; var fld, data={};
try { try {
data.variables = ToJSON(scope.parseType, scope.variables, true); data.variables = ToJSON(scope.parseType, scope.variables, true);
for (fld in form.fields) { for (fld in form.fields) {
@@ -692,7 +693,7 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, Gener
scope.cancelModal = function() { scope.cancelModal = function() {
$('#host-modal-dialog').dialog('close'); $('#host-modal-dialog').dialog('close');
}; };
}; };
}]) }])
@@ -702,7 +703,7 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, HostForm, Gener
function($rootScope, $location, $log, $routeParams, Rest, Alert, Prompt, ProcessErrors, GetBasePath, HostsReload, Wait, Find, Empty) { function($rootScope, $location, $log, $routeParams, Rest, Alert, Prompt, ProcessErrors, GetBasePath, HostsReload, Wait, Find, Empty) {
return function(params) { return function(params) {
// Remove the selected host from the current group by disassociating // Remove the selected host from the current group by disassociating
var action_to_take, body, var action_to_take, body,
scope = params.scope, scope = params.scope,
host_id = params.host_id, host_id = params.host_id,
@@ -743,12 +744,12 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, Prompt, Process
}); });
$('#prompt-modal').on('hidden.bs.modal', function(){ Wait('stop'); }); $('#prompt-modal').on('hidden.bs.modal', function(){ Wait('stop'); });
action_to_take = function() { action_to_take = function() {
var count=0, i; var count=0, i;
Wait('start'); Wait('start');
if (scope.removeHostRemoved) { if (scope.removeHostRemoved) {
scope.removeHostRemoved(); scope.removeHostRemoved();
} }
@@ -772,7 +773,7 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, Prompt, Process
}); });
} }
}; };
body = (group) ? '<div class=\"alert alert-info\"><p>Are you sure you want to remove host <strong>' + host_name + '</strong> from group ' + group.name + '?' + body = (group) ? '<div class=\"alert alert-info\"><p>Are you sure you want to remove host <strong>' + host_name + '</strong> from group ' + group.name + '?' +
' It will still be part of the inventory and available in All Hosts.</p></div>' : ' It will still be part of the inventory and available in All Hosts.</p></div>' :
'<div class=\"alert alert-info\"><p>Are you sure you want to permanently delete host <strong>' + host_name + '</strong> from the inventory?</p></div>'; '<div class=\"alert alert-info\"><p>Are you sure you want to permanently delete host <strong>' + host_name + '</strong> from the inventory?</p></div>';
@@ -786,13 +787,13 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, Prompt, Process
function($rootScope, $location, $log, $routeParams, Rest, Alert, GenerateForm, Prompt, ProcessErrors, GetBasePath, HostsReload, function($rootScope, $location, $log, $routeParams, Rest, Alert, GenerateForm, Prompt, ProcessErrors, GetBasePath, HostsReload,
ParseTypeChange, Wait) { ParseTypeChange, Wait) {
return function(params) { return function(params) {
var host_id = params.host_id, var host_id = params.host_id,
inventory_id = params.inventory_id, inventory_id = params.inventory_id,
generator = GenerateForm, generator = GenerateForm,
actions = [], actions = [],
i, html, defaultUrl, scope, postAction; i, html, defaultUrl, scope, postAction;
html = "<div class=\"row host-groups\">\n"; html = "<div class=\"row host-groups\">\n";
html += "<div class=\"col-lg-6\">\n"; html += "<div class=\"col-lg-6\">\n";
html += "<label>Available Groups:</label>\n"; html += "<label>Available Groups:</label>\n";
@@ -817,7 +818,7 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, GenerateForm, P
defaultUrl = GetBasePath('hosts') + host_id + '/'; defaultUrl = GetBasePath('hosts') + host_id + '/';
scope = generator.inject(null, { mode: 'edit', modal: true, related: false, html: html }); scope = generator.inject(null, { mode: 'edit', modal: true, related: false, html: html });
for (i=0; i < scope.hosts.length; i++) { for (i=0; i < scope.hosts.length; i++) {
if (scope.hosts[i].id === host_id) { if (scope.hosts[i].id === host_id) {
scope.host = scope.hosts[i]; scope.host = scope.hosts[i];
@@ -849,11 +850,11 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, GenerateForm, P
HostsReload({ scope: scope, inventory_id: inventory_id, group_id: scope.group_id , action: postAction }); HostsReload({ scope: scope, inventory_id: inventory_id, group_id: scope.group_id , action: postAction });
} }
}); });
// Save changes // Save changes
scope.formModalAction = function() { scope.formModalAction = function() {
var i, j, found; var i, j, found;
$('#form-modal').modal('hide'); $('#form-modal').modal('hide');
Wait('start'); Wait('start');
@@ -866,7 +867,7 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, GenerateForm, P
} }
} }
if (!found) { if (!found) {
// group was removed // group was removed
actions.push({ group_id: scope.original_groups[i].id , action: 'delete' }); actions.push({ group_id: scope.original_groups[i].id , action: 'delete' });
Rest.setUrl(GetBasePath('groups') + scope.original_groups[i].id + '/hosts/'); Rest.setUrl(GetBasePath('groups') + scope.original_groups[i].id + '/hosts/');
Rest.post({ id: host_id, disassociate: 1 }) Rest.post({ id: host_id, disassociate: 1 })
@@ -919,7 +920,7 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, GenerateForm, P
scope.rightButtonDisabled = true; scope.rightButtonDisabled = true;
} }
}; };
scope.rightChange = function() { scope.rightChange = function() {
// Select/deselect made on host groups list // Select/deselect made on host groups list
if (scope.assignedGroups !== null && scope.assignedGroups.length > 0) { if (scope.assignedGroups !== null && scope.assignedGroups.length > 0) {
@@ -934,9 +935,9 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, GenerateForm, P
scope.moveLeft = function() { scope.moveLeft = function() {
// Remove selected groups from the list of assigned groups // Remove selected groups from the list of assigned groups
var i, j, found, placed; var i, j, found, placed;
for (i=0; i < scope.assignedGroups.length; i++){ for (i=0; i < scope.assignedGroups.length; i++){
for (j=0 ; j < scope.host_groups.length; j++) { for (j=0 ; j < scope.host_groups.length; j++) {
if (scope.host_groups[j].id === scope.assignedGroups[i].id) { if (scope.host_groups[j].id === scope.assignedGroups[i].id) {
@@ -983,9 +984,9 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, GenerateForm, P
scope.moveRight = function() { scope.moveRight = function() {
// Remove selected groups from list of available groups // Remove selected groups from list of available groups
var i, j, found, placed; var i, j, found, placed;
for (i=0; i < scope.selectedGroups.length; i++){ for (i=0; i < scope.selectedGroups.length; i++){
for (j=0 ; j < scope.available_groups.length; j++) { for (j=0 ; j < scope.available_groups.length; j++) {
if (scope.available_groups[j].id === scope.selectedGroups[i].id) { if (scope.available_groups[j].id === scope.selectedGroups[i].id) {
@@ -1074,14 +1075,14 @@ function($rootScope, $location, $log, $routeParams, Rest, Alert, GenerateForm, P
scope.removeHostsReload = scope.$on('hostsReload', function() { scope.removeHostsReload = scope.$on('hostsReload', function() {
HostsReload(params); HostsReload(params);
}); });
if (!scope.$$phase) { if (!scope.$$phase) {
scope.$digest(); scope.$digest();
} }
}; };
}]); }]);

View File

@@ -21,26 +21,49 @@ angular.module('InventoryHelper', ['RestServices', 'Utilities', 'OrganizationLis
}; };
}]) }])
.factory('SetContainerHeights', [ 'GetGroupContainerHeight', function(GetGroupContainerHeight) { .factory('GetHostContainerRows', [ function() {
return function() { return function() {
var height; var height = $('#hosts-container .well').height() - $('#hosts-constainer .well .row').height() - $('#hosts_table thead').height();
return Math.floor(height / 27) - 1;
};
}])
.factory('SetContainerHeights', [ 'GetGroupContainerHeight', 'GetHostContainerRows', function(GetGroupContainerHeight, GetHostContainerRows) {
return function(params) {
var scope = (params && params.scope) ? params.scope : null,
reloadHosts = (params && params.reloadHosts) ? true : false,
height, rows;
if ($(window).width() > 1210) { if ($(window).width() > 1210) {
height = GetGroupContainerHeight(); height = GetGroupContainerHeight();
$('#groups-container .list-table-container').height(height); $('#groups-container .list-table-container').height(height);
$('#hosts-container .well').height( $('#groups-container').height() - 49 );
} }
else { else {
$('#groups-container .list-table-container').height('auto'); $('#groups-container .list-table-container').height('auto');
$('#hosts-container .well').height('auto');
} }
$('#groups-container .list-table-container').mCustomScrollbar("update"); $('#groups-container .list-table-container').mCustomScrollbar("update");
$('#hosts-container .well').height( $('#groups-container').height() - 39 );
if (reloadHosts) {
// we need ro recalc the the page size
if ($(window).width() > 1210) {
rows = GetHostContainerRows();
scope.host_page_size = rows;
}
else {
// on small screens we go back to the default
scope.host_page_size = 20;
}
scope.changePageSize('hosts', 'host');
}
}; };
}]) }])
.factory('WatchInventoryWindowResize', ['ApplyEllipsis', 'SetContainerHeights', .factory('WatchInventoryWindowResize', ['ApplyEllipsis', 'SetContainerHeights',
function (ApplyEllipsis, SetContainerHeights) { function (ApplyEllipsis, SetContainerHeights) {
return function () { return function (params) {
// Call to set or restore window resize // Call to set or restore window resize
SetContainerHeights(); var scope = params.scope;
$(window).resize(_.debounce(function() { $(window).resize(_.debounce(function() {
// Hack to stop group-name div slipping to a new line // Hack to stop group-name div slipping to a new line
$('#groups_table .name-column').each(function () { $('#groups_table .name-column').each(function () {
@@ -53,7 +76,7 @@ angular.module('InventoryHelper', ['RestServices', 'Utilities', 'OrganizationLis
}); });
ApplyEllipsis('#groups_table .group-name a'); ApplyEllipsis('#groups_table .group-name a');
ApplyEllipsis('#hosts_table .host-name a'); ApplyEllipsis('#hosts_table .host-name a');
SetContainerHeights(); SetContainerHeights({ scope: scope, reloadHosts: true });
}, 500)); }, 500));
}; };
} }

View File

@@ -1342,6 +1342,9 @@ input[type="checkbox"].checkbox-no-label {
position: relative; position: relative;
top: -15px; top: -15px;
} }
.well {
margin-bottom: 8px;
}
} }
#inventories_table i[class*="icon-job-"], #inventories_table i[class*="icon-job-"],