--- trunk/lib/Frey/ObjectBrowser.pm 2008/07/10 15:29:01 82
+++ trunk/lib/Frey/ObjectBrowser.pm 2008/07/14 21:22:43 121
@@ -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,66 +30,115 @@
#use Data::Dumper;
#$Data::Dumper::Deparse = 1;
use Data::Dump qw/dump/;
-use Data::Structure::Util qw(unbless);
+use Frey::Web::Row;
+use Frey::Web::Links;
-#method 'html' => positional(
-# isa => 'Continuity::RequestHolder',
-# required => 1,
-#) => sub {
sub html {
my ( $self, $req ) = @_;
- my $params = $req->param;
- warn "# params = ",dump( $params );
-
- use Strix::User;
- use Strix::View::User;
-
- my $s = Strix::User->rows();
- warn "# s = ",dump( $s );
+ my $f = { $req->params };
+ my $layout = delete( $f->{layout} ) || 'div';
- my $f = {};
my @w;
-
- while ( my $u = $s->next ) {
- my $w = Strix::View::User->new( %{ $u } );
- $w->_fey( $u );
- 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 );
- warn "does last element have id? ",dump( $w[$#w]->id );
+ # 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::Row->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 { $_->id } @w ), " from total of ", $s->handle->rows;
+ }
+
+ my $rows_delimiter = '';
+ $rows_delimiter = '
' if $layout eq 'div';
- if ( $w[ $#w ]->_fey ) {
- warn "+++ added new widget\n";
- push @w, Strix::View::User->new( render_as => 'edit' );
+ 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::Row->new( fey_class => $self->fey_class, render_as => 'edit', layout => $layout );
+ $form .= $rows_delimiter . $w->process;
+ push @w, $w;
}
- my $form = join('
', map { $_->process($f) || '[deleted]' } @w );
- my $doc = Continuity::Widget::DomNode->create(
- html => [
- head => [
- link => { rel=>"stylesheet", href=>"/static/form.css", type=>"text/css" }
- ],
- body => [
- h1 => [ 'Strix::User' ],
- form => { method=>'post' } => [
- $form,
- ],
- ],
- ]
+ $form = qq|| 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||;
+ }
+
+ 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|
|
);
- $req->print( $doc->to_string );
+ $self->add_css( 'static/form.css' );
+
+ my $html = $self->page(
+ body => '' . $self->fey_class . '
'
+ . $layout_picker
+ . $pager
+ . qq||
+ );
+
+ warn ">>> $layout ",length( $html ),"\n";
+
+ $req->print( $html );
$req->next;
$f = { $req->params };
+
+ process_links( $req );
}
warn "NO WAY OUT!";