--- trunk/lib/Frey/ObjectBrowser.pm 2008/07/11 10:29:31 95
+++ 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,109 +30,61 @@
#use Data::Dumper;
#$Data::Dumper::Deparse = 1;
use Data::Dump qw/dump/;
-use Data::Structure::Util qw(unbless);
+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';
-
- use Strix::User;
- use Strix::View::User;
-
- my $s = Strix::User->rows();
- #warn "# s = ",dump( $s );
-
+ $self->add_head( 'static/form.css' );
my @w;
- while ( my $u = $s->next ) {
- my $w = Strix::View::User->new( %{ $u } );
- $w->_fey( $u );
- $w->_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 = Strix::View::User->new( render_as => 'edit' );
- $w->_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|| 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||;
- }
-
- 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||
);
- 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 ">>> ",length( $html ),"\n";
- warn ">>> $layout ",length( $doc ),"\n";
-
- $req->print( $doc );
+ $req->print( $html );
$req->next;
+# process_links( $req );
$f = { $req->params };
-
- process_links( $req );
}
warn "NO WAY OUT!";