Loading lib/Travelynx.pm +1 −0 Original line number Diff line number Diff line Loading @@ -3238,6 +3238,7 @@ sub startup { $authed_r->get('/history')->to('traveling#history'); $authed_r->get('/history/commute')->to('traveling#commute'); $authed_r->get('/history/map')->to('traveling#map_history'); $authed_r->get('/history/sorted')->to('traveling#sorted_history'); $authed_r->get('/history/:year')->to('traveling#yearly_history'); $authed_r->get('/history/:year/review')->to('traveling#year_in_review'); $authed_r->get('/history/:year/:month')->to('traveling#monthly_history'); Loading lib/Travelynx/Controller/Traveling.pm +38 −0 Original line number Diff line number Diff line Loading @@ -1418,6 +1418,44 @@ sub map_history { ); } sub sorted_history { my ($self) = @_; my $sort_by = $self->param('sort_by') || 'delay_arr'; my $sort_order = $self->param('sort_order') || 'desc'; my @journeys = $self->journeys->get( uid => $self->current_user->{id}, with_datetime => 1, verbose => ( $sort_by =~ m{_duration} ? 1 : 0 ), ); my $key = 'delay_arr'; if ( $sort_by =~ m{ ^ (?: delay_arr | delay_dep | sched_duration | rt_duration ) $ }x ) { $key = $sort_by; } if ( $key =~ m{ _duration }x ) { @journeys = grep { defined $_->{$key} } @journeys; } my $sort_lambda = sub { $a->{$key} <=> $b->{$key} }; if ( $sort_order eq 'desc' ) { $sort_lambda = sub { $b->{$key} <=> $a->{$key} }; } @journeys = sort { &$sort_lambda } @journeys; $self->render( template => 'sorted_history', journeys => \@journeys, sort_key => $key, ); } sub json_history { my ($self) = @_; Loading templates/sorted_history.html.ep 0 → 100644 +92 −0 Original line number Diff line number Diff line <h1>High Scores</h1> %= form_for '/history/sorted' => begin <div class="row"> <div class="input-field col s12 m12 l6"> <div> <label> %= radio_button sort_by => 'delay_arr' <span>Verspätung bei Abfahrt</span> </label> </div> <div> <label> %= radio_button sort_by => 'delay_dep' <span>Verspätung bei Ankunft</span> </label> </div> <div> <label> %= radio_button sort_by => 'sched_duration' <span>Geplante Dauer</span> </label> </div> <div> <label> %= radio_button sort_by => 'rt_duration' <span>Tatsächliche Dauer</span> </label> </div> </div> <div class="input-field col s12 m12 l6"> <div> <label> %= radio_button sort_order => 'desc' <span>Absteigend</span> </label> </div> <div> <label> %= radio_button sort_order => 'asc' <span>Aufsteigend</span> </label> </div> </div> <div class="row"> <div class="col s12 m12 l12 center-align"> <button class="btn waves-effect waves-light" type="submit" name="action" value="show"> <i class="material-icons left" aria-hidden="true">send</i> Anzeigen </button> </div> </div> %= end <div class="row"> <div class="col s12"> <table class="striped"> <thead> <tr> <th>Datum</th> <th>Fahrt</th> % if ($sort_key =~ m{delay_}) { <th>Verspätung</th> % } % else { <th></th> % } </tr> </thead> <tbody> % for my $journey (@{$journeys}) { % my $detail_link = '/journey/' . $journey->{id}; <tr> <td><%= $journey->{sched_departure}->strftime('%d.%m.%Y') %></td> <td><a href="<%= $detail_link %>"> <%= $journey->{type} %> <%= $journey->{line} // $journey->{no} %> → <%= $journey->{to_name} %> </a></td> <td> % if ($sort_key =~ m{delay_}) { %= sprintf('%+d', $journey->{$sort_key} / 60) % } % elsif ($sort_key =~ m{_duration}) { %= sprintf('%02d:%02d', $journey->{$sort_key} / 3600, ($journey->{$sort_key} % 3600) / 60) % } </td> </tr> % } </tbody> </table> </div> </div> Loading
lib/Travelynx.pm +1 −0 Original line number Diff line number Diff line Loading @@ -3238,6 +3238,7 @@ sub startup { $authed_r->get('/history')->to('traveling#history'); $authed_r->get('/history/commute')->to('traveling#commute'); $authed_r->get('/history/map')->to('traveling#map_history'); $authed_r->get('/history/sorted')->to('traveling#sorted_history'); $authed_r->get('/history/:year')->to('traveling#yearly_history'); $authed_r->get('/history/:year/review')->to('traveling#year_in_review'); $authed_r->get('/history/:year/:month')->to('traveling#monthly_history'); Loading
lib/Travelynx/Controller/Traveling.pm +38 −0 Original line number Diff line number Diff line Loading @@ -1418,6 +1418,44 @@ sub map_history { ); } sub sorted_history { my ($self) = @_; my $sort_by = $self->param('sort_by') || 'delay_arr'; my $sort_order = $self->param('sort_order') || 'desc'; my @journeys = $self->journeys->get( uid => $self->current_user->{id}, with_datetime => 1, verbose => ( $sort_by =~ m{_duration} ? 1 : 0 ), ); my $key = 'delay_arr'; if ( $sort_by =~ m{ ^ (?: delay_arr | delay_dep | sched_duration | rt_duration ) $ }x ) { $key = $sort_by; } if ( $key =~ m{ _duration }x ) { @journeys = grep { defined $_->{$key} } @journeys; } my $sort_lambda = sub { $a->{$key} <=> $b->{$key} }; if ( $sort_order eq 'desc' ) { $sort_lambda = sub { $b->{$key} <=> $a->{$key} }; } @journeys = sort { &$sort_lambda } @journeys; $self->render( template => 'sorted_history', journeys => \@journeys, sort_key => $key, ); } sub json_history { my ($self) = @_; Loading
templates/sorted_history.html.ep 0 → 100644 +92 −0 Original line number Diff line number Diff line <h1>High Scores</h1> %= form_for '/history/sorted' => begin <div class="row"> <div class="input-field col s12 m12 l6"> <div> <label> %= radio_button sort_by => 'delay_arr' <span>Verspätung bei Abfahrt</span> </label> </div> <div> <label> %= radio_button sort_by => 'delay_dep' <span>Verspätung bei Ankunft</span> </label> </div> <div> <label> %= radio_button sort_by => 'sched_duration' <span>Geplante Dauer</span> </label> </div> <div> <label> %= radio_button sort_by => 'rt_duration' <span>Tatsächliche Dauer</span> </label> </div> </div> <div class="input-field col s12 m12 l6"> <div> <label> %= radio_button sort_order => 'desc' <span>Absteigend</span> </label> </div> <div> <label> %= radio_button sort_order => 'asc' <span>Aufsteigend</span> </label> </div> </div> <div class="row"> <div class="col s12 m12 l12 center-align"> <button class="btn waves-effect waves-light" type="submit" name="action" value="show"> <i class="material-icons left" aria-hidden="true">send</i> Anzeigen </button> </div> </div> %= end <div class="row"> <div class="col s12"> <table class="striped"> <thead> <tr> <th>Datum</th> <th>Fahrt</th> % if ($sort_key =~ m{delay_}) { <th>Verspätung</th> % } % else { <th></th> % } </tr> </thead> <tbody> % for my $journey (@{$journeys}) { % my $detail_link = '/journey/' . $journey->{id}; <tr> <td><%= $journey->{sched_departure}->strftime('%d.%m.%Y') %></td> <td><a href="<%= $detail_link %>"> <%= $journey->{type} %> <%= $journey->{line} // $journey->{no} %> → <%= $journey->{to_name} %> </a></td> <td> % if ($sort_key =~ m{delay_}) { %= sprintf('%+d', $journey->{$sort_key} / 60) % } % elsif ($sort_key =~ m{_duration}) { %= sprintf('%02d:%02d', $journey->{$sort_key} / 3600, ($journey->{$sort_key} % 3600) / 60) % } </td> </tr> % } </tbody> </table> </div> </div>