AC-379 Only a single node is selected whenever the tree is initialized. Also added a sort routine to the data load process so that nodes are now sorted by name.

This commit is contained in:
chouseknecht
2013-09-01 23:55:11 -04:00
parent 503cdced2f
commit d9ba08e8cb
3 changed files with 96 additions and 58 deletions

View File

@@ -83,7 +83,7 @@ function Authenticate($window, $scope, $rootScope, $location, Authorization, Tog
$rootScope.token = token; $rootScope.token = token;
$rootScope.userLoggedIn = true; $rootScope.userLoggedIn = true;
$rootScope.token_expire = today.getTime(); $rootScope.token_expire = today.getTime();
// Get all the profile/access info regarding the logged in user // Get all the profile/access info regarding the logged in user
Authorization.getUser() Authorization.getUser()
.success(function(data, status, headers, config) { .success(function(data, status, headers, config) {

View File

@@ -138,13 +138,14 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
Rest.setUrl(defaultUrl); Rest.setUrl(defaultUrl);
Rest.post(data) Rest.post(data)
.success( function(data, status, headers, config) { .success( function(data, status, headers, config) {
var id = data.id;
scope.showGroupHelp = false; // get rid of the Hint scope.showGroupHelp = false; // get rid of the Hint
if (scope.variables) { if (scope.variables) {
Rest.setUrl(data.related.variable_data); Rest.setUrl(data.related.variable_data);
Rest.put(json_data) Rest.put(json_data)
.success( function(data, status, headers, config) { .success( function(data, status, headers, config) {
$('#form-modal').modal('hide'); $('#form-modal').modal('hide');
RefreshTree({ scope: scope }); RefreshTree({ scope: scope, group_id: id });
}) })
.error( function(data, status, headers, config) { .error( function(data, status, headers, config) {
ProcessErrors(scope, data, status, form, ProcessErrors(scope, data, status, form,
@@ -153,7 +154,7 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
} }
else { else {
$('#form-modal').modal('hide'); $('#form-modal').modal('hide');
RefreshTree({ scope: scope }); RefreshTree({ scope: scope, group_id: id });
} }
}) })
.error( function(data, status, headers, config) { .error( function(data, status, headers, config) {

View File

@@ -20,6 +20,8 @@ angular.module('InventoryHelper', [ 'RestServices', 'Utilities', 'OrganizationLi
var scope = params.scope; var scope = params.scope;
var inventory = params.inventory; var inventory = params.inventory;
var group_id = params.group_id;
var group_idx;
var groups = inventory.related.root_groups; var groups = inventory.related.root_groups;
var hosts = inventory.related.hosts; var hosts = inventory.related.hosts;
var inventory_name = inventory.name; var inventory_name = inventory.name;
@@ -45,38 +47,61 @@ angular.module('InventoryHelper', [ 'RestServices', 'Utilities', 'OrganizationLi
state: 'open', state: 'open',
children:[] children:[]
}]; }];
function addNodes(tree, data) { function sortNodes(data) {
for (var i=0; i < data.length; i++) { //Sort nodes by name
tree.children.push({ var names = [];
data: { var newData = [];
title: data[i].name for (var i=0; i < data.length; i++) {
}, names.push(data[i].name);
attr: { }
id: idx, names.sort();
group_id: data[i].id, for (var j=0; j < names.length; j++) {
type: 'group', for (i=0; i < data.length; i++) {
name: data[i].name, if (data[i].name == names[j]) {
description: data[i].description, newData.push(data[i]);
"data-failures": data[i].has_active_failures, }
inventory: data[i].inventory }
}, }
state: 'open', return newData;
children:[] }
});
idx++; function addNodes(tree, data) {
if (data[i].children.length > 0) { var sorted = sortNodes(data);
var node = tree.children.length - 1; for (var i=0; i < sorted.length; i++) {
addNodes(tree.children[node], data[i].children); tree.children.push({
} data: {
} title: sorted[i].name
} },
attr: {
id: idx,
group_id: sorted[i].id,
type: 'group',
name: sorted[i].name,
description: sorted[i].description,
"data-failures": sorted[i].has_active_failures,
inventory: sorted[i].inventory
},
state: 'open',
children:[]
});
if (sorted[i].id == group_id) {
group_idx = idx;
}
idx++;
if (sorted[i].children.length > 0) {
var node = tree.children.length - 1;
addNodes(tree.children[node], sorted[i].children);
}
}
}
Rest.setUrl(scope.treeData); Rest.setUrl(scope.treeData);
Rest.get() Rest.get()
.success( function(data, status, headers, config) { .success( function(data, status, headers, config) {
addNodes(treeData[0], data); var sorted = sortNodes(data);
scope.$emit('buildTree', treeData, idx); addNodes(treeData[0], sorted);
scope.$emit('buildTree', treeData, idx, group_idx);
}) })
.error( function(data, status, headers, config) { .error( function(data, status, headers, config) {
ProcessErrors(scope, data, status, form, ProcessErrors(scope, data, status, form,
@@ -93,6 +118,8 @@ angular.module('InventoryHelper', [ 'RestServices', 'Utilities', 'OrganizationLi
var scope = params.scope; var scope = params.scope;
var inventory = params.inventory; var inventory = params.inventory;
var group_id = params.group_id;
var groups = inventory.related.root_groups; var groups = inventory.related.root_groups;
var hosts = inventory.related.hosts; var hosts = inventory.related.hosts;
var inventory_name = inventory.name; var inventory_name = inventory.name;
@@ -105,10 +132,12 @@ angular.module('InventoryHelper', [ 'RestServices', 'Utilities', 'OrganizationLi
if (scope.buildTreeRemove) { if (scope.buildTreeRemove) {
scope.buildTreeRemove(); scope.buildTreeRemove();
} }
scope.buildTreeRemove = scope.$on('buildTree', function(e, treeData, index) { scope.buildTreeRemove = scope.$on('buildTree', function(e, treeData, index, group_idx) {
var idx = index; var idx = index;
var selected = (group_idx !== undefined && group_idx !== null) ? group_idx : 'inventory-node';
$(tree_id).jstree({ $(tree_id).jstree({
"core": { "initially_open":['inventory_node'], "core": { //"initially_open":['inventory-node'],
"html_titles": true "html_titles": true
}, },
"plugins": ['themes', 'json_data', 'ui', 'contextmenu', 'dnd', 'crrm'], "plugins": ['themes', 'json_data', 'ui', 'contextmenu', 'dnd', 'crrm'],
@@ -118,8 +147,8 @@ angular.module('InventoryHelper', [ 'RestServices', 'Utilities', 'OrganizationLi
"icons": true "icons": true
}, },
"ui": { "ui": {
"initially_select": [ 'inventory-node' ], "initially_select": [ selected ],
"select_limit": 1 "select_limit": 1
}, },
"json_data": { "json_data": {
data: treeData data: treeData
@@ -179,6 +208,7 @@ angular.module('InventoryHelper', [ 'RestServices', 'Utilities', 'OrganizationLi
$(tree_id).bind("loaded.jstree", function () { $(tree_id).bind("loaded.jstree", function () {
scope['treeLoading'] = false; scope['treeLoading'] = false;
Wait('stop');
scope.$emit('treeLoaded'); scope.$emit('treeLoaded');
}); });
@@ -297,8 +327,6 @@ angular.module('InventoryHelper', [ 'RestServices', 'Utilities', 'OrganizationLi
$(tree_id).bind("select_node.jstree", function(e, data){ $(tree_id).bind("select_node.jstree", function(e, data){
scope.$emit('NodeSelect', data.inst.get_json()[0]); scope.$emit('NodeSelect', data.inst.get_json()[0]);
}); });
Wait('stop');
}); });
Wait('start'); Wait('start');
@@ -324,26 +352,28 @@ angular.module('InventoryHelper', [ 'RestServices', 'Utilities', 'OrganizationLi
Rest.setUrl(GetBasePath('inventory') + scope['inventory_id'] + '/'); Rest.setUrl(GetBasePath('inventory') + scope['inventory_id'] + '/');
Rest.get() Rest.get()
.success( function(data, status, headers, config) { .success( function(data, status, headers, config) {
LoadBreadCrumbs({ path: '/inventories/' + $routeParams.id, title: data.name }); LoadBreadCrumbs({ path: '/inventories/' + $routeParams.id, title: data.name });
for (var fld in form.fields) { for (var fld in form.fields) {
if (form.fields[fld].realName) { if (form.fields[fld].realName) {
if (data[form.fields[fld].realName]) { if (data[form.fields[fld].realName]) {
scope[fld] = data[form.fields[fld].realName]; scope[fld] = data[form.fields[fld].realName];
scope.master[fld] = scope[fld]; scope.master[fld] = scope[fld];
} }
} }
else { else {
if (data[fld]) { if (data[fld]) {
scope[fld] = data[fld]; scope[fld] = data[fld];
scope.master[fld] = scope[fld]; scope.master[fld] = scope[fld];
} }
} }
if (form.fields[fld].type == 'lookup' && data.summary_fields[form.fields[fld].sourceModel]) { if (form.fields[fld].type == 'lookup' && data.summary_fields[form.fields[fld].sourceModel]) {
scope[form.fields[fld].sourceModel + '_' + form.fields[fld].sourceField] = scope[form.fields[fld].sourceModel + '_' + form.fields[fld].sourceField] =
data.summary_fields[form.fields[fld].sourceModel][form.fields[fld].sourceField]; data.summary_fields[form.fields[fld].sourceModel][form.fields[fld].sourceField];
scope.master[form.fields[fld].sourceModel + '_' + form.fields[fld].sourceField] = scope.master[form.fields[fld].sourceModel + '_' + form.fields[fld].sourceField] =
scope[form.fields[fld].sourceModel + '_' + form.fields[fld].sourceField]; scope[form.fields[fld].sourceModel + '_' + form.fields[fld].sourceField];
} }
} }
scope.inventoryGroupsUrl = data.related.groups; scope.inventoryGroupsUrl = data.related.groups;
@@ -382,8 +412,11 @@ angular.module('InventoryHelper', [ 'RestServices', 'Utilities', 'OrganizationLi
return function(params) { return function(params) {
// Call after an Edit or Add to refresh tree data // Call after an Edit or Add to refresh tree data
var scope = params.scope; var scope = params.scope;
var group_id = params.group_id;
/*
var openId = []; var openId = [];
var selectedId; var selectedId;
@@ -410,13 +443,15 @@ angular.module('InventoryHelper', [ 'RestServices', 'Utilities', 'OrganizationLi
} }
} }
}); });
*/
if (scope.inventoryLoadedRemove) { if (scope.inventoryLoadedRemove) {
scope.inventoryLoadedRemove(); scope.inventoryLoadedRemove();
} }
scope.inventoryLoadedRemove = scope.$on('inventoryLoaded', function() { scope.inventoryLoadedRemove = scope.$on('inventoryLoaded', function() {
// Get the list of open tree nodes starting with the current group and going up // Get the list of open tree nodes starting with the current group and going up
// the tree until we hit the inventory or root node. // the tree until we hit the inventory or root node.
/*
function findOpenNodes(node) { function findOpenNodes(node) {
if (node.attr('id') != 'inventory-node') { if (node.attr('id') != 'inventory-node') {
if (node.prop('tagName') == 'LI' && (node.hasClass('jstree-open') || node.find('.jstree-clicked'))) { if (node.prop('tagName') == 'LI' && (node.hasClass('jstree-open') || node.find('.jstree-clicked'))) {
@@ -427,7 +462,9 @@ angular.module('InventoryHelper', [ 'RestServices', 'Utilities', 'OrganizationLi
} }
selectedId = scope.selectedNode.attr('id'); selectedId = scope.selectedNode.attr('id');
findOpenNodes(scope.selectedNode); findOpenNodes(scope.selectedNode);
*/
$('#tree-view').jstree('destroy'); $('#tree-view').jstree('destroy');
scope.TreeParams.group_id = group_id;
TreeInit(scope.TreeParams); TreeInit(scope.TreeParams);
}); });