1 package MojoFacets::Data;
6 use base 'Mojolicious::Controller';
8 use Data::Dump qw(dump);
16 my $path = $self->app->home->rel_dir('data');
17 die "no data dir $path" unless -d $path;
19 opendir(my $dir, $path) || die $!;
21 grep { -f "$path/$_" && $_ =~ m/\.js(on)?$/ }
25 $self->render( files => [ @files ] );
34 my $path = $self->app->home->rel_file( 'data/' . $self->param('path') );
35 die "$path $!" unless -r $path;
37 $self->session('path' => $self->param('path'));
39 # we could use Mojo::JSON here, but it's too slow
40 # $data = from_json read_file $path;
41 $data = read_file $path;
42 Encode::_utf8_on($data);
43 warn "# json snippet: ", substr($data,0,200);
44 $data = from_json $data;
46 foreach my $e ( @{ $data->{items} } ) {
47 foreach my $n ( keys %$e ) {
48 $stats->{$n}->{count}++;
49 $stats->{$n}->{number}++
50 if $e->{$n} =~ m/^[-+]?([0-9]*\.[0-9]+|[0-9]+)$/;
51 $stats->{$n}->{array} += $#{ $e->{$n} } + 1
52 if ref $e->{$n} eq 'ARRAY';
56 foreach my $n ( keys %$stats ) {
57 next unless defined $stats->{$n}->{array};
58 delete $stats->{$n}->{array}
59 if $stats->{$n}->{array} == $stats->{$n}->{count};
64 $self->redirect_to( '/data/columns' );
72 message => 'Select columns to display',
78 my ($self,$name) = @_;
80 my @array = $self->param($name);
83 $self->session($name => [ @array ]);
85 @array = @{ $self->session($name) };
87 warn "# $name ",dump @array;
92 my ($self,$name,$default) = @_;
94 my $scalar = $self->param($name);
96 if ( defined $scalar ) {
97 $self->session($name => $scalar);
99 $scalar = $self->session($name);
102 if ( ! defined $scalar ) {
104 die "no default for $name" unless defined $scalar;
105 $self->session($name => $scalar);
108 warn "# $name ",dump $scalar;
115 $self->redirect_to('/data/index') unless $data->{items};
117 my @columns = $self->_perm_array('columns');
118 my $order = $self->_perm_scalar('order', $columns[0]);
119 my $offset = $self->_perm_scalar('offset', 0);
120 my $limit = $self->_perm_scalar('limit', 20);
123 $a->{$order} cmp $b->{$order}
124 } @{ $data->{items} };
126 @sorted = splice @sorted, $offset, $limit;
128 # warn "# sorted ", dump @sorted;
130 warn "$order $offset $limit";
136 sorted => [ @sorted ],
137 columns => [ @columns ],