dieren: aggregate distinctive subpage metadata
[sheet.git] / dieren.plp
1 <(common.inc.plp)><:
2 use warnings;
3 no warnings 'qw';
4
5 my $intro = 'dieren die in het Nederlands vernoemd zijn naar andere dieren.';
6 my %subpages = (
7         standaard => {
8                 title => 'dieren',
9                 intro => $intro,
10                 altlink => 'Zie ook <a href="/dieren/uitgebreid">verdergezochte verbanden</a>.',
11         },
12         uitgebreid => {
13                 title => 'uitgebreid dieren',
14                 intro => "$intro.. en dergelijke.",
15                 altlink => 'Zie het <a href="/dieren">populaire overzicht</a> voor minder.',
16                 prefix => '#',
17                 secrets => 1,
18         },
19 );
20
21 $Request ||= 'standaard';
22 my $pageinfo = $subpages{$Request}
23         or Html(), Abort("Onbekende dierenpagina <q>$Request</q>", '404 request not found');
24
25 Html({
26         title => $pageinfo->{title}.' cheat sheet',
27         version => '1.0',
28         description => "Tabeloverzicht met afbeeldingen van $pageinfo->{intro}",
29         keywords => [qw'
30                 dier beest naam naamgeving woord taal nederlands gerelateerd
31                 relatie vernoemd vernoeming combinatie samenstelling voorvoegsel onverwant
32                 land zee lucht  animals dutch language
33         '],
34         raw => <<'EOT',
35 <style>
36 table {
37         width: 100%;
38 }
39 td {
40         vertical-align: bottom;
41 }
42 figure {
43         width: 100%;
44         height: 100%;
45 }
46 figure[hidden] {
47         transition: opacity 1s 0s;
48         display: inline;
49         opacity: 0;
50 }
51 figure[hidden]:hover {
52         opacity: 1;
53         transition-delay: 2s;
54 }
55 </style>
56 EOT
57 });
58
59 :>
60 <h1>Dierennamen <small>(Dutch animal names)</small></h1>
61
62 <p>
63 <:
64 say ucfirst $pageinfo->{intro};
65 say $pageinfo->{altlink};
66 :>
67 </p>
68
69 <:
70 my @table = qw(
71          >:        origineel: zee-:        meer_water:    land/aardig: anders:      #:
72          >hond:    hond       zeehond      waterhond??    prairiehond  vleerhond    #rodehond
73          >kat:     kat        zeekat       meerkat        cat_325?    vliegende_kat #tijgerkat
74         #>haas:    haas       zeehaas      waterhaas      koolhaas?    ossenhaas?   #buidelhaas
75          >muis:    muis       zeemuis      waterspitsmuis aardmuis     vleermuis    #computermuis
76          >rat:     rat        zeerat       waterrat       woestijnrat  buidelrat    #beverrat
77          >egel:    egel       zee-egel     wateregel?     aardegel??   mierenegel   #
78          >varken:  varken     zeevarken    waterzwijn     aardvarken   stekelvarken #
79          >koe:     koe        zeekoe       meerkoetje     aardekoe??   koedoe       #haiku?
80          >paard:   paard      zeepaardje   nijlpaard      aardpaard??  luipaard     #tijgerpaard
81         #>hoorn:   eenhoorn   zeehoorn     zee-eenhoorn?  bergahorn    neushoorn    #eekhoorn
82         #>bra:   bra(ssière)? zebra        -              -            cobra        #sabra
83         #>olifant: olifant    zeeolifant   olifantsvis    kamerolifant? -           #olifantsoor
84          >beer:    beer       zeebeer      waterbeertje   ijsbeer      wasbeer      #neusbeer
85          >leeuw:   leeuw      zeeleeuw     waterleeuw??   aardleeuw??  mierenleeuw  #
86          >wolf:    wolf       zeewolf      waterwolf??    aardwolf     korenwolf    #buidelwolf
87          >haan:    haan       zeehaan      waterhaan      rotshaan     sprinkhaan   #wilde_haan??
88         #>pad:     pad        zebrapad?    waterpad?      landpad      schildpad    #paddenstoel
89         #>draak:   draak      zeedraak     waterdraak     -            komododraak  #
90         #>vlo:     vlo        zeevlo       watervlo       aardvlo      -            #vlok?
91         #>mot:     mot        marmot       watermot       bergamot     -            #
92         #>bij:     bij        -            waterbij       aardbei      moerbei      hommelbij
93 );
94
95 if (exists $get{r}) {
96         use List::MoreUtils qw( part );
97         my @trans = (part { state $col; /^#?>/ ? ($col = 0) : ++$col } @table);
98         @table = ();
99         for (@trans) {
100                 unshift @$_, '?:' if $_->[0] !~ /:$/;
101                 $_->[0] =~ s/^#?\K>?/>>/;
102                 for (@$_) {
103                         push @table, s/^#?\K>/$1/r;
104                 }
105         }
106 }
107
108 say '<table>';
109 while (my $name = shift @table) {
110         if ($name =~ s/^#// and !$pageinfo->{prefix}) {
111                 while ($name = shift @table) {
112                         last if $name =~ m/^>/;
113                 }
114         }
115         if ($name =~ s/^>//) {
116                 # leading dash starts a new row
117                 say '</tr>' if $name;
118                 print "<tr>";
119         }
120         $name =~ s/^-$//;
121         my ($img) = $name =~ /^([\w-]+)/;
122         $name =~ y/_/ /;
123         if ($name =~ s/:$//) {
124                 # trailing colon indicates header text
125                 print "<th>$name</th>";
126                 next;
127         }
128         print '<td>';
129         my $hidden = $name =~ s/\?$//;
130         my $alt = $name;
131         $name = "<q>$name</q>" if $name =~ s/\?$//;
132
133         printf '<figure%s>', $hidden && !$pageinfo->{secrets} && ' hidden';
134         if ($img and -e ($img = "data/dieren/$img.jpg")) {
135                 my $alt = -l $img && readlink($img) =~ s/\.jpg$//r;
136                 if ($alt) {
137                         $name .= " ($alt)";
138                 }
139                 else {
140                         $alt = $name;
141                 }
142                 print "<figcaption>$name</figcaption>";
143                 printf '<img src="/%s"', $img;
144                 printf ' alt="%s"', $alt;
145                 print ' />';
146         }
147         elsif ($hidden) {
148                 printf '<figcaption>%s</figcaption>', "$name?";
149         }
150         else {
151                 print $name;
152         }
153         print '</figure>';
154         print '</td>';
155 }
156 say '</tr></table>';