dieren: external word include with prefixed beknopt picks
[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/^[#+]*/, # 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.0',
38         description => "Tabeloverzicht met afbeeldingen van $pageinfo->{intro}",
39         keywords => [qw'
40                 dier beest naam naamgeving woord taal nederlands gerelateerd
41                 relatie vernoemd vernoeming combinatie samenstelling voorvoegsel onverwant
42                 land zee lucht  animals dutch language
43         '],
44         raw => <<'EOT',
45 <style>
46 figure[hidden] {
47         opacity: 0; /* secret */
48         transition: opacity 1s 0s;
49         display: block;
50 }
51 figure[hidden]:hover {
52         opacity: 1;
53         transition-delay: 1s;
54 }
55 figure[hidden]:hover > figcaption {
56         transition-delay: 2s;
57 }
58
59 @media (max-width: 60em) {
60         td, th {
61                 font-size: 50%;
62         }
63         figcaption small {
64                 display: none;
65         }
66         th:first-child {
67                 display: none;
68         }
69 }
70 </style>
71 EOT
72 });
73
74 :>
75 <h1>Dierennamen <small>(Dutch animal names)</small></h1>
76
77 <p>
78 <:
79 say ucfirst $pageinfo->{intro};
80 say $pageinfo->{altlink};
81 :>
82 </p>
83
84 <:
85 my $table = readdata('dieren');
86 if ($Request eq 'standaard') {
87         $table->[ 9][4] = '?grasmodderpaard=草泥马'; # replace turnpaard
88         $table->[18][1] = 'draak_'; # irl animal
89 }
90
91 if (exists $get{r}) {
92         use List::MoreUtils qw( part );
93         my @trans = (part { state $col; /^#?>/ ? ($col = 0) : ++$col } @{$table});
94         $table = [];
95         for (@trans) {
96                 unshift @$_, '?:' if $_->[0] !~ /:$/;
97                 $_->[0] =~ s/^#?\K>?/>>/;
98                 for (@$_) {
99                         push @$table, s/^#?\K>/$1/r;
100                 }
101         }
102 }
103
104 for my $prefix ($pageinfo->{prefix}) {
105         for my $col ($pageinfo->{colfilter} // ()) {
106                 @{$table} = grep { $_->[$col] =~ $prefix } @{$table};
107         }
108         $_ = [ grep { s/$prefix// } @{$_} ] for @{$table};
109 }
110
111 say '<table class="gallery">';
112 for my $row (@{$table}) {
113         print '<tr>';
114         for my $name (@{$row}) {
115                 my $hidden = $name =~ s/^\?//;
116                 $name =~ s/^-$//;
117                 my ($img) = $name =~ /([\w-]+)/;
118                 $name =~ y/_/ /;
119                 if ($name =~ s/:$//) {
120                         # trailing colon indicates header text
121                         print "<th>$name</th>";
122                         next;
123                 }
124                 print '<td>';
125                 my $alt = $1 if $name =~ s/=(.*)//;
126                 $name = "<q>$name</q>" if $name =~ s/\?$//;
127                 $name .= " <small>($alt)</small>" if $alt;
128
129                 printf '<figure%s>', $hidden && !$pageinfo->{secrets} && ' hidden';
130                 if ($img and -e ($img = "data/dieren/$img.jpg")) {
131                         printf '<img src="/%s"', $img;
132                         printf ' alt="%s"', $alt || $name;
133                         print ' />';
134                         print "<figcaption>$name</figcaption>";
135                 }
136                 elsif ($hidden) {
137                         printf '<figcaption>%s</figcaption>', "$name?";
138                 }
139                 else {
140                         print $name;
141                 }
142                 print '</figure>';
143                 print '</td>';
144         }
145         say '</tr>';
146 }
147 say '</table>';