Bootylicious
view release on metacpan or search on metacpan
lib/Bootylicious/Plugin/BootyHelpers.pm view on Meta::CPAN
$app->helper(
date => sub {
my $self = shift;
my $date = shift;
my $fmt = shift;
return '' unless $date;
$fmt ||= $config->{'datefmt'};
return b($date->strftime($fmt))->decode('utf-8');
}
);
$app->helper(date_rss => sub { Mojo::Date->new($_[1]->epoch)->to_string }
);
$app->helper(
href_to_article => sub {
my $self = shift;
my $article = shift;
return $self->url_for(
article => (
year => $article->created->year,
month => $article->created->month,
alias => $article->name,
format => 'html'
)
);
}
);
$app->helper(
link_to_article => sub {
my $self = shift;
my $article = shift;
my $href = $self->href_to_article($article);
my $cb = ref $_[-1] eq 'CODE' ? pop : undef;
if ($article->link) {
my $string = '';
$string
.= $self->link_to($href => $cb || sub { $article->title });
$string .= ' ';
$string .= $self->link_to($article->link => sub {"»"});
return Mojo::ByteStream->new($string);
}
return $self->link_to($href => $cb || sub { $article->title });
}
);
$app->helper(
link_to_full_content => sub {
my $self = shift;
my ($article, $preview_link) = @_;
my $href = $self->href_to_article($article);
$href->fragment('cut');
return $self->link_to($href => sub {$preview_link});
}
);
$app->helper(
link_to_tag => sub {
my $self = shift;
my $tag = shift;
my $name = ref $tag ? $tag->name : $tag;
my $cb = ref $_[-1] eq 'CODE' ? $_[-1] : sub {$name};
my $args = ref $_[0] eq 'HASH' ? $_[0] : {};
return $self->link_to(
tag => {tag => $name, format => 'html', %$args} => $cb);
}
);
$app->helper(
tags_links => sub {
my $self = shift;
my $article = shift;
my @links = map { $self->link_to_tag($_) } @{$article->tags};
my $string = '';
$string .= join ', ' => @links;
return Mojo::ByteStream->new($string);
}
);
$app->helper(
link_to_page => sub {
my $self = shift;
my $name = shift;
my %args = ref $_[0] eq 'HASH' ? %{shift @_} : ();
my $timestamp = shift;
my $query = delete $args{query} || {};
if ($timestamp) {
return $self->link_to(
$self->url_for($name, %args, format => 'html')
->query(timestamp => $timestamp, %$query) => @_);
}
else {
return $self->tag('span' => @_);
}
}
);
$app->helper(
link_to_author => sub {
my $self = shift;
my $author = shift;
return $author || $self->config('author');
}
);
lib/Bootylicious/Plugin/BootyHelpers.pm view on Meta::CPAN
);
$app->helper(
link_to_archive => sub {
my $self = shift;
my ($year, $month) = @_;
my @months = (
qw/January February March April May July June August September October November December/
);
my $title = $months[$month - 1] . ' ' . $year;
return $self->link_to(
'articles',
{ year => $year,
month => $month
} => sub {$title}
);
}
);
$app->helper(
gravatar => sub {
my $self = shift;
my $email = shift;
my %attrs = (
class => 'gravatar',
width => 40,
height => 40
);
return $self->tag(
'img',
src =>
'http://www.gravatar.com/avatar/00000000000000000000000000000000?s=40',
%attrs
) unless $email;
$email = lc $email;
$email =~ s/^\s+//;
$email =~ s/\s+$//;
my $hash = Mojo::ByteStream->new($email)->md5_sum;
my $url = "http://www.gravatar.com/avatar/$hash?s=40";
return $self->tag(
'img',
src => $url,
%attrs,
@_
);
}
);
$app->helper(
href_to_comments => sub {
my $self = shift;
my $article = shift;
return $self->href_to_article($article)->fragment('comments');
}
);
$app->helper(
href_to_comment => sub {
my $self = shift;
my $comment = shift;
return $self->href_to_article($comment->article)
->fragment('comment-' . $comment->number);
}
);
$app->helper(
link_to_comment => sub {
my $self = shift;
my $comment = shift;
return $self->link_to($self->href_to_comment($comment) =>
sub { $comment->article->title });
}
);
$app->helper(
link_to_comments => sub {
my $self = shift;
my $article = shift;
my $href = $self->href_to_article($article);
return $self->link_to(
$href->fragment('comment-form') => sub {'No comments'})
unless $article->comments->size;
return $self->link_to($href->fragment('comments') =>
sub { 'Comments (' . $article->comments->size . ') '; });
}
);
$app->helper(
comments_enabled => sub {
shift->config('comments_enabled') ? 1 : 0;
}
);
}
sub _parse_tag {
my $content_ref = shift;
my ($tag, $html) = @_;
$html ||= $tag;
my $tags = $$content_ref =~ s{\s*\[$tag\]\s*}{<$html>}xmsg;
$tags -= $$content_ref =~ s{\s*\[/$tag\]\s*}{</$html>}xmsg;
$$content_ref .= "</$html>" while $tags--;
}
1;
( run in 1.564 second using v1.01-cache-2.11-cpan-b16cb0d3907 )