diff options
| -rw-r--r-- | index.pl | 67 | ||||
| -rw-r--r-- | public/css/default.css | 8 | ||||
| -rw-r--r-- | public/js/d3funcs.js | 2 | ||||
| -rw-r--r-- | templates/barform.html.ep | 17 | ||||
| -rw-r--r-- | templates/bargraph.html.ep | 2 | ||||
| -rw-r--r-- | templates/intro.html.ep | 4 | 
6 files changed, 99 insertions, 1 deletions
@@ -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  <b><%= sprintf('%.2f', $stats->{delay_avg}) %> Minuten</b> zu spät.  </div> + +<div class="forms"> +%= include 'barform'; +</div>  | 
