X-Git-Url: http://git.shiar.net/sheet.git/blobdiff_plain/83a0dfa9c88eac62cab4dded6664e5f133ab8d37..cae266f89c2f8b9c192dfbe9b9126ef9ac144e6f:/writer.plp
diff --git a/writer.plp b/writer.plp
index 9d67520..206333f 100644
--- a/writer.plp
+++ b/writer.plp
@@ -31,14 +31,14 @@ form > ul li > label + * {
width: 32em;
}
-form > ul li > p input {
+input:not([type]) {
box-sizing: border-box;
width: 100%;
padding: .4rem;
font-family: monospace;
}
-form > ul li img {
- max-width: 300px;
+select {
+ padding: .3rem .2rem; /* TODO: input */
}
ul.popup {
@@ -82,42 +82,7 @@ h1 {
}
-
+
EOT
});
@@ -140,11 +105,13 @@ my @wordcols = (
form => 'Translation',
alt => 'Synonyms',
wptitle => 'Wikipedia',
- source => 'Image URL',
+ source => 'Image',
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;
@@ -172,43 +139,48 @@ elsif ($ENV{REQUEST_METHOD} eq 'POST') {{
};
my $imgpath = "data/word/org/$row->{id}.jpg";
- if (($row->{source} // '') ne ($replace->{source} // '')) {
+ my $reimage = eval {
+ ($row->{source} // '') ne ($replace->{source} // '') or return;
# copy changed remote url to local file
unlink $imgpath if -e $imgpath;
- if (my $download = $row->{source}) {
- require LWP::UserAgent;
- my $ua = LWP::UserAgent->new;
- $ua->agent('/');
- my $status = $ua->mirror($download, $imgpath);
- $status->is_success or Alert([
- "Source image not found",
- "Download from $download
failed: ".$status->status_line,
- ]);
- }
- }
- elsif ($row->{thumb} ~~ $replace->{thumb}) {
- # image and conversion unaltered
- $imgpath = undef;
- }
+ my $download = $row->{source} or return 1;
+ require LWP::UserAgent;
+ my $ua = LWP::UserAgent->new;
+ $ua->agent('/');
+ my $status = $ua->mirror($download, $imgpath);
+ $status->is_success
+ or die "Download from $download
failed: ".$status->status_line."\n";
+ };
+ !$@ or Alert(["Source image not found", $@]);
+
+ $reimage ||= $row->{thumb} ~~ $replace->{thumb}; # different convert
+ $reimage ||= $row->{cover} ~~ $replace->{cover}; # resize
+ $reimage++ if $fields{rethumb}; # force refresh
my $thumbpath = "data/word/eng/$row->{form}.jpg";
- if ($imgpath) {
+ if ($reimage) {
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
);
- my $status = system @cmds;
- $status == 0 or Alert([
+ eval {
+ require IPC::Run;
+ my $output;
+ IPC::Run::run(\@cmds, '<' => \undef, '>&' => \$output)
+ or die $output ||
+ ($? & 127 ? "signal $?" : "error code ".($? >> 8))."\n";
+ } or Alert([
"Thumbnail image not generated",
- "Failed to convert source image, error code ".($status >> 8),
- ], "@cmds");
+ "Failed to convert source image.",
+ ], "@cmds\n$@");
}
else {
unlink $thumbpath;
@@ -231,17 +203,39 @@ my $title = $row->{id} ? "entry #$row->{id}" : 'new entry';
'
- . '',
- $col->key, $col->value, Entity($val);
- -e and printf '', $_, $row->{form} for
- $col->key eq 'source' ? "data/word/org/$row->{id}.jpg" :
- $col->key eq 'thumb' ? "data/word/eng/$row->{form}.jpg" :
- ();
- say '
', $col, $title;
+ printf '';
+ if ($col eq 'prio') {
+ printf '';
+ printf(
+ join('',
+ '',
+ ),
+ 'cover', !!$row->{cover} && ' checked', 'Highlighted'
+ );
+ }
+ else {
+ printf '', $col, Entity($val);
+ -e and printf '', $_, $row->{form}
+ for $col eq 'thumb' ? "data/word/eng/$row->{form}.jpg" : ();
+ }
+ print '';
+ -e and printf('
',
+ $col, $_, $row->{form}
+ ) for $col eq 'source' ? "data/word/org/$row->{id}.jpg" : ();
+ say '