diff options
| -rw-r--r-- | lib/DBInfoscreen/Controller/Stationboard.pm | 8 | ||||
| -rw-r--r-- | lib/DBInfoscreen/Helper/HAFAS.pm | 61 | ||||
| -rw-r--r-- | sass/app.scss | 6 | ||||
| -rw-r--r-- | templates/_train_details.html.ep | 39 | 
4 files changed, 114 insertions, 0 deletions
| diff --git a/lib/DBInfoscreen/Controller/Stationboard.pm b/lib/DBInfoscreen/Controller/Stationboard.pm index dd13b82..b0f367e 100644 --- a/lib/DBInfoscreen/Controller/Stationboard.pm +++ b/lib/DBInfoscreen/Controller/Stationboard.pm @@ -880,6 +880,10 @@ sub render_train {  					  = $route->[$i]{local_sched_arr};  					$departure->{local_sched_dep}  					  = $route->[$i]{local_sched_dep}; +					$departure->{is_annotated} = $route->[$i]{is_annotated}; +					$departure->{prod_name}    = $route->[$i]{prod_name}; +					$departure->{direction}    = $route->[$i]{direction}; +					$departure->{operator}     = $route->[$i]{operator};  					last;  				}  			} @@ -1253,6 +1257,10 @@ sub train_details {  					$res->{local_dt_da}     = $station_info->{local_dt_da};  					$res->{local_sched_arr} = $station_info->{local_sched_arr};  					$res->{local_sched_dep} = $station_info->{local_sched_dep}; +					$res->{is_annotated}    = $station_info->{is_annotated}; +					$res->{prod_name}       = $station_info->{prod_name}; +					$res->{direction}       = $station_info->{direction}; +					$res->{operator}        = $station_info->{operator};  					$res->{platform}        = $station_info->{platform};  					$res->{scheduled_platform}  					  = $station_info->{sched_platform}; diff --git a/lib/DBInfoscreen/Helper/HAFAS.pm b/lib/DBInfoscreen/Helper/HAFAS.pm index 59d8c7b..cdb84f0 100644 --- a/lib/DBInfoscreen/Helper/HAFAS.pm +++ b/lib/DBInfoscreen/Helper/HAFAS.pm @@ -105,7 +105,67 @@ sub get_route_p {  			my $journey = $hafas->result;  			my @ret;  			my $station_is_past = 1; + +			my $num_names      = 0; +			my $prev_name      = q{}; +			my $num_directions = 0; +			my $prev_direction = q{}; +			my $num_operators  = 0; +			my $prev_operator  = q{}; + +			for my $stop ( $journey->route ) { +				my $prod = $stop->prod_dep // $stop->prod_arr; +				if ( $prod and $prod->name and $prod->name ne $prev_name ) { +					$num_names++; +					$prev_name = $prod->name; +				} +				if (    $prod +					and $prod->operator +					and $prod->operator ne $prev_operator ) +				{ +					$num_operators++; +					$prev_operator = $prod->operator; +				} +				if ( $stop->direction and $stop->direction ne $prev_direction ) +				{ +					$num_directions++; +					$prev_direction = $stop->direction; +				} +			} + +			$prev_name      = q{}; +			$prev_direction = q{}; +			$prev_operator  = q{}; +  			for my $stop ( $journey->route ) { + +				my $prod = $stop->prod_dep // $stop->prod_arr; +				my %annotation; +				if (    $num_names > 1 +					and $prod +					and $prod->name +					and $prod->name ne $prev_name ) +				{ +					$prev_name = $annotation{prod_name} = $prod->name; +				} +				if (    $num_operators > 1 +					and $prod +					and $prod->operator +					and $prod->operator ne $prev_operator ) +				{ +					$prev_operator = $annotation{operator} = $prod->operator; +				} +				if (    $num_directions > 1 +					and $stop->direction +					and $stop->direction ne $prev_direction ) +				{ +					$prev_direction = $annotation{direction} = $stop->direction; +				} + +				if (%annotation) { +					$annotation{is_annotated} = 1; +				} +  				push(  					@ret,  					{ @@ -129,6 +189,7 @@ sub get_route_p {  							  and  							  ( $stop->dep_cancelled or not $stop->sched_dep )  						), +						%annotation,  					}  				);  				if ( diff --git a/sass/app.scss b/sass/app.scss index 4d8dd0c..767dcad 100644 --- a/sass/app.scss +++ b/sass/app.scss @@ -618,6 +618,12 @@ div.app {  				list-style-type: circle;  			} +			.annotation { +				color: $fg2; +				list-style-type: none; +				padding-left: 3em; +			} +  			.sched-delayed:before {  				content: "(";  			} diff --git a/templates/_train_details.html.ep b/templates/_train_details.html.ep index 35c0aaf..2b51d3c 100644 --- a/templates/_train_details.html.ep +++ b/templates/_train_details.html.ep @@ -243,6 +243,19 @@  %     }        <ul class="mroute">  %       for my $stop (@{$departure->{route_pre_diff}}) { +%         if ($stop->{is_annotated} and $stop->{prod_name}) { +            <li class="annotation"> +%             if ($stop->{prod_name}) { +%=              $stop->{prod_name} +%             } +%             if ($stop->{direction}) { +                → <%= $stop->{direction} %> +%             } +%             if ($stop->{operator}) { +                (<%= $stop->{operator} %>) +%             } +            </li> +%         }            <li class="<%= $stop->{isPast} ? 'past-stop' : 'future-stop' %>">            <a href="<%= url_for('station', station => $stop->{eva} // $stop->{name})->query({detailed => param('detailed'), past => param('past'), rt => param('rt'), hafas => param('hafas')}) %>#<%= ($departure->{train_type} // q{x}) . ($departure->{train_no} // q{x}) %>" class="  %         if ($stop->{isAdditional}) { @@ -278,6 +291,19 @@            </li>  %       }  %       if (stash('station_name')) { +%         if ($departure->{is_annotated} and $departure->{prod_name}) { +            <li class="annotation"> +%             if ($departure->{prod_name}) { +%=              $departure->{prod_name} +%             } +%             if ($departure->{direction}) { +                → <%= $departure->{direction} %> +%             } +%             if ($departure->{operator}) { +                (<%= $departure->{operator} %>) +%             } +            </li> +%         }            <li class="<%= $departure->{is_cancelled} ? 'cancelled-stop' : q{} %> <%= $departure->{isPast} ? 'past-stop' : 'future-stop' %>">  %=          $departure->{departure} // $departure->{arrival} // $departure->{sched_departure} // $departure->{sched_arrival} // q{}  %           if ($departure->{departure} and $departure->{sched_departure} and $departure->{departure} ne $departure->{sched_departure}) { @@ -301,6 +327,19 @@            </li>  %       }  %       for my $stop (@{$departure->{route_post_diff}}) { +%         if ($stop->{is_annotated} and $stop->{prod_name}) { +            <li class="annotation"> +%             if ($stop->{prod_name}) { +%=              $stop->{prod_name} +%             } +%             if ($stop->{direction}) { +                → <%= $stop->{direction} %> +%             } +%             if ($stop->{operator}) { +                (<%= $stop->{operator} %>) +%             } +            </li> +%         }            <li class="<%= $stop->{isPast} ? 'past-stop' : 'future-stop' %>">            <a href="<%= url_for('station', station => $stop->{eva} // $stop->{name})->query({detailed => param('detailed'), past => param('past'), rt => param('rt'), hafas => param('hafas')}) %>#<%= ($departure->{train_type} // q{x}) . ($departure->{train_no} // q{x}) %>" class="  %         if ($stop->{isAdditional}) { | 
