diff options
| -rwxr-xr-x | lib/Travelynx.pm | 38 | ||||
| -rwxr-xr-x | lib/Travelynx/Controller/Profile.pm | 28 | ||||
| -rwxr-xr-x | lib/Travelynx/Controller/Traveling.pm | 15 | ||||
| -rw-r--r-- | lib/Travelynx/Model/InTransit.pm | 32 | ||||
| -rw-r--r-- | templates/_checked_in.html.ep | 12 | ||||
| -rw-r--r-- | templates/_map.html.ep | 20 | ||||
| -rw-r--r-- | templates/_public_status_card.html.ep | 5 | ||||
| -rw-r--r-- | templates/profile.html.ep | 2 | ||||
| -rw-r--r-- | templates/user_status.html.ep | 2 | 
9 files changed, 110 insertions, 44 deletions
| diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 521ea2c..f9723c1 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -1890,6 +1890,7 @@ sub startup {  				uid             => $uid,  				db              => $db,  				with_data       => 1, +				with_polyline   => 1,  				with_timestamps => 1,  				with_visibility => 1,  				postprocess     => 1, @@ -2320,12 +2321,12 @@ sub startup {  			my @stations = uniq_by { $_->{name} } map {  				{ -					name   => $_->{to_name}, -					latlon => $_->{to_latlon} +					name   => $_->{to_name}   // $_->{arr_name}, +					latlon => $_->{to_latlon} // $_->{arr_latlon},  				},  				  { -					name   => $_->{from_name}, -					latlon => $_->{from_latlon} +					name   => $_->{from_name}   // $_->{dep_name}, +					latlon => $_->{from_latlon} // $_->{dep_latlon}  				  }  			} @journeys; @@ -2350,8 +2351,8 @@ sub startup {  			for my $journey (@polyline_journeys) {  				my @polyline = @{ $journey->{polyline} }; -				my $from_eva = $journey->{from_eva}; -				my $to_eva   = $journey->{to_eva}; +				my $from_eva = $journey->{from_eva} // $journey->{dep_eva}; +				my $to_eva   = $journey->{to_eva}   // $journey->{arr_eva};  				my $from_index  				  = first_index { $_->[2] and $_->[2] == $from_eva } @polyline; @@ -2387,7 +2388,7 @@ sub startup {  					or $to_index == -1 )  				{  					# Fall back to route -					delete $journey->{polyline}; +					push( @beeline_journeys, $journey );  					next;  				} @@ -2422,13 +2423,19 @@ sub startup {  				my @route = @{ $journey->{route} };  				my $from_index = first_index { -					( $_->[1] and $_->[1] == $journey->{from_eva} ) -					  or $_->[0] eq $journey->{from_name} +					(         $_->[1] +						  and $_->[1] +						  == ( $journey->{from_eva} // $journey->{dep_eva} ) ) +					  or $_->[0] eq +					  ( $journey->{from_name} // $journey->{dep_name} )  				}  				@route;  				my $to_index = first_index { -					( $_->[1] and $_->[1] == $journey->{to_eva} ) -					  or $_->[0] eq $journey->{to_name} +					(         $_->[1] +						  and $_->[1] +						  == ( $journey->{to_eva} // $journey->{arr_eva} ) ) +					  or $_->[0] eq +					  ( $journey->{to_name} // $journey->{arr_name} )  				}  				@route; @@ -2436,15 +2443,15 @@ sub startup {  					my $rename = $self->app->renamed_station;  					$from_index = first_index {  						( $rename->{ $_->[0] } // $_->[0] ) eq -						  $journey->{from_name} +						  ( $journey->{from_name} // $journey->{dep_name} )  					}  					@route;  				}  				if ( $to_index == -1 ) {  					my $rename = $self->app->renamed_station;  					$to_index = first_index { -						( $rename->{ $_->[0] } // $_->[0] ) eq -						  $journey->{to_name} +						( $rename->{ $_->[0] }  // $_->[0] ) eq +						  ( $journey->{to_name} // $journey->{arr_name} )  					}  					@route;  				} @@ -2467,7 +2474,8 @@ sub startup {  				# and entered manually (-> beeline also shown on map, typically  				# significantly differs from detailed route) -- unless the user  				# sets include_manual, of course. -				if (    $journey->{edited} & 0x0010 +				if (    $journey->{edited} +					and $journey->{edited} & 0x0010  					and @route <= 2  					and not $include_manual )  				{ diff --git a/lib/Travelynx/Controller/Profile.pm b/lib/Travelynx/Controller/Profile.pm index c35642d..db30d36 100755 --- a/lib/Travelynx/Controller/Profile.pm +++ b/lib/Travelynx/Controller/Profile.pm @@ -111,6 +111,13 @@ sub profile {  		$status->{arr_name} = undef;  	} +	my $map_data = {}; +	if ( $status->{checked_in} ) { +		$map_data = $self->journeys_to_map_data( +			journeys => [$status], +		); +	} +  	my @journeys;  	if ( @@ -190,6 +197,8 @@ sub profile {  			: 0,  			journey  => $status,  			journeys => [@journeys], +			with_map => 1, +			%{$map_data},  		}  	);  } @@ -494,6 +503,13 @@ sub user_status {  		$og_data{description} = $tw_data{description} = q{};  	} +	my $map_data = {}; +	if ( $status->{checked_in} ) { +		$map_data = $self->journeys_to_map_data( +			journeys => [$status], +		); +	} +  	$self->respond_to(  		json => {  			json => { @@ -516,7 +532,9 @@ sub user_status {  			journey   => $status,  			twitter   => \%tw_data,  			opengraph => \%og_data, -			version   => $self->app->config->{version} // 'UNKNOWN', +			with_map  => 1, +			%{$map_data}, +			version => $self->app->config->{version} // 'UNKNOWN',  		},  	);  } @@ -555,6 +573,7 @@ sub status_card {  	my $status = $self->get_user_status( $user->{id} );  	my $visibility; +	my $map_data = {};  	if ( $status->{checked_in} or $status->{arr_name} ) {  		my $visibility = $status->{effective_visibility};  		if ( @@ -579,12 +598,19 @@ sub status_card {  		$status->{arr_name} = undef;  	} +	if ( $status->{checked_in} ) { +		$map_data = $self->journeys_to_map_data( +			journeys => [$status], +		); +	} +  	$self->render(  		'_public_status_card',  		name         => $name,  		privacy      => $user,  		journey      => $status,  		from_profile => $self->param('profile') ? 1 : 0, +		%{$map_data},  	);  } diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm index 4653043..0d89fb9 100755 --- a/lib/Travelynx/Controller/Traveling.pm +++ b/lib/Travelynx/Controller/Traveling.pm @@ -353,6 +353,9 @@ sub homepage {  		$self->stash( timeline => [@timeline] );  		my @recent_targets;  		if ( $status->{checked_in} ) { +			my $map_data = $self->journeys_to_map_data( +				journeys => [$status], +			);  			my $journey_visibility  			  = $self->compute_effective_visibility(  				$user->{default_visibility_str}, @@ -371,6 +374,8 @@ sub homepage {  							journey_visibility => $journey_visibility,  							connections_iris   => $connections_iris,  							connections_hafas  => $connections_hafas, +							with_map           => 1, +							%{$map_data},  						);  						$self->users->mark_seen( uid => $uid );  					} @@ -381,6 +386,8 @@ sub homepage {  							user               => $user,  							user_status        => $status,  							journey_visibility => $journey_visibility, +							with_map           => 1, +							%{$map_data},  						);  						$self->users->mark_seen( uid => $uid );  					} @@ -393,6 +400,8 @@ sub homepage {  					user               => $user,  					user_status        => $status,  					journey_visibility => $journey_visibility, +					with_map           => 1, +					%{$map_data},  				);  				$self->users->mark_seen( uid => $uid );  				return; @@ -431,6 +440,9 @@ sub status_card {  	$self->stash( timeline => [@timeline] );  	if ( $status->{checked_in} ) { +		my $map_data = $self->journeys_to_map_data( +			journeys => [$status], +		);  		my $journey_visibility  		  = $self->compute_effective_visibility(  			$self->current_user->{default_visibility_str}, @@ -448,6 +460,7 @@ sub status_card {  						journey_visibility => $journey_visibility,  						connections_iris   => $connections_iris,  						connections_hafas  => $connections_hafas, +						%{$map_data},  					);  				}  			)->catch( @@ -456,6 +469,7 @@ sub status_card {  						'_checked_in',  						journey            => $status,  						journey_visibility => $journey_visibility, +						%{$map_data},  					);  				}  			)->wait; @@ -465,6 +479,7 @@ sub status_card {  			'_checked_in',  			journey            => $status,  			journey_visibility => $journey_visibility, +			%{$map_data},  		);  	}  	elsif ( $status->{cancellation} ) { diff --git a/lib/Travelynx/Model/InTransit.pm b/lib/Travelynx/Model/InTransit.pm index b2be995..a90cd08 100644 --- a/lib/Travelynx/Model/InTransit.pm +++ b/lib/Travelynx/Model/InTransit.pm @@ -12,11 +12,12 @@ use DateTime;  use JSON;  my %visibility_itoa = ( -	100 => 'public', -	80  => 'travelynx', -	60  => 'followers', -	30  => 'unlisted', -	10  => 'private', +	100     => 'public', +	80      => 'travelynx', +	60      => 'followers', +	30      => 'unlisted', +	10      => 'private', +	default => 'default',  );  my %visibility_atoi = ( @@ -360,16 +361,14 @@ sub postprocess {  	$ret->{wagongroups}        = $ret->{user_data}{wagongroups};  	$ret->{platform_type} = 'Gleis'; -	if ( $ret->{train_type} =~ m{ ast | bus | ruf }ix ) { +	if ( $ret->{train_type} and $ret->{train_type} =~ m{ ast | bus | ruf }ix ) {  		$ret->{platform_type} = 'Steig';  	}  	$ret->{visibility_str} -	  = $ret->{visibility} -	  ? $visibility_itoa{ $ret->{visibility} } -	  : 'default'; +	  = $visibility_itoa{ $ret->{visibility} // 'default' };  	$ret->{effective_visibility_str} -	  = $visibility_itoa{ $ret->{effective_visibility} }; +	  = $visibility_itoa{ $ret->{effective_visibility} // 'default' };  	my @parsed_messages;  	for my $message ( @{ $ret->{messages} // [] } ) { @@ -461,7 +460,7 @@ sub get {  	my $table = 'in_transit'; -	if ( $opt{with_timestamps} ) { +	if ( $opt{with_timestamps} or $opt{with_polyline} ) {  		$table = 'in_transit_str';  	} @@ -475,13 +474,16 @@ sub get {  		$ret = $res->hash;  	} +	if ( $opt{with_polyline} and $ret ) { +		$ret->{dep_latlon} = [ $ret->{dep_lat}, $ret->{dep_lon} ]; +		$ret->{arr_latlon} = [ $ret->{arr_lat}, $ret->{arr_lon} ]; +	} +  	if ( $opt{with_visibility} and $ret ) {  		$ret->{visibility_str} -		  = $ret->{visibility} -		  ? $visibility_itoa{ $ret->{visibility} } -		  : 'default'; +		  = $visibility_itoa{ $ret->{visibility} // 'default' };  		$ret->{effective_visibility_str} -		  = $visibility_itoa{ $ret->{effective_visibility} }; +		  = $visibility_itoa{ $ret->{effective_visibility} // 'default' };  	}  	if ( $opt{postprocess} and $ret ) { diff --git a/templates/_checked_in.html.ep b/templates/_checked_in.html.ep index 3fd226b..155f75d 100644 --- a/templates/_checked_in.html.ep +++ b/templates/_checked_in.html.ep @@ -324,6 +324,7 @@  	% if ($journey->{arr_name}) {  		<div class="card" style="margin-top: <%= scalar @{stash('timeline') // []} ? '1.5rem' : '3em' %>;">  			<div class="card-content"> +				<i class="material-icons small right sync-failed-marker grey-text" style="display: none;">sync_problem</i>  				<span class="card-title">Meldungen</span>  				% if (@{$journey->{extra_data}{him_msg} // []}) {  					<p style="margin-bottom: 2ex;"> @@ -371,8 +372,15 @@  				% }  			</div>  		</div> -	% } -	% if ($journey->{arr_name}) { +		<div class="card" style="margin-top: 3em;"> +			<div class="card-content"> +				<i class="material-icons small right sync-failed-marker grey-text" style="display: none;">sync_problem</i> +				<span class="card-title">Karte</span> +				<div id="map" style="height: 70vh;"> +				</div> +				%= include '_map', with_map_header => 0, station_coordinates => stash('station_coordinates'), polyline_groups => stash('polyline_groups') +			</div> +		</div>  		<div class="card" style="margin-top: 3em;">  			<div class="card-content">  				<i class="material-icons small right sync-failed-marker grey-text" style="display: none;">sync_problem</i> diff --git a/templates/_map.html.ep b/templates/_map.html.ep index daa16f0..223bd68 100644 --- a/templates/_map.html.ep +++ b/templates/_map.html.ep @@ -1,16 +1,18 @@ -<div class="row"> -	<div class="col s12"> -		<div id="map" style="height: 70vh;"> +% if (stash('with_map_header') // 1) { +	<div class="row"> +		<div class="col s12"> +			<div id="map" style="height: 70vh;"> +			</div>  		</div>  	</div> -</div> -<div class="row"> -	<div class="col s12"> -		<span style="color: #f03;">●</span> Ein-/Ausstiegsstation<br/> -		<span style="color: #673ab7;">—</span> Streckenverlauf oder Luftlinie +	<div class="row"> +		<div class="col s12"> +			<span style="color: #f03;">●</span> Ein-/Ausstiegsstation<br/> +			<span style="color: #673ab7;">—</span> Streckenverlauf oder Luftlinie +		</div>  	</div> -</div> +% }  <script>  var map = L.map('map').setView([51.306, 9.712], 6); diff --git a/templates/_public_status_card.html.ep b/templates/_public_status_card.html.ep index 972a07a..72b82df 100644 --- a/templates/_public_status_card.html.ep +++ b/templates/_public_status_card.html.ep @@ -197,6 +197,11 @@  					</ul>  				</div>  			% } +			% if (stash('station_coordinates')) { +				<div id="map" style="height: 70vh;"> +				</div> +				%= include '_map', with_map_header => 0, station_coordinates => stash('station_coordinates'), polyline_groups => stash('polyline_groups') +			% }  			% if ( @{$journey->{wagongroups} // []} ) {  				% if (stash('from_timeline')) {  					<div class="wagons" style="margin-top: 2ex;"> diff --git a/templates/profile.html.ep b/templates/profile.html.ep index 6f78ea0..a2c965c 100644 --- a/templates/profile.html.ep +++ b/templates/profile.html.ep @@ -79,7 +79,7 @@  </div>  <div class="row">  	<div class="col s12 publicstatuscol" data-user="<%= $name %>" data-profile="1"> -		%= include '_public_status_card', name => $name, privacy => $privacy, journey => $journey, from_profile => 1 +		%= include '_public_status_card', name => $name, privacy => $privacy, journey => $journey, from_profile => 1, station_coordinates => stash('station_coordinates'), polyline_groups => stash('polyline_groups')  	</div>  </div>  % if ($journeys and @{$journeys}) { diff --git a/templates/user_status.html.ep b/templates/user_status.html.ep index 45fba54..bf11004 100644 --- a/templates/user_status.html.ep +++ b/templates/user_status.html.ep @@ -1,5 +1,5 @@  <div class="row">  	<div class="col s12 publicstatuscol" data-user="<%= $name %>"> -		%= include '_public_status_card', name => $name, privacy => $privacy, journey => $journey +		%= include '_public_status_card', name => $name, privacy => $privacy, journey => $journey, station_coordinates => stash('station_coordinates'), polyline_groups => stash('polyline_groups')  	</div>  </div> | 
