--- trunk/lib/Frey/ObjectBrowser.pm 2008/07/08 12:20:08 60 +++ trunk/lib/Frey/ObjectBrowser.pm 2008/07/11 17:53:08 98 @@ -21,8 +21,13 @@ } } -use Data::Dumper; -$Data::Dumper::Deparse = 1; +#use Data::Dumper; +#$Data::Dumper::Deparse = 1; +use Data::Dump qw/dump/; +use Data::Structure::Util qw(unbless); + +use Frey::Web::Row; +use Strix::User; #method 'html' => positional( # isa => 'Continuity::RequestHolder', @@ -31,12 +36,96 @@ sub html { my ( $self, $req ) = @_; - my $params = $req->param; - warn Dumper( $params ); + my $f = { $req->params }; + my $layout = delete( $f->{layout} ) || 'div'; + + my $s = Strix::User->rows(); + #warn "# s = ",dump( $s ); + + my @w; + + while ( my $u = $s->next ) { + my $w = Frey::Web::Row->new( _fey => $u, _layout => $layout ); + warn "# w = ",dump( $w ) if $self->debug; + push @w, $w; + } + + while ( 1 ) { + + 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 'div'; + + my $form = join($rows_delimiter, map { + $_->_layout( $layout ); + $_->process($f) || '' + } @w ); + + if ( $w[ $#w ]->_fey ) { + warn "+++ added new item widget\n"; + my $w = Frey::Web::Row->new( _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 = join(' ', + qq|
layout:|, + map { + if ( $layout eq $_ ) { + qq|$_|; + } else { + qq|$_|; + } + } ( 'div', 'table', 'columns' ), + qq|
|, + ); + + my $doc = Continuity::Widget::DomNode->create( + html => [ + head => [ + link => { rel=>"stylesheet", href=>"/static/form.css", type=>"text/css" } + ], + body => [ + h1 => [ 'Strix::User' ], + $layout_picker, + form => { method=>'post' } => [ + $form, + ], + ], + ] + )->to_string; + + warn ">>> $layout ",length( $doc ),"\n"; + + $req->print( $doc ); + $req->next; - $req->print( Dumper( $params ) ); + $f = { $req->params }; + + process_links( $req ); + } - $req->next; + warn "NO WAY OUT!"; }; 1;