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,
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 $$
- 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
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;
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>';
}
width: 32em;
}
-form > ul li > p input {
+input:not([type]) {
box-sizing: border-box;
width: 100%;
padding: .4rem;
font-family: monospace;
}
+select {
+ padding: .3rem .2rem; /* TODO: input */
+}
form > ul li img {
max-width: 300px;
}
source => 'Image URL',
thumb => 'Convert options',
prio => 'Level',
+ cover => undef, # included with prio
ref => 'Reference',
);
+my @prioenum = qw( essential basic common distinctive rare invisible );
my ($find) = map {{id => $_}} $fields{id} || $Request || ();
my $row;
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,
- -resize => '300x200^', -extent => '300x200',
+ -resize => "$xyres^", -extent => $xyres,
'-strip', -quality => '60%', -interlace => 'plane',
$imgpath => $thumbpath
);
<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';
- 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>