132 |
warn "# max_value_len: $max_value_len"; |
warn "# max_value_len: $max_value_len"; |
133 |
#my $render = eval $class . '->render_' . $name; |
#my $render = eval $class . '->render_' . $name; |
134 |
my $call = 'render_' . $name; |
my $call = 'render_' . $name; |
135 |
my $render = $self->class->$call; |
my $render = $self->class->$call if $self->class->can($call); |
136 |
warn "## render $@"; |
warn "## render $@"; |
137 |
|
|
138 |
if ( $#values > 3 && $render !~ m{radio} ) { |
if ( $#values > 3 && $render !~ m{radio} ) { |
176 |
$html = qq|<div style="display: block;">$radio</div>|; |
$html = qq|<div style="display: block;">$radio</div>|; |
177 |
} |
} |
178 |
|
|
179 |
return |
return $html; |
|
# qq|<input type="text" name="$name">| . |
|
|
$html |
|
180 |
} |
} |
181 |
|
|
182 |
sub params_form { |
sub params_form { |
260 |
} elsif ( $attr->has_type_constraint && $attr->type_constraint->can('values') ) { |
} elsif ( $attr->has_type_constraint && $attr->type_constraint->can('values') ) { |
261 |
$value_html = $self->select_values( $name, $attr_type, $attr->type_constraint->values ); |
$value_html = $self->select_values( $name, $attr_type, $attr->type_constraint->values ); |
262 |
} elsif ( $class->can( $name . '_available' ) ) { |
} elsif ( $class->can( $name . '_available' ) ) { |
263 |
my $available = $class->$name . '_available'; |
my $available = $name . '_available'; |
264 |
|
$available = $class->$available; |
265 |
confess $@ if $@; |
confess $@ if $@; |
266 |
$available =~ s/^\s+//gs; |
$available =~ s/^\s+//gs; |
267 |
$available =~ s/\s+$//gs; |
$available =~ s/\s+$//gs; |
290 |
$label_title .= qq| class="required"|; |
$label_title .= qq| class="required"|; |
291 |
$value_html =~ s{(<\S+)\s}{$1 class=required }; |
$value_html =~ s{(<\S+)\s}{$1 class=required }; |
292 |
} |
} |
|
$label =~ s/_/ /g; |
|
293 |
|
|
294 |
my $set = $name; |
my $set = $name; |
295 |
$set =~ s{_[^_]+$}{}; |
$set =~ s{_[^_]+$}{}; |
307 |
</fieldset> |
</fieldset> |
308 |
|; |
|; |
309 |
} |
} |
310 |
$label =~ s{^\Q$set\E\s+}{}; |
$label =~ s{^\Q$set\E_+}{}; |
311 |
} |
} |
312 |
|
|
313 |
|
$label = $self->_label( $label ); |
314 |
$form .= qq|$before<label for="$name"$label_title>$label</label>$value_html $after|; |
$form .= qq|$before<label for="$name"$label_title>$label</label>$value_html $after|; |
315 |
my $ll = length($label); |
my $ll = length($label); |
316 |
$label_width = $ll if $ll > $label_width; |
$label_width = $ll if $ll > $label_width; |
364 |
# http://www.quirksmode.org/oddsandends/forms.html |
# http://www.quirksmode.org/oddsandends/forms.html |
365 |
# $form =~ s{<([^>]+)(name=")([^"]+)(")([^>]*)>}{<$1$2$3$4 id="$3" $5}gs; |
# $form =~ s{<([^>]+)(name=")([^"]+)(")([^>]*)>}{<$1$2$3$4 id="$3" $5}gs; |
366 |
|
|
367 |
$html = qq| |
if ( $form ) { |
368 |
<h1>$class params</h1> |
|
369 |
<form name="$form_id" id="$form_id" method="post"> |
if ( $self->class->can('form_header') ) { |
370 |
$form |
$html = $self->class->form_header; |
371 |
<input type="submit" value="Run $class"> |
} else { |
372 |
</form> |
$html = qq| |
373 |
| if $form; |
<h1>$class params</h1> |
374 |
|
|; |
375 |
|
} |
376 |
|
|
377 |
|
$html .= qq| |
378 |
|
<form name="$form_id" id="$form_id" method="post"> |
379 |
|
$form |
380 |
|
<input type="submit" value="Run $class"> |
381 |
|
</form> |
382 |
|
|; |
383 |
|
$html .= $self->class->form_footer if $self->class->can('form_footer'); |
384 |
|
} |
385 |
|
|
386 |
$self->add_status({ |
$self->add_status({ |
387 |
$self->class => { |
$self->class => { |
395 |
return $html; |
return $html; |
396 |
} |
} |
397 |
|
|
398 |
|
sub _label { |
399 |
|
my ($self,$name) = @_; |
400 |
|
my $labels = $self->class->form_labels if $self->class->can('form_labels'); |
401 |
|
my $label = $labels->{$name}; |
402 |
|
if ( ! defined $label ) { |
403 |
|
$label = $name; |
404 |
|
$label =~ s{_}{ }g; |
405 |
|
} |
406 |
|
return $label; |
407 |
|
} |
408 |
|
|
409 |
=head1 SEE ALSO |
=head1 SEE ALSO |
410 |
|
|
411 |
L<http://www.quirksmode.org/css/forms.html> for info on CSS2 forms |
L<http://www.quirksmode.org/css/forms.html> for info on CSS2 forms |