%= stylesheet '/main.css' %= javascript '/jquery-2.1.1.min.js' %= javascript '/image.js' % if ($stop) { % if ($errstr) {
Received an error from the backend service:
%= $errstr
% } % elsif ($frontend eq 'png') { <%= $stop %>.png?<%= $params %>" alt="" id="display" height="<%= $height * 4 %>" width="<%= $width * 4 %>"/> % } % elsif ($frontend eq 'html') { % } % elsif ($frontend eq 'infoscreen') {

<%= $stop %>.html?<%= $params %>&template=infoscreen">Infoscreen for <%= $city %> <%= $stop %>

Preview:
% } % elsif ($frontend eq 'json') {

<%= $stop %>.json?<%= $params %>">JSON data for <%= $city %> <%= $stop %>

Data is cached for 1 minute. JSON format:

NOTE: The JSON interface is not guaranteed to be stable. The data layout may change any time.

% } % } # ($city and $stop) % else {

VRR-Infoscreen shows the next departures at a public transit stop, just like the Lumino LED displays used at some stops.

It works best for the VRR (Verkehrsverbund Rhein-Ruhr), but also supports most other German transit networks.

% }
% if (my $error = stash 'error') {

Error: <%= $error %>

% } %= form_for _redirect => begin
Stadt
%= text_field 'city'
Haltestelle
%= text_field 'stop' %= submit_button 'Display'
optional:
display height
%= number_field 'no_lines', min => 1, max => 10
min. offset [minutes]
%= number_field 'offset', min => 0
match line prefixes¹
%= text_field 'line'
match platform¹
%= text_field 'platform'
backend
% my @efa_backends = map { ["$_ (EFA)" => "efa.$_"] } efa_service_list(); % @efa_backends = map { $_->[1] } sort { $a->[0] cmp $b->[0] } % map { [$_->[0], $_] } @efa_backends; %= select_field backend => [['EFA / VRR' => 'vrr'], ['DB (HAFAS)' => 'db'], ['ASEAG (URA)' => 'aseag'], @efa_backends]
frontend
%= select_field frontend => [['Image (PNG)' => 'png'], ['HTML' => 'html'], ['Infoscreen' => 'infoscreen'], ['JSON' => 'json']]
% end

¹ separate values with commas, e.g. NE,U,10

notes:
vrr-fakedisplay v<%= $version %>