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 )