package HTML::FormFu::Element::Select;
use strict;
use base 'HTML::FormFu::Element::_Group';
use Class::C3;
use HTML::FormFu::Util qw( append_xml_attribute process_attrs );
__PACKAGE__->mk_attr_accessors(qw/ multiple size /);
sub new {
my $self = shift->next::method(@_);
$self->filename('input');
$self->field_filename('select_tag');
$self->multi_value(1);
return $self;
}
sub _prepare_attrs {
my ( $self, $submitted, $value, $default, $option ) = @_;
if ( $submitted
&& defined $value
&& (ref $value eq 'ARRAY'
? grep { $_ eq $option->{value} } @$value
: $value eq $option->{value} ) )
{
$option->{attributes}{selected} = 'selected';
}
elsif ($submitted
&& $self->retain_default
&& ( !defined $value || $value eq "" )
&& $self->value eq $option->{value} )
{
$option->{attributes}{selected} = 'selected';
}
elsif ($submitted) {
delete $option->{attributes}{selected};
}
elsif (
defined $default
&& (ref $default eq 'ARRAY'
? grep { $_ eq $option->{value} } @$default
: $default eq $option->{value} ) )
{
$option->{attributes}{selected} = 'selected';
}
return;
}
sub _string_field {
my ( $self, $render ) = @_;
# select_tag template
my $html .= sprintf qq{";
return $html;
}
1;
__END__
=head1 NAME
HTML::FormFu::Element::Select - Select form field
=head1 SYNOPSIS
YAML config:
---
elements:
- type: Select
name: sex
options:
- [ 'm', 'Male' ]
- [ 'f', 'Female' ]
=head1 DESCRIPTION
Select form field.
Supports optgroups, see L for
details.
=head1 METHODS
=head2 options
See L.
=head2 values
See L.
=head2 value_range
See L.
=head2 empty_first
See L.
=head1 SEE ALSO
Is a sub-class of, and inherits methods from
L,
L,
L
L
=head1 AUTHOR
Carl Franks, C
=head1 LICENSE
This library is free software, you can redistribute it and/or modify it under
the same terms as Perl itself.