--- trunk/lib/Frey/ObjectBrowser.pm 2008/07/16 14:14:18 142 +++ trunk/lib/Frey/ObjectBrowser.pm 2008/07/16 14:17:46 143 @@ -33,113 +33,58 @@ use Frey::Web::Item; use Frey::Web::Links; +use Frey::Pager; sub html { my ( $self, $req ) = @_; + $self->add_css( 'static/form.css' ); + my @w; + my $f = { $req->params }; - my $layout = delete( $f->{layout} ) || 'div'; - my @w; my $pager; while ( 1 ) { - - 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::CRUD->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 { $_->fey->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::CRUD->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'; + warn "<<< GOT REQUEST ",dump( $f ); - if ( $layout eq 'columns' ) { - # add header to table - my $header; - foreach my $name ( @{ $w[0]->display_columns } ) { - return if $name =~ /^_/; - my $label = $w[0]->field_label( $name ); - $header .= qq|$label|; - }; - $form = qq|$header$form
|; + $pager = Frey::Pager->new( + fey_class => $self->fey_class, + item_constructor => sub { + Frey::Web::CRUD->new( fey_class => $self->fey_class, @_ ); + }, + ) if ! $pager; + + $pager->pager->current_page( $f->{page} ) if $f->{page}; + $pager->pager->entries_per_page( $f->{pre_page} ) if $f->{per_page}; + + $pager->update_collection; + + my $last = $pager->last_item; + + if ( $last->fey ) { + warn "+++ add item widget\n"; + $pager->add_item( $pager->item_constructor->( render_as => 'edit' )); } - 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|
| - ); - - $self->add_css( 'static/form.css' ); + my $form = $pager->items_in_layout( $f ); + $form = $last->render_table_wrapper( $form ); - my $html = $self->page( + my $html = $self->page( body => '

' . $self->fey_class . '

' - . $layout_picker - . $pager + . $last->layout_picker # FIXME ugly + . $pager->render_pager . qq|
$form
| ); - warn ">>> $layout ",length( $html ),"\n"; + warn ">>> ",length( $html ),"\n"; $req->print( $html ); $req->next; +# process_links( $req ); $f = { $req->params }; - - process_links( $req ); } warn "NO WAY OUT!";