word: enlarge marked cover images
authorMischa POSLAWSKY <perl@shiar.org>
Wed, 27 May 2020 16:44:47 +0000 (18:44 +0200)
committerMischa POSLAWSKY <perl@shiar.org>
Sat, 6 Jun 2020 01:49:20 +0000 (03:49 +0200)
tools/word.pg.sql
word.plp
writer.plp

index c1aa3c811322177975a86648ede30fee404b3ccf..22ff113cc86d1c5a8850ad33a5f188392017e6f0 100644 (file)
@@ -5,6 +5,7 @@ CREATE TABLE word (
        cat        integer              REFERENCES word (id),
        ref        integer              REFERENCES word (id),
        prio       smallint    NOT NULL DEFAULT '1',
        cat        integer              REFERENCES word (id),
        ref        integer              REFERENCES word (id),
        prio       smallint    NOT NULL DEFAULT '1',
+       cover      boolean     NOT NULL DEFAULT FALSE,
        source     text,
        thumb      text[],
        wptitle    text,
        source     text,
        thumb      text[],
        wptitle    text,
@@ -18,12 +19,13 @@ COMMENT ON COLUMN word.lang       IS 'ISO 639-3 language code';
 COMMENT ON COLUMN word.cat        IS 'hierarchical classification';
 COMMENT ON COLUMN word.ref        IS 'reference to equivalent eng translation';
 COMMENT ON COLUMN word.prio       IS 'difficulty level or importance; lower values have precedence';
 COMMENT ON COLUMN word.cat        IS 'hierarchical classification';
 COMMENT ON COLUMN word.ref        IS 'reference to equivalent eng translation';
 COMMENT ON COLUMN word.prio       IS 'difficulty level or importance; lower values have precedence';
+COMMENT ON COLUMN word.cover      IS 'highlight if selected';
 COMMENT ON COLUMN word.source     IS 'URI of downloaded image';
 COMMENT ON COLUMN word.thumb      IS 'ImageMagick convert options to create thumbnail from source image';
 COMMENT ON COLUMN word.wptitle    IS 'reference Wikipedia article';
 
 CREATE OR REPLACE FUNCTION exportform(word) RETURNS text AS $$
 COMMENT ON COLUMN word.source     IS 'URI of downloaded image';
 COMMENT ON COLUMN word.thumb      IS 'ImageMagick convert options to create thumbnail from source image';
 COMMENT ON COLUMN word.wptitle    IS 'reference Wikipedia article';
 
 CREATE OR REPLACE FUNCTION exportform(word) RETURNS text AS $$
-       SELECT array_to_string($1.form || $1.alt, '/');
+       SELECT (CASE WHEN $1.cover THEN '*' ELSE '' END) || array_to_string($1.form || $1.alt, '/');
 $$ LANGUAGE SQL IMMUTABLE;
 
 CREATE OR REPLACE VIEW _cat_words AS
 $$ LANGUAGE SQL IMMUTABLE;
 
 CREATE OR REPLACE VIEW _cat_words AS
index 7d62562215343ad5433d5c5586b2403ab30d2ed0..dd5985aee07a33eea02901a6bb4ddac3efabb85e 100644 (file)
--- a/word.plp
+++ b/word.plp
@@ -27,6 +27,17 @@ figcaption > small {
        display: inline-block;
 }
 
        display: inline-block;
 }
 
+li.large > figure {
+       grid-row: span 2;
+       grid-column: span 2;
+}
+@media (min-width: 600px) and (min-height: 400px) {
+       p + ul > li:first-child > figure {
+               grid-row: span 3;
+               grid-column: span 3;
+       }
+}
+
 figure:hover ~ ul figure,
 figure:hover ~ ul figcaption {
        background: #CCC;
 figure:hover ~ ul figure,
 figure:hover ~ ul figcaption {
        background: #CCC;
@@ -81,8 +92,11 @@ sub showimg {
 sub printimgs {
        say '<ul>';
        for my $row (@_) {
 sub printimgs {
        say '<ul>';
        for my $row (@_) {
-               printf '<li%s>', defined $table->{$row} && ' class="parent"';
-               print showimg($row);
+               my @type;
+               push @type, 'parent' if defined $table->{$row};
+               push @type, 'large'  if $row =~ /^\*/;
+               printf '<li%s>', @type ? sprintf ' class="%s"', join ' ', @type : '';
+               print showimg($row =~ s/^\*//r);
                printimgs(@{$_}) for $table->{$row} // ();
                print '</li>';
        }
                printimgs(@{$_}) for $table->{$row} // ();
                print '</li>';
        }
index 9d67520bdd1230d6d14412d3c009986ace370cb1..5b81a20e5f6d6df90c2e2ddb2e1a071c480e9465 100644 (file)
@@ -31,12 +31,15 @@ form > ul li > label + * {
        width: 32em;
 }
 
        width: 32em;
 }
 
-form > ul li > p input {
+input:not([type]) {
        box-sizing: border-box;
        width: 100%;
        padding: .4rem;
        font-family: monospace;
 }
        box-sizing: border-box;
        width: 100%;
        padding: .4rem;
        font-family: monospace;
 }
+select {
+       padding: .3rem .2rem; /* TODO: input */
+}
 form > ul li img {
        max-width: 300px;
 }
 form > ul li img {
        max-width: 300px;
 }
@@ -143,8 +146,10 @@ my @wordcols = (
        source  => 'Image URL',
        thumb   => 'Convert options',
        prio    => 'Level',
        source  => 'Image URL',
        thumb   => 'Convert options',
        prio    => 'Level',
+       cover   => undef, # included with prio
        ref     => 'Reference',
 );
        ref     => 'Reference',
 );
+my @prioenum = qw( essential basic common distinctive rare invisible );
 my ($find) = map {{id => $_}} $fields{id} || $Request || ();
 
 my $row;
 my ($find) = map {{id => $_}} $fields{id} || $Request || ();
 
 my $row;
@@ -194,13 +199,14 @@ elsif ($ENV{REQUEST_METHOD} eq 'POST') {{
        my $thumbpath = "data/word/eng/$row->{form}.jpg";
        if ($imgpath) {
                if (-e $imgpath) {
        my $thumbpath = "data/word/eng/$row->{form}.jpg";
        if ($imgpath) {
                if (-e $imgpath) {
+                       my $xyres = $row->{cover} ? '600x400' : '300x200';
                        my @cmds = @{ $row->{thumb} // [] };
                        @cmds = (
                                'convert',
                                -delete => '1--1', -background => 'white',
                                -gravity => @cmds ? 'northwest' : 'center',
                                @cmds,
                        my @cmds = @{ $row->{thumb} // [] };
                        @cmds = (
                                'convert',
                                -delete => '1--1', -background => 'white',
                                -gravity => @cmds ? 'northwest' : 'center',
                                @cmds,
-                               -resize => '300x200^', -extent => '300x200',
+                               -resize => "$xyres^", -extent => $xyres,
                                '-strip', -quality => '60%', -interlace => 'plane',
                                $imgpath => $thumbpath
                        );
                                '-strip', -quality => '60%', -interlace => 'plane',
                                $imgpath => $thumbpath
                        );
@@ -231,17 +237,38 @@ my $title = $row->{id} ? "entry <small>#$row->{id}</small>" : 'new entry';
 <ul>
 <:
 
 <ul>
 <:
 
-for my $col (pairs @wordcols) {
-       my $val = $row->{$col->key} // '';
+for my $colinfo (pairs @wordcols) {
+       my ($col, $title) = @{$colinfo};
+       defined $title or next;
+       my $val = $row->{$col} // '';
        $val = '{'.join(',', map {s/,/\\,/gr} @{$val}).'}' if ref $val eq 'ARRAY';
        $val = '{'.join(',', map {s/,/\\,/gr} @{$val}).'}' if ref $val eq 'ARRAY';
-       printf '<li><label for="%s">%s</label><p><span class=inline>'
-               . '<input id="%1$s" name="%1$s" value="%s" />',
-               $col->key, $col->value, Entity($val);
-       -e and printf '<img src="/%s" alt="%s" />', $_, $row->{form} for
-               $col->key eq 'source' ? "data/word/org/$row->{id}.jpg" :
-               $col->key eq 'thumb'  ? "data/word/eng/$row->{form}.jpg" :
-               ();
-       say '</span></p></li>';
+       printf '<li><label for="%s">%s</label><p>', $col, $title;
+               printf '<span class=inline>';
+       if ($col eq 'prio') {
+               printf '<select id="%s" name="%1$s">', $col;
+               printf('<option value="%s"%s>%s</option>',
+                       $_, $row->{$col} eq $_ && ' selected', $prioenum[$_]
+               ) for 0 .. $#prioenum;
+               print '</select>';
+               printf(
+                       join('',
+                               '<label>',
+                               '<input id="%1$s" name="%1$s" value="0" type="hidden" />',
+                               '<input id="%s" name="%1$s" value="1" type="checkbox"%s>',
+                               ' %s</label>',
+                       ),
+                       'cover', !!$row->{cover} && ' checked', 'Highlighted'
+               );
+       }
+       else {
+               printf '<input id="%s" name="%1$s" value="%s" />', $col, Entity($val);
+               -e and printf '<img src="/%s" alt="%s" />', $_, $row->{form} for
+                       $col eq 'source' ? "data/word/org/$row->{id}.jpg" :
+                       $col eq 'thumb'  ? "data/word/eng/$row->{form}.jpg" :
+                       ();
+       }
+               print '</span>';
+       say '</p></li>';
 }
 :>
 </ul>
 }
 :>
 </ul>