--- trunk/lib/Frey/ObjectBrowser.pm 2008/07/11 17:53:08 98
+++ trunk/lib/Frey/ObjectBrowser.pm 2008/07/15 17:14:10 135
@@ -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,35 +30,21 @@
#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;
-#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 );
-
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 $pager;
while ( 1 ) {
- warn "# got $#w elements: ",dump( map { $_->id } @w );
warn "<<< GOT REQUEST ",dump( $f );
# re-apply (changed?) layout to elements
@@ -61,17 +53,33 @@
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 );
+ $_->layout( $layout ); # FIXME do we need this still?
$_->process($f) || ''
} @w );
- if ( $w[ $#w ]->_fey ) {
+ if ( $w[ $#w ]->fey ) {
warn "+++ added new item widget\n";
- my $w = Frey::Web::Row->new( _render_as => 'edit', _layout => $layout );
+ my $w = Frey::Web::CRUD->new( fey_class => $self->fey_class, render_as => 'edit', layout => $layout );
$form .= $rows_delimiter . $w->process;
push @w, $w;
}
@@ -80,44 +88,53 @@
if ( $layout eq 'columns' ) {
# add header to table
- my $header = $w[0]->render_iterator( sub {
- my ( $name, $field_name, $label, $val ) = @_;
+ my $header;
+ foreach my $name ( @{ $w[0]->display_columns } ) {
return if $name =~ /^_/;
- return qq|$label | |;
- });
+ my $label = $w[0]->field_label( $name );
+ $header .= qq|$label | |;
+ };
$form = qq||;
}
- my $layout_picker = join(' ',
- qq|layout:|,
- map {
- if ( $layout eq $_ ) {
- qq|
$_|;
- } else {
- qq|
$_|;
- }
- } ( 'div', 'table', 'columns' ),
- qq|
|,
+ 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|
|
);
- 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;
+ $self->add_css( 'static/form.css' );
+
+ my $html = $self->page(
+ body => '' . $self->fey_class . '
'
+ . $layout_picker
+ . $pager
+ . qq||
+ );
- warn ">>> $layout ",length( $doc ),"\n";
+ warn ">>> $layout ",length( $html ),"\n";
- $req->print( $doc );
+ $req->print( $html );
$req->next;
$f = { $req->params };