X-Git-Url: http://git.shiar.net/sheet.git/blobdiff_plain/26b42ef92dccbff26573149d6886958862455d81..4cd7a16bb62318837752001e0d9a38b38bef3926:/writer.plp?ds=sidebyside diff --git a/writer.plp b/writer.plp index 15a9515..ef377a0 100644 --- a/writer.plp +++ b/writer.plp @@ -105,25 +105,32 @@ my $db = eval { }); } or Abort('Database error', 501, $@); -my @wordcols = ( - lang => 'Language', - cat => 'Category', - ref => undef, # included with cat - grade => undef, # " - prio => 'Level', - cover => undef, # included with prio +my %lang = ( + nld => ["\N{REGIONAL INDICATOR SYMBOL LETTER N}\N{REGIONAL INDICATOR SYMBOL LETTER L}", 'dutch'], + eng => ["\N{REGIONAL INDICATOR SYMBOL LETTER G}\N{REGIONAL INDICATOR SYMBOL LETTER B}", 'english'], + epo => ['★', 'esperanto'], +); +my @wordcols = pairkeys +my %wordcol = ( + lang => {-label => 'Language', -select => { + map { $_ => "@{$lang{$_}}" } keys %lang + }}, + cat => [{-label => 'Category'}, 'ref'], + ref => {-label => 'Reference'}, + prio => [ + {-label => 'Level', -select => [qw( + essential basic common distinctive rare invisible + )]}, + 'cover', 'grade', + ], + cover => {-label => 'Highlighted', type => 'checkbox'}, + grade => {-label => 'Order', type => 'number'}, form => 'Title', alt => 'Synonyms', wptitle => 'Wikipedia', source => 'Image', thumb => 'Convert options', ); -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 || (); my $row; @@ -137,7 +144,7 @@ if (exists $get{copy}) { } elsif ($ENV{REQUEST_METHOD} eq 'POST') {{ my $replace = $row; - $row = {%post{ pairkeys @wordcols }}; + $row = {%post{keys %wordcol}}; $_ = length ? $_ : undef for values %{$row}; eval { @@ -208,33 +215,40 @@ my $title = $row->{id} ? "entry #$row->{id}" : 'new entry'; package Shiar_Sheet::FormRow { sub input { - my ($row, $col, $type, $label) = @_; + my ($row, $col, $attr) = @_; my $val = $row->{$col} // ''; $val = '{'.join(',', map {s/,/\\,/gr} @{$val}).'}' if ref $val eq 'ARRAY'; - if (ref $type eq 'ARRAY') { + my $html = ''; + $html .= qq( $_="$attr->{$_}") for sort grep {!/^-/} keys %{$attr // {}}; + + if (my $options = $attr->{-select}) { + $options = { map {$_ => $options->[$_]} 0 .. $#{$options} } + if ref $options eq 'ARRAY'; + $options->{$val} //= "unknown ($val)"; # preserve current return ( sprintf('', ); } - elsif ($type eq 'checkbox') { + elsif ($attr->{type} eq 'checkbox') { + $html .= ' checked' if $val; return sprintf( join('', '', - ), $col, $type, !!$val && ' checked', $label + ), $col, $html, $attr->{-label} ); } else { - my $html = ''; - $html .= qq( $_="$type->{$_}") for sort keys %{$type // {}}; return ( - $label ? sprintf('', $col, $label) : (), + (map { + sprintf('', $col, $_) + } $attr->{-label} // ()), sprintf('', $col, PLP::Functions::EscapeHTML($val), $html ), @@ -263,20 +277,14 @@ bless $row, 'Shiar_Sheet::FormRow';