<(common.inc.plp)><:
use warnings;
no warnings 'qw';
my $intro = 'dieren die in het Nederlands vernoemd zijn naar andere dieren.';
my %subpages = (
standaard => {
title => 'dieren',
intro => $intro,
altlink => 'Zie ook <a href="/dieren/uitgebreid">verdergezochte verbanden</a>' .
' of het <a href="/dieren/beknopt">beknopte overzicht</a>.',
prefix => qr/^(?!#)\+?/,
colfilter => 0,
},
uitgebreid => {
title => 'uitgebreid dieren',
intro => "$intro.. en dergelijke.",
altlink => 'Zie het <a href="/dieren">populaire overzicht</a> voor minder.',
prefix => qr/.*?[#]|^[#+]*/,
secrets => 1,
},
beknopt => {
title => 'beknopt dieren',
intro => "een aantal $intro",
altlink => 'Zie het <a href="/dieren">populaire overzicht</a> voor meer.',
prefix => qr/^\+/,
colfilter => 1,
},
);
$Request ||= 'standaard';
my $pageinfo = $subpages{$Request}
or Html(), Abort("Onbekende dierenpagina <q>$Request</q>", '404 request not found');
Html({
title => $pageinfo->{title}.' cheat sheet',
version => '1.2',
lang => 'nl',
description => "Tabeloverzicht met afbeeldingen van $pageinfo->{intro}",
keywords => [qw'
dier beest naam naamgeving woord taal nederlands gerelateerd
relatie vernoemd vernoeming combinatie samenstelling voorvoegsel onverwant
land zee lucht animals dutch language
'],
image => 'dieren.jpg',
raw => <<"EOT",
<style>
figure[hidden] {
opacity: 0; /* secret */
transition: opacity 1s 0s;
display: block;
}
figure[hidden]:hover {
opacity: 1;
transition-delay: 1s;
}
figure[hidden]:hover > figcaption {
transition-delay: 2s;
}
\@media (max-width: 60em) {
td, th {
font-size: 50%;
}
figcaption small {
display: none;
}
th:first-child {
display: none;
}
}
</style>
EOT
});
:>
<h1>Dierennamen <small lang=en>(Dutch animal names)</small></h1>
<p>
<:
say ucfirst $pageinfo->{intro};
say $pageinfo->{altlink};
:>
</p>
<:
my $table = Data('dieren');
if (exists $get{r}) {
use List::MoreUtils qw( part );
my @trans = (part { state $col; /^#?>/ ? ($col = 0) : ++$col } @{$table});
$table = [];
for (@trans) {
unshift @$_, '?:' if $_->[0] !~ /:$/;
$_->[0] =~ s/^#?\K>?/>>/;
for (@$_) {
push @$table, s/^#?\K>/$1/r;
}
}
}
for my $prefix ($pageinfo->{prefix}) {
for my $col ($pageinfo->{colfilter} // ()) {
@{$table} = grep { $_->[$col] =~ $prefix } @{$table};
}
$_ = [ grep { s/$prefix// } @{$_} ] for @{$table};
}
say '<table class="gallery">';
for my $row (@{$table}) {
print '<tr>';
for my $name (@{$row}) {
my $hidden = $name =~ s/^\?//;
$name =~ s/#.*//;
$name =~ s/^-$//;
my ($img) = $name =~ /([\w-]+)/;
$name =~ y/_/ /;
if ($name =~ s/:$//) {
print "<th>$name</th>";
next;
}
print '<td>';
my $alt = $1 if $name =~ s/=(.*)//;
$name = "<q>$name</q>" if $name =~ s/\?$//;
$name .= " <small>($alt)</small>" if $alt;
printf '<figure%s>', $hidden && !$pageinfo->{secrets} && ' hidden';
if ($img and -e ($img = lc "data/dieren/$img.jpg")) {
printf '<img src="/%s"', $img;
printf ' alt="%s"', $alt || $name;
print ' />';
print "<figcaption>$name</figcaption>";
}
elsif ($hidden) {
printf '<figcaption>%s</figcaption>', "$name?";
}
else {
print $name;
}
print '</figure>';
print '</td>';
}
say '</tr>';
}
say '</table>';