From 87fc996ecf568d6d73a57c3233e28421352057c1 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Wed, 25 Feb 2015 16:16:35 +0100 Subject: parametric bargraph is parametric --- index.pl | 67 ++++++++++++++++++++++++++++++++++++++++++++++ public/css/default.css | 8 ++++++ public/js/d3funcs.js | 2 +- templates/barform.html.ep | 17 ++++++++++++ templates/bargraph.html.ep | 2 ++ templates/intro.html.ep | 4 +++ 6 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 templates/barform.html.ep diff --git a/index.pl b/index.pl index a76ce5b..1e7888b 100644 --- a/index.pl +++ b/index.pl @@ -25,6 +25,54 @@ app->attr( } ); +helper barplot_args => sub { + my ( $self ) = @_; + + return { + x => { + hour => { + desc => 'Stunde', + label => 'Angebrochene Stunde', + }, + line => { + desc => 'Linie', + }, + station => { + desc => 'Bahnhof', + }, + train_type => { + desc => 'Zugtyp', + }, + weekday => { + desc => 'Wochentag', + }, + weekhour => { + desc => 'Wochentag und Stunde', + label => 'Wochentag und angebrochene Stunde', + }, + }, + y => { + cancel_num => { + desc => 'Anzahl Zugausfälle', + label => 'Zugausfälle', + }, + cancel_rate => { + desc => 'Zugausfälle', + yformat => '.1%', + }, + delay => { + desc => 'Durchschnittliche Verspätung', + label => 'Minuten', + yformat => '.1f', + }, + realtime_rate => { + desc => 'Echtzeitdaten vorhanden', + yformat => '.1%', + }, + }, + }; +}; + helper count_unique_column => sub { my ( $self, $column ) = @_; my $dbh = $self->app->dbh; @@ -231,6 +279,25 @@ get '/all' => sub { get '/bar' => sub { my $self = shift; + + my $xsource = $self->param('xsource'); + my $ysource = $self->param('ysource'); + + my %args = %{$self->barplot_args}; + + if (not $self->param('xlabel')) { + $self->param(xlabel => $args{x}{$xsource}{label} // $args{x}{$xsource}{desc}); + } + if (not $self->param('ylabel')) { + $self->param(ylabel => $args{y}{$ysource}{label} // $args{y}{$ysource}{desc}); + } + if (not $self->param('xformat') and $args{x}{$xsource}{xformat}) { + $self->param(xformat => $args{x}{$xsource}{xformat}); + } + if (not $self->param('yformat') and $args{y}{$ysource}{yformat}) { + $self->param(yformat => $args{y}{$ysource}{yformat}); + } + $self->render('bargraph'); return; }; diff --git a/public/css/default.css b/public/css/default.css index 57cf602..7b37068 100644 --- a/public/css/default.css +++ b/public/css/default.css @@ -2,6 +2,14 @@ body { font-family: sans-serif; } +input, select { + border: 1px solid black; +} + +input.dimension { + width: 4em; +} + svg { font: 10px sans-serif; } diff --git a/public/js/d3funcs.js b/public/js/d3funcs.js index ec6699d..0b68bcb 100644 --- a/public/js/d3funcs.js +++ b/public/js/d3funcs.js @@ -1,6 +1,6 @@ show_bargraph = function(datasource, title, xLabel, yLabel, yFormat, width, height) { - var margin = {top: 40, right: 20, bottom: 30, left: 40}; + var margin = {top: 40, right: 20, bottom: 40, left: 45}; if (!width) { width = 960; diff --git a/templates/barform.html.ep b/templates/barform.html.ep new file mode 100644 index 0000000..4d43f42 --- /dev/null +++ b/templates/barform.html.ep @@ -0,0 +1,17 @@ +%= form_for bar => begin +Bargraph: +% my %yargs = %{$self->barplot_args->{y}}; +% my @yarg_keys = sort keys %yargs; +%= select_field ysource => [map {[$yargs{$_}->{desc}, $_]} @yarg_keys] +aufgeteilt nach +% my %xargs = %{$self->barplot_args->{x}}; +% my @xarg_keys = sort keys %xargs; +%= select_field xsource => [map {[$xargs{$_}->{desc}, $_]} @xarg_keys] +mit +Abmessungen +%= text_field 'width' => 960, class => 'dimension' +x +%= text_field 'height' => 500, class => 'dimension' +Pixel. +%= submit_button 'Go' +% end diff --git a/templates/bargraph.html.ep b/templates/bargraph.html.ep index 310220f..3d5eda2 100644 --- a/templates/bargraph.html.ep +++ b/templates/bargraph.html.ep @@ -1,3 +1,5 @@ +%= include 'barform'; + %= javascript begin show_bargraph('/2ddata.tsv?aggregate=<%= param('xsource') %>&metric=<%= param('ysource') %>', diff --git a/templates/intro.html.ep b/templates/intro.html.ep index 885cd14..1ebb3c0 100644 --- a/templates/intro.html.ep +++ b/templates/intro.html.ep @@ -36,3 +36,7 @@ Insgesamt wurden dabei ist ein Zug durchschnittlich <%= sprintf('%.2f', $stats->{delay_avg}) %> Minuten zu spät. + +
+%= include 'barform'; +
-- cgit v1.2.3