DTL-Fast
view release on metacpan or search on metacpan
lib/DTL/Fast/Tag/Ifchanged.pm view on Meta::CPAN
}
elsif (scalar @{$self->{branches}} > 1)
{
$result = $self->{branches}->[1]->render($context);
}
else
{
$result = '';
}
}
else
{
if ($forloop->{first}) # first pass
{
$self->update_preserved($context);
$result = $self->{branches}->[0]->render($context);
}
else
{
if ($self->watches_changed($context))
{
$result = $self->{branches}->[0]->render($context);
$self->update_preserved($context);
}
elsif (scalar @{$self->{branches}} > 1)
{
$result = $self->{branches}->[1]->render($context);
}
}
}
}
else
{
warn "ifchanged tag can be rendered only inside for loop";
}
return $result;
}
sub watches_changed
{
my $self = shift;
my $context = shift;
my $result = 0;
for (my $i = 0; $i < scalar @{$self->{watches}}; $i++)
{
my $watch = $self->{watches}->[$i]->render($context);
my $preserve = $self->{preserved}->[$i];
if (not DTL::Fast::Expression::Operator::Binary::Eq::dispatch($self, $watch, $preserve))
{
$result = 1;
last;
}
}
return $result;
}
sub update_preserved
{
my $self = shift;
my $context = shift;
$self->{preserved} = [ ];
foreach my $watch (@{$self->{watches}})
{
push @{$self->{preserved}}, $watch->render($context);
}
return $self;
}
sub add_branch
{
my $self = shift;
$self->{branches} //= [ ];
push @{$self->{branches}}, DTL::Fast::Renderer->new();
return $self;
}
1;
( run in 3.045 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )