summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2015-07-21 06:05:58 +0200
committerYorhel <git@yorhel.nl>2015-07-21 06:05:58 +0200
commit206e791b87e58f44d379a09544ec86069646d0d5 (patch)
tree8fb5b009c799d40e3e23a4ecb3e7b32fb6cddab4
parent3bbc0320fd36e45f5a7f050a28ba9b6293daa145 (diff)
Add profile option for the default spoiler setting
This fixes the unexpected behaviour that changing the spoiler setting on one page will change it for all pages. All manual spoiler changing options are temporary now.
-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';