--- trunk/lib/Frey/ObjectBrowser.pm 2008/07/11 17:53:08 98 +++ trunk/lib/Frey/ObjectBrowser.pm 2008/07/17 19:11:01 160 @@ -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,105 +30,61 @@ #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; +use Frey::Web::Item; +use Frey::Web::Links; +use Frey::Pager; -#method 'html' => positional( -# isa => 'Continuity::RequestHolder', -# required => 1, -#) => sub { sub html { my ( $self, $req ) = @_; - my $f = { $req->params }; - my $layout = delete( $f->{layout} ) || 'div'; - - my $s = Strix::User->rows(); - #warn "# s = ",dump( $s ); - + $self->add_head( 'static/form.css' ); 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; - } + my $f = { $req->params }; - while ( 1 ) { - - warn "# got $#w elements: ",dump( map { $_->id } @w ); - warn "<<< GOT REQUEST ",dump( $f ); + my $pager; - # re-apply (changed?) layout to elements - if ( defined $f->{layout} ) { - $layout = delete( $f->{layout} ); - warn "# new layout = $layout\n"; - } + while ( 1 ) { - my $rows_delimiter = ''; - $rows_delimiter = '
' if $layout eq 'div'; + warn "<<< GOT REQUEST ",dump( $f ); - 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; + $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' )); } - $form = qq|$form
| if $layout eq 'table'; + my $form = $pager->items_in_layout( $f ); + $form = $last->render_table_wrapper( $form ); - 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 $html = $self->page( + body => '

' . $self->fey_class . '

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