diff options
-rw-r--r-- | data/style.css | 7 | ||||
-rw-r--r-- | lib/VNDB/DB/Releases.pm | 4 | ||||
-rw-r--r-- | lib/VNDB/Handler/Releases.pm | 62 | ||||
-rw-r--r-- | lib/VNDB/Util/LayoutHTML.pm | 1 |
4 files changed, 73 insertions, 1 deletions
diff --git a/data/style.css b/data/style.css index 042beb33..d2ed21f3 100644 --- a/data/style.css +++ b/data/style.css @@ -924,6 +924,13 @@ ul#catselect li li.exc { background-position: 0px -33px; color: $statnok$; } +/***** Release browser *****/ + +.relbrowse .tc1 { width: 80px } +.relbrowse .tc2 { width: 50px; text-align: center; } +.relbrowse .tc3 { width: 85px; text-align: right; } + + /***** Documentation pages *****/ diff --git a/lib/VNDB/DB/Releases.pm b/lib/VNDB/DB/Releases.pm index 1df13894..ddf9a66c 100644 --- a/lib/VNDB/DB/Releases.pm +++ b/lib/VNDB/DB/Releases.pm @@ -9,7 +9,7 @@ use Exporter 'import'; our @EXPORT = qw|dbReleaseGet dbReleaseAdd dbReleaseEdit|; -# Options: id vid rev order unreleased page results what +# Options: id vid rev order unreleased page results what date # What: extended changes vn producers platforms media sub dbReleaseGet { my($self, %o) = @_; @@ -29,6 +29,8 @@ sub dbReleaseGet { 'rv.vid = ?' => $o{vid} ) : (), defined $o{unreleased} ? ( q|rr.released !s ?| => [ $o{unreleased} ? '>' : '<=', strftime('%Y%m%d', gmtime) ] ) : (), + $o{date} ? ( + '(rr.released > ? AND rr.released < ?)' => [ $o{date}*100, $o{date}*100+99 ] ) : (), ); my @join = ( diff --git a/lib/VNDB/Handler/Releases.pm b/lib/VNDB/Handler/Releases.pm index 8cd2eb43..ffe9ddc2 100644 --- a/lib/VNDB/Handler/Releases.pm +++ b/lib/VNDB/Handler/Releases.pm @@ -11,6 +11,7 @@ use POSIX 'strftime'; YAWF::register( qr{r([1-9]\d*)(?:\.([1-9]\d*))?} => \&page, qr{(v)([1-9]\d*)/add} => \&edit, + qr{r} => \&browse, qr{r(?:([1-9]\d*)(?:\.([1-9]\d*))?/edit)} => \&edit, ); @@ -423,5 +424,66 @@ sub _form { } +sub browse { + my $self = shift; + + my $f = $self->formValidate( + { name => 'p', required => 0, default => 1, template => 'int' }, + { name => 't', required => 0, default => ((gmtime)[5]+1900)*100+(gmtime)[4]+1, template => 'int' }, + ); + return 404 if $f->{_err}; + + + my($list, $np) = $self->dbReleaseGet( + page => $f->{p}, + results => 100, + date => $f->{t}, + what => 'platforms', + ); + + $self->htmlHeader(title => 'Browse releases'); + div class => 'mainbox'; + h1 'Browse releases'; + p class => 'center'; + # you know, date calculation on strangely formatted integers really isn't so bad :-) + my $t = $f->{t}; + $t = $t-100+12 if (--$t % 100) == 0; + a href => "/r?t=$t", '<- previous month'; + txt ' | '; + $t = $f->{t}; + $t = $t+100-12 if (++$t % 100) == 13; + a href => "/r?t=$t", 'next month ->'; + end; + end; + + $self->htmlBrowse( + class => 'relbrowse', + items => $list, + options => $f, + nextpage => $np, + pageurl => "/r?t=$f->{t}", + row => sub { + my($s, $n, $l) = @_; + Tr $n % 2 ? (class => 'odd') : (); + td class => 'tc1'; + lit datestr $l->{released}; + end; + td class => 'tc2', $l->{minage} > -1 ? $self->{age_ratings}{$l->{minage}} : ''; + td class => 'tc3'; + $_ ne 'oth' && cssicon $_, $self->{platforms}{$_} for (@{$l->{platforms}}); + cssicon "lang $l->{language}", $self->{languages}{$l->{language}}; + cssicon lc(substr($self->{release_types}[$l->{type}],0,3)), $self->{release_types}[$l->{type}]; + end; + td class => 'tc4'; + a href => "/r$l->{id}", title => $l->{original}||$l->{title}, shorten $l->{title}, 90; + b class => 'grayedout', ' (patch)' if $l->{patch}; + end; + end; + }, + ); + $self->htmlFooter; +} + + 1; diff --git a/lib/VNDB/Util/LayoutHTML.pm b/lib/VNDB/Util/LayoutHTML.pm index fcd088a4..c8208967 100644 --- a/lib/VNDB/Util/LayoutHTML.pm +++ b/lib/VNDB/Util/LayoutHTML.pm @@ -57,6 +57,7 @@ sub _menu { div; a href => '/', 'Home'; br; a href => '/v/all', 'Visual novels'; br; + a href => '/r', 'Releases'; br; a href => '/g', 'Tags'; br; a href => '/p/all', 'Producers'; br; a href => '/u/all', 'Users'; br; |