diff options
author | Daniel Friesel <derf@finalrewind.org> | 2011-07-21 17:48:31 +0200 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2011-07-21 17:48:31 +0200 |
commit | 368d99d3e90a3491fe651b740d5a1bffd434fb6d (patch) | |
tree | 53bacb2b5d4a868c6660e437f6302cc4f642f7c1 | |
parent | 821c88d0de2263ae3c968160e2925bf834128b72 (diff) |
Prepare for multi-lcd template
-rwxr-xr-x | bin/db-fakedisplay | 65 | ||||
-rw-r--r-- | share/single-lcd.html | 2 |
2 files changed, 44 insertions, 23 deletions
diff --git a/bin/db-fakedisplay b/bin/db-fakedisplay index 3653f9d..f9ce899 100755 --- a/bin/db-fakedisplay +++ b/bin/db-fakedisplay @@ -14,19 +14,25 @@ our $VERSION = '0.00'; my @params; my ( $station, @platforms ); +my $mode = 'single'; my $template_file; my $template; GetOptions( 'h|help' => sub { show_help(0) }, + 'm|mode=s' => \$mode, 't|template=s' => \&handle_template, 'V|version' => sub { say "db-fakedisplay version ${VERSION}"; exit 0 }, ) or show_help(1); +if ( $mode eq 'single' and not $template_file ) { + $template_file = dist_file( 'db-fakedisplay', 'single-lcd.html' ); +} + ( $station, @platforms ) = @ARGV; -$template_file //= dist_file( 'db-fakedisplay', 'single-lcd.html' ); +$template_file //= dist_file( 'db-fakedisplay', 'multi-lcd.html' ); $template = HTML::Template->new( filename => $template_file ); if ( not defined $station ) { @@ -57,24 +63,8 @@ sub show_help { exit $exit_status; } -if ( not @platforms ) { - for my $result ( $status->results ) { - if ( $result->platform ~~ \@platforms ) { - next; - } - push( @platforms, $result->platform ); - } - @platforms = sort { $a <=> $b } @platforms; -} - -for my $platform (@platforms) { - my $result = first { $_->platform =~ m{ ^ $platform (?: \s | $ )}x } - $status->results; - - if ( not defined $result ) { - push( @params, { platform => $platform } ); - next; - } +sub add_result { + my ($result) = @_; push( @params, @@ -87,9 +77,40 @@ for my $platform (@platforms) { info => $result->info, } ); + + return; +} + +if ( $mode eq 'single' ) { + if ( not @platforms ) { + for my $result ( $status->results ) { + if ( $result->platform ~~ \@platforms ) { + next; + } + push( @platforms, $result->platform ); + } + @platforms = sort { $a <=> $b } @platforms; + } + + for my $platform (@platforms) { + my $result = first { $_->platform =~ m{ ^ $platform (?: \s | $ )}x } + $status->results; + + if ( not defined $result ) { + push( @params, { platform => $platform } ); + } + else { + add_result($result); + } + } +} +else { + for my $result ( $status->results ) { + add_result($result); + } } -$template->param( platform => \@params, ); +$template->param( departures => \@params, ); say $template->output; @@ -137,9 +158,9 @@ Show version information. B<db-fakedisplay> uses HTML::Template(3pm) to create the display. In case you want to create a custom template, the following variables are available: -=head2 platform +=head2 departures -This is a loop variable, use it with C<< <TMPL_LOOP platform> foo <TMPL_VAR +This is a loop variable, use it with C<< <TMPL_LOOP departures> foo <TMPL_VAR bar> ... </TMPL_LOOP> >>. This loop runs once for each requested platform. Inside it, you can use the diff --git a/share/single-lcd.html b/share/single-lcd.html index 0f5b9f0..6c5d26b 100644 --- a/share/single-lcd.html +++ b/share/single-lcd.html @@ -80,7 +80,7 @@ </head> <body> -<TMPL_LOOP platform> +<TMPL_LOOP departures> <div class="display"> <div class="platform"> |