use strict;
use warnings FATAL => 'all';
package HTML::Tested::Value::DropDown;
use base 'HTML::Tested::Value::Array';
sub merge_one_value {
my ($self, $root, $val, @path) = @_;
my $n = $self->name;
my $v = $root->{$n};
if (ref($v)) {
$_->[2] = $_->[0] eq $val for @$v;
} else {
$root->{$n} = $self->transform_value($root, $val, $n);
}
}
sub transform_value {
my ($self, $caller, $val, $n) = @_;
goto OUT if (ref($val) eq 'ARRAY');
my $dv = $self->get_default_value($caller, $n);
my @res = map { [ $_->[0], $_->[1], $_->[0] eq $val ] } @$dv;
$val = \@res;
OUT:
return [ map { $self->SUPER::transform_value($caller, $_, $n) } @$val ];
}
sub value_to_string {
my ($self, $name, $val) = @_;
my $options = join("\n", map {
my $sel = $_->[2] ? " selected=\"selected\"" : "";
""
} @$val);
return <
$options
ENDS
}
1;