summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2021-05-25 16:34:48 +0200
committerYorhel <git@yorhel.nl>2021-05-25 16:34:48 +0200
commitae3164ccfc44680d306b228de4793281b72af26a (patch)
tree3fb2f93a3770cdc57f1f6b2ab4d0b642e619863b /lib
parentbe5325f64d990e486d5fae1b6c4b4ee5a548aa1b (diff)
VN::Page: Save collapsable language status in user profile
Diffstat (limited to 'lib')
-rw-r--r--lib/VNWeb/Misc/SavePref.pm24
-rw-r--r--lib/VNWeb/VN/Page.pm9
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};