package HTML::FormHandler::Widget::Wrapper::Simple; # ABSTRACT: simple field wrapper $HTML::FormHandler::Widget::Wrapper::Simple::VERSION = '0.40068'; use Moose::Role; use namespace::autoclean; use HTML::FormHandler::Render::Util ('process_attrs'); with 'HTML::FormHandler::Widget::Wrapper::Base'; sub wrap_field { my ( $self, $result, $rendered_widget ) = @_; my $output; # get wrapper tag if set my $label_tag = $self->label_tag || ''; my $wrapper_tag; if( $self->do_wrapper ) { $output .= $self->get_tag('before_wrapper'); $wrapper_tag = $self->get_tag('wrapper_tag'); # default wrapper tags $wrapper_tag ||= $self->has_flag('is_repeatable') ? 'fieldset' : 'div'; # get attribute string my $attrs = process_attrs( $self->wrapper_attributes($result) ); # write wrapper tag $output .= qq{\n<$wrapper_tag$attrs>}; $label_tag = 'legend' if $wrapper_tag eq 'fieldset'; } # write label; special processing for checkboxes $rendered_widget = $self->wrap_checkbox($result, $rendered_widget) if ( lc $self->widget eq 'checkbox' ); $output .= "\n" . $self->do_render_label($result, $label_tag) if $self->do_label; # append 'before_element' $output .= $self->get_tag('before_element'); # start controls div if ( $self->get_tag('controls_div') ) { $output .= qq{\n
}; } elsif ( $self->has_element_wrapper_class ) { my $ew_attr = $self->element_wrapper_attributes($result); my $element_wrapper_attrs = process_attrs( $ew_attr ); $output .= qq{\n}; } # the input element itself $output .= "\n$rendered_widget"; # close controls div if ( $self->get_tag('controls_div') || $self->has_element_wrapper_class ) { # end control div $output .= "\n
"; } # the 'after_element' $output .= $self->get_tag('after_element'); # the error messages unless( $self->get_tag('no_errors') ) { my $error_class = $self->get_tag('error_class') || 'error_message'; $output .= qq{\n$_} for $result->all_errors; # warnings (incompletely implemented - only on field itself) my $warning_class = $self->get_tag('warning_class') || 'warning_message'; $output .= qq{\n$_} for $result->all_warnings; } if( $self->do_wrapper ) { $output .= "\n"; $output .= $self->get_tag('after_wrapper'); } return "$output"; } 1; __END__ =pod =encoding UTF-8 =head1 NAME HTML::FormHandler::Widget::Wrapper::Simple - simple field wrapper =head1 VERSION version 0.40068 =head1 SYNOPSIS This is the default wrapper role. It will be installed if no other wrapper is specified and widget_wrapper is not set to 'none'. Relevant field flags: do_wrapper do_label If 'do_label' is set and not 'do_wrapper', only the label plus the form element will be rendered. Supported 'tags', all set via the 'tags' hashref on the field: wrapper_tag -- the tag to use in the wrapper, default 'div' label_tag -- tag to use for label (default 'label') label_after -- string to append to label, for example ': ' to append a colon before_element -- string that goes right before the element after_element -- string that goes right after the element no_errors -- don't issue error messages on the field error_class -- class for error messages (default 'error_message') warning_class -- class for warning messages (default 'warning_message' ) no_wrapped_label -- for checkboxes. Don't provide an inner wrapped label (from Base wrapper) Example: has_field 'foo' => ( tags => { wrapper_tag => 'span', no_errors => 1 } ); =head1 AUTHOR FormHandler Contributors - see HTML::FormHandler =head1 COPYRIGHT AND LICENSE This software is copyright (c) 2017 by Gerda Shank. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. =cut