X-Git-Url: http://git.shiar.net/sheet.git/blobdiff_plain/5b166c668eeba6da9e7d73e25e7fd4faeecd1db1..cf8d01da2735d21735d562e73009546d64125d4a:/writer.plp
diff --git a/writer.plp b/writer.plp
index e9f0f8d..99a9736 100644
--- a/writer.plp
+++ b/writer.plp
@@ -6,27 +6,48 @@ Html({
nocache => 1,
raw => <<'EOT',
-
+
EOT
});
@@ -110,13 +108,21 @@ my $db = eval {
my @wordcols = (
lang => 'Language',
cat => 'Category',
- form => 'Translation',
+ ref => undef, # included with cat
+ grade => undef, # "
+ prio => 'Level',
+ cover => undef, # included with prio
+ form => 'Title',
alt => 'Synonyms',
wptitle => 'Wikipedia',
- source => 'Image URL',
+ source => 'Image',
thumb => 'Convert options',
- prio => 'Level',
- ref => 'Reference',
+);
+my @prioenum = qw( essential basic common distinctive rare invisible );
+my %langflag = (
+ nld => "\N{REGIONAL INDICATOR SYMBOL LETTER N}\N{REGIONAL INDICATOR SYMBOL LETTER L}",
+ eng => "\N{REGIONAL INDICATOR SYMBOL LETTER G}\N{REGIONAL INDICATOR SYMBOL LETTER B}",
+ epo => 'â
',
);
my ($find) = map {{id => $_}} $fields{id} || $Request || ();
@@ -145,43 +151,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;
@@ -194,28 +205,88 @@ else {
}
my $title = $row->{id} ? "entry #$row->{id}" : 'new entry';
+
+package Shiar_Sheet::FormRow {
+ sub input {
+ my ($row, $col, $type, $label) = @_;
+ my $val = $row->{$col} // '';
+ $val = '{'.join(',', map {s/,/\\,/gr} @{$val}).'}' if ref $val eq 'ARRAY';
+ if (ref $type eq 'ARRAY') {
+ return (
+ sprintf('',
+ );
+ }
+ elsif ($type eq 'checkbox') {
+ return sprintf(
+ join('',
+ '',
+ ), $col, $type, !!$val && ' checked', $label
+ );
+ }
+ else {
+ my $html = '';
+ $html .= qq( $_="$type->{$_}") for sort keys %{$type // {}};
+ return (
+ $label ? sprintf('', $col, $label) : (),
+ sprintf('',
+ $col, PLP::Functions::EscapeHTML($val), $html
+ ),
+ );
+ }
+ }
+}
+bless $row, 'Shiar_Sheet::FormRow';
:>