summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/lang.txt12
-rw-r--r--data/script.js28
-rw-r--r--lib/VNDB/Handler/Chars.pm9
-rw-r--r--lib/VNDB/Handler/Tags.pm10
-rw-r--r--lib/VNDB/Handler/Traits.pm10
-rw-r--r--lib/VNDB/Handler/Users.pm9
-rw-r--r--lib/VNDB/Handler/VNBrowse.pm5
-rw-r--r--lib/VNDB/Handler/VNPage.pm18
-rw-r--r--util/sql/all.sql2
-rw-r--r--util/updates/update_2.25.sql1
10 files changed, 54 insertions, 50 deletions
diff --git a/data/lang.txt b/data/lang.txt
index 4e54034a..54e40fdb 100644
--- a/data/lang.txt
+++ b/data/lang.txt
@@ -12534,6 +12534,18 @@ tr*:
uk*:
it*:
+:_usere_spoilers
+en : Spoiler level
+ru*:
+cs*:
+hu*:
+nl*:
+de*:
+es*:
+tr*:
+uk*:
+it*:
+
:_usere_skin
en : Preferred skin
ru : Предпочитаемая шкурка
diff --git a/data/script.js b/data/script.js
index a45212ff..0db40c02 100644
--- a/data/script.js
+++ b/data/script.js
@@ -495,7 +495,7 @@ function tvsInit() {
var l = byName(byId('tagops'), 'a');
for(var i=0;i<l.length; i++)
l[i].onclick = tvsClick;
- tvsSet(getCookie('tagspoil'));
+ tvsSet();
}
function tvsClick() {
@@ -507,10 +507,9 @@ function tvsClick() {
setClass(l[i], 'tsel', !hasClass(l[i], 'tsel'));
tvsSet();
} else if(i < 6) { /* spoiler level */
- tvsSet(i-3, null);
- setCookie('tagspoil', i-3);
+ tvsSet(i-3);
} else /* limit */
- tvsSet(null, i == 6 ? true : false);
+ tvsSet(null, i == 6);
}
return false;
}
@@ -2729,12 +2728,10 @@ function filFSelect(c, n, lines, opts) {
];
}
-function filFOptions(c, n, opts, setfunc) {
+function filFOptions(c, n, opts) {
var p = tag('p', {'class':'opts', fil_val:opts[0][0]});
var sel = function (e) {
var o = typeof e == 'string' ? e : this.fil_n;
- if(setfunc)
- o = setfunc(o);
var l = byName(p, 'a');
for(var i=0; i<l.length; i++)
setClass(l[i], 'tsel', l[i].fil_n+'' == o+'');
@@ -2885,8 +2882,7 @@ function filChars() {
[ '', ' ', tag(mt('_js_fil_booland')) ],
filFTagInput('trait_inc', mt('_charb_traitinc'), 'trait'),
filFTagInput('trait_exc', mt('_charb_traitexc'), 'trait'),
- filFOptions('tagspoil', ' ', [[0, mt('_spoilset_0')],[1, mt('_spoilset_1')],[2, mt('_spoilset_2')]],
- function (o) { var s = getCookie('tagspoil'); if(o+'' == '') return s == null ? 0 : s; setCookie('tagspoil', o); return o})
+ filFOptions('tagspoil', ' ', [[0, mt('_spoilset_0')],[1, mt('_spoilset_1')],[2, mt('_spoilset_2')]]),
],
[ mt('_charb_roles'), filFSelect('role', mt('_charb_roles'), 4, roles) ]
];
@@ -2967,8 +2963,7 @@ function filVN() {
[ '', ' ', byId('pref_code') ? tag(mt('_vnbrowse_tagactive')) : null ],
filFTagInput('tag_inc', mt('_vnbrowse_taginc'), 'tag'),
filFTagInput('tag_exc', mt('_vnbrowse_tagexc'), 'tag'),
- filFOptions('tagspoil', ' ', [[0, mt('_spoilset_0')],[1, mt('_spoilset_1')],[2, mt('_spoilset_2')]],
- function (o) { var s = getCookie('tagspoil'); if(o+'' == '') return s == null ? 0 : s; setCookie('tagspoil', o); return o})
+ filFOptions('tagspoil', ' ', [[0, mt('_spoilset_0')],[1, mt('_spoilset_1')],[2, mt('_spoilset_2')]])
],
[ mt('_vnbrowse_language'), filFSelect('lang', mt('_vnbrowse_language'), 20, lang) ],
[ mt('_vnbrowse_olang'), filFSelect('olang',mt('_vnbrowse_olang'), 20, lang) ],
@@ -3067,11 +3062,6 @@ if(byId('advselect')) {
};
}
-// Spoiler selection buttons on tag/trait browse pages
-if(byId('tagspoil_0')) byId('tagspoil_0').onclick = function() { setCookie('tagspoil', 0); return true; };
-if(byId('tagspoil_1')) byId('tagspoil_1').onclick = function() { setCookie('tagspoil', 1); return true; };
-if(byId('tagspoil_2')) byId('tagspoil_2').onclick = function() { setCookie('tagspoil', 2); return true; };
-
// NSFW VN image toggle (/v+)
if(byId('nsfw_show')) {
var msg = byId('nsfw_show');
@@ -3247,15 +3237,17 @@ if(byId('charspoil_sel')) {
}
}
};
+ var set = 0;
for(var i=0; i<h.length; i++) {
h[i].num = i;
h[i].onclick = function() {
setall(this.num);
- setCookie('tagspoil', this.num);
return false;
};
+ if(hasClass(h[i], 'sel'))
+ set = i;
};
- setall(getCookie('tagspoil'));
+ setall(set);
}
diff --git a/lib/VNDB/Handler/Chars.pm b/lib/VNDB/Handler/Chars.pm
index f667d41b..c59d44b9 100644
--- a/lib/VNDB/Handler/Chars.pm
+++ b/lib/VNDB/Handler/Chars.pm
@@ -66,10 +66,9 @@ sub page {
div class => 'mainbox';
$self->htmlItemMessage('c', $r);
+ my $spoil = $self->authPref('spoilers')||0;
p id => 'charspoil_sel';
- a href => '#', class => 'sel', mt '_spoilset_0';
- a href => '#', mt '_spoilset_1';
- a href => '#', mt '_spoilset_2';
+ a href => '#', $spoil == $_ ? (class => 'sel') : (), mt "_spoilset_$_" for (0..2);
end;
h1 $r->{name};
h2 class => 'alttitle', $r->{original} if $r->{original};
@@ -487,7 +486,9 @@ sub list {
);
return $self->resNotFound if $f->{_err};
- my($list, $np) = $self->filFetchDB(char => $f->{fil}, {}, {
+ my($list, $np) = $self->filFetchDB(char => $f->{fil}, {
+ tagspoil => $self->authPref('spoilers')||0,
+ }, {
$fch ne 'all' ? ( char => $fch ) : (),
$f->{q} ? ( search => $f->{q} ) : (),
results => 50,
diff --git a/lib/VNDB/Handler/Tags.pm b/lib/VNDB/Handler/Tags.pm
index 8d982767..f4f8cec3 100644
--- a/lib/VNDB/Handler/Tags.pm
+++ b/lib/VNDB/Handler/Tags.pm
@@ -33,12 +33,10 @@ sub tagpage {
{ get => 's', required => 0, default => 'tagscore', enum => [ qw|title rel pop tagscore rating| ] },
{ get => 'o', required => 0, default => 'd', enum => [ 'a','d' ] },
{ get => 'p', required => 0, default => 1, template => 'int' },
- { get => 'm', required => 0, default => undef, enum => [qw|0 1 2|] },
+ { get => 'm', required => 0, default => $self->authPref('spoilers') || 0, enum => [qw|0 1 2|] },
{ get => 'fil', required => 0 },
);
return $self->resNotFound if $f->{_err};
- my $tagspoil = $self->reqCookie('tagspoil')||'';
- $f->{m} //= $tagspoil =~ /^[0-2]$/ ? $tagspoil : 0;
$f->{fil} //= $self->authPref('filter_vn');
my($list, $np) = $t->{meta} || $t->{state} != 2 ? ([],0) : $self->filFetchDB(vn => $f->{fil}, undef, {
@@ -108,9 +106,9 @@ sub tagpage {
h1 mt '_tagp_vnlist';
p class => 'browseopts';
- a href => "/g$t->{id}?fil=$f->{fil};m=0", $f->{m} == 0 ? (class => 'optselected') : (), id => 'tagspoil_0', mt '_spoilset_0';
- a href => "/g$t->{id}?fil=$f->{fil};m=1", $f->{m} == 1 ? (class => 'optselected') : (), id => 'tagspoil_1', mt '_spoilset_1';
- a href => "/g$t->{id}?fil=$f->{fil};m=2", $f->{m} == 2 ? (class => 'optselected') : (), id => 'tagspoil_2', mt '_spoilset_2';
+ a href => "/g$t->{id}?fil=$f->{fil};m=0", $f->{m} == 0 ? (class => 'optselected') : (), mt '_spoilset_0';
+ a href => "/g$t->{id}?fil=$f->{fil};m=1", $f->{m} == 1 ? (class => 'optselected') : (), mt '_spoilset_1';
+ a href => "/g$t->{id}?fil=$f->{fil};m=2", $f->{m} == 2 ? (class => 'optselected') : (), mt '_spoilset_2';
end;
a id => 'filselect', href => '#v';
diff --git a/lib/VNDB/Handler/Traits.pm b/lib/VNDB/Handler/Traits.pm
index c5bf6da0..a69e8763 100644
--- a/lib/VNDB/Handler/Traits.pm
+++ b/lib/VNDB/Handler/Traits.pm
@@ -26,12 +26,10 @@ sub traitpage {
my $f = $self->formValidate(
{ get => 'p', required => 0, default => 1, template => 'int' },
- { get => 'm', required => 0, default => undef, enum => [qw|0 1 2|] },
+ { get => 'm', required => 0, default => $self->authPref('spoilers')||0, enum => [qw|0 1 2|] },
{ get => 'fil', required => 0, default => '' },
);
return $self->resNotFound if $f->{_err};
- my $tagspoil = $self->reqCookie('tagspoil')||'';
- $f->{m} //= $tagspoil =~ /^[0-2]$/ ? $tagspoil : 0;
my $title = mt '_traitp_title', $t->{meta}?0:1, $t->{name};
$self->htmlHeader(title => $title, noindex => $t->{state} != 2);
@@ -97,9 +95,9 @@ sub traitpage {
h1 mt '_traitp_charlist';
p class => 'browseopts';
- a href => "/i$trait?m=0", $f->{m} == 0 ? (class => 'optselected') : (), id => 'tagspoil_0', mt '_spoilset_0';
- a href => "/i$trait?m=1", $f->{m} == 1 ? (class => 'optselected') : (), id => 'tagspoil_1', mt '_spoilset_1';
- a href => "/i$trait?m=2", $f->{m} == 2 ? (class => 'optselected') : (), id => 'tagspoil_2', mt '_spoilset_2';
+ a href => "/i$trait?m=0", $f->{m} == 0 ? (class => 'optselected') : (), mt '_spoilset_0';
+ a href => "/i$trait?m=1", $f->{m} == 1 ? (class => 'optselected') : (), mt '_spoilset_1';
+ a href => "/i$trait?m=2", $f->{m} == 2 ? (class => 'optselected') : (), mt '_spoilset_2';
end;
a id => 'filselect', href => '#c';
diff --git a/lib/VNDB/Handler/Users.pm b/lib/VNDB/Handler/Users.pm
index 0068768d..293a91b5 100644
--- a/lib/VNDB/Handler/Users.pm
+++ b/lib/VNDB/Handler/Users.pm
@@ -376,6 +376,7 @@ sub edit {
{ post => 'show_nsfw', required => 0, default => 0, enum => [0,1] },
{ post => 'tags_all', required => 0, default => 0, enum => [0,1] },
{ post => 'tags_cat', required => 0, multi => 1, enum => [qw|cont ero tech|] },
+ { post => 'spoilers', required => 0, default => 0, enum => [0..2] },
{ post => 'skin', required => 0, default => $self->{skin_default}, enum => [ keys %{$self->{skins}} ] },
{ post => 'customcss', required => 0, maxlength => 2000, default => '' },
);
@@ -383,7 +384,7 @@ sub edit {
if ($frm->{usrpass} || $frm->{usrpass2}) && (!$frm->{usrpass} || !$frm->{usrpass2} || $frm->{usrpass} ne $frm->{usrpass2});
if(!$frm->{_err}) {
$frm->{skin} = '' if $frm->{skin} eq $self->{skin_default};
- $self->dbUserPrefSet($uid, $_ => $frm->{$_}) for (qw|skin customcss show_nsfw tags_all hide_list |);
+ $self->dbUserPrefSet($uid, $_ => $frm->{$_}) for (qw|skin customcss show_nsfw tags_all hide_list spoilers|);
my $tags_cat = join(',', sort @{$frm->{tags_cat}}) || 'none';
$self->dbUserPrefSet($uid, tags_cat => $tags_cat eq $self->{default_tags_cat} ? '' : $tags_cat);
@@ -405,7 +406,7 @@ sub edit {
$frm->{usrname} ||= $u->{username};
$frm->{mail} ||= $u->{mail};
$frm->{perms} ||= [ grep $u->{perm} & $self->{permissions}{$_}, keys %{$self->{permissions}} ];
- $frm->{$_} //= $u->{prefs}{$_} for(qw|skin customcss show_nsfw tags_all hide_list|);
+ $frm->{$_} //= $u->{prefs}{$_} for(qw|skin customcss show_nsfw tags_all hide_list spoilers|);
$frm->{tags_cat} ||= [ split /,/, $u->{prefs}{tags_cat}||$self->{default_tags_cat} ];
$frm->{ign_votes} = $u->{ign_votes} if !defined $frm->{ign_votes};
$frm->{skin} ||= $self->{skin_default};
@@ -442,8 +443,8 @@ sub edit {
[ check => short => 'hide_list', name => mt '_usere_flist', "/u$uid/list", "/u$uid/votes", "/u$uid/wish" ],
[ check => short => 'show_nsfw', name => mt '_usere_fnsfw' ],
[ check => short => 'tags_all', name => mt '_usere_ftags' ],
- [ select => short => 'tags_cat', name => mt('_usere_tagcats'), multi => 1, size => 3, options => [
- map [ $_, mt '_tagcat_'.$_ ], qw|cont ero tech| ] ],
+ [ select => short => 'tags_cat', name => mt('_usere_tagcats'), multi => 1, size => 3, options => [ map [ $_, mt '_tagcat_'.$_ ], qw|cont ero tech| ] ],
+ [ select => short => 'spoilers', name => mt('_usere_spoilers'), options => [ map [ $_, mt '_spoilset_'.$_ ], 0..2 ] ],
[ select => short => 'skin', name => mt('_usere_skin'), width => 300, options => [
map [ $_, $self->{skins}{$_}[0].($self->debug?" [$_]":'') ], sort { $self->{skins}{$a}[0] cmp $self->{skins}{$b}[0] } keys %{$self->{skins}} ] ],
[ textarea => short => 'customcss', name => mt '_usere_css' ],
diff --git a/lib/VNDB/Handler/VNBrowse.pm b/lib/VNDB/Handler/VNBrowse.pm
index 3323722c..c2a923b5 100644
--- a/lib/VNDB/Handler/VNBrowse.pm
+++ b/lib/VNDB/Handler/VNBrowse.pm
@@ -50,7 +50,10 @@ sub list {
$f->{s} = 'title' if $f->{fil} !~ /tag_inc-/ && $f->{s} eq 'tagscore';
$f->{o} = $f->{s} eq 'tagscore' ? 'd' : 'a' if !$f->{o};
- my($list, $np) = $self->filFetchDB(vn => $f->{fil}, \%compat, {
+ my($list, $np) = $self->filFetchDB(vn => $f->{fil}, {
+ %compat,
+ tagspoil => $self->authPref('spoilers')||0,
+ }, {
what => ' rating' .
($f->{vnlist} ? ' vnlist' : '').
($f->{wish} ? ' wishlist' : ''),
diff --git a/lib/VNDB/Handler/VNPage.pm b/lib/VNDB/Handler/VNPage.pm
index 9a97cd41..183d56a4 100644
--- a/lib/VNDB/Handler/VNPage.pm
+++ b/lib/VNDB/Handler/VNPage.pm
@@ -627,9 +627,10 @@ sub page {
# NOTE: order of these links is hardcoded in JS
my $tags_cat = $self->authPref('tags_cat') || $self->{default_tags_cat};
a href => "#$_", $tags_cat =~ /\Q$_/ ? (class => 'tsel') : (), lc mt "_tagcat_$_" for qw|cont ero tech|;
- a href => '#', class => 'sec tsel', lc mt '_spoilset_0';
- a href => '#', lc mt '_spoilset_1';
- a href => '#', lc mt '_spoilset_2';
+ my $spoiler = $self->authPref('spoilers') || 0;
+ a href => '#', class => 'sec'.($spoiler == 0 ? ' tsel' : ''), lc mt '_spoilset_0';
+ a href => '#', $spoiler == 1 ? (class => 'tsel') : (), lc mt '_spoilset_1';
+ a href => '#', $spoiler == 2 ? (class => 'tsel') : (), lc mt '_spoilset_2';
a href => '#', class => 'sec'.($self->authPref('tags_all') ? '': ' tsel'), mt '_vnpage_tags_summary';
a href => '#', $self->authPref('tags_all') ? (class => 'tsel') : (), mt '_vnpage_tags_all';
end;
@@ -1070,7 +1071,6 @@ sub _chars {
my($self, $has, $v) = @_;
my $l = $has && $self->dbCharGet(vid => $v->{id}, what => "extended vns($v->{id}) seiyuu traits", results => 100);
return if !$has;
- # TODO: spoiler handling + hide unimportant roles by default
my %done;
my %rol;
for my $r (@{$self->{char_roles}}) {
@@ -1081,10 +1081,9 @@ sub _chars {
next if !@{$rol{$r}};
div class => 'mainbox';
if(!$first++) {
+ my $spoil = $self->authPref('spoilers')||0;
p id => 'charspoil_sel';
- a href => '#', class => 'sel', mt '_spoilset_0';
- a href => '#', mt '_spoilset_1';
- a href => '#', mt '_spoilset_2';
+ a href => '#', $spoil == $_ ? (class => 'sel') : (), mt "_spoilset_$_" for (0..2);
end;
}
h1 mt "_charrole_$r", scalar @{$rol{$r}};
@@ -1132,10 +1131,9 @@ sub _staff {
$has_spoilers ||= $_->{spoil}, $has_notes ||= $_->{note} for @{$v->{seiyuu}};
div class => 'mainbox staff cast';
if($has_spoilers) {
+ my $spoil = $self->authPref('spoilers')||0;
p id => 'charspoil_sel';
- a href => '#', class => 'sel', mt '_spoilset_0';
- a href => '#', mt '_spoilset_1';
- a href => '#', mt '_spoilset_2';
+ a href => '#', $spoil == $_ ? (class => 'sel') : (), mt "_spoilset_$_" for (0..2);
end;
}
h1 mt '_vnpage_cast';
diff --git a/util/sql/all.sql b/util/sql/all.sql
index e87c6e28..f8775ac3 100644
--- a/util/sql/all.sql
+++ b/util/sql/all.sql
@@ -15,7 +15,7 @@ CREATE TYPE medium AS ENUM ('cd', 'dvd', 'gdr', 'blr', 'flp', 'mrt',
CREATE TYPE notification_ntype AS ENUM ('pm', 'dbdel', 'listdel', 'dbedit', 'announce');
CREATE TYPE notification_ltype AS ENUM ('v', 'r', 'p', 'c', 't', 's');
CREATE TYPE platform AS ENUM ('win', 'dos', 'lin', 'mac', 'ios', 'and', 'dvd', 'bdp', 'fmt', 'gba', 'gbc', 'msx', 'nds', 'nes', 'p88', 'p98', 'pce', 'pcf', 'psp', 'ps1', 'ps2', 'ps3', 'ps4', 'psv', 'drc', 'sat', 'sfc', 'wii', 'n3d', 'x68', 'xb1', 'xb3', 'xbo', 'web', 'oth');
-CREATE TYPE prefs_key AS ENUM ('l10n', 'skin', 'customcss', 'filter_vn', 'filter_release', 'show_nsfw', 'hide_list', 'notify_nodbedit', 'notify_announce', 'vn_list_own', 'vn_list_wish', 'tags_all', 'tags_cat');
+CREATE TYPE prefs_key AS ENUM ('l10n', 'skin', 'customcss', 'filter_vn', 'filter_release', 'show_nsfw', 'hide_list', 'notify_nodbedit', 'notify_announce', 'vn_list_own', 'vn_list_wish', 'tags_all', 'tags_cat', 'spoilers');
CREATE TYPE producer_relation AS ENUM ('old', 'new', 'sub', 'par', 'imp', 'ipa', 'spa', 'ori');
CREATE TYPE release_type AS ENUM ('complete', 'partial', 'trial');
CREATE TYPE tag_category AS ENUM('cont', 'ero', 'tech');
diff --git a/util/updates/update_2.25.sql b/util/updates/update_2.25.sql
index ef1917ef..2b959090 100644
--- a/util/updates/update_2.25.sql
+++ b/util/updates/update_2.25.sql
@@ -41,4 +41,5 @@ UPDATE stats_cache SET count = (SELECT COUNT(*) FROM staff WHERE hidden = FA
-- New preferences
ALTER TYPE prefs_key ADD VALUE 'tags_all';
ALTER TYPE prefs_key ADD VALUE 'tags_cat';
+ALTER TYPE prefs_key ADD VALUE 'spoilers';