X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/a1eb869d25a24f6f0b19e3011a19474fc0102f8c..9c976dfa8a3cd5dc9ae2b3b9e3ae207ff666cab8:/word/edit.plp diff --git a/word/edit.plp b/word/edit.plp index e442851..dcb4d3d 100644 --- a/word/edit.plp +++ b/word/edit.plp @@ -152,15 +152,21 @@ elsif (defined $post{form}) {{ my @val = map { parseinput($_) } $post{'@'.$col}->@*; my $val = $colinfo->{-multiple} && @val ? \@val : $val[-1]; if (my $jsoncol = $colinfo->{-json}) { - defined $val and $row->{$jsoncol}->{$col} = $val; # hash will be encoded + ref $_ eq 'HASH' or $_ = decode_json($_) for $replace->{$jsoncol} // (); } else { $row->{$col} = $val; } } my $imagecol = $row->{image}; # backup image subcolumns - ref $_ eq 'HASH' and $_ = encode_json($_) for values %{$row}; + while (my ($col, $val) = each %{$row}) { + # convert json subcolumns to database string + ref $val eq 'HASH' or next; + $val = { %{$_}, %{$val} } for $replace->{$col} // (); # preserve unknown + defined $val->{$_} or delete $val->{$_} for keys %{$val}; # delete emptied + $row->{$col} = encode_json($val); + } if (!$row->{form} and $row->{lang}) { if ($row->{ref} ne 'delete') { @@ -209,13 +215,13 @@ elsif (defined $post{form}) {{ require Shiar_Sheet::ImagePrep; my $image = Shiar_Sheet::ImagePrep->new($wordcol{source}->{-src}->($row)); my $reimage = eval { - ($imagecol->{source} // '') ne ($replace->{source} // '') or return; + ($imagecol->{source} // '') ne ($replace->{image}->{source} // '') or return; $image->download($imagecol->{source}); }; !$@ or Alert(["Source image not found", $@]); - $reimage ||= $row->{image} ~~ $replace->{image}; # different source - $reimage ||= $row->{cover} ~~ $replace->{cover}; # resize + $reimage ||= $row->{convert} ~~ $replace->{image}->{convert}; # different + $reimage ||= $row->{cover} ~~ $replace->{image}->{cover}; # resize $reimage++ if $fields{rethumb}; # force refresh if ($reimage) { eval { @@ -256,20 +262,20 @@ for my $col (@wordcols) { my ($attr, @span) = ref $info eq 'ARRAY' ? @{$info} : $info; next if delete $attr->{hidden} and not $row->{$col}; my $title = ref $attr ? delete $attr->{-label} : $attr; - printf '
  • ', $col, $title; + printf '

  • ', $col, $title; printf ''; print $row->input($col => $attr); if (my $imgsrc = $attr->{-src}) { my $hide = $col eq 'source'; - printf '', $col unless $hide; + printf '
    ', $col unless $hide; printf('%s', $_, $row->{form}, $hide && qq( id="${col}preview" hidden) ) for grep { -e } $imgsrc->($row); - printf '' unless $hide; + printf '
    ' unless $hide; } print $row->input($_ => delete $wordcol{$_}) for @span; print '
    '; - say '

  • '; + say ''; } if (not $row->{ref}) {