Commit | Line | Data |
89de6a33 |
1 | package Gitalist::Controller::Root; |
89de6a33 |
2 | |
c113db92 |
3 | use Moose; |
cce8c9b6 |
4 | use Moose::Autobox; |
b0265bca |
5 | use Digest::MD5 qw(md5_hex); |
c113db92 |
6 | use Gitalist::Utils qw/ age_string /; |
89de6a33 |
7 | |
c113db92 |
8 | use namespace::autoclean; |
89de6a33 |
9 | |
b6ec181b |
10 | BEGIN { extends 'Gitalist::Controller' } |
89de6a33 |
11 | |
12a0f9d3 |
12 | __PACKAGE__->config(namespace => ''); |
89de6a33 |
13 | |
c113db92 |
14 | sub root : Chained('/') PathPart('') CaptureArgs(0) {} |
89de6a33 |
15 | |
5bb401c6 |
16 | sub index : Chained('base') PathPart('') Args(0) { |
12a0f9d3 |
17 | my ( $self, $c ) = @_; |
18 | $c->stash( search_text => $c->req->param('s') || '' ) # FIXME - XSS? |
286cea09 |
19 | } |
20 | |
2b686219 |
21 | # XXX Fragile much? |
22 | sub css : Chained('/root') PathPart('core.css') Args(0) { |
23 | my ( $self, $c ) = @_; |
24 | |
e1a23af1 |
25 | $c->stash( template => 'static/css/core.css', content_type => 'text/css' ); |
2b686219 |
26 | } |
27 | |
5bb401c6 |
28 | sub base : Chained('/root') PathPart('') CaptureArgs(0) { |
4621ecf0 |
29 | my($self, $c) = @_; |
04d1d917 |
30 | |
066e9aa4 |
31 | my $git_version = `git --version`; |
32 | chomp($git_version); |
4621ecf0 |
33 | $c->stash( |
066e9aa4 |
34 | git_version => $git_version, |
da8f4f82 |
35 | version => $Gitalist::VERSION, |
36 | |
4621ecf0 |
37 | time_since => sub { |
ef11b09e |
38 | return 'never' unless $_[0]; |
4621ecf0 |
39 | return age_string(time - $_[0]->epoch); |
40 | }, |
41 | short_cmt => sub { |
42 | my $cmt = shift; |
43 | my($line) = split /\n/, $cmt; |
6dac2638 |
44 | $line =~ s/^(.{70,80}\b).*/$1 \x{2026}/ if defined $line; |
4621ecf0 |
45 | return $line; |
46 | }, |
5cd9b9f9 |
47 | abridged_description => sub { |
48 | join(' ', grep { defined } (split / /, shift)[0..10]); |
49 | }, |
5111a8ab |
50 | uri_for_gravatar => sub { |
b0265bca |
51 | my $email = shift; |
52 | my $size = shift; |
53 | my $uri = 'http://www.gravatar.com/avatar/' . md5_hex($email); |
54 | $uri .= "?s=$size" if $size; |
55 | return $uri; |
56 | }, |
4621ecf0 |
57 | ); |
04d1d917 |
58 | } |
d9a9b56b |
59 | |
872e6812 |
60 | sub search : Chained('base') Args(0) {} |
61 | |
12a0f9d3 |
62 | =head2 search_help |
63 | |
64 | Provides some help for the search form. |
65 | |
66 | =cut |
67 | |
68 | sub search_help : Chained('base') Args(0) {} |
69 | |
f41fc741 |
70 | sub end : ActionClass('Serialize') { |
71 | my ($self, $c) = @_; |
72 | # Give repository views the current HEAD. |
73 | if ($c->stash->{Repository}) { |
74 | $c->stash->{HEAD} = $c->stash->{Repository}->head_hash; |
75 | } |
76 | if ($c->stash->{data} && blessed $c->stash->{data}) { |
77 | $c->stash->{rest} = $c->stash->{data}->pack; |
78 | } |
79 | } |
d9a9b56b |
80 | |
c113db92 |
81 | sub error_404 : Action { |
4111e151 |
82 | my ($self, $c) = @_; |
83 | $c->response->status(404); |
5232dbdd |
84 | $c->response->body('Page not found'); |
4111e151 |
85 | } |
86 | |
f41fc741 |
87 | __PACKAGE__->config( |
88 | default => 'text/html', |
89 | map => { |
90 | 'application/json' => [qw/ JSON /], |
91 | map { $_ => [qw/ View Default /] } |
92 | qw( text/css text/html text/plain |
93 | application/atom+xml application/rss+xml application/rss ) |
e1a23af1 |
94 | }, |
95 | content_type_stash_key => 'content_type', |
f41fc741 |
96 | ); |
97 | |
775e96e0 |
98 | __PACKAGE__->meta->make_immutable; |
99 | |
100 | __END__ |
101 | |
d137f7d5 |
102 | =head1 NAME |
103 | |
104 | Gitalist::Controller::Root - Root controller for the application |
105 | |
106 | =head1 DESCRIPTION |
107 | |
108 | This controller handles all of the root level paths for the application |
109 | |
110 | =head1 METHODS |
111 | |
5bb401c6 |
112 | =head2 root |
113 | |
114 | Root of chained actions |
115 | |
116 | =head2 base |
117 | |
118 | Populate the header and footer. Perhaps not the best location. |
119 | |
120 | =head2 index |
121 | |
82bc0f05 |
122 | Provides the repository listing. |
5bb401c6 |
123 | |
124 | =head2 end |
125 | |
126 | Attempt to render a view, if needed. |
d137f7d5 |
127 | |
d137f7d5 |
128 | =head2 error_404 |
129 | |
775e96e0 |
130 | =head1 AUTHORS |
89de6a33 |
131 | |
775e96e0 |
132 | See L<Gitalist> for authors. |
89de6a33 |
133 | |
134 | =head1 LICENSE |
135 | |
775e96e0 |
136 | See L<Gitalist> for the license. |
89de6a33 |
137 | |
138 | =cut |