--- trunk/lib/Frey/ObjectBrowser.pm 2008/07/09 13:12:03 68 +++ trunk/lib/Frey/ObjectBrowser.pm 2008/07/11 09:25:02 93 @@ -26,6 +26,7 @@ use Data::Dump qw/dump/; use Data::Structure::Util qw(unbless); + #method 'html' => positional( # isa => 'Continuity::RequestHolder', # required => 1, @@ -33,32 +34,83 @@ sub html { my ( $self, $req ) = @_; - my $params = $req->param; - warn "# params = ",dump( $params ); + my $f = { $req->params }; + my $layout = delete( $f->{layout} ) || 'div'; use Strix::User; use Strix::View::User; my $s = Strix::User->rows(); - warn "# s = ",dump( $s ); + #warn "# s = ",dump( $s ); - my $f = {}; my @w; while ( my $u = $s->next ) { - warn "# u = ",dump( $u ); - my $w = Strix::View::User->new( - # FIXME this is cludge - unbless( $u ) - ); - warn "# w = ",dump( $w ); + my $w = Strix::View::User->new( %{ $u } ); + $w->_fey( $u ); + $w->_layout( $layout ); + warn "# w = ",dump( $w ) if $self->debug; push @w, $w; } while ( 1 ) { - my $html = join('
', map { $_->process($f) } @w ); - $req->print( $html ); + + warn "# got $#w elements: ",dump( map { $_->id } @w ); + warn "<<< GOT REQUEST ",dump( $f ); + + # re-apply (changed?) layout to elements + if ( defined $f->{layout} ) { + $layout = delete( $f->{layout} ); + warn "# new layout = $layout\n"; + } + + my $rows_delimiter = '
'; + $rows_delimiter = '' if $layout eq 'table'; + + my $form = join($rows_delimiter, map { + $_->_layout( $layout ); + $_->process($f) || '' + } @w ); + + if ( $w[ $#w ]->_fey ) { + warn "+++ added new item widget\n"; + my $w = Strix::View::User->new( render_as => 'edit' ); + $w->_layout( $layout ); + $form .= $rows_delimiter . $w->process; + push @w, $w; + } + + $form = qq|$form
| if $layout eq 'table'; + + + my $doc = Continuity::Widget::DomNode->create( + html => [ + head => [ + link => { rel=>"stylesheet", href=>"/static/form.css", type=>"text/css" } + ], + body => [ + h1 => [ 'Strix::User' ], + $layout eq 'table' ? + # gen_link doesn't work since Widngets have it's own scope of layout +# gen_link( 'div layout', sub { $layout = 'div' } ) : +# gen_link( 'table layout', sub { $layout = 'table' } ), + qq|div layout| : + qq|table layout|, + form => { method=>'post' } => [ + $form, + ], + ], + ] + )->to_string; + + warn ">>> $layout ",length( $doc ),"\n"; + + $req->print( $doc ); $req->next; + + $f = { $req->params }; + + process_links( $req ); } warn "NO WAY OUT!";