diff options
| -rw-r--r-- | index.pl | 47 | ||||
| -rw-r--r-- | templates/app.html.ep (renamed from templates/clean.html.ep) | 0 | ||||
| -rw-r--r-- | templates/infoscreen.html.ep | 280 | ||||
| -rw-r--r-- | templates/layouts/default.html.ep | 4 | 
4 files changed, 310 insertions, 21 deletions
| @@ -19,7 +19,7 @@ our $VERSION = qx{git describe --dirty} || '0.05';  my %default = (  	backend => 'iris', -	mode    => 'clean', +	mode    => 'app',  	admode  => 'deparr',  ); @@ -37,7 +37,7 @@ sub get_results_for {  	my $data;  	my $cache_hafas = Cache::File->new( -		cache_root => $ENV{DBFAKEDISPLAY_HAFAS_CACHE} // '/tmp/dbf-hafas', +		cache_root      => $ENV{DBFAKEDISPLAY_HAFAS_CACHE} // '/tmp/dbf-hafas',  		default_expires => '180 seconds',  		lock_level      => Cache::File::LOCK_LOCAL(),  	); @@ -167,7 +167,7 @@ helper 'handle_no_results' => sub {  	}  	$self->render(  		'landingpage', -		error => ( $errstr // "Got no results for '$station'" ), +		error     => ( $errstr // "Got no results for '$station'" ),  		hide_opts => 0  	);  	return; @@ -314,20 +314,20 @@ sub handle_request {  	my $via     = $self->param('via');  	my @platforms = split( /,/, $self->param('platforms') // q{} ); -	my @lines     = split( /,/, $self->param('lines')     // q{} ); -	my $template       = $self->param('mode')          // 'clean'; -	my $hide_low_delay = $self->param('hidelowdelay')  // 0; -	my $hide_opts      = $self->param('hide_opts')     // 0; +	my @lines     = split( /,/, $self->param('lines') // q{} ); +	my $template  = $self->param('mode') // 'app'; +	my $hide_low_delay = $self->param('hidelowdelay') // 0; +	my $hide_opts      = $self->param('hide_opts') // 0;  	my $show_realtime  = $self->param('show_realtime') // 0; -	my $show_details   = $self->param('detailed')      // 0; -	my $backend        = $self->param('backend')       // 'iris'; -	my $admode         = $self->param('admode')        // 'deparr'; -	my $dark_layout    = $self->param('dark')          // 0; -	my $apiver         = $self->param('version')       // 0; +	my $show_details   = $self->param('detailed') // 0; +	my $backend        = $self->param('backend') // 'iris'; +	my $admode         = $self->param('admode') // 'deparr'; +	my $dark_layout    = $self->param('dark') // 0; +	my $apiver         = $self->param('version') // 0;  	my $callback       = $self->param('callback');  	my $with_related   = !$self->param('no_related');  	my $save_defaults  = $self->param('save_defaults') // 0; -	my @train_types = split( /,/, $self->param('train_types') // q{} ); +	my @train_types    = split( /,/, $self->param('train_types') // q{} );  	my %opt;  	my $api_version @@ -357,8 +357,11 @@ sub handle_request {  		$self->stash( layout => 'text' );  	} -	if ( not( $template ~~ [qw[clean json marudor multi single text]] ) ) { -		$template = 'clean'; +	if ( +		not( $template ~~ [qw[app infoscreen json marudor multi single text]] ) +	  ) +	{ +		$template = 'app';  	}  	if ( not $station ) { @@ -494,7 +497,7 @@ sub handle_request {  				$info = "Zug endet hier: ${delaymsg}";  			}  			elsif ( $result->delay and $result->delay > 0 ) { -				if ( $template eq 'clean' ) { +				if ( $template eq 'app' or $template eq 'infoscreen' ) {  					$info = $delaymsg;  				}  				else { @@ -502,7 +505,10 @@ sub handle_request {  						$result->delay, $delaymsg ? q{: } : q{}, $delaymsg );  				}  			} -			if ( $result->replacement_for and $template ne 'clean' ) { +			if (    $result->replacement_for +				and $template ne 'app' +				and $template ne 'infoscreen' ) +			{  				for my $rep ( $result->replacement_for ) {  					$info = sprintf(  						'Ersatzzug für %s %s %s%s', @@ -921,7 +927,10 @@ sub handle_request {  			hide_opts        => $hide_opts,  			hide_low_delay   => $hide_low_delay,  			show_realtime    => $show_realtime, -			load_marquee     => ($template eq 'single' or $template eq 'multi'), +			load_marquee     => ( +				     $template eq 'single' +				  or $template eq 'multi' +			),  		);  	}  	return; @@ -985,7 +994,7 @@ post '/_geolocation' => sub {  				lat      => $_->[0][4],  				distance => $_->[1],  			} -		  } Travel::Status::DE::IRIS::Stations::get_station_by_location( $lon, +		} Travel::Status::DE::IRIS::Stations::get_station_by_location( $lon,  			$lat, 10 );  		$self->render(  			json => { diff --git a/templates/clean.html.ep b/templates/app.html.ep index 3c36965..3c36965 100644 --- a/templates/clean.html.ep +++ b/templates/app.html.ep diff --git a/templates/infoscreen.html.ep b/templates/infoscreen.html.ep new file mode 100644 index 0000000..3c36965 --- /dev/null +++ b/templates/infoscreen.html.ep @@ -0,0 +1,280 @@ +% if (@{$departures}) { + +% if (param('dark')) { +<div class="displayclean displaycleandark"> +% } +% else { +<div class="displayclean displaycleanlight"> +% } +<ul> +% my $i = 0; +% my $dt_now = DateTime->now; +% for my $departure (@{$departures}) { +%   $i++; +%   my $route_str = q{}; +%   my $via_max = @{$departure->{via} // []}; +%   my $via_cur = 0; +%   for my $stop (@{$departure->{via} // []}) { +%     $via_cur++; +%     $route_str .= $stop . ($via_cur < $via_max ? ' - ' : q{}); +%   } +%   my $extraclasses = q{}; +%   if ($departure->{is_cancelled} or $departure->{departure_is_cancelled}) { +%     $extraclasses .= ' cancelled'; +      <li class="cancelled"> +%   } +%   else { +      <li> +%   } +%   my $linetype = 'bahn'; +%   if ( $departure->{train_type} eq 'S' ) { +%     $linetype = 'sbahn'; +%   } +%   elsif ( $departure->{train_type} eq 'IC' +%          or $departure->{train_type} eq 'ICE' +%          or $departure->{train_type} eq 'EC' +%          or $departure->{train_type} eq 'THA' ) { +%     $linetype = 'fern'; +%   } +    <div class="line <%= $linetype %>"> +    % if ($departure->{train_type} and $departure->{train_no}) { +%=    $departure->{train_type} +%   } +%   if ($departure->{train_line} ) { +%=    $departure->{train_line} +%   } +%   elsif ($departure->{train_no}) { +      <span class="trainno"><%= $departure->{train_no} %></span> +%   } +%   else { +%=    $departure->{train} +%   } +%   if ($departure->{train_line} and $departure->{train_no} +%       and $departure->{train_line} ne $departure->{train_no} +%       and param('detailed')) { +      <div class="trainno_sub"><%= $departure->{train_no} %></div> +%   } +    </div> +%   if (@{$departure->{replaced_by}} or @{$departure->{replacement_for}}) { +      <div class="lineinfo"> +%     if (@{$departure->{replaced_by}}) { +        %#<span class="replaced">→ Ersatzzug</span> +%     } +%     if (@{$departure->{replacement_for}}) { +        <span class="replacement">Ersatzzug</span> +%     } +      </div> +%   } +    <div class="moreinfo collapsed-moreinfo"> +    <div class="mheader"> +    <div> +%   if ($departure->{train_no} or $departure->{train_line}) { +      <span class="train-line <%= $linetype %>"><%= $departure->{train_type} %> +      <%= $departure->{train_line} // $departure->{train_no} %></span> +%     if ($departure->{train_line}) { +        <span class="train-no"><%= $departure->{train_no} %></span> +%     } +%   } +%   else { +      <span class="train-line"><%= $departure->{train} // q{???} %></span> +%   } +    </div> +    <div> +%   if ($departure->{origin}) { +      <span class="train-origin"><%= $departure->{origin} %></span> +      → +%   } +    <span class="train-dest"><%= $departure->{destination} // q{???} %></span> +    </div> +%   if ($departure->{is_cancelled}) { +      <div class="minfo">Fahrt fällt aus</div> +%   } +%   elsif (defined $departure->{delay} and $departure->{delay} > 0) { +      <div class="minfo">+<%= $departure->{delay} %> +%     if ($departure->{departure_is_cancelled}) { +        (endet hier) +%     } +      </div> +%   } +%   if (@{$departure->{replaced_by}}) { +%     for my $replacement (@{$departure->{replaced_by}}) { +        <span class="replaced">Ersatzzug: <%= $replacement %></span> +%     } +%   } +%   if (@{$departure->{replacement_for}}) { +%     for my $replacement (@{$departure->{replacement_for}}) { +        <span class="replacement">Ersatzzug für <%= $replacement %></span> +%     } +%   } +    </div> <!-- mheader --> +    <div class="mfooter"> +    <div class="platforminfo"> +%   if ($departure->{scheduled_platform} or $departure->{platform}) { +      Gleis <%= $departure->{scheduled_platform} // $departure->{platform} %> +%   } +%   if ($departure->{scheduled_platform} and $departure->{platform} +%       and $departure->{scheduled_platform} ne $departure->{platform}) { +      (heute Gleis <%= $departure->{platform} %>) +%   } +%   elsif ($departure->{changed_platform}) { +      (Gleiswechsel) +%   } +    </div> <!-- platforminfo --> +%   if (not $departure->{is_cancelled}) { +      <div class="timeinfo"> +%     if ($departure->{sched_arrival}) { +        Ankunft: <%= $departure->{sched_arrival} %> +%       if ($departure->{arrival} and $departure->{arrival} ne $departure->{sched_arrival}) { +          (heute <%= $departure->{arrival} %>) +%       } +        <br/> +%     } +%     if ($departure->{sched_departure}) { +        Abfahrt: <%= $departure->{sched_departure} %> +%       if ($departure->{departure} and $departure->{departure} ne $departure->{sched_departure}) { +          (heute <%= $departure->{departure} %>) +%       } +        <br/> +%     } +%     if (not ($departure->{sched_arrival} or $departure->{sched_departure})) { +        Abfahrt: <%= $departure->{time} %> +%       if ($departure->{delay}) { +          (heute +<%= $departure->{delay} %>) +%       } +%     } +      </div> <!-- timeinfo --> +%   } +%   if ($departure->{route_post_diff} and @{$departure->{route_post_diff}}) { +      <div class="mroute"> +      Über: +%       my $first = 0; +%       for my $stop (@{$departure->{route_post_diff} // q{???}}) { +%         if ($first++) { +            <span class="separator">–</span> +%         } +%         if ($stop->{isAdditional}) { +            <span class="additional-stop"><%= $stop->{name} %></span> +%         } +%         elsif ($stop->{isCancelled}) { +            <span class="cancelled-stop"><%= $stop->{name} %></span> +%         } +%         elsif ($self->is_important($stop->{name})) { +            <span class="important-stop"><%= $stop->{name} %></span> +%         } +%         else { +            <span class="generic-stop"><%= $stop->{name} %></span> +%         } +%       } +      </div> <!-- mroute --> +%   } +%   if ($departure->{moreinfo} and @{$departure->{moreinfo}}) { +      Meldungen: +      <ul> +%     for my $pair (@{$departure->{moreinfo}}) { +        <li> +%       if ($pair->[0]->isa('DateTime')) { +%         if ($pair->[0]->day != $dt_now->day) { +%           $pair->[0]->set_locale('de_DE'); +%=          $pair->[0]->strftime('%a %H:%M') +%         } +%         else { +%=          $pair->[0]->strftime('%H:%M') +%         } +%       } +%       else { +%=        $pair->[0] +%       } +        : +        <span class="reason"> +%=      $pair->[1] +        </span> +        </li> +%     } +%     if ($departure->{route_info}) { +        <li><%= $departure->{route_info} %></li> +%     } +      </ul> +%   } +    </div> <!-- mfooter --> +    </div> <!-- moreinfo --> +%   if ($departure->{info} and length $departure->{info}) { +      <span class="info"> +%=    $departure->{info} +      </span> +%   } +%   else { +      <span class="route"> +%=    $route_str +      </span> +%   } +    <span class="dest <%= $extraclasses %>"> +%=  $departure->{destination} +    </span> +    <span class="countdown <%= $extraclasses %>"> +%   if ($departure->{delay} and not $departure->{is_cancelled}) { +%     if ($show_realtime) { +%       if ($departure->{delay} > 0) { +          <span class="delaynorm">(+<%= $departure->{delay} %>)</span> +%       } +%       else { +          <span class="undelaynorm">(<%= $departure->{delay} %>)</span> +%       } +%     } +%     else { +%       if ($departure->{delay} > 0) { +          <span class="delay">(+<%= $departure->{delay} %>)</span> +%       } +%       else { +          <span class="undelay">(<%= $departure->{delay} %>)</span> +%       } +%     } +%   } +%   if (($departure->{scheduled_platform} and $departure->{platform} and +%       $departure->{scheduled_platform} ne $departure->{platform}) +%       or $departure->{changed_platform}) { +      <span class="platform changed-platform"> +%   } +%   else { +      <span class="platform"> +%   } +%=  $departure->{platform} +    </span> +    </span> +    <span class="time <%= ($show_realtime and $departure->{delay} and not +      $departure->{is_cancelled}) ? 'delayed' : q{} %> <%= $extraclasses %>"> +%   if (param('detailed')) { +%     my $arrow = '→'; +%     if (not $departure->{sched_arrival}) { +%       $arrow = '↦'; +%     } +%     elsif (not $departure->{sched_departure}) { +%       $arrow = '⇥'; +%     } +%     if ($show_realtime) { +%=      ($departure->{arrival} // q{}) . $arrow . ($departure->{departure} // q{}) +%     } +%     else { +%=      ($departure->{sched_arrival} // q{}) . $arrow . ($departure->{sched_departure} // q{}) +%     } +%   } +%   else { +%=    $departure->{time} +%   } +    </span> +    </li> + +% } + +  </ul> +  </div> <!-- displayclean --> + +% } +% else { + +<div class="container"> +<div class="error"><strong>Keine Abfahrten gefunden.</strong> +Möglicherweise ist der Filter zu restriktiv, oder an dieser Station fahren +momentan keine Züge.</div> +</div> <!-- container --> + +% } diff --git a/templates/layouts/default.html.ep b/templates/layouts/default.html.ep index 1929569..78a962f 100644 --- a/templates/layouts/default.html.ep +++ b/templates/layouts/default.html.ep @@ -83,7 +83,7 @@ Bitte eine Station aus der Liste auswählen</div>          Frontend        </div>        <div> -        %= select_field mode => [ ['App / Infoscreen' => 'clean'], ['Bahnhofstafel' => 'multi'], ['Gleis' => 'single'] ] +        %= select_field mode => [ ['App' => 'app'], ['Infoscreen' => 'infoscreen'], ['Bahnhofstafel' => 'multi'], ['Gleisanzeiger' => 'single'] ]        </div>      </div>      <div class="field"> @@ -191,7 +191,7 @@ Bitte eine Station aus der Liste auswählen</div>  <li><a href="/Essen%20Hbf?mode=multi">Essen HBf</a> (IRIS, Bahnhofstafel)</li>  <li><a href="/Dortmund%20Hbf/Bochum%7CHamm?mode=multi">Dortmund HBf</a> (IRIS, Bahnhofstafel,  nur Züge via Bochum oder Hamm)</li> -<li><a href="/Dortmund%20Universität?mode=clean">Dortmund Universität</a> (IRIS, Mobile/Infoscreen)</li> +<li><a href="/Dortmund%20Universität?mode=infoscreen">Dortmund Universität</a> (IRIS, Infoscreen)</li>  <li><a href="/KD?mode=single">Düsseldorf HBf</a> (IRIS, Gleistafel)</li>  </ul>  </div> | 
