summaryrefslogtreecommitdiff
path: root/lib/VNDB/Handler/VNBrowse.pm
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2009-07-04 19:53:09 +0200
committerYorhel <git@yorhel.nl>2009-07-04 19:53:09 +0200
commit7f26d42e6bd1710c8f3521919220b1f1db427bee (patch)
tree563f2354db923157466791d59372a2041a78851d /lib/VNDB/Handler/VNBrowse.pm
parent70d87e3330639295fb656495c2afa1ca258d0867 (diff)
Separated VN search filters from search box
It was a rather stupid and buggy idea...
Diffstat (limited to 'lib/VNDB/Handler/VNBrowse.pm')
-rw-r--r--lib/VNDB/Handler/VNBrowse.pm59
1 files changed, 24 insertions, 35 deletions
diff --git a/lib/VNDB/Handler/VNBrowse.pm b/lib/VNDB/Handler/VNBrowse.pm
index d5791907..db42db81 100644
--- a/lib/VNDB/Handler/VNBrowse.pm
+++ b/lib/VNDB/Handler/VNBrowse.pm
@@ -21,40 +21,27 @@ sub list {
{ 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 => '' },
);
return 404 if $f->{_err};
$f->{q} ||= $f->{sq};
- my(@plat, @lang);
- my $q = $f->{q};
- if($q) {
- # VNDBID
- return $self->resRedirect('/'.$1.$2.(!$3 ? '' : $1 eq 'd' ? '#'.$3 : '.'.$3), 'temp')
- if $q =~ /^([gvrptud])([0-9]+)(?:\.([0-9]+))?$/;
-
- if(!($q =~ s/^title://)) {
- # platforms
- $_ ne 'oth' && $q =~ s/(?:$self->{platforms}{$_}|p:$_)//ig && push @plat, $_ for keys %{$self->{platforms}};
-
- # languages
- $q =~ s/($self->{languages}{$_}|l:$_)//ig && push @lang, $_ for keys %{$self->{languages}};
- }
- }
- $q =~ s/ +$//;
- $q =~ s/^ +//;
+ return $self->resRedirect('/'.$1.$2.(!$3 ? '' : $1 eq 'd' ? '#'.$3 : '.'.$3), 'temp')
+ if $f->{q} && $f->{q} =~ /^([gvrptud])([0-9]+)(?:\.([0-9]+))?$/;
my($list, $np) = $self->dbVNGet(
$char ne 'all' ? ( char => $char ) : (),
- $q ? ( search => $q ) : (),
+ $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'),
- @lang ? ( lang => \@lang ) : (),
- @plat ? ( platform => \@plat ) : (),
+ $f->{pl}[0] ? ( platform => $f->{pl} ) : (),
+ $f->{ln}[0] ? ( lang => $f->{ln} ) : (),
);
$self->resRedirect('/v'.$list->[0]{id}, 'temp')
- if $q && @$list == 1;
+ if $f->{q} && @$list == 1;
$self->htmlHeader(title => 'Browse visual novels', search => $f->{q});
_filters($self, $f, $char);
@@ -100,11 +87,10 @@ sub list {
sub _filters {
my($self, $f, $char) = @_;
+ form action => '/v/all', 'accept-charset' => 'UTF-8', method => 'get';
div class => 'mainbox';
h1 'Browse visual novels';
- form action => '/v/all', 'accept-charset' => 'UTF-8', method => 'get';
- $self->htmlSearchBox('v', $f->{q});
- end;
+ $self->htmlSearchBox('v', $f->{q});
p class => 'browseopts';
for ('all', 'a'..'z', 0) {
a href => "/v/$_", $_ eq $char ? (class => 'optselected') : (), $_ ? uc $_ : '#';
@@ -117,12 +103,13 @@ sub _filters {
h2;
lit 'Languages <b>(boolean or, selecting more gives more results)</b>';
end;
- for(sort @{$self->dbLanguages}) {
+ for my $i (sort @{$self->dbLanguages}) {
span;
- input type => 'checkbox', id => "lang_$_";
- label for => "lang_$_";
- cssicon "lang $_", $self->{languages}{$_};
- txt $self->{languages}{$_};
+ input type => 'checkbox', name => 'ln', value => $i, id => "lang_$i",
+ (scalar grep $_ eq $i, @{$f->{ln}}) ? (checked => 'checked') : ();
+ label for => "lang_$i";
+ cssicon "lang $i", $self->{languages}{$i};
+ txt $self->{languages}{$i};
end;
end;
}
@@ -130,13 +117,14 @@ sub _filters {
h2;
lit 'Platforms <b>(boolean or, selecting more gives more results)</b>';
end;
- for(sort keys %{$self->{platforms}}) {
- next if $_ eq 'oth';
+ for my $i (sort keys %{$self->{platforms}}) {
+ next if $i eq 'oth';
span;
- input type => 'checkbox', id => "plat_$_";
- label for => "plat_$_";
- cssicon $_, $self->{platforms}{$_};
- txt $self->{platforms}{$_};
+ input type => 'checkbox', id => "plat_$i", name => 'pl', value => $i,
+ (scalar grep $_ eq $i, @{$f->{pl}}) ? (checked => 'checked') : ();
+ label for => "plat_$i";
+ cssicon $i, $self->{platforms}{$i};
+ txt $self->{platforms}{$i};
end;
end;
}
@@ -144,6 +132,7 @@ sub _filters {
clearfloat;
end;
end;
+ end;
}