Beagle
view release on metacpan or search on metacpan
lib/Beagle/Web/Router.pm view on Meta::CPAN
package Beagle::Web::Router;
use Beagle::Web;
use Beagle::Util;
use Lingua::EN::Inflect 'A';
use Beagle::Web::Form;
use Beagle::Web::Router::Util;
use List::MoreUtils 'first_index';
get '/' => sub {
render 'index', entries => handle()->entries;
};
get '/fragment/menu' => sub {
render 'menu';
};
get '/fragment/entry/:id' => sub {
my %vars = @_;
my $i = $vars{id};
my @ret = resolve_id( $i, handle => handle() );
return unless @ret == 1;
render 'entry', entry => $ret[0]->{entry};
};
get '/fragment/tag/:tag' => sub {
my %vars = @_;
my $tag = decode_utf8 $vars{tag};
my $entries = Beagle::Web->tags( handle() )->{$tag} || [];
render '_list', entries => $entries, disable_page => 1;
};
get '/fragment/archive/{year:[0-9]+}' => sub {
my %vars = @_;
my $year = $vars{year};
render '_list',
entries => [
map { @{ Beagle::Web->archives( handle() )->{$year}{$_} } }
keys %{ Beagle::Web->archives( handle() )->{$year} || {} }
],
disable_page => 1;
};
get '/fragment/archive/{year:[0-9]+}/{month:[0-9]{2}}' => sub {
my %vars = @_;
my $year = $vars{year};
my $month = $vars{month};
my $entries = Beagle::Web->archives( handle() )->{$year}{$month} || [];
render '_list', entries => $entries, disable_page => 1;
};
get '/tag/:tag' => sub {
my %vars = @_;
my $tag = decode_utf8 $vars{tag};
return redirect '/'
unless $tag && Beagle::Web->tags( handle() )->{$tag};
render 'index',
"tag_$tag" => 1,
title => "tag $tag",
entries => Beagle::Web->tags( handle() )->{$tag},
prefix => prefix() || '../';
};
get '/tags' => sub {
render 'tags', title => 'tags';
};
get '/archives' => sub {
render 'archives', title => 'archives';
};
get '/archive/{year:[0-9]+}' => sub {
my %vars = @_;
my $year = $vars{year};
return redirect '/'
unless $year && Beagle::Web->archives( handle() )->{$year};
render 'index',
entries => [
map { @{ Beagle::Web->archives( handle() )->{$year}{$_} } }
keys %{ Beagle::Web->archives( handle() )->{$year} || {} }
],
title => "in $year",
prefix => prefix() || '../';
};
get '/archive/{year:[0-9]+}/{month:[0-9]{2}}' => sub {
my %vars = @_;
my $year = $vars{year};
my $month = $vars{month};
return redirect '/'
unless Beagle::Web->archives( handle() )->{$year}{$month};
render 'index',
entries => Beagle::Web->archives( handle() )->{$year}{$month},
title => "in $year/$month",
prefix => prefix() || '../../';
};
get '/entry/:id' => sub {
my %vars = @_;
my $i = $vars{id};
my @ret = resolve_id( $i, handle => handle() );
return redirect "/" unless @ret == 1;
( run in 4.411 seconds using v1.01-cache-2.11-cpan-b16cb0d3907 )