--- trunk/lib/Frey/ObjectBrowser.pm 2008/07/10 15:41:17 83
+++ trunk/lib/Frey/ObjectBrowser.pm 2008/07/11 12:47:50 96
@@ -34,6 +34,9 @@
sub html {
my ( $self, $req ) = @_;
+ my $f = { $req->params };
+ my $layout = delete( $f->{layout} ) || 'div';
+
use Strix::User;
use Strix::View::User;
@@ -45,25 +48,62 @@
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 );
- 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";
+ }
+
+ my $rows_delimiter = '';
+ $rows_delimiter = '
' if $layout eq 'div';
+
+ my $form = join($rows_delimiter, map {
+ $_->_layout( $layout );
+ $_->process($f) || ''
+ } @w );
if ( $w[ $#w ]->_fey ) {
- warn "+++ added new widget\n";
- push @w, Strix::View::User->new( render_as => 'edit' );
+ 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;
}
- my $form = join('
', map { $_->process($f) || '[deleted]' } @w );
+ $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 = join(' ',
+ qq|layout:|,
+ map {
+ if ( $layout eq $_ ) {
+ qq|
$_|;
+ } else {
+ qq|
$_|;
+ }
+ } ( 'div', 'table', 'columns' ),
+ qq|
|,
+ );
+
my $doc = Continuity::Widget::DomNode->create(
html => [
head => [
@@ -71,17 +111,22 @@
],
body => [
h1 => [ 'Strix::User' ],
+ $layout_picker,
form => { method=>'post' } => [
$form,
],
],
]
- );
+ )->to_string;
+
+ warn ">>> $layout ",length( $doc ),"\n";
- $req->print( $doc->to_string );
+ $req->print( $doc );
$req->next;
$f = { $req->params };
+
+ process_links( $req );
}
warn "NO WAY OUT!";