210 |
|
|
211 |
my $label_width = 1; # minimum |
my $label_width = 1; # minimum |
212 |
|
|
213 |
|
my @fields = |
|
foreach my $name ( |
|
214 |
grep { |
grep { |
215 |
die "$_ doesn't have meta" unless $class->can('meta'); |
die "$_ doesn't have meta" unless $class->can('meta'); |
216 |
! $class->meta->get_attribute($_)->is_lazy |
! $class->meta->get_attribute($_)->is_lazy |
217 |
&& ! defined $default->{$_} |
&& ! defined $default->{$_} |
218 |
&& ! m{^_} # skip _private |
&& ! m{^_} # skip _private |
219 |
} $self->attributes |
} $self->attributes; |
220 |
) { |
|
221 |
|
my $fieldset; |
222 |
|
|
223 |
|
my $last; |
224 |
|
foreach my $name ( @fields ) { |
225 |
|
my $set = $name; |
226 |
|
$set =~ s{_[^_]+$}{}; |
227 |
|
push @{ $fieldset->{$set} }, $name; |
228 |
|
} |
229 |
|
|
230 |
|
delete( $fieldset->{$_} ) |
231 |
|
foreach ( grep { $#{ $fieldset->{$_} } == 0 } keys %$fieldset ); |
232 |
|
|
233 |
|
warn "XXX fields = ",dump( @fields ); |
234 |
|
warn "XXX set = ",dump( $fieldset ); |
235 |
|
|
236 |
|
foreach my $name ( @fields ) { |
237 |
my $attr_type = ''; |
my $attr_type = ''; |
238 |
my $type = $name =~ m/^pass/ ? 'password' : 'text'; |
my $type = $name =~ m/^pass/ ? 'password' : 'text'; |
239 |
my $label = $name; |
my $label = $name; |
284 |
$label_title .= qq| class="required"| if $required->{$name}; |
$label_title .= qq| class="required"| if $required->{$name}; |
285 |
$label =~ s/_/ /g; |
$label =~ s/_/ /g; |
286 |
|
|
287 |
$form .= qq|<label for="$name"$label_title>$label</label>$value_html<br>|; |
my $set = $name; |
288 |
|
$set =~ s{_[^_]+$}{}; |
289 |
|
|
290 |
|
my ( $before, $after ) = ( '', '<br>' ); |
291 |
|
|
292 |
|
if ( my $s = $fieldset->{$set} ) { |
293 |
|
if ($s->[0] eq $name) { |
294 |
|
$before = qq| |
295 |
|
<fieldset> |
296 |
|
<legend>$set</legend> |
297 |
|
|; |
298 |
|
} elsif ( $s->[ -1 ] eq $name ) { |
299 |
|
$after = qq| |
300 |
|
</fieldset> |
301 |
|
|; |
302 |
|
} |
303 |
|
$label =~ s{^\Q$set\E\s+}{}; |
304 |
|
} |
305 |
|
|
306 |
|
$form .= qq|$before<label for="$name"$label_title>$label</label>$value_html $after|; |
307 |
my $ll = length($label); |
my $ll = length($label); |
308 |
$label_width = $ll if $ll > $label_width; |
$label_width = $ll if $ll > $label_width; |
309 |
} |
} |
339 |
br { |
br { |
340 |
clear: left; |
clear: left; |
341 |
} |
} |
342 |
|
|
343 |
|
fieldset { |
344 |
|
margin: 0; |
345 |
|
padding: 0; |
346 |
|
} |
347 |
|); |
|); |
348 |
|
|
349 |
my $html; |
my $html; |