diff --git a/lib/App/Netdisco/Web/Plugin/Inventory.pm b/lib/App/Netdisco/Web/Plugin/Inventory.pm
index c6fcb311..125c6e53 100644
--- a/lib/App/Netdisco/Web/Plugin/Inventory.pm
+++ b/lib/App/Netdisco/Web/Plugin/Inventory.pm
@@ -16,10 +16,19 @@ get '/inventory' => require_login sub {
my $platforms = schema('netdisco')->resultset('Device')->get_platforms();
my $releases = schema('netdisco')->resultset('Device')->get_releases();
+ my %release_map = (
+ map { (join '', map {sprintf '%05s', $_} split m/(\D)/, ($_->{os_ver} || '')) => $_ }
+ $releases->hri->all
+ );
+ my @release_list =
+ map { $release_map{$_} }
+ sort {(($release_map{$a}->{os} || '') cmp ($release_map{$b}->{os} || '')) || ($a cmp $b)}
+ keys %release_map;
+
var(nav => 'inventory');
template 'inventory', {
- platforms => [$platforms->hri->all],
- releases => [$releases->hri->all],
+ platforms => [ $platforms->hri->all ],
+ releases => [ @release_list ],
};
};
diff --git a/lib/App/Netdisco/Web/Search.pm b/lib/App/Netdisco/Web/Search.pm
index b447b031..60028857 100644
--- a/lib/App/Netdisco/Web/Search.pm
+++ b/lib/App/Netdisco/Web/Search.pm
@@ -78,10 +78,16 @@ get '/search' => require_login sub {
}
# used in the device search sidebar to populate select inputs
- my $model_list = [ $s->resultset('Device')->get_distinct_col('model') ];
- my $os_list = [ $s->resultset('Device')->get_distinct_col('os') ];
- my $os_ver_list = [ $s->resultset('Device')->get_distinct_col('os_ver') ];
- my $vendor_list = [ $s->resultset('Device')->get_distinct_col('vendor') ];
+ my $model_list = [ grep { defined } $s->resultset('Device')->get_distinct_col('model') ];
+ my $os_list = [ grep { defined } $s->resultset('Device')->get_distinct_col('os') ];
+ my $vendor_list = [ grep { defined } $s->resultset('Device')->get_distinct_col('vendor') ];
+
+ my %os_vermap = (
+ map { $_ => (join '', map {sprintf '%05s', $_} split m/(\D)/) }
+ grep { defined }
+ $s->resultset('Device')->get_distinct_col('os_ver')
+ );
+ my $os_ver_list = [ sort {$os_vermap{$a} cmp $os_vermap{$b}} keys %os_vermap ];
template 'search', {
search => params->{'tab'},
diff --git a/share/views/ajax/search/device.tt b/share/views/ajax/search/device.tt
index c2069446..2ec1a68e 100644
--- a/share/views/ajax/search/device.tt
+++ b/share/views/ajax/search/device.tt
@@ -41,6 +41,7 @@ $(document).ready(function() {
}
}, {
"data": 'os_ver',
+ "type": 'versionsort',
"render": function(data, type, row, meta) {
return he.encode(data || '');
}
diff --git a/share/views/layouts/main.tt b/share/views/layouts/main.tt
index 39f0351f..cbc87bae 100644
--- a/share/views/layouts/main.tt
+++ b/share/views/layouts/main.tt
@@ -35,6 +35,7 @@
+