summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBirte Kristina Friesel <derf@finalrewind.org>2023-08-26 08:32:42 +0200
committerBirte Kristina Friesel <derf@finalrewind.org>2023-08-26 08:32:42 +0200
commit6824e6bcf881c83091f844f55fcfed0c5f4de826 (patch)
tree8c3b6fdfa1b17c91caa5e6adff54ce38e02cdf41 /lib
parent8360f1f3953be284f3f4ff51a6717cc8f4c00176 (diff)
generate autocomplete list dynamically from installed IRIS module
Diffstat (limited to 'lib')
-rw-r--r--lib/DBInfoscreen.pm2
-rw-r--r--lib/DBInfoscreen/Controller/Stationboard.pm22
2 files changed, 23 insertions, 1 deletions
diff --git a/lib/DBInfoscreen.pm b/lib/DBInfoscreen.pm
index fd3ed0b..4618059 100644
--- a/lib/DBInfoscreen.pm
+++ b/lib/DBInfoscreen.pm
@@ -305,6 +305,8 @@ sub startup {
$r->get('/_impressum')->to('static#imprint');
+ $r->get('/dyn/:av/autocomplete.js')->to('stationboard#autocomplete');
+
$r->get('/_wr/:train/:departure')->to('wagenreihung#wagenreihung');
$r->get('/wr/:train')->to('wagenreihung#zugbildung_db');
$r->get('/w/*wagon')->to('wagenreihung#wagen');
diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm
index 8fb57a2..eb2badb 100644
--- a/lib/DBInfoscreen/Controller/Stationboard.pm
+++ b/lib/DBInfoscreen/Controller/Stationboard.pm
@@ -12,7 +12,7 @@ use Encode qw(decode encode);
use File::Slurp qw(read_file write_file);
use List::Util qw(max uniq);
use List::MoreUtils qw();
-use Mojo::JSON qw(decode_json);
+use Mojo::JSON qw(decode_json encode_json);
use Mojo::Promise;
use Mojo::UserAgent;
use Travel::Status::DE::HAFAS;
@@ -1836,4 +1836,24 @@ sub stations_by_coordinates {
}
}
+sub autocomplete {
+ my $self = shift;
+
+ $self->res->headers->cache_control('max-age=31536000, immutable');
+
+ my $output = '$(function(){const stations=';
+ $output
+ .= encode_json(
+ [ map { $_->[1] } Travel::Status::DE::IRIS::Stations::get_stations() ]
+ );
+ $output .= ";\n";
+ $output
+ .= "\$('input.station').autocomplete({delay:0,minLength:3,source:stations});});\n";
+
+ $self->render(
+ format => 'js',
+ data => $output
+ );
+}
+
1;