diff --git a/Netdisco/lib/App/Netdisco/Web/Plugin/Device/Ports.pm b/Netdisco/lib/App/Netdisco/Web/Plugin/Device/Ports.pm
index e60fa9b6..7f52650e 100644
--- a/Netdisco/lib/App/Netdisco/Web/Plugin/Device/Ports.pm
+++ b/Netdisco/lib/App/Netdisco/Web/Plugin/Device/Ports.pm
@@ -130,15 +130,13 @@ get '/ajax/content/device/ports' => require_login sub {
}
# retrieve active/all connected nodes, if asked for
- $rs
- = $rs->search_rs( {},
+ $rs = $rs->search_rs( {},
{ prefetch => 'nodes', bind => [ $device->ip ],
order_by => [
{ -desc => 'nodes.active' },
{ -asc => 'nodes.mac' },
{ -asc => 'nodes.ip' },
- ] })
- if param('c_nodes');
+ ] });
my @results = $rs->hri->all;
return unless scalar @results;
diff --git a/Netdisco/share/views/ajax/device/ports.tt b/Netdisco/share/views/ajax/device/ports.tt
index 2efeee9e..d2f81df9 100644
--- a/Netdisco/share/views/ajax/device/ports.tt
+++ b/Netdisco/share/views/ajax/device/ports.tt
@@ -381,13 +381,8 @@ $(document).ready(function() {
}
}
}, {
- [% IF params.c_nodes %]
"title": 'Connected Devices and Nodes',
"name": 'c_nodes',
- [% ELSE %]
- "title": 'Connected Devices',
- "name": 'c_neighbors',
- [% END %]
"data": "null",
"defaultContent": "",
"render": function ( data, type, row, meta ) {
@@ -418,18 +413,16 @@ $(document).ready(function() {
+ '&prefer=port">' + he.encode(row.remote_port || '') + '';
}
cell_str += '
';
- [% IF params.neigh_id %]
if (row.remote_id || row.remote_type) {
- cell_str += '(';
+ cell_str += ' (';
if (row.remote_id) {
cell_str += ' id: ' + he.encode(row.remote_id);
}
else if (row.remote_type) {
cell_str += ' type: ' + he.encode(row.remote_type);
}
- cell_str += ' )
';
+ cell_str += ' )
';
}
- [% END %]
}
else if (row.remote_ip) {
cell_str += ' ';
@@ -446,38 +439,33 @@ $(document).ready(function() {
cell_str += ' - ' + he.encode(row.remote_port || '');
}
cell_str += '
';
- [% IF params.neigh_id %]
if (row.remote_id || row.remote_type) {
- cell_str += '(';
+ cell_str += ' (';
if (row.remote_id) {
cell_str += ' id: ' + he.encode(row.remote_id);
}
else if (row.remote_type) {
cell_str += ' type: ' + he.encode(row.remote_type);
}
- cell_str += ' )
';
+ cell_str += ' )
';
}
- [% END %]
}
else {
cell_str += ' (possible uplink)';
}
}
- [% IF params.c_nodes %]
+ cell_str += '';
var macfmt = '[% params.mac_format %]';
for (index = 0; index < row.nodes.length; ++index) {
if ((row.remote_ip || row.is_uplink) && index === 0 ) {
cell_str += '
';
}
if (row.nodes[index].active === 0) {
- [% IF params.n_archived %]
+ cell_str += '';
if (index > 0 ) {
cell_str += '
';
}
cell_str += ' ';
- [% ELSE %]
- continue;
- [% END %]
}
else if (index > 0 && row.nodes[index].active !== 0) {
cell_str += '
';
@@ -492,19 +480,21 @@ $(document).ready(function() {
var fmac = formatMacAddress(row.nodes[index].mac, macfmt);
cell_str += encodeURIComponent(fmac) + '">'
+ he.encode(fmac) + '';
- [% IF params.n_vendor %]
+
+ // n_vendor
if (row.nodes[index].abbrev) {
cell_str += ' ('
+ ''
+ he.encode(row.nodes[index].abbrev || '') + ')';
}
- [% END %]
+
if (row.nodes[index].vlans.length > 0) {
var vl = row.nodes[index].vlans ? row.nodes[index].vlans.join(", ") : "";
cell_str += ' (on vlan ' + vl + ')';
}
- [% IF params.n_ssid %]
+
+ // n_ssid
if (row.nodes[index].ssids && row.nodes[index].ssids.length > 0) {
var arr = row.nodes[index].ssids;
arr = arr.sort();
@@ -513,23 +503,20 @@ $(document).ready(function() {
});
cell_str += ' (SSID: ' + arr.join(" ") + ')';
}
- [% END %]
- [% IF params.n_age %]
- cell_str += ' (';
- var now = moment();
- var t_last = moment(row.nodes[index].time_last);
- cell_str += t_last.from(now) + ')';
- [% END %]
- [% IF params.n_ip %]
+
+ // n_age
+ cell_str += ' (';
+ var now = moment();
+ var t_last = moment(row.nodes[index].time_last);
+ cell_str += t_last.from(now) + ')';
+
+ // n_ip
if (row.nodes[index].ip && row.nodes[index].ip.length > 0) {
cell_str += '';
for (idx = 0; idx < row.nodes[index].ip.length; ++idx) {
if (row.nodes[index].ip_active[idx] === 0) {
- [% IF params.n_archived %]
+ cell_str += '';
cell_str += '
';
- [% ELSE %]
- continue;
- [% END %]
}
else {
cell_str += '
';
@@ -543,11 +530,14 @@ $(document).ready(function() {
else {
cell_str += he.encode(row.nodes[index].ip[idx]) + '';
}
+ if (row.nodes[index].ip_active[idx] === 0) {
+ cell_str += '';
+ }
}
cell_str += '';
}
- [% END %]
- [% IF params.n_netbios %]
+
+ // n_netbios
if (row.nodes[index].nbname) {
cell_str += ''
+ '
\\\\'
+ he.encode(row.nodes[index].nb_ip) + '';
}
- [% END %]
+
+ if (row.nodes[index].active === 0) {
+ cell_str += '';
+ }
}
- [% END %]
+ cell_str += '';
return cell_str;
}
}, {
diff --git a/Netdisco/share/views/js/device.js b/Netdisco/share/views/js/device.js
index 5bfdfc7e..fca9ec65 100644
--- a/Netdisco/share/views/js/device.js
+++ b/Netdisco/share/views/js/device.js
@@ -95,6 +95,12 @@
}
});
+ // dynamic show/hide data in device ports connected nodes/devices column
+ $('#ports_form').on('change', "input[type=checkbox].nd_dynamic-dp", function(event) {
+ var target = $(this).attr('id');
+ $('span.' + target).toggle();
+ });
+
// activity for admin tasks in device details
$('#details_pane').on('click', '.nd_adminbutton', function(event) {
// stop form from submitting normally
diff --git a/Netdisco/share/views/sidebar/device/ports.tt b/Netdisco/share/views/sidebar/device/ports.tt
index 13bfa741..add65c38 100644
--- a/Netdisco/share/views/sidebar/device/ports.tt
+++ b/Netdisco/share/views/sidebar/device/ports.tt
@@ -57,6 +57,22 @@