use Test::Most;
use Template::Pure;
use Mojo::DOM58;
my $html = qq[
<html>
<section id="one">
<ol>
<li>Things to Do...</li>
</ol>
<ul>
<li>One</li>
</ul>
</section>
<section id="two">
<ol>
<li>(p1)</li>
</ol>
<ul>
<li>Item:</li>
</ul>
</section>
<section id="object">
<ol>
<li>Things to Do...</li>
</ol>
</section>
</html>
];
my $pure = Template::Pure->new(
template => $html,
directives => [
'#one' => [
'ol li' => {
'task<-tasks' => 'task',
},
'ul li' => {
'task<-tasks' => sub {
my ($pure, $dom, $data) = @_;
$pure->data_at_path($data, 'task');
}
},
],
'#two' => [
'ol li+' => {
'task<-tasks' => 'task',
},
'+ul li' => {
'task<-tasks' => sub {
my ($pure, $dom, $data) = @_;
$pure->data_at_path($data, 'task');
}
},
],
'#object' => [
'ol li' => {
'task<-tasks' => Template::Pure->new(
template => q[<p><span class='content'>content</span><span class='task'>task</span></p>],
directives => [
'.content'=>'content',
'.task'=>'task',
],
),
},
],
]);
my %data = (
tasks => [
'Walk Dogs',
'Buy Milk',
],
);
ok my $string = $pure->render(\%data);
ok my $dom = Mojo::DOM58->new($string);
is $dom->find('#one ol li')->[0]->content, 'Walk Dogs';
is $dom->find('#one ol li')->[1]->content, 'Buy Milk';
ok !$dom->find('#one ol li')->[3];
is $dom->find('#one ul li')->[0]->content, 'Walk Dogs';
is $dom->find('#one ul li')->[1]->content, 'Buy Milk';
ok !$dom->find('#one ul li')->[3];
is $dom->find('#two ol li')->[0]->content, 'Walk Dogs(p1)';
is $dom->find('#two ol li')->[1]->content, 'Buy Milk(p1)';
ok !$dom->find('#two ol li')->[3];
is $dom->find('#two ul li')->[0]->content, 'Item:Walk Dogs';
is $dom->find('#two ul li')->[1]->content, 'Item:Buy Milk';
ok !$dom->find('#two ul li')->[3];
is $dom->find('#object .content')->[0]->content, 'Things to Do...';
is $dom->find('#object .content')->[1]->content, 'Things to Do...';
is $dom->find('#object .task')->[0]->content, 'Walk Dogs';
is $dom->find('#object .task')->[1]->content, 'Buy Milk';
{
my $pure = Template::Pure->new(
template => q[
<ol>
<li>Items</li>
</ol>
],
directives => [
'^ol li' => {
'task<-tasks' => Template::Pure->new(
template => q[<span></span>],
directives => [
'span' => 'task',
'.' => [
{ inner => \'^span', content => 'content' },
'.' => 'content',
'li+' => 'inner',
],
],
),
}
]);
ok my $string = $pure->render(\%data);
ok my $dom = Mojo::DOM58->new($string);
is $dom->find('ol li span')->[0]->content, 'Walk Dogs';
is $dom->find('ol li span')->[1]->content, 'Buy Milk';
}
done_testing;