working save/restore node positions with groups

This commit is contained in:
Oliver Gorwits
2017-12-24 12:09:40 +00:00
parent bf7e231ffe
commit 547d2934cb
4 changed files with 32 additions and 18 deletions

View File

@@ -25,6 +25,19 @@ ajax '/ajax/data/device/netmappositions' => require_login sub {
my $vlan = param('vlan');
undef $vlan if (defined $vlan and $vlan !~ m/^\d+$/);
my $mapshow = param('mapshow');
return if !defined $mapshow or $mapshow !~ m/^(?:all|only)$/;
# list of groups selected by user and passed in param
my $devgrp = (ref [] eq ref param('devgrp') ? param('devgrp') : [param('devgrp')]);
# list of groups validated as real host groups and named host groups
my @hgrplist = List::MoreUtils::uniq
grep { exists setting('host_group_displaynames')->{$_} }
grep { exists setting('host_groups')->{$_} }
grep { defined } @{ $devgrp };
return if $mapshow eq 'only' and 0 == scalar @hgrplist;
push(@hgrplist, '__ANY__') if 0 == scalar @hgrplist;
my %clean = ();
POSITION: foreach my $pos (@$positions) {
next unless ref {} eq ref $pos;
@@ -34,24 +47,23 @@ ajax '/ajax/data/device/netmappositions' => require_login sub {
}
$clean{$pos->{ID}} = { x => $pos->{x}, y => $pos->{y} };
}
return unless scalar keys %clean;
my $posrow = schema('netdisco')->resultset('NetmapPositions')->find({
device_groups => \[ '= ?', [device_groups => [sort (List::MoreUtils::uniq( '__ANY__' )) ]] ],
device_groups => \[ '= ?', [device_groups => [sort @hgrplist]] ],
vlan => ($vlan || 0)});
if ($posrow) {
$posrow->update({ positions => to_json(\%clean) });
}
else {
schema('netdisco')->resultset('NetmapPositions')->create({
device_groups => [sort (List::MoreUtils::uniq( '__ANY__' )) ],
device_groups => [sort @hgrplist],
vlan => ($vlan || 0),
positions => to_json(\%clean),
});
}
};
# colorgroups
# dynamicsize
ajax '/ajax/data/device/netmap' => require_login sub {
@@ -66,6 +78,14 @@ ajax '/ajax/data/device/netmap' => require_login sub {
$mapshow = 'neighbors' if $mapshow !~ m/^(?:all|neighbors|only)$/;
$mapshow = 'all' unless $qdev->in_storage;
# list of groups selected by user and passed in param
my $devgrp = (ref [] eq ref param('devgrp') ? param('devgrp') : [param('devgrp')]);
# list of groups validated as real host groups and named host groups
my @hgrplist = List::MoreUtils::uniq
grep { exists setting('host_group_displaynames')->{$_} }
grep { exists setting('host_groups')->{$_} }
grep { defined } @{ $devgrp };
my %id_for = ();
my %ok_dev = ();
my %v3data = ( nodes => {}, links => [] );
@@ -109,7 +129,8 @@ ajax '/ajax/data/device/netmap' => require_login sub {
# DEVICES (NODES)
my $posrow = schema('netdisco')->resultset('NetmapPositions')->find({
device_groups => \[ '= ?', [device_groups => [sort (List::MoreUtils::uniq( '__ANY__' )) ]] ],
device_groups => \[ '= ?',
[device_groups => [$mapshow eq 'all' ? '__ANY__' : (sort @hgrplist)]] ],
vlan => ($vlan || 0)});
my $pos_for = from_json( $posrow ? $posrow->positions : '{}' );
@@ -118,13 +139,6 @@ ajax '/ajax/data/device/netmap' => require_login sub {
'+select' => [\'row_number() over()'], '+as' => ['row_number'],
});
# list of groups selected by user and passed in param
my $devgrp = (ref [] eq ref param('devgrp') ? param('devgrp') : [param('devgrp')]);
# list of groups validated as real host groups and named host groups
my @hgrplist = grep { exists setting('host_group_displaynames')->{$_} }
grep { exists setting('host_groups')->{$_} }
grep { defined } @{ $devgrp };
DEVICE: while (my $device = $devices->next) {
# if in neighbors or vlan mode then use %ok_dev to filter
next DEVICE if (($mapshow eq 'neighbors') or $vlan)

View File

@@ -70,12 +70,11 @@ $.getJSON('[% uri_for('/ajax/data/device/netmap') %]?[% my_query %]', function(m
if (mapdata['v3']['newnodes']) {
$.post(
'[% uri_for('/ajax/data/device/netmappositions') %]'
,'vlan=[% params.vlan %]&positions=' + JSON.stringify(graph.positions())
,$("#nd_vlan-entry, #nd_devgrp-select, input[name='mapshow']").serialize()
+ '&positions=' + JSON.stringify(graph.positions())
);
}
// else {
// graph.zoomToFit();
// }
// else { graph.zoomToFit() }
graph.inspect().main.nodes.on('mouseup.dragall', function(n) {
graph['nd2']['dragging'] = false;

View File

@@ -123,7 +123,8 @@
// if user enters vlan but does not submit this will save wrong data
$.post(
'[% uri_for('/ajax/data/device/netmappositions') %]'
,'vlan=' + $('#nd_vlan-entry').val() + '&positions=' + JSON.stringify(graph.positions())
,$("#nd_vlan-entry, #nd_devgrp-select, input[name='mapshow']").serialize()
+ '&positions=' + JSON.stringify(graph.positions())
);
});
$('#nd_netmap-zoomtodevice').on('click', function(event) {

View File

@@ -70,7 +70,7 @@
[% IF devgrp_list.size %]
<div class="clearfix">
<select class="nd_side-select" size="[% devgrp_list.size > 5 ? 5 : devgrp_list.size %]"
multiple="on" name="devgrp"
multiple="on" name="devgrp" id="nd_devgrp-select"
rel="tooltip" data-placement="left" data-offset="5" data-title="Host Groups"/>
[% FOREACH opt IN devgrp_list.pairs %]
<option[% ' selected="selected"' IF devgrp_lkp.exists(opt.key) %]