diff options
author | Yorhel <git@yorhel.nl> | 2021-05-25 16:34:48 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2021-05-25 16:34:48 +0200 |
commit | ae3164ccfc44680d306b228de4793281b72af26a (patch) | |
tree | 3fb2f93a3770cdc57f1f6b2ab4d0b642e619863b /lib | |
parent | be5325f64d990e486d5fae1b6c4b4ee5a548aa1b (diff) |
VN::Page: Save collapsable language status in user profile
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VNWeb/Misc/SavePref.pm | 24 | ||||
-rw-r--r-- | lib/VNWeb/VN/Page.pm | 9 |
2 files changed, 32 insertions, 1 deletions
diff --git a/lib/VNWeb/Misc/SavePref.pm b/lib/VNWeb/Misc/SavePref.pm new file mode 100644 index 00000000..e7ffc57c --- /dev/null +++ b/lib/VNWeb/Misc/SavePref.pm @@ -0,0 +1,24 @@ +package VNWeb::Misc::SavePref; + +use VNWeb::Prelude; + +my @vnlang_keys = (map +($_,"$_-mtl"), keys %LANGUAGE); + +TUWF::post qr{/js/save-pref} => sub { + return tuwf->resDenied if !auth; + my $prefs = tuwf->validate(json => {type => 'hash', unknown => 'pass'})->data; + + my %vnlang = map exists($prefs->{"vnlang-$_"}) ? ($_, $prefs->{"vnlang-$_"}) : (), @vnlang_keys; + if(keys %vnlang) { + my $v = tuwf->dbVali('SELECT vnlang FROM users WHERE id =', \auth->uid); + $v = $v ? JSON::XS::decode_json($v) : {}; + for(keys %vnlang) { + delete $v->{$_} if !defined $vnlang{$_}; + $v->{$_} = $vnlang{$_}?\1:\0 if defined $vnlang{$_}; + } + $v = JSON::XS::encode_json($v); + tuwf->dbExeci('UPDATE users SET vnlang =', \$v, 'WHERE id =', \auth->uid); + } +}; + +1; diff --git a/lib/VNWeb/VN/Page.pm b/lib/VNWeb/VN/Page.pm index 29d8e905..68239338 100644 --- a/lib/VNWeb/VN/Page.pm +++ b/lib/VNWeb/VN/Page.pm @@ -466,11 +466,18 @@ sub releases_ { $langrel{$_} = min map $_->{released}, $lang{$_}->@* for keys %lang; my @lang = sort { $langrel{$a} <=> $langrel{$b} || ($b eq $v->{olang}) cmp ($a eq $v->{olang}) || $a cmp $b } keys %lang; + my $pref = +(auth && do { + my $v = tuwf->dbVali('SELECT vnlang FROM users WHERE id =', \auth->uid); + $v && JSON::XS::decode_json($v) + }) || {}; + my sub lang_ { my($lang) = @_; my $ropt = { id => $lang, lang => $lang }; my $mtl = $langmtl{$lang}; - tag_ 'details', $mtl ? () : (open => 'open'), 'data-remember-id' => "vnlang-$lang".($mtl?'-mtl':''), sub { + my $prefid = $lang.($mtl?'-mtl':''); + my $open = $pref->{$prefid} // ($lang eq $v->{olang} || !$mtl); + tag_ 'details', $open ? (open => 'open') : (), auth ? 'data-save-id' : 'data-remember-id', "vnlang-$prefid", sub { tag_ 'summary', $mtl ? (class => 'mtl') : (), sub { abbr_ class => "icons lang $lang".($mtl?' mtl':''), title => $LANGUAGE{$lang}, ''; txt_ $LANGUAGE{$lang}; |