diff options
-rw-r--r-- | lib/VNDB/DB/Misc.pm | 4 | ||||
-rw-r--r-- | lib/VNDB/DB/VN.pm | 16 | ||||
-rw-r--r-- | lib/VNDB/Handler/Misc.pm | 117 | ||||
-rw-r--r-- | static/f/style.css | 38 |
4 files changed, 173 insertions, 2 deletions
diff --git a/lib/VNDB/DB/Misc.pm b/lib/VNDB/DB/Misc.pm index 828d5281..530f7d5b 100644 --- a/lib/VNDB/DB/Misc.pm +++ b/lib/VNDB/DB/Misc.pm @@ -77,7 +77,8 @@ sub dbItemInsert { } -# Options: type, iid, uid, auto, hidden, edit, page, results +# Options: type, iid, uid, auto, hidden, edit, page, results, what +# what: item user sub dbRevisionGet { my($self, %o) = @_; $o{results} ||= 10; @@ -85,6 +86,7 @@ sub dbRevisionGet { $o{auto} ||= 0; # 0:show, -1:only, 1:hide $o{hidden} ||= 0; $o{edit} ||= 0; # 0:both, -1:new, 1:edits + $o{what} ||= ''; my %where = ( $o{type} ? ( diff --git a/lib/VNDB/DB/VN.pm b/lib/VNDB/DB/VN.pm index f12bf513..e062f6e1 100644 --- a/lib/VNDB/DB/VN.pm +++ b/lib/VNDB/DB/VN.pm @@ -6,7 +6,7 @@ use warnings; use Exporter 'import'; use VNDB::Func 'gtintype'; -our @EXPORT = qw|dbVNGet dbVNAdd dbVNEdit dbVNImageId dbVNCache dbScreenshotAdd dbScreenshotGet|; +our @EXPORT = qw|dbVNGet dbVNAdd dbVNEdit dbVNImageId dbVNCache dbScreenshotAdd dbScreenshotGet dbScreenshotRandom|; # Options: id, rev, char, search, cati, cate, lang, platform, results, page, order, what @@ -264,5 +264,19 @@ sub dbScreenshotGet { } +# Fetch random VN + screenshots +sub dbScreenshotRandom { + return shift->dbAll(q| + SELECT vs.scr, vr.vid, vr.title + FROM vn_screenshots vs + JOIN vn v ON v.latest = vs.vid + JOIN vn_rev vr ON vr.id = v.latest + WHERE vs.nsfw = FALSE + ORDER BY RANDOM() + LIMIT 5| + ); +} + + 1; diff --git a/lib/VNDB/Handler/Misc.pm b/lib/VNDB/Handler/Misc.pm index 46a05822..f2e4cdcb 100644 --- a/lib/VNDB/Handler/Misc.pm +++ b/lib/VNDB/Handler/Misc.pm @@ -35,8 +35,125 @@ sub homepage { div class => 'mainbox'; h1 $self->{site_title}; + p class => 'description'; + lit qq| + VNDB.org strives to be a comprehensive database for information about visual novels and + eroge.<br /> + This website is built as a wiki, meaning that anyone can freely add and contribute information + to the database, allowing us to create the largest, most accurate and most up-to-date visual novel + database on the web.<br /> + Registered users are also able to keep track of a personal list of games they want to play or have finished + and they can vote on all visual novels.<br /> + <br /> + Feel free to <a href="/v/all">browse around</a>, <a href="/u/register">register an account</a> + or to participate in the discussions about visual novels or VNDB on our <a href="/t">discussion board</a>. + |; + end; + + my $scr = $self->dbScreenshotRandom; + p class => 'center'; + br; + for (@$scr) { + a href => "/v$_->{vid}", title => $_->{title}; + img src => sprintf("%s/st/%02d/%d.jpg", $self->{url_static}, $_->{scr}%100, $_->{scr}), alt => $_->{title}; + end; + } + end; + end; + + # Recent changes + div class => 'mainbox threelayout'; + h1 'Recent changes'; + my $changes = $self->dbRevisionGet(what => 'item user', results => 10); + ul; + for (@$changes) { + my $t = (qw|v r p|)[$_->{type}]; + li; + b "$t:"; + a href => "/$t$_->{iid}.$_->{rev}", title => $_->{ioriginal}||$_->{ititle}, shorten $_->{ititle}, 30; + txt ' by '; + a href => "/u$_->{requester}", $_->{username}; + end; + } + end; + end; + + # Announcements + div class => 'mainbox threelayout'; + my $an = $self->dbThreadGet(type => 'an', order => 't.id DESC', results => 2); + a class => 'right', href => '/t/an', 'News archive'; + h1 'Announcements'; + for (@$an) { + my $post = $self->dbPostGet(tid => $_->{id}, num => 1)->[0]; + h2; + a href => "/t$_->{id}", $_->{title}; + end; + p; + lit bb2html $post->{msg}, 150; + end; + } + end; + + # Recent posts + div class => 'mainbox threelayout last'; + h1 'Recent posts'; + my $posts = $self->dbThreadGet(what => 'lastpost', results => 10, order => 'tpl.date DESC'); + ul; + for (@$posts) { + li; + txt date($_->{ldate}).' '; + a href => "/t$_->{id}.$_->{count}", title => $_->{title}, shorten $_->{title}, 20; + txt ' by '; + a href => "/u$_->{luid}", $_->{lusername}; + end; + } + end; + end; + + # Random visual novels + div class => 'mainbox threelayout'; + h1 'Random visual novels'; + my $random = $self->dbVNGet(results => 10, order => 'RANDOM()'); + ul; + for (@$random) { + li; + a href => "/v$_->{id}", title => $_->{original}||$_->{title}, shorten $_->{title}, 40; + end; + } + end; + end; + + # Upcoming releases + div class => 'mainbox threelayout'; + h1 'Upcoming releases'; + my $upcoming = $self->dbReleaseGet(results => 10, unreleased => 1); + ul; + for (@$upcoming) { + li; + lit datestr $_->{released}; + txt ' '; + a href => "/r$_->{id}", title => $_->{original}||$_->{title}, shorten $_->{title}, 30; + end; + } + end; + end; + + # Just released + div class => 'mainbox threelayout last'; + h1 'Just released'; + my $justrel = $self->dbReleaseGet(results => 10, order => 'rr.released DESC', unreleased => 0); + ul; + for (@$justrel) { + li; + lit datestr $_->{released}; + txt ' '; + a href => "/r$_->{id}", title => $_->{original}||$_->{title}, shorten $_->{title}, 30; + end; + } + end; end; + clearfloat; $self->htmlFooter; } diff --git a/static/f/style.css b/static/f/style.css index 99b8d11f..e4efc4f8 100644 --- a/static/f/style.css +++ b/static/f/style.css @@ -331,6 +331,44 @@ b.future { + +/***** Homepage ******/ + +#maincontent .mainbox.threelayout { + float: left; + width: 31%; + height: 170px; + margin: 21px 10px -10px 0; + padding: 2px; + overflow: hidden; +} +#maincontent .mainbox.threelayout.last { + margin-right: 0; +} +#maincontent .mainbox.threelayout h1 { + margin: -3px 0 1px 0; + font-size: 12pt; + font-weight: bold; +} +#maincontent .mainbox.threelayout h2 { + font-size: 10pt; + margin-top: 3px; +} +#maincontent .mainbox.threelayout a.right { + float: right; +} +#maincontent .mainbox.threelayout ul { + list-style-type: none; + margin-left: 10px; +} +p.center img { + margin: 2px; +} + + + + + /***** Browsing ******/ p.browseopts { |