word: organism gallery (categorised grid layout)
[sheet.git] / word.plp
1 <(common.inc.plp)><:
2
3 Html({
4         title => 'words cheat sheet',
5         version => '1.0',
6         description => "Visual words",
7         keywords => [qw'
8                 language
9         '],
10         data => ['wordlist.inc.pl'],
11         raw => <<'EOT',
12 <style>
13 ul {
14         display: flex;
15         flex-wrap: wrap;
16         align-items: end;
17 }
18 figure {
19         flex: 200px;
20         max-width: 300px;
21         overflow: hidden;
22 }
23 </style>
24 EOT
25 });
26
27 :>
28 <h1>Words</h1>
29
30 <p>
31 Under construction.
32 Zie ook <a href="/dieren">dieren</a>.
33 </p>
34
35 <:
36 my %table = do 'wordlist.inc.pl' or die $@ // $!;
37
38 sub showimg {
39         my ($name) = @_;
40         my ($img) = $name =~ /^([\w-]+)/;
41         $name =~ y/_/ /;
42         my $hidden = $name =~ s/\?$//;
43         my $alt = $name;
44         $name = "<q>$name</q>" if $name =~ s/\?$//;
45
46         if ($img and -e ($img = "data/word/$img.jpg")) {
47                 my $alt = -l $img && readlink($img) =~ s/\.jpg$//r;
48                 if ($alt) {
49                         $name .= " ($alt)";
50                 }
51                 else {
52                         $alt = $name;
53                 }
54                 $name = "<figcaption>$name</figcaption>";
55                 $name .= sprintf '<img src="/%s" alt="%s" />', $img, $alt;
56         }
57         elsif ($hidden) {
58                 $name = "<figcaption>$name?</figcaption>";
59         }
60         return sprintf '<figure%s>%s</figure>', $hidden && !exists $get{v} && ' hidden', $name;
61 }
62
63 sub printimgs {
64         for my $row (@_) {
65                 printf '<li>';
66                 print showimg($row);
67                 print '</li>';
68                 printimgs(@{$_}) for $table{$row} // ();
69         }
70 }
71
72 say '<ul>';
73 printimgs($table{''});
74 say '</ul>';