summaryrefslogtreecommitdiff
path: root/lib/Travelynx
diff options
context:
space:
mode:
authorBirte Kristina Friesel <derf@finalrewind.org>2023-08-26 09:17:28 +0200
committerBirte Kristina Friesel <derf@finalrewind.org>2023-08-26 09:17:28 +0200
commitf4d71b4d9fb4191c07a9c200d32626175568b4fa (patch)
tree1903cec1805df51d9b2d9d08e00e7f0a708e04be /lib/Travelynx
parent559a1cedd7814d101743f718f1db2760338ab51f (diff)
obtain autocompletion from database2.1.1
Diffstat (limited to 'lib/Travelynx')
-rwxr-xr-xlib/Travelynx/Controller/Api.pm18
-rw-r--r--lib/Travelynx/Model/Stations.pm13
2 files changed, 31 insertions, 0 deletions
diff --git a/lib/Travelynx/Controller/Api.pm b/lib/Travelynx/Controller/Api.pm
index 7f72a53..687243d 100755
--- a/lib/Travelynx/Controller/Api.pm
+++ b/lib/Travelynx/Controller/Api.pm
@@ -7,6 +7,7 @@ use Mojo::Base 'Mojolicious::Controller';
use DateTime;
use List::Util;
+use Mojo::JSON qw(encode_json);
use UUID::Tiny qw(:std);
# Internal Helpers
@@ -648,4 +649,21 @@ sub set_token {
$self->redirect_to('account');
}
+sub autocomplete {
+ my ($self) = @_;
+
+ $self->res->headers->cache_control('max-age=86400, immutable');
+
+ my $output
+ = "document.addEventListener('DOMContentLoaded',function(){M.Autocomplete.init(document.querySelectorAll('.autocomplete'),{\n";
+ $output .= 'minLength:3,limit:50,data:';
+ $output .= encode_json( $self->stations->get_for_autocomplete );
+ $output .= "\n});});\n";
+
+ $self->render(
+ format => 'js',
+ data => $output
+ );
+}
+
1;
diff --git a/lib/Travelynx/Model/Stations.pm b/lib/Travelynx/Model/Stations.pm
index 75b4174..ecd8adb 100644
--- a/lib/Travelynx/Model/Stations.pm
+++ b/lib/Travelynx/Model/Stations.pm
@@ -50,6 +50,19 @@ sub add_or_update {
);
}
+sub get_for_autocomplete {
+ my ($self) = @_;
+
+ my $res = $self->{pg}->db->select( 'stations', ['name'] );
+ my %ret;
+
+ while ( my $row = $res->hash ) {
+ $ret{ $row->{name} } = undef;
+ }
+
+ return \%ret;
+}
+
# Fast
sub get_by_eva {
my ( $self, $eva, %opt ) = @_;