more appropriate usage of vars and template tokens in before and before_template

This commit is contained in:
Oliver Gorwits
2013-02-09 15:27:25 +00:00
parent 6671032952
commit 367bd6f858
11 changed files with 162 additions and 151 deletions

View File

@@ -36,25 +36,8 @@ hook 'before' => sub {
{ name => 'n_archived', label => 'Archived Data', default => '' }, { name => 'n_archived', label => 'Archived Data', default => '' },
]); ]);
# new searches will use these defaults in their sidebars return unless (request->path eq uri_for('/device')->path
var('device_ports' => uri_for('/device', { or index(request->path, uri_for('/ajax/content/device')->path) == 0);
tab => 'ports',
age_num => 3,
age_unit => 'months',
}));
foreach my $col (@{ var('port_columns') }) {
next unless $col->{default} eq 'on';
var('device_ports')->query_param($col->{name}, 'checked');
}
foreach my $col (@{ var('connected_properties') }) {
next unless $col->{default} eq 'on';
var('device_ports')->query_param($col->{name}, 'checked');
}
if (request->path eq uri_for('/device')->path
or index(request->path, uri_for('/ajax/content/device')->path) == 0) {
foreach my $col (@{ var('port_columns') }) { foreach my $col (@{ var('port_columns') }) {
next unless $col->{default} eq 'on'; next unless $col->{default} eq 'on';
@@ -72,13 +55,36 @@ hook 'before' => sub {
params->{'age_num'} = 3; params->{'age_num'} = 3;
params->{'age_unit'} = 'months'; params->{'age_unit'} = 'months';
} }
};
hook 'before_template' => sub {
my $tokens = shift;
# new searches will use these defaults in their sidebars
$tokens->{device_ports} = uri_for('/device', {
tab => 'ports',
age_num => 3,
age_unit => 'months',
});
foreach my $col (@{ var('port_columns') }) {
next unless $col->{default} eq 'on';
$tokens->{device_ports}->query_param($col->{name}, 'checked');
}
foreach my $col (@{ var('connected_properties') }) {
next unless $col->{default} eq 'on';
$tokens->{device_ports}->query_param($col->{name}, 'checked');
}
return unless (request->path eq uri_for('/device')->path
or index(request->path, uri_for('/ajax/content/device')->path) == 0);
# for templates to link to same page with modified query but same options # for templates to link to same page with modified query but same options
my $self_uri = uri_for(request->path, scalar params); my $self_uri = uri_for(request->path, scalar params);
$self_uri->query_param_delete('q'); $self_uri->query_param_delete('q');
$self_uri->query_param_delete('f'); $self_uri->query_param_delete('f');
var('self_options' => $self_uri->query_form_hash); $tokens->{self_options} = $self_uri->query_form_hash;
}
}; };
ajax '/ajax/content/device/:thing' => sub { ajax '/ajax/content/device/:thing' => sub {

View File

@@ -13,27 +13,14 @@ hook 'before' => sub {
var('node_options' => [ var('node_options' => [
{ name => 'stamps', label => 'Time Stamps', default => 'on' }, { name => 'stamps', label => 'Time Stamps', default => 'on' },
]); ]);
# view settings for device options # view settings for device options
var('device_options' => [ var('device_options' => [
{ name => 'matchall', label => 'Match All Options', default => 'on' }, { name => 'matchall', label => 'Match All Options', default => 'on' },
]); ]);
# new searches will use these defaults in their sidebars return unless (request->path eq uri_for('/search')->path
var('search_node' => uri_for('/search', {tab => 'node'})); or index(request->path, uri_for('/ajax/content/search')->path) == 0);
var('search_device' => uri_for('/search', {tab => 'device'}));
foreach my $col (@{ var('node_options') }) {
next unless $col->{default} eq 'on';
var('search_node')->query_param($col->{name}, 'checked');
}
foreach my $col (@{ var('device_options') }) {
next unless $col->{default} eq 'on';
var('search_device')->query_param($col->{name}, 'checked');
}
if (request->path eq uri_for('/search')->path
or index(request->path, uri_for('/ajax/content/search')->path) == 0) {
foreach my $col (@{ var('node_options') }) { foreach my $col (@{ var('node_options') }) {
next unless $col->{default} eq 'on'; next unless $col->{default} eq 'on';
@@ -46,13 +33,33 @@ hook 'before' => sub {
params->{$col->{name}} = 'checked' params->{$col->{name}} = 'checked'
if not param('tab') or param('tab') ne 'device'; if not param('tab') or param('tab') ne 'device';
} }
};
hook 'before_template' => sub {
my $tokens = shift;
# new searches will use these defaults in their sidebars
$tokens->{search_node} = uri_for('/search', {tab => 'node'});
$tokens->{search_device} = uri_for('/search', {tab => 'device'});
foreach my $col (@{ var('node_options') }) {
next unless $col->{default} eq 'on';
$tokens->{search_node}->query_param($col->{name}, 'checked');
}
foreach my $col (@{ var('device_options') }) {
next unless $col->{default} eq 'on';
$tokens->{search_device}->query_param($col->{name}, 'checked');
}
return unless (request->path eq uri_for('/search')->path
or index(request->path, uri_for('/ajax/content/search')->path) == 0);
# used in the device search sidebar template to set selected items # used in the device search sidebar template to set selected items
foreach my $opt (qw/model vendor os_ver/) { foreach my $opt (qw/model vendor os_ver/) {
my $p = (ref [] eq ref param($opt) ? param($opt) my $p = (ref [] eq ref param($opt) ? param($opt)
: (param($opt) ? [param($opt)] : [])); : (param($opt) ? [param($opt)] : []));
var("${opt}_lkp" => { map { $_ => 1 } @$p }); $tokens->{"${opt}_lkp"} = { map { $_ => 1 } @$p };
}
} }
}; };
@@ -226,15 +233,9 @@ get '/search' => sub {
} }
# used in the device search sidebar to populate select inputs # used in the device search sidebar to populate select inputs
var('model_list' => [ my $model_list = [ schema('netdisco')->resultset('Device')->get_distinct_col('model') ];
schema('netdisco')->resultset('Device')->get_distinct_col('model') my $os_ver_list = [ schema('netdisco')->resultset('Device')->get_distinct_col('os_ver') ];
]); my $vendor_list = [ schema('netdisco')->resultset('Device')->get_distinct_col('vendor') ];
var('os_ver_list' => [
schema('netdisco')->resultset('Device')->get_distinct_col('os_ver')
]);
var('vendor_list' => [
schema('netdisco')->resultset('Device')->get_distinct_col('vendor')
]);
# list of tabs # list of tabs
var('tabs' => [ var('tabs' => [
@@ -244,7 +245,11 @@ get '/search' => sub {
{ id => 'port', label => 'Port' }, { id => 'port', label => 'Port' },
]); ]);
template 'search'; template 'search', {
model_list => $model_list,
os_ver_list => $os_ver_list,
vendor_list => $vendor_list,
};
}; };
true; true;

View File

@@ -14,10 +14,10 @@
<td>[% row.alias %]</a> <td>[% row.alias %]</a>
<td>[% row.dns.remove(settings.domain_suffix) %]</a> <td>[% row.dns.remove(settings.domain_suffix) %]</a>
<td class="center_cell"><a class="nd_linkcell" <td class="center_cell"><a class="nd_linkcell"
href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.port %]">[% row.port %]</a></td> href="[% device_ports %]&q=[% row.ip %]&f=[% row.port %]">[% row.port %]</a></td>
<td>[% row.device_port.name %]</td> <td>[% row.device_port.name %]</td>
<td><a class="nd_linkcell" <td><a class="nd_linkcell"
href="[% vars.search_device %]&ip=[% row.subnet %]">[% row.subnet %]</a></td> href="[% search_device %]&ip=[% row.subnet %]">[% row.subnet %]</a></td>
</tr> </tr>
[% END %] [% END %]
</tbody> </tbody>

View File

@@ -18,7 +18,7 @@
[% ELSE %] [% ELSE %]
<td> <td>
<a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices" <a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices"
href="[% vars.search_device %]&location=[% d.location | uri %]">[% d.location %]</a> href="[% search_device %]&location=[% d.location | uri %]">[% d.location %]</a>
</td> </td>
[% END %] [% END %]
</tr> </tr>
@@ -41,10 +41,10 @@
<td>Vendor / Model</td> <td>Vendor / Model</td>
<td> <td>
<a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices" <a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices"
href="[% vars.search_device %]&vendor=[% d.vendor | uri %]">[% d.vendor %]</a> href="[% search_device %]&vendor=[% d.vendor | uri %]">[% d.vendor %]</a>
/ /
<a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices" <a rel="tooltip" data-placement="top" data-offset="5" data-title="Find Similar Devices"
href="[% vars.search_device %]&model=[% d.model | uri %]">[% d.model %]</a> href="[% search_device %]&model=[% d.model | uri %]">[% d.model %]</a>
</td> </td>
</tr> </tr>
<tr> <tr>
@@ -52,7 +52,7 @@
<td>[% d.os %] / <td>[% d.os %] /
<a rel="tooltip" data-placement="top" data-offset="5" <a rel="tooltip" data-placement="top" data-offset="5"
data-title="Find Similar Devices" data-title="Find Similar Devices"
href="[% vars.search_device %]&os_ver=[% d.os_ver | uri %]">[% d.os_ver %]</a> href="[% search_device %]&os_ver=[% d.os_ver | uri %]">[% d.os_ver %]</a>
</td> </td>
</tr> </tr>
<tr> <tr>

View File

@@ -44,7 +44,7 @@
<td nowrap> <td nowrap>
[% END %] [% END %]
<a class="nd_linkcell nd_this_port_only" href="[% uri_for('/device', <a class="nd_linkcell nd_this_port_only" href="[% uri_for('/device',
vars.self_options) %]&q=[% params.q | uri %]&f=[% row.port | uri %]"> self_options) %]&q=[% params.q | uri %]&f=[% row.port | uri %]">
[% row.port | html_entity %] [% row.port | html_entity %]
</a></td> </a></td>
[% END %] [% END %]
@@ -182,12 +182,12 @@
[% IF params.c_neighbors AND row.remote_ip %] [% IF params.c_neighbors AND row.remote_ip %]
[% IF row.neighbor %] [% IF row.neighbor %]
<a href="[% uri_for('/device', <a href="[% uri_for('/device',
vars.self_options) %]&q=[% row.neighbor.ip | uri %]&f=[% row.remote_port | uri %]"> self_options) %]&q=[% row.neighbor.ip | uri %]&f=[% row.remote_port | uri %]">
[% row.neighbor.dns.remove(settings.domain_suffix) || row.neighbor.ip %] [% row.neighbor.dns.remove(settings.domain_suffix) || row.neighbor.ip %]
([% row.remote_port | html_entity %])</a> ([% row.remote_port | html_entity %])</a>
[% ELSE %] [% ELSE %]
<span class="label label-important">N</span> <span class="label label-important">N</span>
<a href="[% vars.search_node %]&q=[% row.remote_ip | uri %]"> <a href="[% search_node %]&q=[% row.remote_ip | uri %]">
[% row.remote_ip %] (port: [% row.remote_port %] [% row.remote_ip %] (port: [% row.remote_port %]
id: [% (row.remote_type _ ' / ') IF row.remote_type %][% row.remote_id %])</a> id: [% (row.remote_type _ ' / ') IF row.remote_type %][% row.remote_id %])</a>
[% END %] [% END %]
@@ -196,16 +196,16 @@
[% FOREACH node IN row.$nodes %] [% FOREACH node IN row.$nodes %]
[% '<br/>' IF row.remote_ip OR NOT loop.first %] [% '<br/>' IF row.remote_ip OR NOT loop.first %]
[% '<span class="label label-warning">A</span> &nbsp;' IF NOT node.active %] [% '<span class="label label-warning">A</span> &nbsp;' IF NOT node.active %]
<a href="[% vars.search_node %]&q=[% node.mac | uri %]">[% node.mac %]</a> <a href="[% search_node %]&q=[% node.mac | uri %]">[% node.mac %]</a>
[% ' (' _ node.time_last_age _ ')' IF params.n_age %] [% ' (' _ node.time_last_age _ ')' IF params.n_age %]
[% IF params.n_ip %] [% IF params.n_ip %]
[% FOREACH ip IN node.ips %] [% FOREACH ip IN node.ips %]
<br/>&nbsp; [% '<span class="label label-warning">A</span> &nbsp;' IF NOT ip.active %] <br/>&nbsp; [% '<span class="label label-warning">A</span> &nbsp;' IF NOT ip.active %]
[% SET dns = ip.dns %] [% SET dns = ip.dns %]
[% IF dns %] [% IF dns %]
<a href="[% vars.search_node %]&q=[% ip.ip | uri %]">[% dns %] ([% ip.ip %])</a> <a href="[% search_node %]&q=[% ip.ip | uri %]">[% dns %] ([% ip.ip %])</a>
[% ELSE %] [% ELSE %]
<a href="[% vars.search_node %]&q=[% ip.ip | uri %]">[% ip.ip %]</a> <a href="[% search_node %]&q=[% ip.ip | uri %]">[% ip.ip %]</a>
[% END %] [% END %]
[% END %] [% END %]
[% END %] [% END %]

View File

@@ -17,12 +17,12 @@
[% WHILE (row = macs.next) %] [% WHILE (row = macs.next) %]
<tr> <tr>
<td><a class="nd_linkcell" <td><a class="nd_linkcell"
href="[% vars.search_node %]&q=[% row.mac | uri %]">[% row.mac %]</a></td> href="[% search_node %]&q=[% row.mac | uri %]">[% row.mac %]</a></td>
[% IF params.vendor %] [% IF params.vendor %]
<td>[% row.oui.company %]</td> <td>[% row.oui.company %]</td>
[% END %] [% END %]
<td>IP &rarr; MAC</td> <td>IP &rarr; MAC</td>
<td><a href="[% vars.search_node %]&q=[% row.ip | uri %]">[% row.ip %]</a> <td><a href="[% search_node %]&q=[% row.ip | uri %]">[% row.ip %]</a>
[% ' (' _ row.dns.remove(settings.domain_suffix) _ ')' IF row.dns %] [% ' (' _ row.dns.remove(settings.domain_suffix) _ ')' IF row.dns %]
[% ' <span class="label label-warning">A</span>' IF NOT row.active %] [% ' <span class="label label-warning">A</span>' IF NOT row.active %]
</td> </td>
@@ -38,7 +38,7 @@
<td>&nbsp;</td> <td>&nbsp;</td>
[% END %] [% END %]
<td>Switch Port</td> <td>Switch Port</td>
<td><a href="[% vars.device_ports %]&q=[% node.switch | url %]&f=[% node.port | url %]&c_nodes=on&c_neighbor=on">[% node.switch %] [ [% node.port %] ]</a> <td><a href="[% device_ports %]&q=[% node.switch | url %]&f=[% node.port | url %]&c_nodes=on&c_neighbor=on">[% node.switch %] [ [% node.port %] ]</a>
[% ' (' _ node.device.dns.remove(settings.domain_suffix) _ ')' IF node.device.dns %] [% ' (' _ node.device.dns.remove(settings.domain_suffix) _ ')' IF node.device.dns %]
[% ' <span class="label label-warning">A</span>' IF NOT node.active %] [% ' <span class="label label-warning">A</span>' IF NOT node.active %]
</td> </td>
@@ -55,7 +55,7 @@
<td>&nbsp;</td> <td>&nbsp;</td>
[% END %] [% END %]
<td>MAC &rarr; IP</td> <td>MAC &rarr; IP</td>
<td><a href="[% vars.search_node %]&q=[% nodeip.ip | uri %]">[% nodeip.ip %]</a> <td><a href="[% search_node %]&q=[% nodeip.ip | uri %]">[% nodeip.ip %]</a>
[% ' (' _ nodeip.dns.remove(settings.domain_suffix) _ ')' IF nodeip.dns %] [% ' (' _ nodeip.dns.remove(settings.domain_suffix) _ ')' IF nodeip.dns %]
[% ' <span class="label label-warning">A</span>' IF NOT nodeip.active %] [% ' <span class="label label-warning">A</span>' IF NOT nodeip.active %]
</td> </td>

View File

@@ -20,7 +20,7 @@
<td> <td>
[% IF first_row %] [% IF first_row %]
<a class="nd_linkcell" <a class="nd_linkcell"
href="[% vars.search_node %]&q=[% row.mac | uri %]">[% row.mac %]</a> href="[% search_node %]&q=[% row.mac | uri %]">[% row.mac %]</a>
[% ELSE %] [% ELSE %]
&nbsp; &nbsp;
[% END %] [% END %]
@@ -35,7 +35,7 @@
</td> </td>
[% END %] [% END %]
<td>MAC &rarr; IP</td> <td>MAC &rarr; IP</td>
<td><a href="[% vars.search_node %]&q=[% row.ip | uri %]">[% row.ip %]</a> <td><a href="[% search_node %]&q=[% row.ip | uri %]">[% row.ip %]</a>
[% ' (' _ row.dns.remove(settings.domain_suffix) _ ')' IF row.dns %] [% ' (' _ row.dns.remove(settings.domain_suffix) _ ')' IF row.dns %]
[% ' <span class="label label-warning">A</span>' IF NOT row.active %] [% ' <span class="label label-warning">A</span>' IF NOT row.active %]
</td> </td>
@@ -51,7 +51,7 @@
<td> <td>
[% IF first_row %] [% IF first_row %]
<a class="nd_linkcell" <a class="nd_linkcell"
href="[% vars.search_node %]&q=[% node.mac | uri %]">[% node.mac %]</a> href="[% search_node %]&q=[% node.mac | uri %]">[% node.mac %]</a>
[% ELSE %] [% ELSE %]
&nbsp; &nbsp;
[% END %] [% END %]
@@ -66,7 +66,7 @@
</td> </td>
[% END %] [% END %]
<td>Switch Port</td> <td>Switch Port</td>
<td><a href="[% vars.device_ports %]&q=[% node.switch | url %]&f=[% node.port | url %]&c_nodes=on&c_neighbor=on">[% node.switch %] [ [% node.port %] ]</a> <td><a href="[% device_ports %]&q=[% node.switch | url %]&f=[% node.port | url %]&c_nodes=on&c_neighbor=on">[% node.switch %] [ [% node.port %] ]</a>
[% ' (' _ node.device.dns.remove(settings.domain_suffix) _ ')' IF node.device.dns %] [% ' (' _ node.device.dns.remove(settings.domain_suffix) _ ')' IF node.device.dns %]
[% ' <span class="label label-warning">A</span>' IF NOT node.active %] [% ' <span class="label label-warning">A</span>' IF NOT node.active %]
</td> </td>
@@ -82,7 +82,7 @@
<td> <td>
[% IF first_row %] [% IF first_row %]
<a class="nd_linkcell" <a class="nd_linkcell"
href="[% vars.search_node %]&q=[% port.mac | uri %]">[% port.mac %]</a> href="[% search_node %]&q=[% port.mac | uri %]">[% port.mac %]</a>
[% ELSE %] [% ELSE %]
&nbsp; &nbsp;
[% END %] [% END %]
@@ -97,7 +97,7 @@
</td> </td>
[% END %] [% END %]
<td>Switch Port</td> <td>Switch Port</td>
<td><a href="[% vars.device_ports %]&q=[% port.ip | url %]&f=[% port.port | url %]&c_nodes=on&c_neighbor=on">[% port.ip %] [ [% port.port %] ]</a> <td><a href="[% device_ports %]&q=[% port.ip | url %]&f=[% port.port | url %]&c_nodes=on&c_neighbor=on">[% port.ip %] [ [% port.port %] ]</a>
[% ' (' _ port.device.dns.remove(settings.domain_suffix) _ ')' IF port.device.dns %] [% ' (' _ port.device.dns.remove(settings.domain_suffix) _ ')' IF port.device.dns %]
</td> </td>
[% IF params.stamps %] [% IF params.stamps %]

View File

@@ -11,7 +11,7 @@
[% WHILE (row = results.next) %] [% WHILE (row = results.next) %]
<tr> <tr>
<td>[% row.name %]</td> <td>[% row.name %]</td>
<td><a href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.port %]">[% row.ip %] [ [% row.port %] ]</a> <td><a href="[% device_ports %]&q=[% row.ip %]&f=[% row.port %]">[% row.ip %] [ [% row.port %] ]</a>
[% ' (' _ row.device.dns.remove(settings.domain_suffix) _ ')' IF row.device.dns %] [% ' (' _ row.device.dns.remove(settings.domain_suffix) _ ')' IF row.device.dns %]
</td> </td>
<td>[% row.descr %]</td> <td>[% row.descr %]</td>

View File

@@ -13,17 +13,17 @@
[% WHILE (row = results.next) %] [% WHILE (row = results.next) %]
<tr> <tr>
<td><a class="nd_linkcell nd_stealthlink" <td><a class="nd_linkcell nd_stealthlink"
href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.vlan.vlan %]</a></td> href="[% device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.vlan.vlan %]</a></td>
<td><a class="nd_linkcell" <td><a class="nd_linkcell"
href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.dns.remove(settings.domain_suffix) || row.ip %]</a></td> href="[% device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.dns.remove(settings.domain_suffix) || row.ip %]</a></td>
<td><a class="nd_linkcell nd_stealthlink" <td><a class="nd_linkcell nd_stealthlink"
href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.vlan.description %]</a></td> href="[% device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.vlan.description %]</a></td>
<td><a class="nd_linkcell nd_stealthlink" <td><a class="nd_linkcell nd_stealthlink"
href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.model %]</a></td> href="[% device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.model %]</a></td>
<td><a class="nd_linkcell nd_stealthlink" <td><a class="nd_linkcell nd_stealthlink"
href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.os %]</a></td> href="[% device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.os %]</a></td>
<td><a class="nd_linkcell nd_stealthlink" <td><a class="nd_linkcell nd_stealthlink"
href="[% vars.device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.vendor %]</a></td> href="[% device_ports %]&q=[% row.ip %]&f=[% row.vlan.vlan %]">[% row.vendor %]</a></td>
</tr> </tr>
[% END %] [% END %]
</tbody> </tbody>

View File

@@ -17,12 +17,12 @@
<tr> <tr>
<th> <th>
<a class="nd_linkcell" <a class="nd_linkcell"
href="[% vars.search_device %]&vendor=[% platform.vendor %]"> href="[% search_device %]&vendor=[% platform.vendor %]">
[% platform.vendor %]</a> [% platform.vendor %]</a>
</th> </th>
<th> <th>
<a class="nd_linkcell" <a class="nd_linkcell"
href="[% vars.search_device %]&model=[% platform.model %]"> href="[% search_device %]&model=[% platform.model %]">
[% platform.model %]</a> [% platform.model %]</a>
</th> </th>
<th>[% platform.get_column('count') %]</th> <th>[% platform.get_column('count') %]</th>
@@ -48,7 +48,7 @@
<th>[% release.os %]</th> <th>[% release.os %]</th>
<th> <th>
<a class="nd_linkcell" <a class="nd_linkcell"
href="[% vars.search_device %]&os_ver=[% release.os_ver %]"> href="[% search_device %]&os_ver=[% release.os_ver %]">
[% release.os_ver %]</a> [% release.os_ver %]</a>
</th> </th>
<th>[% release.get_column('count') %]</th> <th>[% release.get_column('count') %]</th>

View File

@@ -42,29 +42,29 @@
rel="tooltip" data-placement="left" data-offset="5" data-title="Description"/> rel="tooltip" data-placement="left" data-offset="5" data-title="Description"/>
</div> </div>
<div class="clearfix"> <div class="clearfix">
<select class="nd_side_select" size="[% vars.model_list.size > 5 ? 5 : vars.model_list.size %]" <select class="nd_side_select" size="[% model_list.size > 5 ? 5 : model_list.size %]"
multiple="on" name="model" multiple="on" name="model"
rel="tooltip" data-placement="left" data-offset="5" data-title="Model"/> rel="tooltip" data-placement="left" data-offset="5" data-title="Model"/>
[% FOREACH opt IN vars.model_list %] [% FOREACH opt IN model_list %]
<option[% ' selected="selected"' IF vars.model_lkp.exists(opt) %]>[% opt %]</option> <option[% ' selected="selected"' IF model_lkp.exists(opt) %]>[% opt %]</option>
[% END %] [% END %]
</select> </select>
</div> </div>
<div class="clearfix"> <div class="clearfix">
<select class="nd_side_select" size="[% vars.os_ver_list.size > 5 ? 5 : vars.os_ver_list.size %]" <select class="nd_side_select" size="[% os_ver_list.size > 5 ? 5 : os_ver_list.size %]"
multiple="on" name="os_ver" multiple="on" name="os_ver"
rel="tooltip" data-placement="left" data-offset="5" data-title="OS Release"/> rel="tooltip" data-placement="left" data-offset="5" data-title="OS Release"/>
[% FOREACH opt IN vars.os_ver_list %] [% FOREACH opt IN os_ver_list %]
<option[% ' selected="selected"' IF vars.os_ver_lkp.exists(opt) %]>[% opt %]</option> <option[% ' selected="selected"' IF os_ver_lkp.exists(opt) %]>[% opt %]</option>
[% END %] [% END %]
</select> </select>
</div> </div>
<div class="clearfix"> <div class="clearfix">
<select class="nd_side_select" size="[% vars.vendor_list.size > 5 ? 5 : vars.vendor_list.size %]" <select class="nd_side_select" size="[% vendor_list.size > 5 ? 5 : vendor_list.size %]"
multiple="on" name="vendor" multiple="on" name="vendor"
rel="tooltip" data-placement="left" data-offset="5" data-title="Vendor"/> rel="tooltip" data-placement="left" data-offset="5" data-title="Vendor"/>
[% FOREACH opt IN vars.vendor_list %] [% FOREACH opt IN vendor_list %]
<option[% ' selected="selected"' IF vars.vendor_lkp.exists(opt) %]>[% opt %]</option> <option[% ' selected="selected"' IF vendor_lkp.exists(opt) %]>[% opt %]</option>
[% END %] [% END %]
</select> </select>
</div> </div>