package VNDB::Handler::Chars;
use strict;
use warnings;
use TUWF ':html', 'uri_escape';
use Exporter 'import';
use VNDB::Func;
use VNDB::Types;
our @EXPORT = ('charBrowseTable');
TUWF::register(
qr{c/([a-z0]|all)} => \&list,
);
sub list {
my($self, $fch) = @_;
my $f = $self->formValidate(
{ get => 'p', required => 0, default => 1, template => 'page' },
{ get => 'q', required => 0, default => '' },
{ get => 'fil', required => 0, default => '' },
);
return $self->resNotFound if $f->{_err};
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,
page => $f->{p},
what => 'vns',
});
$self->htmlHeader(title => 'Browse characters');
my $quri = uri_escape($f->{q});
form action => '/c/all', 'accept-charset' => 'UTF-8', method => 'get';
div class => 'mainbox';
h1 'Browse characters';
$self->htmlSearchBox('c', $f->{q});
p class => 'browseopts';
for ('all', 'a'..'z', 0) {
a href => "/c/$_?q=$quri;fil=$f->{fil}", $_ eq $fch ? (class => 'optselected') : (), $_ eq 'all' ? 'ALL' : $_ ? uc $_ : '#';
}
end;
p class => 'filselect';
a id => 'filselect', href => '#c';
lit '▸ Filters';
end;
end;
input type => 'hidden', class => 'hidden', name => 'fil', id => 'fil', value => $f->{fil};
end;
end 'form';
if(!@$list) {
div class => 'mainbox';
h1 'No results';
p 'No characters found that matched your criteria.';
end;
}
@$list && $self->charBrowseTable($list, $np, $f, "/c/$fch?q=$quri;fil=$f->{fil}");
$self->htmlFooter;
}
# Also used on Handler::Traits
sub charBrowseTable {
my($self, $list, $np, $f, $uri) = @_;
$self->htmlBrowse(
class => 'charb',
items => $list,
options => $f,
nextpage => $np,
pageurl => $uri,
sorturl => $uri,
header => [ [ '' ], [ '' ] ],
row => sub {
my($s, $n, $l) = @_;
Tr;
td class => 'tc1';
cssicon "gen $l->{gender}", $GENDER{$l->{gender}} if $l->{gender} ne 'unknown';
end;
td class => 'tc2';
a href => "/c$l->{id}", title => $l->{original}||$l->{name}, shorten $l->{name}, 50;
b class => 'grayedout';
my $i = 1;
my %vns;
for (@{$l->{vns}}) {
next if $_->{spoil} || $vns{$_->{vid}}++;
last if $i++ > 4;
txt ', ' if $i > 2;
a href => "/v$_->{vid}/chars", title => $_->{vntitle}, shorten $_->{vntitle}, 30;
}
end;
end;
end;
}
)
}
1;