--- trunk/lib/Frey/ObjectBrowser.pm 2008/07/11 17:53:08 98
+++ trunk/lib/Frey/ObjectBrowser.pm 2008/07/13 16:17:34 111
@@ -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::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::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';
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::Row->new( fey_class => $self->fey_class, render_as => 'edit', layout => $layout );
$form .= $rows_delimiter . $w->process;
push @w, $w;
}
@@ -88,36 +96,51 @@
$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(
+ my $html = dom2html(
html => [
head => [
link => { rel=>"stylesheet", href=>"/static/form.css", type=>"text/css" }
],
body => [
- h1 => [ 'Strix::User' ],
+ h1 => [ $self->fey_class ],
$layout_picker,
+ $pager,
form => { method=>'post' } => [
$form,
],
],
]
- )->to_string;
+ );
- warn ">>> $layout ",length( $doc ),"\n";
+ warn ">>> $layout ",length( $html ),"\n";
- $req->print( $doc );
+ $req->print( $html );
$req->next;
$f = { $req->params };