--- trunk/lib/Frey/Action.pm 2009/06/28 22:22:20 1100 +++ trunk/lib/Frey/Action.pm 2009/06/28 23:08:02 1101 @@ -210,15 +210,30 @@ my $label_width = 1; # minimum - - foreach my $name ( + my @fields = grep { die "$_ doesn't have meta" unless $class->can('meta'); ! $class->meta->get_attribute($_)->is_lazy && ! defined $default->{$_} && ! m{^_} # skip _private - } $self->attributes - ) { + } $self->attributes; + + my $fieldset; + + my $last; + foreach my $name ( @fields ) { + my $set = $name; + $set =~ s{_[^_]+$}{}; + push @{ $fieldset->{$set} }, $name; + } + + delete( $fieldset->{$_} ) + foreach ( grep { $#{ $fieldset->{$_} } == 0 } keys %$fieldset ); + +warn "XXX fields = ",dump( @fields ); +warn "XXX set = ",dump( $fieldset ); + + foreach my $name ( @fields ) { my $attr_type = ''; my $type = $name =~ m/^pass/ ? 'password' : 'text'; my $label = $name; @@ -269,7 +284,26 @@ $label_title .= qq| class="required"| if $required->{$name}; $label =~ s/_/ /g; - $form .= qq|$value_html
|; + my $set = $name; + $set =~ s{_[^_]+$}{}; + + my ( $before, $after ) = ( '', '
' ); + + if ( my $s = $fieldset->{$set} ) { + if ($s->[0] eq $name) { + $before = qq| +
+ $set + |; + } elsif ( $s->[ -1 ] eq $name ) { + $after = qq| +
+ |; + } + $label =~ s{^\Q$set\E\s+}{}; + } + + $form .= qq|$before$value_html $after|; my $ll = length($label); $label_width = $ll if $ll > $label_width; } @@ -305,6 +339,11 @@ br { clear: left; } + + fieldset { + margin: 0; + padding: 0; + } |); my $html;