--- trunk/lib/Frey/Web/Item.pm 2008/07/14 23:44:18 129 +++ trunk/lib/Frey/Web/Item.pm 2008/07/16 21:21:13 147 @@ -3,8 +3,10 @@ use Data::Dump qw/dump/; use Carp qw/carp/; -use Moose::Role; +use Moose; +extends 'Frey'; with 'Frey::Web::Field'; +with 'Frey::Web::Layout'; #with 'BonusTypes'; use Moose::Util::TypeConstraints; @@ -24,26 +26,12 @@ required => 1, ); -enum 'Layouts' => qw( div table columns ); -has layout => ( - is => 'rw', - isa => 'Layouts', - default => 'div', - required => 1, -); - has 'display_columns' => ( is => 'rw', isa => 'ArrayRef[Str]', lazy_build => 1, ); -sub id { - my $self = shift; - carp "LEGACY: called ->id"; - $self->fey->id if $self->fey; -} - sub set_from_hash { my ($self, $f) = @_; my $attrmap = $self->fey->meta->get_attribute_map if $self->fey; @@ -65,32 +53,10 @@ return $hash; } -sub render_iterator { - confess "BACKWARD INCOMATIBLE CHANGE: render_iterator works ONLY with 2 params!" unless $#_ == 1; - my ($self, $iterator) = @_; - my $out; -# my %attrmap = %{ $self->meta->get_attribute_map }; -# while( my ($name, $attr) = each %attrmap ) { -# my $reader = $attr->get_read_method; -# my $val = $self->$reader || ''; - foreach my $name ( @{ $self->display_columns } ) { - $out .= $self->render_field( $name, $iterator ) - } - return $out; -} - -sub render_field { - my ($self, $name, $iterator) = @_; - my $field_name = $self->field_name($name); - my $val; - $val = $self->fey->$name if $self->fey && $self->fey->can($name); - $iterator->( $name, $field_name, ucfirst($name), $val ) || ''; # || '' to shut warnings -} - sub main { my ( $self ) = @_; - warn "# ",$self->uuid, " [", $self->id ,"] fey = ",dump( $self->fey ); + warn "# item ",$self->uuid, " fey = ",dump( $self->fey ) if $self->debug; while(1) { my $out; @@ -106,77 +72,21 @@ warn ">>> ",length($out),"\n"; my $f = $self->next($out); $self->set_from_hash($f); - $self->exec_callbacks($f); + $self->exec_callbacks($f) if $self->can('exec_callbacks'); } }; -sub render_edit { - my $self = shift; - warn "# render_edit ",$self->id," ",$self->uuid, " ", $self->layout, "\n"; - my $out = $self->render_iterator( sub { - #warn "# edit render_iterator ",dump( @_ ); - my ( $name, $field_name, $label, $val ) = @_; - return if $name =~ /^_/; - $val ||= ''; - return qq| - - $label - - - - - | if $self->layout eq 'table'; - return qq| - - - - | if $self->layout eq 'columns'; - return qq| -
- -
- -
-
- |; - }); - - return qq|$out| . $self->render_callbacks . qq|| if $self->layout eq 'columns'; - - $self->render_wrapper_class( $out, 'editform' ); -} - -sub render_view { - my $self = shift; - warn "# render_view ",$self->id," ",$self->uuid," ", $self->layout,"\n"; - my $out = $self->render_iterator( sub { - #warn "# view render_iterator ",dump( @_ ); - my ( $name, $field_name, $label, $val ) = @_; - return if $name =~ /^_/; - $val ||= ''; - return qq|$label$val| if $self->layout eq 'table'; - return qq|$val| if $self->layout eq 'columns'; - return qq| -
-
$label
-
$val
-
- - |; - }); - return qq|$out| . $self->render_callbacks . qq|| if $self->layout eq 'columns'; - $self->render_wrapper_class( $out, 'view' ); +sub field_value { + my ( $self, $name ) = @_; + my $val = ''; + $val = $self->fey->$name if $self->fey && $self->fey->can($name); + return $val; } -sub render_wrapper_class { - my ( $self, $out, $class ) = @_; - if ( length($out) == 0 ) { - carp "no output, skipping"; - return ''; - } - $out =~ s/^\t+//mg; # XXX compress output - return $out . qq|| . $self->render_callbacks . qq|| if $self->layout eq 'table'; - return qq|
| . $out . $self->render_callbacks . qq|
|; +sub field_label { + my ( $self, $name ) = @_; + my $label = ucfirst($name); + return $label; } sub _build_display_columns {