diff options
| author | Daniel Friesel <derf@finalrewind.org> | 2019-10-04 23:27:45 +0200 | 
|---|---|---|
| committer | Daniel Friesel <derf@finalrewind.org> | 2019-10-04 23:27:45 +0200 | 
| commit | 6d45533c14a45b548080077bd154ee06af571bf3 (patch) | |
| tree | 4f197d2e1d47bd3c7e14d22832d637dd455b9e5b | |
| parent | 3582ba317bdb736b6dc65e32d84fe09e7929ed8f (diff) | |
mark cancelled stops in checkin view
| -rwxr-xr-x | lib/Travelynx.pm | 53 | ||||
| -rw-r--r-- | lib/Travelynx/Command/work.pm | 4 | ||||
| -rw-r--r-- | templates/_checked_in.html.ep | 16 | 
3 files changed, 67 insertions, 6 deletions
| diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 860ba87..ad4fd33 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -399,7 +399,7 @@ sub startup {  								sched_departure => $train->sched_departure,  								real_departure  => $train->departure,  								route           => $json->encode( -									[ map { [$_] } $train->route ] +									[ $self->route_diff($train) ]  								),  								messages => $json->encode(  									[ @@ -636,7 +636,7 @@ sub startup {  							real_arrival  => $train->arrival,  							cancelled => $train->arrival_is_cancelled ? 1 : 0,  							route => -							  $json->encode( [ map { [$_] } $train->route ] ), +							  $json->encode( [ $self->route_diff($train) ] ),  							messages => $json->encode(  								[  									map { [ $_->[0]->epoch, $_->[1] ] } @@ -1575,6 +1575,55 @@ sub startup {  	);  	$self->helper( +		'route_diff' => sub { +			my ( $self, $train ) = @_; +			my @json_route; +			my @route       = $train->route; +			my @sched_route = $train->sched_route; + +			say "real  is " . join( " - ", @route ); +			say "sched is " . join( " - ", @sched_route ); + +			my $route_idx = 0; +			my $sched_idx = 0; + +			while ( $route_idx <= $#route and $sched_idx <= $#sched_route ) { +				if ( $route[$route_idx] eq $sched_route[$sched_idx] ) { +					push( @json_route, [ $route[$route_idx], {}, undef ] ); +					$route_idx++; +					$sched_idx++; +				} + +				# this branch is inefficient, but won't be taken frequently +				elsif ( not( grep { $_ eq $route[$route_idx] } @sched_route ) ) +				{ +					push( @json_route, +						[ $route[$route_idx], {}, 'additional' ], +					); +					$route_idx++; +				} +				else { +					push( @json_route, +						[ $sched_route[$sched_idx], {}, 'cancelled' ], +					); +					$sched_idx++; +				} +			} +			while ( $route_idx <= $#route ) { +				push( @json_route, [ $route[$route_idx], {}, 'additional' ], ); +				$route_idx++; +			} +			while ( $sched_idx <= $#sched_route ) { +				push( @json_route, +					[ $sched_route[$sched_idx], {}, 'cancelled' ], +				); +				$sched_idx++; +			} +			return @json_route; +		} +	); + +	$self->helper(  		'get_dbdb_station_p' => sub {  			my ( $self, $ds100 ) = @_; diff --git a/lib/Travelynx/Command/work.pm b/lib/Travelynx/Command/work.pm index 6970918..b9a8520 100644 --- a/lib/Travelynx/Command/work.pm +++ b/lib/Travelynx/Command/work.pm @@ -56,7 +56,7 @@ sub run {  						dep_platform   => $train->platform,  						real_departure => $train->departure,  						route => -						  $json->encode( [ map { [$_] } $train->route ] ), +						  $json->encode( [ $self->app->route_diff($train) ] ),  						messages => $json->encode(  							[  								map { [ $_->[0]->epoch, $_->[1] ] } @@ -103,7 +103,7 @@ sub run {  						sched_arrival => $train->sched_arrival,  						real_arrival  => $train->arrival,  						route => -						  $json->encode( [ map { [$_] } $train->route ] ), +						  $json->encode( [ $self->app->route_diff($train) ] ),  						messages => $json->encode(  							[  								map { [ $_->[0]->epoch, $_->[1] ] } diff --git a/templates/_checked_in.html.ep b/templates/_checked_in.html.ep index 053904a..44d57dc 100644 --- a/templates/_checked_in.html.ep +++ b/templates/_checked_in.html.ep @@ -200,9 +200,15 @@  					<tbody>  						% for my $station (@{$journey->{route_after}}) {  							<tr><td><a class="action-checkout" data-station="<%= $station->[0] %>"><%= $station->[0] %> -								% if ($station->[1]{rt_arr}) { +								% if ($station->[2] and $station->[2] eq 'cancelled') { +									<span style="float: right;">entfällt</span> +								% } +								% elsif ($station->[1]{rt_arr}) {  									<span style="float: right;"><%= $station->[1]{rt_arr}->strftime('%H:%M') %></span>  								% } +								% elsif ($station->[2] and $station->[2] eq 'additional') { +									<span style="float: right;">Zusatzhalt</span> +								% }  							</a></td></tr>  						% }  					</tbody> @@ -247,9 +253,15 @@  						% for my $station (@{$journey->{route_after}}) {  							% my $is_dest = ($journey->{arr_name} and $station->[0] eq $journey->{arr_name});  							<tr><td><a style="<%= $is_dest? 'font-weight: bold;' : '' %>" class="action-checkout" data-station="<%= $station->[0] %>"><%= $station->[0] %> -								% if ($station->[1]{rt_arr}) { +								% if ($station->[2] and $station->[2] eq 'cancelled') { +									<span style="float: right;">entfällt</span> +								% } +								% elsif ($station->[1]{rt_arr}) {  									<span style="float: right;"><%= $station->[1]{rt_arr}->strftime('%H:%M') %></span>  								% } +								% elsif ($station->[2] and $station->[2] eq 'additional') { +									<span style="float: right;">Zusatzhalt</span> +								% }  							</a></td></tr>  						% }  					</tbody> | 
