package HTML::FormHandler::Widget::Field::Select; # ABSTRACT: select field rendering widget $HTML::FormHandler::Widget::Field::Select::VERSION = '0.40068'; use Moose::Role; use namespace::autoclean; use HTML::FormHandler::Render::Util ('process_attrs'); sub render { my ( $self, $result ) = @_; $result ||= $self->result; die "No result for form field '" . $self->full_name . "'. Field may be inactive." unless $result; my $output = $self->render_element( $result ); return $self->wrap_field( $result, $output ); } sub render_element { my ( $self, $result ) = @_; $result ||= $self->result; # create select element my $output = $self->render_select_start( $result ); # create empty select if( defined $self->empty_select ) { $output .= $self->render_empty_select; } # loop through options foreach my $option ( @{ $self->{options} } ) { if ( my $label = $option->{group} ) { $label = $self->_localize( $label ) if $self->localize_labels; $output .= qq{\n}; foreach my $group_opt ( @{ $option->{options} } ) { $output .= $self->render_option( $group_opt, $result ); } $output .= qq{\n}; } else { $output .= $self->render_option( $option, $result ); } } $self->reset_options_index; $output .= ''; return $output; } sub render_select_start { my ( $self, $result ) = @_; $result ||= $self->result; my $id = $self->id; my $output = '