summaryrefslogtreecommitdiff
path: root/lib/VNDB/Handler/VNBrowse.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VNDB/Handler/VNBrowse.pm')
-rw-r--r--lib/VNDB/Handler/VNBrowse.pm64
1 files changed, 51 insertions, 13 deletions
diff --git a/lib/VNDB/Handler/VNBrowse.pm b/lib/VNDB/Handler/VNBrowse.pm
index 1e02337d..d4b5c2d8 100644
--- a/lib/VNDB/Handler/VNBrowse.pm
+++ b/lib/VNDB/Handler/VNBrowse.pm
@@ -16,13 +16,14 @@ sub list {
my($self, $char) = @_;
my $f = $self->formValidate(
- { name => 's', required => 0, default => 'title', enum => [ qw|title rel pop| ] },
- { name => 'o', required => 0, default => 'a', enum => [ 'a','d' ] },
+ { name => 's', required => 0, default => 'tagscore', enum => [ qw|title rel pop tagscore| ] },
+ { name => 'o', required => 0, enum => [ 'a','d' ] },
{ name => 'p', required => 0, default => 1, template => 'int' },
{ name => 'q', required => 0, default => '' },
{ name => 'sq', required => 0, default => '' },
{ name => 'ln', required => 0, multi => 1, enum => [ keys %{$self->{languages}} ], default => '' },
{ name => 'pl', required => 0, multi => 1, enum => [ keys %{$self->{platforms}} ], default => '' },
+ { name => 'ti', required => 0, default => '', maxlength => 200 },
);
return 404 if $f->{_err};
$f->{q} ||= $f->{sq};
@@ -37,39 +38,60 @@ sub list {
$f->{ln} = $f->{ln}[0] ? [ @{$f->{ln}}, @lang ] : \@lang;
}
+ my @ignored;
+ my @ti = map {
+ my $i = $self->dbTagGet(name => $_)->[0];
+ push @ignored, [$_, 0] if !$i;
+ push @ignored, [$_, 1] if $i && $i->{meta};
+ $i && !$i->{meta} ? $i->{id} : ();
+ } grep $_, split /\s*,\s*/, $f->{ti};
+ $f->{s} = 'title' if !@ti && $f->{s} eq 'tagscore';
+ $f->{o} = $f->{s} eq 'tagscore' ? 'd' : 'a' if !$f->{o};
+
my($list, $np) = $self->dbVNGet(
$char ne 'all' ? ( char => $char ) : (),
$f->{q} ? ( search => $f->{q} ) : (),
results => 50,
page => $f->{p},
- order => ($f->{s} eq 'rel' ? 'c_released' : $f->{s} eq 'pop' ? 'c_popularity' : 'title').($f->{o} eq 'a' ? ' ASC' : ' DESC'),
+ order => ($f->{s} eq 'rel' ? 'c_released' : $f->{s} eq 'pop' ? 'c_popularity' : $f->{s}).($f->{o} eq 'a' ? ' ASC' : ' DESC'),
$f->{pl}[0] ? ( platform => $f->{pl} ) : (),
$f->{ln}[0] ? ( lang => $f->{ln} ) : (),
+ tags_include => \@ti,
);
$self->resRedirect('/v'.$list->[0]{id}, 'temp')
if $f->{q} && @$list == 1;
$self->htmlHeader(title => 'Browse visual novels', search => $f->{q});
- _filters($self, $f, $char);
+ _filters($self, $f, $char, \@ignored);
+
+ my $url = "/v/$char?q=$f->{q};ti=$f->{ti}";
+ $_ and $url .= ";pl=$_" for @{$f->{pl}};
+ $_ and $url .= ";ln=$_" for @{$f->{ln}};
$self->htmlBrowse(
class => 'vnbrowse',
items => $list,
options => $f,
nextpage => $np,
- pageurl => "/v/$char?o=$f->{o};s=$f->{s};q=$f->{q}",
- sorturl => "/v/$char?q=$f->{q}",
+ pageurl => "$url;o=$f->{o};s=$f->{s}",
+ sorturl => $url,
header => [
- [ 'Title', 'title' ],
- [ '', 0 ],
- [ '', 0 ],
- [ 'Released', 'rel' ],
- [ 'Popularity', 'pop' ],
+ @ti ? [ 'Score', 'tagscore', undef, 'tc_s' ] : (),
+ [ 'Title', 'title', undef, @ti ? 'tc_t' : 'tc1' ],
+ [ '', 0, undef, 'tc2' ],
+ [ '', 0, undef, 'tc3' ],
+ [ 'Released', 'rel', undef, 'tc4' ],
+ [ 'Popularity', 'pop', undef, 'tc5' ],
],
row => sub {
my($s, $n, $l) = @_;
Tr $n % 2 ? (class => 'odd') : ();
- td class => 'tc1';
+ if(@ti) {
+ td class => 'tc_s';
+ tagscore $l->{tagscore}, 0;
+ end;
+ }
+ td class => @ti ? 'tc_t' : 'tc1';
a href => '/v'.$l->{id}, title => $l->{original}||$l->{title}, shorten $l->{title}, 100;
end;
td class => 'tc2';
@@ -92,7 +114,7 @@ sub list {
sub _filters {
- my($self, $f, $char) = @_;
+ my($self, $f, $char, $ign) = @_;
form action => '/v/all', 'accept-charset' => 'UTF-8', method => 'get';
div class => 'mainbox';
@@ -103,10 +125,26 @@ sub _filters {
a href => "/v/$_", $_ eq $char ? (class => 'optselected') : (), $_ ? uc $_ : '#';
}
end;
+
+ if(@$ign) {
+ div class => 'warning';
+ h2 'The following tags were ignored:';
+ ul;
+ li $_->[0].' ('.($_->[1]?"can't filter on meta tags":"no such tag found").')' for @$ign;
+ end;
+ end;
+ }
+
a id => 'advselect', href => '#';
lit '<i>&#9656;</i> advanced search';
end;
div id => 'advoptions', class => 'hidden vnoptions';
+
+ h2 'Tag filters';
+ table class => 'formtable', style => 'margin-left: 0';
+ $self->htmlFormPart($f, [ input => short => 'ti', name => 'Tags to include', width => 350 ]);
+ end;
+
h2;
lit 'Languages <b>(boolean or, selecting more gives more results)</b>';
end;