diff options
author | Yorhel <git@yorhel.nl> | 2015-07-21 06:05:58 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2015-07-21 06:05:58 +0200 |
commit | 206e791b87e58f44d379a09544ec86069646d0d5 (patch) | |
tree | 8fb5b009c799d40e3e23a4ecb3e7b32fb6cddab4 | |
parent | 3bbc0320fd36e45f5a7f050a28ba9b6293daa145 (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.txt | 12 | ||||
-rw-r--r-- | data/script.js | 28 | ||||
-rw-r--r-- | lib/VNDB/Handler/Chars.pm | 9 | ||||
-rw-r--r-- | lib/VNDB/Handler/Tags.pm | 10 | ||||
-rw-r--r-- | lib/VNDB/Handler/Traits.pm | 10 | ||||
-rw-r--r-- | lib/VNDB/Handler/Users.pm | 9 | ||||
-rw-r--r-- | lib/VNDB/Handler/VNBrowse.pm | 5 | ||||
-rw-r--r-- | lib/VNDB/Handler/VNPage.pm | 18 | ||||
-rw-r--r-- | util/sql/all.sql | 2 | ||||
-rw-r--r-- | util/updates/update_2.25.sql | 1 |
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'; |