Unverified Commit 465c131a authored by Birte Kristina Friesel's avatar Birte Kristina Friesel
Browse files

Backend selection: add coverage maps

parent ad9d8e40
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -318,6 +318,7 @@ sub startup {

	$r->get('/_ajax_mapinfo/:tripid/:lineno')->to('map#ajax_route');
	$r->get('/map/:tripid/:lineno')->to('map#route');
	$r->get('/coverage/:backend/:service')->to('map#coverage');
	$r->get( '/z/:train/*station' => [ format => [ 'html', 'json' ] ] )
	  ->to( 'stationboard#station_train_details', format => undef )
	  ->name('train_at_station');
+21 −1
Original line number Diff line number Diff line
@@ -5,7 +5,7 @@ package DBInfoscreen::Controller::Map;
# SPDX-License-Identifier: AGPL-3.0-or-later

use Mojo::Base 'Mojolicious::Controller';
use Mojo::JSON qw(decode_json);
use Mojo::JSON qw(decode_json encode_json);
use Mojo::Promise;

use DateTime;
@@ -535,4 +535,24 @@ sub ajax_route {
	)->wait;
}

sub coverage {
	my ($self)  = @_;
	my $backend = $self->stash('backend');
	my $service = $self->stash('service');

	my $coverage = {};

	if ( $backend eq 'HAFAS' ) {
		$coverage = $self->hafas->get_coverage($service);
	}

	$self->render(
		'coverage_map',
		title     => "Abdeckung $service",
		hide_opts => 1,
		with_map  => 1,
		coverage  => encode_json($coverage),
	);
}

1;
+39 −3
Original line number Diff line number Diff line
@@ -2166,6 +2166,36 @@ sub stations_by_coordinates {
sub backend_list {
	my ($self) = @_;

	my %place_map = (
		AT       => 'Österreich',
		CH       => 'Schweiz',
		'CH-BE'  => 'Kanton Bern',
		'CH-GE'  => 'Kanton Genf',
		'CH-LU'  => 'Kanton Luzern',
		'CH-ZH'  => 'Kanton Zürich',
		DE       => 'Deutschland',
		'DE-BB'  => 'Brandenburg',
		'DE-BW'  => 'Baden-Württemberg',
		'DE-BE'  => 'Berlin',
		'DE-BY'  => 'Bayern',
		'DE-HB'  => 'Bremen',
		'DE-HE'  => 'Hessen',
		'DE-MV'  => 'Mecklenburg-Vorpommern',
		'DE-NI'  => 'Niedersachsen',
		'DE-NW'  => 'Nordrhein-Westfalen',
		'DE-RP'  => 'Rheinland-Pfalz',
		'DE-SH'  => 'Schleswig-Holstein',
		'DE-ST'  => 'Sachsen-Anhalt',
		'DE-TH'  => 'Thüringen',
		DK       => 'Dänemark',
		'GB-NIR' => 'Nordirland',
		LI       => 'Litauen',
		LU       => 'Luxembourg',
		IE       => 'Irland',
		'US-CA'  => 'California',
		'US-TX'  => 'Texas',
	);

	my @backends = (
		{
			name => 'Deutsche Bahn',
@@ -2179,6 +2209,12 @@ sub backend_list {
			{
				name      => $backend->{name},
				shortname => $backend->{shortname},
				homepage  => $backend->{homepage},
				regions   => [
					map { $place_map{$_} // $_ }
					  @{ $backend->{coverage}{regions} }
				],
				has_area => $backend->{coverage}{area} ? 1 : 0,
				type     => 'HAFAS',
				hafas    => 1,
			}
@@ -2186,7 +2222,7 @@ sub backend_list {
	}

	$self->render(
		'_backend',
		'select_backend',
		backends  => \@backends,
		hide_opts => 1
	);
+12 −0
Original line number Diff line number Diff line
@@ -28,6 +28,18 @@ sub new {

}

sub get_coverage {
	my ( $self, $service ) = @_;

	my $service_definition = Travel::Status::DE::HAFAS::get_service($service);

	if ( not $service_definition ) {
		return {};
	}

	return $service_definition->{coverage}{area} // {};
}

sub get_route_p {
	my ( $self, %opt ) = @_;

+13 −2
Original line number Diff line number Diff line
@@ -2,14 +2,15 @@
	<p>
		Das Backend bestimmt die Datenquelle für Stations- und Zuginformationen.
		Innerhalb Deutschlands ist <strong>Deutsche Bahn</strong> meist eine gute Wahl: IRIS-TTS kennt ausschließlich Schienenverkehr im Bahnnetz, während HAFAS auch Nahverkehr unterstützt.
		Die anderen Backends bieten sich für Fahrten im Ausland oder im zugehörigen Verkehrsverbund an und sind werden teils nicht perfekt unterstützt.
		Die anderen Backends bieten sich für Fahrten im Ausland oder im zugehörigen Verkehrsverbund an.
		Sofern bekannt sind unterhalb der Backend-Namen Karten verlinkt, die die ungefähre Abdeckung aufzeigen.
	</p>
	<p>
		% my $prev_type = 'IRIS-TTS';
		% for my $backend (@{$backends}) {
			<p>
			% if ($backend->{type} ne $prev_type) {
				% $prev_type = $backend->{type};
				</p><p>
				<%= $prev_type %>:<br/>
			% }
			% my $class = 'button';
@@ -24,6 +25,16 @@
				% }
			% }
			<a class="<%= $class %>" href="<%= url_for(q{/})->query({ hafas => $backend->{hafas} ? $backend->{shortname} : q{} }) %>"><%= $backend->{shortname} // 'IRIS-TTS' %> – <%= $backend->{name} %></a>
			% if ($backend->{has_area}) {
				<a href="/coverage/<%= $backend->{type} %>/<%= $backend->{shortname} %>"><%= join(q{, }, @{$backend->{regions}}) || '[Karte]' %></a>
			% }
			% else {
				%= join(q{, }, @{$backend->{regions} // []})
			% }
			% if ($backend->{homepage}) {
				(<a href="<%= $backend->{homepage} %>"><%= $backend->{homepage} =~ s{ ^ http s? :// (?: www[.] )? (.*?) (?: / )? $ }{$1}xr %></a>)
			% }
			</p>
		% }
	</p>
</div>