5 my $intro = 'dieren die in het Nederlands vernoemd zijn naar andere dieren.';
10 altlink => 'Zie ook <a href="/dieren/uitgebreid">verdergezochte verbanden</a>' .
11 ' of het <a href="/dieren/beknopt">beknopte overzicht</a>.',
12 prefix => qr/^(?!#)\+?/, # no # optional +
16 title => 'uitgebreid dieren',
17 intro => "$intro.. en dergelijke.",
18 altlink => 'Zie het <a href="/dieren">populaire overzicht</a> voor minder.',
19 prefix => qr/.*?[#]|^[#+]*/, # after optional # or +
23 title => 'beknopt dieren',
24 intro => "een aantal $intro",
25 altlink => 'Zie het <a href="/dieren">populaire overzicht</a> voor meer.',
26 prefix => qr/^\+/, # only +
31 $Request ||= 'standaard';
32 my $pageinfo = $subpages{$Request}
33 or Html(), Abort("Onbekende dierenpagina <q>$Request</q>", '404 request not found');
35 my $proto = sprintf('http%s://', !!$ENV{HTTPS} && 's');
36 my $preview = "$proto$ENV{HTTP_HOST}/dieren.jpg";
39 title => $pageinfo->{title}.' cheat sheet',
42 description => "Tabeloverzicht met afbeeldingen van $pageinfo->{intro}",
44 dier beest naam naamgeving woord taal nederlands gerelateerd
45 relatie vernoemd vernoeming combinatie samenstelling voorvoegsel onverwant
46 land zee lucht animals dutch language
49 <meta property="og:image" content="$preview" />
52 opacity: 0; /* secret */
53 transition: opacity 1s 0s;
56 figure[hidden]:hover {
60 figure[hidden]:hover > figcaption {
64 \@media (max-width: 60em) {
80 <h1>Dierennamen <small lang=en>(Dutch animal names)</small></h1>
84 say ucfirst $pageinfo->{intro};
85 say $pageinfo->{altlink};
90 my $table = Data('dieren');
93 use List::MoreUtils qw( part );
94 my @trans = (part { state $col; /^#?>/ ? ($col = 0) : ++$col } @{$table});
97 unshift @$_, '?:' if $_->[0] !~ /:$/;
98 $_->[0] =~ s/^#?\K>?/>>/;
100 push @$table, s/^#?\K>/$1/r;
105 for my $prefix ($pageinfo->{prefix}) {
106 for my $col ($pageinfo->{colfilter} // ()) {
107 @{$table} = grep { $_->[$col] =~ $prefix } @{$table};
109 $_ = [ grep { s/$prefix// } @{$_} ] for @{$table};
112 say '<table class="gallery">';
113 for my $row (@{$table}) {
115 for my $name (@{$row}) {
116 my $hidden = $name =~ s/^\?//;
117 $name =~ s/#.*//; # ignore prefixed part
119 my ($img) = $name =~ /([\w-]+)/;
121 if ($name =~ s/:$//) {
122 # trailing colon indicates header text
123 print "<th>$name</th>";
127 my $alt = $1 if $name =~ s/=(.*)//;
128 $name = "<q>$name</q>" if $name =~ s/\?$//;
129 $name .= " <small>($alt)</small>" if $alt;
131 printf '<figure%s>', $hidden && !$pageinfo->{secrets} && ' hidden';
132 if ($img and -e ($img = "data/dieren/$img.jpg")) {
133 printf '<img src="/%s"', $img;
134 printf ' alt="%s"', $alt || $name;
136 print "<figcaption>$name</figcaption>";
139 printf '<figcaption>%s</figcaption>', "$name?";