index: release v1.18 with only altgr index linked
[sheet.git] / dieren.plp
index 452a780daebe47fa01d65f163c9129fb67224cd9..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
        '],
-       raw => <<'EOT',
+       image => 'dieren.jpg',
+       raw => <<"EOT",
 <style>
-table {
-       width: 100%;
-}
-tr:first-child th {
-       word-break: break-all;
-}
-img {
-       vertical-align: bottom;
-       width: 100%;
-}
-img[hidden] {
+figure[hidden] {
+       opacity: 0; /* secret */
        transition: opacity 1s 0s;
-       display: inline;
-       opacity: 0;
+       display: block;
 }
-img[hidden]:hover {
+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
-       #>haas:    haas       zeehaas      ?            ?            ?
-       >muis:     muis       zeemuis      watermuis?   aardmuis     vleermuis
-       >rat:      rat        zeerat       waterrat     woestijnrat  buidelrat #beverrat
-       >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
-       #>hoorn:   eenhoorn   zee-eenhoorn waterhoorn?  aardhoorn?   neushoorn eekhoorn
-       #>bra:     bh?        zebra        waterbra?    aardbra?     cobra
-       #>olifant: olifant    zeeolifant  waterolifant? landolifant? ?
-       >beer:     beer       zeebeer      waterbeertje ijsbeer      wasbeer   #neusbeer
-       >leeuw:    leeuw      zeeleeuw     waterleeuw?  aardleeuw?   mierenleeuw
-       >wolf:     wolf       zeewolf      waterwolf?   aardwolf     buidelwolf
-       >haan:     haan       zeehaan      waterhaan    rotshaan     sprinkhaan
-       #>vlo:     vlo        strandvlo    watervlo     aardvlo      ?
-       #>draak:   draak      zeedraak     waterdraak?  aarddraak?   ?
-);
+my $table = Data('dieren');
 
 if (exists $get{r}) {
        use List::MoreUtils qw( part );
-       my @trans = (part { state $col; /^#?>/ ? ($col = 0) : ++$col } @table);
-       @table = ();
+       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;
+                       push @$table, s/^#?\K>/$1/r;
                }
        }
 }
 
-say '<table>';
-while (my $name = shift @table) {
-       if ($name =~ s/^#// and not exists $get{v}) {
-               while ($name = shift @table) {
-                       last if $name =~ m/^>/;
-               }
-       }
-       if ($name =~ s/^>//) {
-               # leading dash starts a new row
-               say '</tr>' if $name;
-               print "<tr>";
+for my $prefix ($pageinfo->{prefix}) {
+       for my $col ($pageinfo->{colfilter} // ()) {
+               @{$table} = grep { $_->[$col] =~ $prefix } @{$table};
        }
-       if ($name =~ s/:$//) {
-               # trailing colon indicates header text
+       $_ = [ 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/_/ /;
-               print "<th>$name</th>";
-               next;
-       }
-       print qq{<td title="$name">};
-       my $hidden = $name =~ s/\?$//;
-       if (-e (my $img = "data/dieren/$name.jpg")) {
-               printf '<img src="/%s"', $img;
-               printf ' alt="%s"', -l $img ? readlink($img) =~ s/\.jpg$//r : $name;
-               print ' hidden' if $hidden;
-               print ' />';
-       }
-       elsif (!$hidden) {
-               print $name;
+               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>';