edit facet filters
authorDobrica Pavlinusic <dpavlin@rot13.org>
Fri, 2 Apr 2010 15:31:47 +0000 (17:31 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Fri, 2 Apr 2010 15:31:47 +0000 (17:31 +0200)
lib/MojoFacets/Data.pm
templates/data/columns.html.ep
templates/data/facet.html.ep
templates/data/table.html.ep

index 64456b8..a10af70 100644 (file)
@@ -73,6 +73,7 @@ sub columns {
     $self->render(
                message => 'Select columns to display',
                stats => $stats,
+               checked => $self->_checked( $self->_perm_array('columns') ),
        );
 }
 
@@ -83,8 +84,12 @@ sub _perm_array {
 
        if ( @array ) {
                $self->session($name => [ @array ]);
-       } else {
-               @array = @{ $self->session($name) };
+       } elsif ( my $session = $self->session($name) ) {
+               if ( ref $session eq 'ARRAY' ) {
+                       @array = @$session;
+               } else {
+                       die "$name not array ",dump($session);
+               }
        }
        warn "# $name ",dump @array;
        return @array;
@@ -111,6 +116,24 @@ sub _perm_scalar {
        return $scalar;
 }
 
+sub filter {
+       my $self = shift;
+
+       my $name = $self->param('filter_name') || die "name?";
+       my @vals = $self->param('filter_vals');
+
+       warn "# filter $name vals ",dump(@vals);
+
+
+       my $filters = $self->session('filters');
+       $filters->{$name} = [ @vals ];
+       $self->session( 'filters' => $filters );
+
+       warn "# filters ",dump($self->session('filters'));
+
+       $self->redirect_to('/data/table');
+}
+
 sub table {
     my $self = shift;
 
@@ -142,6 +165,7 @@ sub table {
 
 }
 
+
 sub facet {
        my $self = shift;
 
@@ -159,7 +183,22 @@ sub facet {
 
 #      warn "# facet $name ",dump $facet;
 
-       $self->render( name => $name, facet => $facet )
+       my $checked;
+       if ( my $f = $self->session('filters') ) {
+               if ( defined $f->{$name} ) {
+                       $checked = $self->_checked( @{ $f->{$name} } );
+               }
+       }
+
+       $self->render( name => $name, facet => $facet, checked => $checked );
+}
+
+sub _checked {
+       my $self = shift;
+       my $checked;
+       $checked->{$_}++ foreach @_;
+       warn "# _checked ",dump($checked);
+       return $checked;
 }
 
 1;
index d55003d..5d3eb5b 100644 (file)
@@ -4,8 +4,6 @@
 <form method=post action=/data/table >
 
 <ul>
-% my $checked;
-% if ( session('columns') ) { $checked->{$_}++ foreach @{ session('columns') } }
 % foreach my $n ( sort { $stats->{$b}->{count} <=> $stats->{$a}->{count} } keys %$stats ) {
 <li>
 <label>
index bf10361..9ca6148 100644 (file)
@@ -2,10 +2,21 @@
 
 <%#= dumper $facet %>
 
+<form method=post action=/data/filter >
+<input type=hidden name=filter_name value="<%= $name %>">
+<input type=submit value="Filter <%= $name %>">
+
 <ul>
 % foreach my $n ( sort { $facet->{$b} <=> $facet->{$a} } keys %$facet ) {
 <li>
+<label>
+<input type=checkbox name="filter_vals" value="<%= $n %>" <%= $checked->{$n} ? 'checked' : '' %>>
 <%= $n %>
 <span class="count"><%= $facet->{$n} %></span>
+</label>
 % }
 </ul>
+
+<input type=submit value="Filter <%= $name %>">
+
+</form>
index 6c44c2d..509aac5 100644 (file)
@@ -1,7 +1,5 @@
 % layout 'default';
 
-columns: <%= join(',',@$columns) %>
-
 <table border=1>
 
 <tr>
@@ -32,3 +30,8 @@ columns: <%= join(',',@$columns) %>
 % }
 </div>
 
+<ul>
+<li>rows: <%= $rows %> offset: <%= $offset %> limit: <%= $limit %>
+<li>columns: <%= join(',',@$columns) %>
+<li>filters: <%= dumper session 'filters' %>
+</ul>