summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/style.css7
-rw-r--r--lib/VNDB/DB/Releases.pm4
-rw-r--r--lib/VNDB/Handler/Releases.pm62
-rw-r--r--lib/VNDB/Util/LayoutHTML.pm1
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;