2019-03-07 17:36:11 +00:00
|
|
|
% if (is_user_authenticated()) {
|
|
|
|
<div class="row">
|
|
|
|
<div class="col s12">
|
|
|
|
% my $status = get_user_status();
|
|
|
|
% if ($status->{checked_in}) {
|
|
|
|
<div class="card green darken-4">
|
|
|
|
<div class="card-content white-text">
|
|
|
|
<span class="card-title">Hallo, <%= current_user()->{name} %>!</span>
|
|
|
|
<p>Du bist gerade eingecheckt in
|
|
|
|
<%= $status->{train_type} %> <%= $status->{train_no} %>
|
|
|
|
ab <%= $status->{station_name} %>.
|
|
|
|
% if ($status->{timestamp_delta} < 3600) {
|
|
|
|
<a class="action-undo"><i class="material-icons">undo</i> Rückgängig</a>
|
2018-09-02 19:41:33 +00:00
|
|
|
% }
|
2019-03-07 17:36:11 +00:00
|
|
|
</p>
|
2019-03-09 11:17:59 +00:00
|
|
|
<p>Bei Ankunft: Station auswählen zum Auschecken.</p>
|
2019-03-07 17:36:11 +00:00
|
|
|
<table>
|
|
|
|
<tbody>
|
|
|
|
% my $is_after = 0;
|
|
|
|
% for my $station (@{$status->{route_after}}) {
|
|
|
|
<tr><td><a class="action-checkout" data-station="<%= $station %>"><%= $station %></a></td></tr>
|
|
|
|
% }
|
|
|
|
</tbody>
|
|
|
|
</table>
|
|
|
|
</div>
|
2018-09-02 19:41:33 +00:00
|
|
|
</div>
|
2019-03-07 17:36:11 +00:00
|
|
|
% }
|
|
|
|
% else {
|
|
|
|
<div class="card grey darken-4">
|
|
|
|
<div class="card-content white-text">
|
|
|
|
<span class="card-title">Hallo, <%= current_user()->{name} %>!</span>
|
|
|
|
<p>Du bist gerade nicht eingecheckt.</p>
|
|
|
|
<p class="geolocationhint">Stationen in der Umgebung:</p>
|
|
|
|
<div class="geolocation">
|
|
|
|
<div class="progress"><div class="indeterminate"></div></div>
|
|
|
|
</div>
|
2019-03-16 20:33:19 +00:00
|
|
|
%= form_for 'list_departures' => begin
|
|
|
|
<div class="input-field text-white">
|
2019-03-16 20:37:57 +00:00
|
|
|
%= text_field 'station', id => 'station', class => 'autocomplete white-text', require => undef
|
2019-03-16 20:33:19 +00:00
|
|
|
<label for="station">Manuelle Eingabe (Name oder DS100)</label>
|
|
|
|
</div>
|
|
|
|
<div class="center-align">
|
|
|
|
<button class="btn waves-effect waves-light btn-flat white" type="submit" name="action" value="departures">
|
|
|
|
<i class="material-icons left">send</i>
|
|
|
|
Abfahrten
|
|
|
|
</button>
|
|
|
|
</div>
|
|
|
|
%= end
|
2018-10-07 09:35:47 +00:00
|
|
|
</div>
|
2018-09-02 19:41:33 +00:00
|
|
|
</div>
|
2019-03-07 17:36:11 +00:00
|
|
|
% }
|
|
|
|
</div>
|
2018-09-02 19:41:33 +00:00
|
|
|
</div>
|
2019-03-07 17:36:11 +00:00
|
|
|
<h1>Letzte Fahrten</h1>
|
|
|
|
<div class="row">
|
|
|
|
<table class="striped">
|
|
|
|
<thead>
|
|
|
|
<tr>
|
|
|
|
<th>Datum</th>
|
|
|
|
<th>Zug</th>
|
|
|
|
<th>Strecke</th>
|
|
|
|
<th>Dauer</th>
|
|
|
|
</tr>
|
|
|
|
</thead>
|
|
|
|
<tbody>
|
|
|
|
% for my $travel (get_user_travels(1)) {
|
|
|
|
% if ($travel->{completed}) {
|
|
|
|
<tr>
|
|
|
|
<td><%= $travel->{sched_departure}->strftime('%d.%m.%Y') %></td>
|
|
|
|
<td><%= $travel->{type} %> <%= $travel->{line} // $travel->{no} %></td>
|
|
|
|
<td><%= $travel->{from_name} %> → <%= $travel->{to_name} %></td>
|
|
|
|
% if ($travel->{rt_arrival}->epoch and $travel->{rt_departure}->epoch) {
|
|
|
|
<td><%= ($travel->{rt_arrival}->epoch - $travel->{rt_departure}->epoch) / 60 %> min
|
|
|
|
</td>
|
|
|
|
% } else {
|
|
|
|
<td><%= sprintf('%.f', $self->get_travel_distance($travel->{from_name}, $travel->{to_name}, $travel->{route})) %>km
|
|
|
|
<i class="material-icons">timer_off</i>
|
|
|
|
</td>
|
|
|
|
% }
|
|
|
|
</tr>
|
|
|
|
% }
|
2018-09-02 19:41:33 +00:00
|
|
|
% }
|
2019-03-07 17:36:11 +00:00
|
|
|
</tbody>
|
|
|
|
</tabel>
|
|
|
|
</div>
|
|
|
|
% }
|
|
|
|
% else {
|
2019-03-08 16:16:19 +00:00
|
|
|
<div class="row">
|
|
|
|
<div class="col s12">
|
|
|
|
<p>
|
|
|
|
Travelynx erlaubt das Einchecken in Züge im Netz der Deutschen
|
|
|
|
Bahn. So können die eigenen Fahrten später inklusive Echtzeitdaten
|
|
|
|
und eingetragenen Servicemeldungen nachvollzogen und brennende
|
|
|
|
Fragen wie „Wie viele Stunden habe ich letzten Monat im Zug
|
|
|
|
vebracht?“ beantwortet werden.
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
Die Idee dazu kommt von <a
|
2019-03-16 13:36:35 +00:00
|
|
|
href="https://traewelling.de/">Träwelling</a>, hier gibt es aber
|
|
|
|
keine Twitter-Anbindung und keine öffentlichen Leaderboards.
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
Features:
|
|
|
|
<ul>
|
|
|
|
<li>Protokoll von Fahrplan- und Echtzeitdaten an Start- und
|
|
|
|
Zielbahnhof</li>
|
|
|
|
<li>API zum automatisierten Auslesen der letzten Reisen</li>
|
|
|
|
</ul>
|
2019-03-08 16:16:19 +00:00
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
Travelynx ist ein kostenfreies, privat betriebenes Projekt ohne
|
|
|
|
Verfügbarkeitsgarantie. Unangekündigte Downtimes oder eine
|
|
|
|
kurzfristige Einstellung dieser Seite sind nicht vorgesehen, aber
|
|
|
|
möglich. Wer mag, kann auch den
|
|
|
|
<a href="https://finalrewind.org/projects/travelynx">Quelltext</a>
|
2019-03-16 13:36:35 +00:00
|
|
|
laden und eine eigene Instanz aufsetzen.
|
2019-03-08 16:16:19 +00:00
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="row">
|
|
|
|
<div class="col s1 m1 l3">
|
|
|
|
</div>
|
|
|
|
<div class="col s10 m10 l6 center-align">
|
|
|
|
<a href="/register" class="waves-effect waves-light btn"><i class="material-icons left">add</i>Registrieren</a>
|
|
|
|
<a href="/login" class="waves-effect waves-light btn"><i class="material-icons left">account_circle</i>Anmelden</a>
|
|
|
|
</div>
|
|
|
|
<div class="col s1 m1 l3">
|
|
|
|
</div>
|
|
|
|
</div>
|
2019-03-07 17:36:11 +00:00
|
|
|
% }
|