dieren: fix function name to read table data
[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                            ' of het <a href="/dieren/beknopt">beknopte overzicht</a>.',
12                 prefix => qr/^(?!#)\+?/, # no # optional +
13                 colfilter => 0,
14         },
15         uitgebreid => {
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 +
20                 secrets => 1,
21         },
22         beknopt => {
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 +
27                 colfilter => 1,
28         },
29 );
30
31 $Request ||= 'standaard';
32 my $pageinfo = $subpages{$Request}
33         or Html(), Abort("Onbekende dierenpagina <q>$Request</q>", '404 request not found');
34
35 Html({
36         title => $pageinfo->{title}.' cheat sheet',
37         version => '1.1',
38         lang => 'nl',
39         description => "Tabeloverzicht met afbeeldingen van $pageinfo->{intro}",
40         keywords => [qw'
41                 dier beest naam naamgeving woord taal nederlands gerelateerd
42                 relatie vernoemd vernoeming combinatie samenstelling voorvoegsel onverwant
43                 land zee lucht  animals dutch language
44         '],
45         raw => <<'EOT',
46 <style>
47 figure[hidden] {
48         opacity: 0; /* secret */
49         transition: opacity 1s 0s;
50         display: block;
51 }
52 figure[hidden]:hover {
53         opacity: 1;
54         transition-delay: 1s;
55 }
56 figure[hidden]:hover > figcaption {
57         transition-delay: 2s;
58 }
59
60 @media (max-width: 60em) {
61         td, th {
62                 font-size: 50%;
63         }
64         figcaption small {
65                 display: none;
66         }
67         th:first-child {
68                 display: none;
69         }
70 }
71 </style>
72 EOT
73 });
74
75 :>
76 <h1>Dierennamen <small lang=en>(Dutch animal names)</small></h1>
77
78 <p>
79 <:
80 say ucfirst $pageinfo->{intro};
81 say $pageinfo->{altlink};
82 :>
83 </p>
84
85 <:
86 my $table = Data('dieren');
87
88 if (exists $get{r}) {
89         use List::MoreUtils qw( part );
90         my @trans = (part { state $col; /^#?>/ ? ($col = 0) : ++$col } @{$table});
91         $table = [];
92         for (@trans) {
93                 unshift @$_, '?:' if $_->[0] !~ /:$/;
94                 $_->[0] =~ s/^#?\K>?/>>/;
95                 for (@$_) {
96                         push @$table, s/^#?\K>/$1/r;
97                 }
98         }
99 }
100
101 for my $prefix ($pageinfo->{prefix}) {
102         for my $col ($pageinfo->{colfilter} // ()) {
103                 @{$table} = grep { $_->[$col] =~ $prefix } @{$table};
104         }
105         $_ = [ grep { s/$prefix// } @{$_} ] for @{$table};
106 }
107
108 say '<table class="gallery">';
109 for my $row (@{$table}) {
110         print '<tr>';
111         for my $name (@{$row}) {
112                 my $hidden = $name =~ s/^\?//;
113                 $name =~ s/#.*//; # ignore prefixed part
114                 $name =~ s/^-$//;
115                 my ($img) = $name =~ /([\w-]+)/;
116                 $name =~ y/_/ /;
117                 if ($name =~ s/:$//) {
118                         # trailing colon indicates header text
119                         print "<th>$name</th>";
120                         next;
121                 }
122                 print '<td>';
123                 my $alt = $1 if $name =~ s/=(.*)//;
124                 $name = "<q>$name</q>" if $name =~ s/\?$//;
125                 $name .= " <small>($alt)</small>" if $alt;
126
127                 printf '<figure%s>', $hidden && !$pageinfo->{secrets} && ' hidden';
128                 if ($img and -e ($img = "data/dieren/$img.jpg")) {
129                         printf '<img src="/%s"', $img;
130                         printf ' alt="%s"', $alt || $name;
131                         print ' />';
132                         print "<figcaption>$name</figcaption>";
133                 }
134                 elsif ($hidden) {
135                         printf '<figcaption>%s</figcaption>', "$name?";
136                 }
137                 else {
138                         print $name;
139                 }
140                 print '</figure>';
141                 print '</td>';
142         }
143         say '</tr>';
144 }
145 say '</table>';