keyboard/altgr/index: move ctrl rows to distinct inventory mode
[sheet.git] / word / edit.plp
index 4a6daaad4a19ab503cd0680ec13479e11baa7934..55fbeac9923b1bfa1f098e87cdab9ed7830e0bc9 100644 (file)
@@ -15,6 +15,7 @@ EOT
 
 use List::Util qw( pairs pairkeys );
 use Shiar_Sheet::FormRow;
+use SQL::Abstract '1.83';
 use JSON;
 
 my $db = eval {
@@ -153,6 +154,7 @@ elsif (defined $post{form}) {{
                my $val = $colinfo->{-multiple} && @val ? \@val : $val[-1];
                if (my $jsoncol = $colinfo->{-json}) {
                        $row->{$jsoncol}->{$col} = $val;  # hash will be encoded
+                       ref $_ eq 'HASH' or $_ = decode_json($_) for $replace->{$jsoncol} // ();
                }
                else {
                        $row->{$col} = $val;
@@ -162,7 +164,7 @@ elsif (defined $post{form}) {{
        while (my ($col, $val) = each %{$row}) {
                # convert json subcolumns to database string
                ref $val eq 'HASH' or next;
-               $val = { %{decode_json($_)}, %{$val} } for $replace->{$col} // ();  # preserve unknown
+               $val = { %{$_}, %{$val} } for $replace->{$col} // ();  # preserve unknown
                defined $val->{$_} or delete $val->{$_} for keys %{$val};  # delete emptied
                $row->{$col} = encode_json($val);
        }
@@ -214,13 +216,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 {
@@ -261,20 +263,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 '<li><label for="%s">%s</label><p>', $col, $title;
+       printf '<li><label for="%s">%s</label><div>', $col, $title;
                printf '<span class=inline>';
                print $row->input($col => $attr);
                if (my $imgsrc = $attr->{-src}) {
                        my $hide = $col eq 'source';
-                       printf '<span id="%spreview">', $col unless $hide;
+                       printf '<figure id="%spreview">', $col unless $hide;
                        printf('<img src="/%s" alt="%s"%s />',
                                $_, $row->{form}, $hide && qq( id="${col}preview" hidden)
                        ) for grep { -e } $imgsrc->($row);
-                       printf '</span>' unless $hide;
+                       printf '</figure>' unless $hide;
                }
                print $row->input($_ => delete $wordcol{$_}) for @span;
                print '</span>';
-       say '</p></li>';
+       say '</div></li>';
 }
 
 if (not $row->{ref}) {