summaryrefslogtreecommitdiff
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
parent70d87e3330639295fb656495c2afa1ca258d0867 (diff)
Separated VN search filters from search box
It was a rather stupid and buggy idea...
-rw-r--r--ChangeLog1
-rw-r--r--lib/VNDB/Handler/VNBrowse.pm59
-rw-r--r--static/f/script.js75
3 files changed, 33 insertions, 102 deletions
diff --git a/ChangeLog b/ChangeLog
index c71a7120..55ab093f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,7 @@
- Proper support for multilingual releases
- Copy-add release feature
- Automatically fill out title & original title when adding a release
+ - Separated VN search filters from search box
2.4 - 2009-06-07
- Release search + browser + filters
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;
}
diff --git a/static/f/script.js b/static/f/script.js
index b39ba11f..e6eab3bb 100644
--- a/static/f/script.js
+++ b/static/f/script.js
@@ -53,70 +53,6 @@ function readCookie(n) {
-
-
-
-/* A D V A N C E D S E A R C H */
-
-function searchInit() {
- cl('advselect', function() {
- var e = x('advoptions');
- e.className = e.className.indexOf('hidden')>=0 ? '' : 'hidden';
- this.getElementsByTagName('i')[0].innerHTML = e.className.indexOf('hidden')>=0 ? '&#9656;' : '&#9662;';
- return false;
- });
-
- if(x('advoptions').className.indexOf('vnoptions') < 0)
- return;
- var l = x('advoptions').getElementsByTagName('input');
- for(i=0;i<l.length;i++)
- if(l[i].id.substr(0,5) == 'lang_' || l[i].id.substr(0,5) == 'plat_')
- l[i].onclick = function() {
- searchParse(0, this.parentNode.getElementsByTagName('acronym')[0].title);
- };
-
- x('q').onkeyup = searchParse;
- searchParse();
-}
-
-function searchParse(add, term) {
- var q = x('q').value;
- var i;
-
- if(add == 0 || add === 1) {
- var qn = q;
- if(!add)
- eval('qn = qn.replace(/'+term+'/gi, "")');
- else {
- eval('qn = qn.replace(/(^|[^-])'+term+'/gi, "$1-'+term+'")');
- if(qn == q)
- eval('qn = qn.replace(/-'+term+'/gi, "")');
- }
- if(qn == q)
- q += ' '+term;
- else
- q = qn;
-
- q = q.replace(/^ +/, "");
- q = q.replace(/ +$/, "");
- q = q.replace(/ +/g, " ");
-
- x('q').value = q;
- }
-
- q = q.toLowerCase();
- var l = x('advoptions').getElementsByTagName('input');
- for(i=0;i<l.length;i++)
- if(l[i].id.substr(0,5) == 'lang_' || l[i].id.substr(0,5) == 'plat_')
- l[i].checked = q.indexOf(l[i].parentNode.getElementsByTagName('acronym')[0].title.toLowerCase()) >= 0 ? true : false;
-
- return false;
-}
-
-
-
-
-
/* I M A G E V I E W E R */
function ivInit() {
@@ -511,9 +447,14 @@ DOMLoad(function() {
}
- // Advanced VN search
- if(x('advselect'))
- searchInit();
+ // Advanced search
+ cl('advselect', function() {
+ var e = x('advoptions');
+ e.className = e.className.indexOf('hidden')>=0 ? '' : 'hidden';
+ this.getElementsByTagName('i')[0].innerHTML = e.className.indexOf('hidden')>=0 ? '&#9656;' : '&#9662;';
+ return false;
+ });
+
// show/hide NSFW VN image