diff options
Diffstat (limited to 'templates/_public_status_card.html.ep')
-rw-r--r-- | templates/_public_status_card.html.ep | 246 |
1 files changed, 182 insertions, 64 deletions
diff --git a/templates/_public_status_card.html.ep b/templates/_public_status_card.html.ep index 907427f..32b193a 100644 --- a/templates/_public_status_card.html.ep +++ b/templates/_public_status_card.html.ep @@ -1,35 +1,47 @@ -<div class="autorefresh"> +<div class="autorefresh" data-from-profile="<%= stash('from_profile') ? 1 : 0 %>"> % if ($journey->{checked_in}) { <div class="card"> <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"><%= $name %> ist unterwegs</span> - % if ($public_level & 0x04 and $journey->{comment}) { - <p>„<%= $journey->{comment} %>“</p> - % } - <p> - % if ($journey->{train_line}) { - <div class="center-align"><b><%= $journey->{train_type} %> <%= $journey->{train_line} %></b> <%= $journey->{train_no} %></div> + <i class="material-icons right sync-failed-marker grey-text" style="display: none;">sync_problem</i> + <span class="card-title"> + % if (stash('from_profile')) { + Unterwegs mit <%= include '_format_train', journey => $journey %> + % } + % elsif (stash('from_timeline')) { + <a href="/status/<%= $name %>"><%= $name %></a>: <%= include '_format_train', journey => $journey %> % } % else { - <div class="center-align"><b><%= $journey->{train_type} %> <%= $journey->{train_no} %></b></div> + <a href="/p/<%= $name %>"><%= $name %></a> ist unterwegs + % } + <i class="material-icons right"><%= visibility_icon($journey->{effective_visibility_str}) %></i> + % if (not $journey->{extra_data}{rt}) { + <i class="material-icons right grey-text">gps_off</i> + % } + </span> + % if ($privacy->{comments_visible} and $journey->{comment}) { + <div>„<%= $journey->{comment} %>“</div> + % } + <div> + % if (not stash('from_profile') and not stash('from_timeline')) { + <div class="center-align"> + %= include '_format_train', journey => $journey + </div> % } <div class="center-align countdown" data-duration="<%= $journey->{journey_duration} // 0 %>" - data-arrival="<%= $journey->{real_arrival}->epoch %>"> - % if ($journey->{departure_countdown} > 120) { - Abfahrt in <%= sprintf('%.f', $journey->{departure_countdown} / 60) %> Minuten + % if (param('token')) { + data-token="<%= $journey->{dep_eva} %>-<%= $journey->{timestamp}->epoch % 337 %>-<%= $journey->{sched_departure}->epoch %>" % } - % elsif ($journey->{departure_countdown} > 60) { - Abfahrt in einer Minute + data-arrival="<%= $journey->{real_arrival}->epoch %>"> + % if ($journey->{departure_countdown} > 60) { + Abfahrt in <%= journeys->min_to_human(int($journey->{departure_countdown} / 60)) %> % } % elsif ($journey->{departure_countdown} > 0) { Abfahrt in weniger als einer Minute % } % elsif (defined $journey->{arrival_countdown}) { % if ($journey->{arrival_countdown} > 60) { - Ankunft in <%= sprintf('%.f', $journey->{arrival_countdown} / 60) %> - Minute<%= sprintf('%.f', $journey->{arrival_countdown} / 60) == 1 ? '' : 'n' %> + Ankunft in <%= journeys->min_to_human(int($journey->{arrival_countdown} / 60)) %> % } % elsif ($journey->{arrival_countdown} > 0) { Ankunft in weniger als einer Minute @@ -48,8 +60,8 @@ <div class="progress" style="height: 1ex;"> <div class="determinate" style="width: <%= sprintf('%.2f', 100 * ($journey->{journey_completion} // 0)); %>%;"></div> </div> - </p> - <p> + </div> + <div class="status-card-progress-annot"> <div style="float: left;"> <b><%= $journey->{dep_name} %></b><br/> <b><%= $journey->{real_departure}->strftime('%H:%M') %></b> @@ -79,19 +91,32 @@ % if ($journey->{arr_name} and $station->[0] eq $journey->{arr_name}) { % last; % } - % if (($station->[1]{rt_arr_countdown} // 0) > 0) { - <%= $station->[0] %><br/><%= $station->[1]{rt_arr}->strftime('%H:%M') %> - % if ($station->[1]{sched_arr}->epoch != $station->[1]{rt_arr}->epoch) { - %= sprintf('(%+d)', ($station->[1]{rt_arr}->epoch - $station->[1]{sched_arr}->epoch ) / 60); + % if (($station->[2]{arr_countdown} // 0) > 0 and $station->[2]{arr}) { + %= $station->[0] + <br/> + %= $station->[2]{arr}->strftime('%H:%M') + % if ($station->[2]{arr_delay}) { + %= sprintf('(%+d)', $station->[2]{arr_delay} / 60) + % } + % if ($station->[2]{load}{SECOND}) { + <br/> + %= include '_show_load_icons', station => $station % } % last; % } - % if (($station->[1]{rt_dep_countdown} // 0) > 0) { - <%= $station->[0] %><br/> - <%= $station->[1]{rt_arr}->strftime('%H:%M') %> → - <%= $station->[1]{rt_dep}->strftime('%H:%M') %> - % if ($station->[1]{sched_dep}->epoch != $station->[1]{rt_dep}->epoch) { - %= sprintf('(%+d)', ($station->[1]{rt_dep}->epoch - $station->[1]{sched_dep}->epoch ) / 60); + % if (($station->[2]{dep_countdown} // 0) > 0 and $station->[2]{dep}) { + %= $station->[0] + <br/> + % if ($station->[2]{arr}) { + <%= $station->[2]{arr}->strftime('%H:%M') %> → + % } + %= $station->[2]{dep}->strftime('%H:%M') + % if ($station->[2]{dep_delay}) { + %= sprintf('(%+d)', $station->[2]{dep_delay} / 60) + % } + % if ($station->[2]{load}{SECOND}) { + <br/> + %= include '_show_load_icons', station => $station % } % last; % } @@ -104,36 +129,48 @@ % if ($journey->{arr_name} and $station->[0] eq $journey->{arr_name}) { % last; % } - % if (($station->[1]{rt_arr_countdown} // 0) > 0) { + % if (($station->[2]{arr_countdown} // 0) > 0 and $station->[2]{arr}) { Nächster Halt:<br/> - <%= $station->[0] %><br/><%= $station->[1]{rt_arr}->strftime('%H:%M') %> - % if ($station->[1]{sched_arr}->epoch != $station->[1]{rt_arr}->epoch) { - %= sprintf('(%+d)', ($station->[1]{rt_arr}->epoch - $station->[1]{sched_arr}->epoch ) / 60); + %= $station->[0] + <br/> + %= $station->[2]{arr}->strftime('%H:%M') + % if ($station->[2]{arr_delay}) { + %= sprintf('(%+d)', $station->[2]{arr_delay} / 60) + % } + % if ($station->[2]{load}{SECOND}) { + <br/> + %= include '_show_load_icons', station => $station % } % last; % } - % if (($station->[1]{rt_dep_countdown} // 0) > 0) { + % if (($station->[2]{dep_countdown} // 0) > 0 and $station->[2]{arr} and $station->[2]{dep}) { Aktueller Halt:<br/> - <%= $station->[0] %><br/> - <%= $station->[1]{rt_arr}->strftime('%H:%M') %> → - <%= $station->[1]{rt_dep}->strftime('%H:%M') %> - % if ($station->[1]{sched_dep}->epoch != $station->[1]{rt_dep}->epoch) { - %= sprintf('(%+d)', ($station->[1]{rt_dep}->epoch - $station->[1]{sched_dep}->epoch ) / 60); + %= $station->[0] + <br/> + %= $station->[2]{arr}->strftime('%H:%M') + → + %= $station->[2]{dep}->strftime('%H:%M') + % if ($station->[2]{dep_delay}) { + %= sprintf('(%+d)', $station->[2]{dep_delay} / 60) + % } + % if ($station->[2]{load}{SECOND}) { + <br/> + %= include '_show_load_icons', station => $station % } % last; % } % } </div> - </p> + </div> % if ($journey->{extra_data}{cancelled_destination}) { - <p style="margin-bottom: 2ex;"> + <div style="margin-bottom: 2ex;"> <i class="material-icons tiny" aria-hidden="true">error</i> Der Halt an der Zielstation <b><%= $journey->{extra_data}{cancelled_destination} %></b> entfällt. - </p> + </div> % } % if (@{$journey->{messages} // []} > 0 and $journey->{messages}[0]) { - <p style="margin-bottom: 2ex;"> + <div style="margin-top: 2ex;"> <ul> % for my $message (reverse @{$journey->{messages} // []}) { % if ($journey->{sched_departure}->epoch - $message->[0]->epoch < 1800) { @@ -144,14 +181,93 @@ <li> <i class="material-icons tiny">info</i> <%= $message->[0]->strftime('%H:%M') %>: <%= $message->[1] %></li> % } </ul> - </p> + </div> % } - </div> - <div class="card-action"> - % my $url = 'https://marudor.de/details/' . $journey->{train_type} . ' ' . $journey->{train_no} . '/' . DateTime->now(time_zone => 'Europe/Berlin')->epoch . '000'; - <a style="margin-right: 0;" href="<%= $url %>"><i class="material-icons left">timeline</i> Zuglauf</a> - % if ($journey->{extra_data}{trip_id}) { - <a class="right" style="margin-right: 0;" href="https://dbf.finalrewind.org/map/<%= $journey->{extra_data}{trip_id} %>/<%= $journey->{train_line} || 0 %>?from=<%= $journey->{dep_name} %>&to=<%= $journey->{arr_name} // '' %>"><i class="material-icons left">map</i> Karte</a> + % if (@{$journey->{extra_data}{him_msg} // []}) { + <div style="margin-top: 2ex;"> + <ul> + % for my $message (@{$journey->{extra_data}{him_msg} // []}) { + % if (not stash('from_timeline') or $message->{prio} and $message->{prio} eq 'HOCH') { + <li> <i class="material-icons tiny"><%= ($message->{prio} and $message->{prio} eq 'HOCH') ? 'warning' : 'info' %></i> <%= $message->{header} %> <%= $message->{lead} %></li> + % } + % } + </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;"> + % for my $wagongroup (@{$journey->{wagongroups}}) { + %= $wagongroup->{desc} // $wagongroup->{name} + % if ($wagongroup->{designation}) { + „<%= $wagongroup->{designation} %>“ + % } + % if ($wagongroup->{to}) { + → <%= $wagongroup->{to} %> + % } + <br/> + % } + </div> + % } + % else { + <div class="wagons" style="margin-top: 2ex;"> + Wagen:<br/> + %= include '_wagons', wagongroups => $journey->{wagongroups}; + </div> + % } + % } + % if (not stash('from_timeline')) { + <div style="margin-top: 2ex;"> + Route:<br/> + % my $before = 1; + % my $within = 0; + % my $at_startstop = 0; + % for my $station (@{$journey->{route}}) { + % if (($station->[1] and $station->[1] == $journey->{dep_eva}) or $station->[0] eq $journey->{dep_name}) { + % $within = 1; $at_startstop = 1; + % } + % elsif ($journey->{arr_eva} and (($station->[1] and $station->[1] == $journey->{arr_eva}) or $station->[0] eq $journey->{arr_name})) { + % $within = 0; $at_startstop = 1; + % } + % else { + % $at_startstop = 0; + % } + <span style="color: #808080;"> + % if ($before and $station->[2]{sched_dep}) { + %= $station->[2]{sched_dep}->strftime('%H:%M') + % } + % elsif (not $before and $station->[2]{sched_arr}) { + %= $station->[2]{sched_arr}->strftime('%H:%M') + % } + </span> + % if ($at_startstop or $within) { + %= $station->[0] + % } + % else { + <span style="color: #808080;"><%= $station->[0] %></span> + % } + <span> + %= include '_show_load_icons', station => $station + </span> + <span style="color: #808080;"> + % if ($before and $station->[2]{rt_dep} and $station->[2]{dep_delay}) { + %= sprintf('%+d', $station->[2]{dep_delay} / 60) + % } + % elsif (not $before and $station->[2]{rt_arr} and $station->[2]{arr_delay}) { + %= sprintf('%+d', $station->[2]{arr_delay} / 60) + % } + </span> + % if (($station->[1] and $station->[1] == $journey->{dep_eva}) or $station->[0] eq $journey->{dep_name}) { + % $before = 0; + % } + <br/> + % } + </div> % } </div> </div> @@ -160,23 +276,25 @@ <div class="card"> <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"><%= $name %> ist gerade nicht eingecheckt</span> - <p> - % if ($journey->{arr_name}) { - Zuletzt gesehen - % if ($journey->{real_arrival}->epoch and ($public_level & 0x20 or ($public_level & 0x10 and is_user_authenticated()))) { - %= $journey->{real_arrival}->strftime('am %d.%m.%Y') - in <b><%= $journey->{arr_name} %></b> - %= $journey->{real_arrival}->strftime('(Ankunft um %H:%M Uhr)') - % } - % else { - in <b><%= $journey->{arr_name} %></b> - % } + % if (stash('from_profile')) { + <span class="card-title">Aktuell nicht eingecheckt</span> + % } + % else { + <span class="card-title"><a href="/p/<%= $name %>"><%= $name %></a> ist gerade nicht eingecheckt</span> + % } + <div> + % if ($journey->{arr_name}) { + Zuletzt gesehen + % if ($journey->{real_arrival}->epoch) { + %= $journey->{real_arrival}->strftime('am %d.%m.%Y') + in <b><%= $journey->{arr_name} %></b> + %= $journey->{real_arrival}->strftime('(Ankunft um %H:%M Uhr)') % } % else { - Noch keine Zugfahrten geloggt. + in <b><%= $journey->{arr_name} %></b> % } - </p> + % } + </div> </div> </div> % } |