summaryrefslogtreecommitdiff
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
parent8360f1f3953be284f3f4ff51a6717cc8f4c00176 (diff)
generate autocomplete list dynamically from installed IRIS module
-rw-r--r--lib/DBInfoscreen.pm2
-rw-r--r--lib/DBInfoscreen/Controller/Stationboard.pm22
-rwxr-xr-xscripts/asset-rebuild4
-rwxr-xr-xscripts/update-autocomplete29
-rw-r--r--templates/layouts/app.html.ep3
-rw-r--r--templates/layouts/legacy.html.ep3
6 files changed, 30 insertions, 33 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;
diff --git a/scripts/asset-rebuild b/scripts/asset-rebuild
index 302cc66..98e5841 100755
--- a/scripts/asset-rebuild
+++ b/scripts/asset-rebuild
@@ -8,9 +8,7 @@ set -ex
sassc -t compressed sass/dark.scss public/static/css/dark.min.css
sassc -t compressed sass/light.scss public/static/css/light.min.css
-scripts/update-autocomplete
-
-uglifyjs public/static/js/autocomplete.js public/static/js/collapse.js -c -m > public/static/js/dbf.min.js
+uglifyjs public/static/js/collapse.js -c -m > public/static/js/dbf.min.js
uglifyjs public/static/js/geostop.js -c -m > public/static/js/geostop.min.js
uglifyjs public/static/js/geotrain.js -c -m > public/static/js/geotrain.min.js
uglifyjs public/static/js/map-refresh.js -c -m > public/static/js/map-refresh.min.js
diff --git a/scripts/update-autocomplete b/scripts/update-autocomplete
deleted file mode 100755
index 22aab91..0000000
--- a/scripts/update-autocomplete
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env perl
-# Copyright (C) 2020 Birte Kristina Friesel
-#
-# SPDX-License-Identifier: CC0-1.0
-
-use strict;
-use warnings;
-use 5.020;
-
-use JSON;
-use File::Slurp qw(write_file);
-use Travel::Status::DE::IRIS::Stations;
-
-my @station_names = map { $_->[1] } Travel::Status::DE::IRIS::Stations::get_stations();
-
-my $station_json = JSON->new->utf8->encode([@station_names]);
-
-my $autocomplete = <<"EOF";
-\$(function() {
- var stations = $station_json;
- \$('input.station').autocomplete({
- delay: 0,
- minLength: 3,
- source: stations
- });
-});
-EOF
-
-write_file("public/static/js/autocomplete.js", $autocomplete);
diff --git a/templates/layouts/app.html.ep b/templates/layouts/app.html.ep
index 3727340..f5d0577 100644
--- a/templates/layouts/app.html.ep
+++ b/templates/layouts/app.html.ep
@@ -55,6 +55,9 @@
%= javascript '/static/js/jquery-3.4.1.min.js', defer => undef
%= javascript "/static/${av}/js/jquery-ui.min.js", defer => undef
%= javascript "/static/${av}/js/dbf.min.js", defer => undef
+ % if (not stash('hide_opts')) {
+ %= javascript "/dyn/${av}/autocomplete.js", defer => undef
+ % }
% if (stash('with_geostop')) {
%= javascript "/static/${av}/js/geostop.min.js", defer => undef
% }
diff --git a/templates/layouts/legacy.html.ep b/templates/layouts/legacy.html.ep
index 7be30f5..60e8fb9 100644
--- a/templates/layouts/legacy.html.ep
+++ b/templates/layouts/legacy.html.ep
@@ -29,6 +29,9 @@
%= javascript '/static/js/jquery-3.4.1.min.js'
%= javascript "/static/${av}/js/jquery-ui.min.js"
%= javascript "/static/${av}/js/dbf.min.js"
+ % if (not stash('hide_opts')) {
+ %= javascript "/dyn/${av}/autocomplete.js", defer => undef
+ % }
%= javascript "/static/${av}/js/marquee.min.js"
%= javascript begin
$(function () { $('marquee').marquee() });