--- trunk/lib/Frey/ObjectBrowser.pm 2008/07/10 10:28:11 78 +++ trunk/lib/Frey/ObjectBrowser.pm 2008/07/13 16:17:34 111 @@ -1,8 +1,14 @@ package Frey::ObjectBrowser; use Moose; -use MooseX::Method; extends 'Frey'; +with 'Frey::Web'; + +has 'fey_class' => ( + is => 'rw', + isa => 'Str', + required => 1, +); my @callbacks; @@ -24,53 +30,107 @@ #use Data::Dumper; #$Data::Dumper::Deparse = 1; use Data::Dump qw/dump/; -use Data::Structure::Util qw(unbless); +use Frey::Web::Row; +use Frey::Web::Links; -#method 'html' => positional( -# isa => 'Continuity::RequestHolder', -# required => 1, -#) => sub { sub html { my ( $self, $req ) = @_; - my $params = $req->param; - warn "# params = ",dump( $params ); - - use Strix::User; - use Strix::View::User; - - my $s = Strix::User->rows(); - warn "# s = ",dump( $s ); + my $f = { $req->params }; + my $layout = delete( $f->{layout} ) || 'div'; - my $f = {}; my @w; - - while ( my $u = $s->next ) { - warn "# u = ",dump( $u ); - my $w = Strix::View::User->new( - #%{ unbless( $u ) }, # FIXME this is cludge - %{ $u } # much better :-) - ); - $w->_fey( $u ); - warn "# w = ",dump( $w ); - push @w, $w; - } - - push @w, Strix::View::User->new( render_as => 'edit' ); + my $pager; while ( 1 ) { - warn "# got $#w elements\n"; + warn "<<< GOT REQUEST ",dump( $f ); + + # re-apply (changed?) layout to elements + if ( defined $f->{layout} ) { + $layout = delete( $f->{layout} ); + warn "# new layout = $layout\n"; + } + + if ( ! @w || $f->{page} || $f->{per_page} ) { + my $s; + ( $s, $pager ) = $self->fey_class->collection( $f ); + warn "# s ",$self->fey_class," = ",dump( $s ) if $self->debug; + + @w = (); + + while ( my $u = $s->next ) { + my $w = Frey::Web::Row->new( fey_class => $self->fey_class, fey => $u, layout => $layout ); + warn "# w = ",dump( $w ) if $self->debug; + push @w, $w; + } + + warn "# got $#w elements: ",dump( map { $_->id } @w ), " from total of ", $s->handle->rows; + } + + my $rows_delimiter = ''; + $rows_delimiter = '
' if $layout eq 'div'; + + my $form = join($rows_delimiter, map { + $_->layout( $layout ); # FIXME do we need this still? + $_->process($f) || '' + } @w ); + + if ( $w[ $#w ]->fey ) { + warn "+++ added new item widget\n"; + my $w = Frey::Web::Row->new( fey_class => $self->fey_class, render_as => 'edit', layout => $layout ); + $form .= $rows_delimiter . $w->process; + push @w, $w; + } + + $form = qq|$form
| if $layout eq 'table'; + + if ( $layout eq 'columns' ) { + # add header to table + my $header = $w[0]->render_iterator( sub { + my ( $name, $field_name, $label, $val ) = @_; + return if $name =~ /^_/; + return qq|$label|; + }); + $form = qq|$header$form
|; + } + + my $layout_picker = + qq|
layout: | . + Frey::Web::Links->new( + name => 'layout', + current => $layout, + values => [ 'div', 'table', 'columns' ], + )->links . + qq|
| + ; + + my $pager = join( ' ', + qq|
|, + 'Showing', + $pager->first, '-', $pager->last, + 'of', + $pager->total_entries, + 'results
', +# 'page', $pager->current_page, '/', $pager->last_page, + Frey::Web::Links->new( + name => 'page', + current => $pager->current_page, + values => [ $pager->first_page .. $pager->last_page ], + )->links, + qq|
| + ); - my $form = join('
', map { $_->process($f) } @w ); - my $doc = Continuity::Widget::DomNode->create( + my $html = dom2html( html => [ head => [ link => { rel=>"stylesheet", href=>"/static/form.css", type=>"text/css" } ], body => [ - h1 => [ 'Strix::User' ], + h1 => [ $self->fey_class ], + $layout_picker, + $pager, form => { method=>'post' } => [ $form, ], @@ -78,10 +138,14 @@ ] ); - $req->print( $doc->to_string ); + warn ">>> $layout ",length( $html ),"\n"; + + $req->print( $html ); $req->next; $f = { $req->params }; + + process_links( $req ); } warn "NO WAY OUT!";