tabs now must be plugins also
This commit is contained in:
@@ -300,15 +300,6 @@ get '/device' => sub {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
# list of tabs
|
|
||||||
var('tabs' => [
|
|
||||||
{ id => 'details', label => 'Details' },
|
|
||||||
{ id => 'ports', label => 'Ports' },
|
|
||||||
{ id => 'modules', label => 'Modules' },
|
|
||||||
{ id => 'netmap', label => 'Neighbors' },
|
|
||||||
{ id => 'addresses', label => 'Addresses' },
|
|
||||||
]);
|
|
||||||
|
|
||||||
params->{'tab'} ||= 'details';
|
params->{'tab'} ||= 'details';
|
||||||
template 'device', { d => $device };
|
template 'device', { d => $device };
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,7 +3,11 @@ package App::Netdisco::Web::Plugin;
|
|||||||
use Dancer ':syntax';
|
use Dancer ':syntax';
|
||||||
use Dancer::Plugin;
|
use Dancer::Plugin;
|
||||||
|
|
||||||
set('navbar_items' => []);
|
set(
|
||||||
|
'navbar_items' => [],
|
||||||
|
'search_tabs' => [],
|
||||||
|
'device_tabs' => [],
|
||||||
|
);
|
||||||
|
|
||||||
register 'register_navbar_item' => sub {
|
register 'register_navbar_item' => sub {
|
||||||
my ($self, $config) = plugin_args(@_);
|
my ($self, $config) = plugin_args(@_);
|
||||||
@@ -23,5 +27,33 @@ register 'register_navbar_item' => sub {
|
|||||||
push @{ setting('navbar_items') }, $config;
|
push @{ setting('navbar_items') }, $config;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
sub _register_tab {
|
||||||
|
my ($nav, $config) = @_;
|
||||||
|
my $stash = setting("${nav}_tabs");
|
||||||
|
|
||||||
|
die "bad config to register_${nav}_tab\n"
|
||||||
|
unless length $config->{id}
|
||||||
|
and length $config->{label};
|
||||||
|
|
||||||
|
foreach my $item (@{ $stash }) {
|
||||||
|
if ($item->{id} eq $config->{id}) {
|
||||||
|
$item = $config;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
push @{ $stash }, $config;
|
||||||
|
}
|
||||||
|
|
||||||
|
register 'register_search_tab' => sub {
|
||||||
|
my ($self, $config) = plugin_args(@_);
|
||||||
|
_register_tab('search', $config);
|
||||||
|
};
|
||||||
|
|
||||||
|
register 'register_device_tab' => sub {
|
||||||
|
my ($self, $config) = plugin_args(@_);
|
||||||
|
_register_tab('device', $config);
|
||||||
|
};
|
||||||
|
|
||||||
register_plugin;
|
register_plugin;
|
||||||
true;
|
true;
|
||||||
|
|||||||
@@ -237,14 +237,6 @@ get '/search' => sub {
|
|||||||
my $os_ver_list = [ schema('netdisco')->resultset('Device')->get_distinct_col('os_ver') ];
|
my $os_ver_list = [ schema('netdisco')->resultset('Device')->get_distinct_col('os_ver') ];
|
||||||
my $vendor_list = [ schema('netdisco')->resultset('Device')->get_distinct_col('vendor') ];
|
my $vendor_list = [ schema('netdisco')->resultset('Device')->get_distinct_col('vendor') ];
|
||||||
|
|
||||||
# list of tabs
|
|
||||||
var('tabs' => [
|
|
||||||
{ id => 'device', label => 'Device' },
|
|
||||||
{ id => 'node', label => 'Node' },
|
|
||||||
{ id => 'vlan', label => 'VLAN' },
|
|
||||||
{ id => 'port', label => 'Port' },
|
|
||||||
]);
|
|
||||||
|
|
||||||
template 'search', {
|
template 'search', {
|
||||||
model_list => $model_list,
|
model_list => $model_list,
|
||||||
os_ver_list => $os_ver_list,
|
os_ver_list => $os_ver_list,
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<i class="sidebar_pin icon-pushpin sidebar_pin_clicked"
|
<i class="sidebar_pin icon-pushpin sidebar_pin_clicked"
|
||||||
rel="tooltip" data-placement="left" data-offset="5" data-title="Unpin Sidebar"></i>
|
rel="tooltip" data-placement="left" data-offset="5" data-title="Unpin Sidebar"></i>
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
[% FOREACH tab IN vars.tabs %]
|
[% FOREACH tab IN settings.device_tabs %]
|
||||||
<div id="[% tab.id %]_search" class="tab-pane [% 'active' IF params.tab == tab.id %]">
|
<div id="[% tab.id %]_search" class="tab-pane [% 'active' IF params.tab == tab.id %]">
|
||||||
<form id="[% tab.id %]_form" class="nd_sidesearchform form-stacked"
|
<form id="[% tab.id %]_form" class="nd_sidesearchform form-stacked"
|
||||||
method="get" action="[% uri_for('/device') %]">
|
method="get" action="[% uri_for('/device') %]">
|
||||||
@@ -42,13 +42,13 @@
|
|||||||
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<ul id="search_results" class="nav nav-tabs">
|
<ul id="search_results" class="nav nav-tabs">
|
||||||
[% FOREACH tab IN vars.tabs %]
|
[% FOREACH tab IN settings.device_tabs %]
|
||||||
<li[% ' class="active"' IF params.tab == tab.id %]><a id="[% tab.id %]_link" href="#[% tab.id %]_pane">[% tab.label %]</a></li>
|
<li[% ' class="active"' IF params.tab == tab.id %]><a id="[% tab.id %]_link" href="#[% tab.id %]_pane">[% tab.label %]</a></li>
|
||||||
[% END %]
|
[% END %]
|
||||||
<span id="nd_device_name">[% d.dns || d.name %]</span>
|
<span id="nd_device_name">[% d.dns || d.name %]</span>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
[% FOREACH tab IN vars.tabs %]
|
[% FOREACH tab IN settings.device_tabs %]
|
||||||
<div class="tab-pane[% ' active' IF params.tab == tab.id %]" id="[% tab.id %]_pane"></div>
|
<div class="tab-pane[% ' active' IF params.tab == tab.id %]" id="[% tab.id %]_pane"></div>
|
||||||
[% END %]
|
[% END %]
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
// search hook for each tab
|
// search hook for each tab
|
||||||
[% FOREACH tab IN vars.tabs %]
|
[% FOREACH tab IN settings.search_tabs %]
|
||||||
|
$('[% "#${tab.id}_form" %]').submit(function(event){ do_search(event, '[% tab.id %]'); });
|
||||||
|
[% END %]
|
||||||
|
[% FOREACH tab IN settings.device_tabs %]
|
||||||
$('[% "#${tab.id}_form" %]').submit(function(event){ do_search(event, '[% tab.id %]'); });
|
$('[% "#${tab.id}_form" %]').submit(function(event){ do_search(event, '[% tab.id %]'); });
|
||||||
[% END %]
|
[% END %]
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<i class="sidebar_pin icon-pushpin"
|
<i class="sidebar_pin icon-pushpin"
|
||||||
rel="tooltip" data-placement="left" data-offset="5" data-title="Pin Sidebar"></i>
|
rel="tooltip" data-placement="left" data-offset="5" data-title="Pin Sidebar"></i>
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
[% FOREACH tab IN vars.tabs %]
|
[% FOREACH tab IN settings.search_tabs %]
|
||||||
<div id="[% tab.id %]_search" class="tab-pane [% 'active' IF params.tab == tab.id %]">
|
<div id="[% tab.id %]_search" class="tab-pane [% 'active' IF params.tab == tab.id %]">
|
||||||
<form id="[% tab.id %]_form" class="nd_sidesearchform form-stacked" method="get" action="[% uri_for('/search') %]">
|
<form id="[% tab.id %]_form" class="nd_sidesearchform form-stacked" method="get" action="[% uri_for('/search') %]">
|
||||||
<input name="tab" value="[% tab.id %]" type="hidden"/>
|
<input name="tab" value="[% tab.id %]" type="hidden"/>
|
||||||
@@ -29,12 +29,12 @@
|
|||||||
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<ul id="search_results" class="nav nav-tabs">
|
<ul id="search_results" class="nav nav-tabs">
|
||||||
[% FOREACH tab IN vars.tabs %]
|
[% FOREACH tab IN settings.search_tabs %]
|
||||||
<li[% ' class="active"' IF params.tab == tab.id %]><a id="[% tab.id %]_link" href="#[% tab.id %]_pane">[% tab.label %]</a></li>
|
<li[% ' class="active"' IF params.tab == tab.id %]><a id="[% tab.id %]_link" href="#[% tab.id %]_pane">[% tab.label %]</a></li>
|
||||||
[% END %]
|
[% END %]
|
||||||
</ul>
|
</ul>
|
||||||
<div class="tab-content">
|
<div class="tab-content">
|
||||||
[% FOREACH tab IN vars.tabs %]
|
[% FOREACH tab IN settings.search_tabs %]
|
||||||
<div class="tab-pane[% ' active' IF params.tab == tab.id %]" id="[% tab.id %]_pane"></div>
|
<div class="tab-pane[% ' active' IF params.tab == tab.id %]" id="[% tab.id %]_pane"></div>
|
||||||
[% END %]
|
[% END %]
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user