1 package MojoFacets::Data;
6 use base 'Mojolicious::Controller';
8 use Data::Dump qw(dump);
15 my $path = $self->app->home->rel_dir('data');
16 die "no data dir $path" unless -d $path;
18 opendir(my $dir, $path) || die $!;
20 grep { -f "$path/$_" && $_ =~ m/\.js(on)?$/ }
24 $self->render( files => [ @files ] );
33 my $path = $self->app->home->rel_file( 'data/' . $self->param('path') );
34 die "$path $!" unless -r $path;
36 # we could use Mojo::JSON here, but it's too slow
37 $data = from_json read_file $path;
39 foreach my $e ( @{ $data->{items} } ) {
40 foreach my $n ( keys %$e ) {
41 $stats->{$n}->{count}++;
42 $stats->{$n}->{number}++
43 if $e->{$n} =~ m/^[-+]?([0-9]*\.[0-9]+|[0-9]+)$/;
44 $stats->{$n}->{array} += $#{ $e->{$n} } + 1
45 if ref $e->{$n} eq 'ARRAY';
49 foreach my $n ( keys %$stats ) {
50 next unless defined $stats->{$n}->{array};
51 delete $stats->{$n}->{array}
52 if $stats->{$n}->{array} == $stats->{$n}->{count};
57 $self->redirect_to( '/data/columns' );
65 message => 'Select columns to display',
71 my ($self,$name) = @_;
73 my @array = $self->param($name);
76 $self->session($name => [ @array ]);
78 @array = @{ $self->session($name) };
80 warn "# $name ",dump @array;
85 my ($self,$name,$default) = @_;
87 my $scalar = $self->param($name);
89 if ( defined $scalar ) {
90 $self->session($name => $scalar);
92 $scalar = $self->session($name);
95 if ( ! defined $scalar ) {
97 die "no default for $name" unless defined $scalar;
98 $self->session($name => $scalar);
101 warn "# $name ",dump $scalar;
108 $self->redirect_to('/data/index') unless $data->{items};
110 my @columns = $self->_perm_array('columns');
111 my $order = $self->_perm_scalar('order', $columns[0]);
112 my $offset = $self->_perm_scalar('offset', 0);
113 my $limit = $self->_perm_scalar('limit', 20);
116 $a->{$order} cmp $b->{$order}
117 } @{ $data->{items} };
119 @sorted = splice @sorted, $offset, $limit;
121 # warn "# sorted ", dump @sorted;
123 warn "$order $offset $limit";
129 sorted => [ @sorted ],
130 columns => [ @columns ],