index: release v1.18 with only altgr index linked
[sheet.git] / dieren.plp
index 67525c421175917012d24de167f449c5cd34215b..8e660081aaa9d93fcebf776ea4dd347f6201bc51 100644 (file)
 <(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/^(?!#)\+?/, # no # optional +
+               colfilter => 0,
+       },
+       uitgebreid => {
+               title => 'uitgebreid dieren',
+               intro => "$intro.. en dergelijke.",
+               altlink => 'Zie het <a href="/dieren">populaire overzicht</a> voor minder.',
+               prefix => qr/.*?[#]|^[#+]*/, # after optional # or +
+               secrets => 1,
+       },
+       beknopt => {
+               title => 'beknopt dieren',
+               intro => "een aantal $intro",
+               altlink => 'Zie het <a href="/dieren">populaire overzicht</a> voor meer.',
+               prefix => qr/^\+/, # only +
+               colfilter => 1,
+       },
+);
+
+$Request ||= 'standaard';
+my $pageinfo = $subpages{$Request}
+       or Html(), Abort("Onbekende dierenpagina <q>$Request</q>", '404 request not found');
 
 Html({
-       title => 'dieren cheat sheet',
-       version => '1.0',
-       description => [],
+       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 onverwant
+               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>(Dutch animal names)</small></h1>
+<h1>Dierennamen <small lang=en>(Dutch animal names)</small></h1>
 
-<p>Dieren die in het Nederlands vernoemd zijn naar andere dieren.</p>
+<p>
+<:
+say ucfirst $pageinfo->{intro};
+say $pageinfo->{altlink};
+:>
+</p>
 
 <:
-my @table = qw(
-       >:         origineel: zee-:        meer_water:  aardig:      anders:
-       >hond:     hond       zeehond      waterhond?   aardhond?    vleerhond
-       >kat:      kat        zeekat       meerkat      caterpillar? tijgerkat
-       >muis:     muis       zeemuis      waterrat?    aardmuis     vleermuis
-       >egel:     egel       zee-egel     wateregel?   aardegel?    mierenegel
-       >varken:   varken     zeevarken    waterzwijn   aardvarken   stekelvarken
-       >koe:      koe        zeekoe       meerkoetje   aardkoe?     haiku?
-       >paard:    paard      zeepaardje   nijlpaard    aardpaard?   luipaard
-       >beer:     beer       zeebeer      waterbeertje ijsbeer      wasbeer
-       >leeuw:    leeuw      zeeleeuw     waterleeuw?  aardleeuw?   mierenleeuw
-       >wolf:     wolf       zeewolf      waterwolf?   aardwolf     buidelwolf
-       >haan:     haan       zeehaan      waterhaan    rotshaan     sprinkhaan
-);
+my $table = Data('dieren');
 
-say '<table>';
-for my $name (@table) {
-       if ($name =~ s/^>//) {
-               # leading dash starts a new row
-               say '</tr>' if $name;
-               print "<tr>";
+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;
+               }
        }
-       if ($name =~ s/:$//) {
-               # trailing colon indicates header text
-               $name =~ y/_/ /;
-               print "<th>$name</th>";
-               next;
+}
+
+for my $prefix ($pageinfo->{prefix}) {
+       for my $col ($pageinfo->{colfilter} // ()) {
+               @{$table} = grep { $_->[$col] =~ $prefix } @{$table};
        }
-       print qq{<td title="$name">};
-       if (-e (my $img = "data/dieren/$name.jpg")) {
-               printf '<img src="/%s"', $img;
-               printf ' alt="%s"', $name;
-               print ' />';
+       $_ = [ 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/#.*//; # ignore prefixed part
+               $name =~ s/^-$//;
+               my ($img) = $name =~ /([\w-]+)/;
+               $name =~ y/_/ /;
+               if ($name =~ s/:$//) {
+                       # trailing colon indicates header text
+                       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>';
        }
-       print '</td>';
+       say '</tr>';
 }
-say '</tr></table>';
+say '</table>';