HTML-FormHandler
view release on metacpan or search on metacpan
lib/HTML/FormHandler/Render/Simple.pm view on Meta::CPAN
foreach my $field ( $self->sorted_fields ) {
$output .= $self->render_field($field);
}
$output .= $self->render_end;
return $output;
}
sub render_form_errors {
my $self = shift;
return '' unless $self->has_form_errors;
my $output = "\n<div class=\"form_errors\">";
$output .= qq{\n<span class="error_message">$_</span>}
for $self->all_form_errors;
$output .= "\n</div>";
return $output;
}
sub render_field {
my ( $self, $field ) = @_;
if ( ref( \$field ) eq 'SCALAR' ) {
$field = $self->field($field);
}
die "must pass field to render_field"
unless ( defined $field && $field->isa('HTML::FormHandler::Field') );
# widgets should be in camel case, since they are Perl package names
my $widget = ucc_widget($field->widget);
return '' if $widget eq 'no_render';
my $rendered_field;
my $form_render = 'render_' . $widget;
if ( $self->can($form_render) ) {
$rendered_field = $self->$form_render($field);
}
elsif ( $field->can('render') ) {
$rendered_field = $field->render;
}
else {
die "No widget method found for '$widget' in H::F::Render::Simple";
}
return $self->wrap_field( $field, $rendered_field );
}
sub wrap_field {
my ( $self, $field, $rendered_field ) = @_;
return "\n$rendered_field" if $field->uwrapper eq 'none';
return "\n$rendered_field" if ! $field->do_wrapper;
my $output = "\n";
my $wrapper_tag = $field->get_tag('wrapper_tag');
$wrapper_tag ||= $field->has_flag('is_repeatable') ? 'fieldset' : 'div';
my $attrs = process_attrs($field->wrapper_attributes);
$output .= qq{<$wrapper_tag$attrs>};
if( $wrapper_tag eq 'fieldset' ) {
$output .= '<legend>' . $field->loc_label . '</legend>';
}
elsif ( ! $field->get_tag('label_none') && $field->do_label && length( $field->label ) > 0 ) {
$output .= "\n" . $self->render_label($field);
}
$output .= "\n$rendered_field";
$output .= qq{\n<span class="error_message">$_</span>}
for $field->all_errors;
$output .= "\n</$wrapper_tag>";
return "$output";
}
sub render_text {
my ( $self, $field ) = @_;
my $output = '<input type="' . $field->input_type . '" name="';
$output .= $field->html_name . '"';
$output .= ' id="' . $field->id . '"';
$output .= ' size="' . $field->size . '"' if $field->size;
$output .= ' maxlength="' . $field->maxlength . '"' if $field->maxlength;
$output .= ' value="' . $field->html_filter($field->fif) . '"';
$output .= process_attrs($field->element_attributes);
$output .= ' />';
return $output;
}
sub render_password {
my ( $self, $field ) = @_;
my $output = '<input type="password" name="';
$output .= $field->html_name . '"';
$output .= ' id="' . $field->id . '"';
$output .= ' size="' . $field->size . '"' if $field->size;
$output .= ' maxlength="' . $field->maxlength . '"' if $field->maxlength;
$output .= ' value="' . $field->html_filter($field->fif) . '"';
$output .= process_attrs($field->element_attributes);
$output .= ' />';
return $output;
}
sub render_hidden {
my ( $self, $field ) = @_;
my $output = '<input type="hidden" name="';
$output .= $field->html_name . '"';
$output .= ' id="' . $field->id . '"';
$output .= ' value="' . $field->html_filter($field->fif) . '"';
$output .= process_attrs($field->element_attributes);
$output .= ' />';
return $output;
}
sub render_select {
my ( $self, $field ) = @_;
my $multiple = $field->multiple;
my $id = $field->id;
my $output = '<select name="' . $field->html_name . '"';
$output .= qq{ id="$id"};
$output .= ' multiple="multiple"' if $multiple == 1;
$output .= ' size="' . $field->size . '"' if $field->size;
( run in 0.761 second using v1.01-cache-2.11-cpan-39bf76dae61 )