diff options
Diffstat (limited to 'lib/VNDB/Handler/VNPage.pm')
-rw-r--r-- | lib/VNDB/Handler/VNPage.pm | 55 |
1 files changed, 52 insertions, 3 deletions
diff --git a/lib/VNDB/Handler/VNPage.pm b/lib/VNDB/Handler/VNPage.pm index aa3c0538..763fc82d 100644 --- a/lib/VNDB/Handler/VNPage.pm +++ b/lib/VNDB/Handler/VNPage.pm @@ -10,6 +10,7 @@ use VNDB::Func; TUWF::register( qr{v/rand} => \&rand, qr{v([1-9]\d*)/rg} => \&rg, + qr{v([1-9]\d*)/(chars)} => \&page, qr{v([1-9]\d*)(?:\.([1-9]\d*))?} => \&page, ); @@ -45,6 +46,9 @@ sub rg { sub page { my($self, $vid, $rev) = @_; + my $char = $rev && $rev eq 'chars'; + $rev = undef if $char; + my $v = $self->dbVNGet( id => $vid, what => 'extended anime relations screenshots rating ranking'.($rev ? ' changes' : ''), @@ -177,9 +181,21 @@ sub page { } end 'div'; # /mainbox - _releases($self, $v, $r); - _stats($self, $v); - _screenshots($self, $v, $r) if @{$v->{screenshots}}; + my $haschar = $self->dbVNHasChar($v->{id}); + if($haschar) { + ul class => 'maintabs notfirst'; + li class => 'left '.(!$char ? ' tabselected' : ''); a href => "/v$v->{id}#main", name => 'main', mt '_vnpage_tab_main'; end; + li class => 'left '.( $char ? ' tabselected' : ''); a href => "/v$v->{id}/chars#chars", name => 'chars', mt '_vnpage_tab_chars'; end; + end; + } + + if(!$char) { + _releases($self, $v, $r); + _stats($self, $v); + _screenshots($self, $v, $r) if @{$v->{screenshots}}; + } else { + _chars($self, $haschar, $v); + } $self->htmlFooter; } @@ -513,5 +529,38 @@ sub _stats { } +sub _chars { + my($self, $has, $v) = @_; + my $l = $has && $self->dbCharGet(vid => $v->{id}, what => "extended vns($v->{id}) traits"); + return if !$has; + # TODO: spoiler handling + hide unimportant roles by default + my %done; + my %rol; + for my $r (@{$self->{char_roles}}) { + $rol{$r} = [ grep grep($_->{role} eq $r, @{$_->{vns}}) && !$done{$_->{id}}++, @$l ]; + } + my $first = 0; + for my $r (@{$self->{char_roles}}) { + next if !@{$rol{$r}}; + div class => 'mainbox'; + if(!$first++) { + p id => 'charspoil_sel'; + a href => '#', class => 'sel', mt '_vnpage_tags_spoil0'; # _vnpage!? + a href => '#', mt '_vnpage_tags_spoil1'; + a href => '#', mt '_vnpage_tags_spoil2'; + end; + } + h1 mt "_charrole_$r"; + for my $c (@{$rol{$r}}) { + my $minspoil = 5; + $minspoil = $_->{vid} == $v->{id} && $_->{spoil} < $minspoil ? $_->{spoil} : $minspoil + for(@{$c->{vns}}); + $self->charTable($c, 1, $c != $rol{$r}[0], 1, $minspoil); + } + end; + } +} + + 1; |