summaryrefslogtreecommitdiff
path: root/lib/VNDB/Handler/VNPage.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VNDB/Handler/VNPage.pm')
-rw-r--r--lib/VNDB/Handler/VNPage.pm55
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;