summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xlib/Travelynx.pm4
-rwxr-xr-xlib/Travelynx/Controller/Traveling.pm66
-rw-r--r--share/locales/de_DE.po3
-rw-r--r--share/locales/en_GB.po3
-rw-r--r--templates/journey.html.ep10
5 files changed, 60 insertions, 26 deletions
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm
index 26651b9..8dff817 100755
--- a/lib/Travelynx.pm
+++ b/lib/Travelynx.pm
@@ -3157,7 +3157,9 @@ sub startup {
$authed_r->get('/journey/add')->to('traveling#add_journey_form');
$authed_r->get('/journey/comment')->to('traveling#comment_form');
$authed_r->get('/journey/visibility')->to('traveling#visibility_form');
- $authed_r->get('/journey/:id')->to('traveling#journey_details');
+ $authed_r->get( '/journey/:id' => [ format => [ 'html', 'json' ] ] )
+ ->to( 'traveling#journey_details', format => undef )
+ ->name('journey');
$authed_r->get('/s/*station')->to('traveling#station');
$authed_r->get('/confirm_mail/:token')->to('account#confirm_mail');
$authed_r->post('/account/privacy')->to('account#privacy');
diff --git a/lib/Travelynx/Controller/Traveling.pm b/lib/Travelynx/Controller/Traveling.pm
index a28ae98..a821f3a 100755
--- a/lib/Travelynx/Controller/Traveling.pm
+++ b/lib/Travelynx/Controller/Traveling.pm
@@ -2121,11 +2121,17 @@ sub journey_details {
$self->param( journey_id => $journey_id );
if ( not( $journey_id and $journey_id =~ m{ ^ \d+ $ }x ) ) {
- $self->render(
- 'journey',
- status => 404,
- error => 'notfound',
- journey => {}
+ $self->respond_to(
+ json => {
+ json => { error => 'not found' },
+ status => 404
+ },
+ any => {
+ template => 'journey',
+ status => 404,
+ error => 'notfound',
+ journey => {}
+ }
);
return;
}
@@ -2178,29 +2184,39 @@ sub journey_details {
$delay, $journey->{rt_arrival}->strftime('%H:%M') );
}
- $self->render(
- 'journey',
- title => sprintf(
- 'travelynx: Fahrt %s %s %s am %s',
- $journey->{type}, $journey->{line} // '',
- $journey->{no},
- $journey->{sched_departure}->strftime('%d.%m.%Y um %H:%M')
- ),
- error => undef,
- journey => $journey,
- journey_visibility => $visibility,
- with_map => 1,
- with_share => $with_share,
- share_text => $share_text,
- %{$map_data},
+ $self->respond_to(
+ json => { json => $journey },
+ any => {
+ template => 'journey',
+ title => sprintf(
+ 'travelynx: Fahrt %s %s %s am %s',
+ $journey->{type},
+ $journey->{line} // '',
+ $journey->{no},
+ $journey->{sched_departure}->strftime('%d.%m.%Y um %H:%M')
+ ),
+ error => undef,
+ journey => $journey,
+ journey_visibility => $visibility,
+ with_map => 1,
+ with_share => $with_share,
+ share_text => $share_text,
+ %{$map_data},
+ }
);
}
else {
- $self->render(
- 'journey',
- status => 404,
- error => 'notfound',
- journey => {}
+ $self->respond_to(
+ json => {
+ json => { error => 'not found' },
+ status => 404
+ },
+ any => {
+ template => 'journey',
+ status => 404,
+ error => 'notfound',
+ journey => {}
+ }
);
}
diff --git a/share/locales/de_DE.po b/share/locales/de_DE.po
index 43a43c2..028dda0 100644
--- a/share/locales/de_DE.po
+++ b/share/locales/de_DE.po
@@ -250,6 +250,9 @@ msgstr "Route"
msgid "journey.share"
msgstr "Teilen"
+msgid "journey.export"
+msgstr "Exportieren"
+
msgid "journey.edit"
msgstr "Bearbeiten"
diff --git a/share/locales/en_GB.po b/share/locales/en_GB.po
index 68082d8..e4bb7aa 100644
--- a/share/locales/en_GB.po
+++ b/share/locales/en_GB.po
@@ -250,6 +250,9 @@ msgstr "Route"
msgid "journey.share"
msgstr "Share"
+msgid "journey.export"
+msgstr "Export"
+
msgid "journey.edit"
msgstr "Edit"
diff --git a/templates/journey.html.ep b/templates/journey.html.ep
index a3b7e7b..2699d4a 100644
--- a/templates/journey.html.ep
+++ b/templates/journey.html.ep
@@ -335,6 +335,16 @@
</div>
</div>
% }
+ <div class="row">
+ <div class="col s12 m6 l6">
+ </div>
+ <div class="col s12 m6 l6 center-align">
+ <a class="btn waves-effect waves-light" href="<%= url_for('journey', id => $journey->{id}, format => 'json' ) %>">
+ <i class="material-icons left" aria-hidden="true">file_download</i>
+ %= L('journey.export')
+ </a>
+ </div>
+ </div>
<div class="row hide-on-small-only">
<div class="col s12 m6 l6 center-align">
<a class="waves-effect waves-light red btn action-delete"