use Moose;
use Moose::Autobox;
-use Sys::Hostname qw/hostname/;
-use XML::OPML::SimpleGen;
-
+use Digest::MD5 qw(md5_hex);
use Gitalist::Utils qw/ age_string /;
use namespace::autoclean;
BEGIN { extends 'Gitalist::Controller' }
-__PACKAGE__->config->{namespace} = '';
+__PACKAGE__->config(namespace => '');
sub root : Chained('/') PathPart('') CaptureArgs(0) {}
sub index : Chained('base') PathPart('') Args(0) {
- my ( $self, $c ) = @_;
-
- my $search = $c->req->param('s') || '';
-
- $c->stash(
- search_text => $search,
- );
+ my ( $self, $c ) = @_;
+ $c->stash( search_text => $c->req->param('s') || '' ) # FIXME - XSS?
}
-=head2 search_help
-
-Provides some help for the search form.
-
-=cut
-
-sub search_help : Chained('base') Args(0) {}
-
-sub opml : Chained('base') Args(0) {
- my($self, $c) = @_;
-
- my $opml = XML::OPML::SimpleGen->new();
-
- $opml->head(title => lc(hostname()) . ' - ' . Gitalist->config->{name});
-
- my @list = @{ $c->model()->repositories };
- die 'No repositories found in '. $c->model->repo_dir
- unless @list;
-
- for my $proj ( @list ) {
- $opml->insert_outline(
- text => $proj->name. ' - '. $proj->description,
- xmlUrl => $c->uri_for(rss => {p => $proj->name}),
- );
- }
+# XXX Fragile much?
+sub css : Chained('/root') PathPart('core.css') Args(0) {
+ my ( $self, $c ) = @_;
- $c->response->body($opml->as_string);
- $c->response->content_type('application/rss');
- $c->response->status(200);
+ $c->stash( template => 'static/css/core.css', content_type => 'text/css' );
}
sub base : Chained('/root') PathPart('') CaptureArgs(0) {
git_version => $git_version,
version => $Gitalist::VERSION,
- # XXX Move these to a plugin!
time_since => sub {
return 'never' unless $_[0];
return age_string(time - $_[0]->epoch);
short_cmt => sub {
my $cmt = shift;
my($line) = split /\n/, $cmt;
- $line =~ s/^(.{70,80}\b).*/$1 \x{2026}/;
+ $line =~ s/^(.{70,80}\b).*/$1 \x{2026}/ if defined $line;
return $line;
},
abridged_description => sub {
join(' ', grep { defined } (split / /, shift)[0..10]);
},
+ uri_for_gravatar => sub {
+ my $email = shift;
+ my $size = shift;
+ my $uri = 'http://www.gravatar.com/avatar/' . md5_hex($email);
+ $uri .= "?s=$size" if $size;
+ return $uri;
+ },
);
}
-sub end : ActionClass('RenderView') {
+sub search : Chained('base') Args(0) {}
+
+=head2 search_help
+
+Provides some help for the search form.
+
+=cut
+
+sub search_help : Chained('base') Args(0) {}
+
+sub end : ActionClass('Serialize') {
my ($self, $c) = @_;
# Give repository views the current HEAD.
if ($c->stash->{Repository}) {
$c->stash->{HEAD} = $c->stash->{Repository}->head_hash;
}
+ if ($c->stash->{data} && blessed $c->stash->{data}) {
+ $c->stash->{rest} = $c->stash->{data}->pack;
+ }
}
sub error_404 : Action {
$c->response->body('Page not found');
}
+__PACKAGE__->config(
+ default => 'text/html',
+ map => {
+ 'application/json' => [qw/ JSON /],
+ map { $_ => [qw/ View Default /] }
+ qw( text/css text/html text/plain
+ application/atom+xml application/rss+xml application/rss )
+ },
+ content_type_stash_key => 'content_type',
+);
+
__PACKAGE__->meta->make_immutable;
__END__
Attempt to render a view, if needed.
-=head2 blame
-
=head2 error_404
-=head2 history
-
-=head2 opml
-
-=head2 repository_index
-
=head1 AUTHORS
See L<Gitalist> for authors.