use strict;
use warnings FATAL => 'all';
package HTML::Tested::Value::Array;
use base 'HTML::Tested::Value';
use Carp;
sub new {
my $self = shift()->SUPER::new(@_);
my $opts = $self->options;
while (my ($n, $v) = each %$opts) {
next unless ref($v) eq 'HASH';
my $dto = $v->{is_datetime} or next;
$self->setup_datetime_option($dto, $v);
}
return $self;
}
sub transform_value {
my ($self, $caller, $val, $n) = @_;
confess "Invalid non-array value: seal_value"
unless $val && ref($val) eq 'ARRAY';
my $opts = $self->options;
my @res;
for (my $i = 0; $i < @$val; $i++) {
my $nopts = $opts->{$i};
$self->{_options} = $nopts if $nopts;
my $v = $val->[$i];
my $dtfs = $caller->ht_get_widget_option($n, "is_datetime");
$v = $dtfs->format_datetime($v) if ($v && $dtfs);
$v = $self->seal_value($v, $caller)
if $caller->ht_get_widget_option($n, "is_sealed");
$v = $self->encode_value($v, $caller)
if !($caller->ht_get_widget_option($n, "is_trusted"));
push @res, $v;
$self->{_options} = $opts if $nopts;
}
return \@res;
}
sub seal_value {
my ($self, $val, $caller) = @_;
return $self->options->{isnt_sealed} ? $val
: $self->SUPER::seal_value($val, $caller);
}
1;