Commit | Line | Data |
6573774f |
1 | package Gitalist::Model::ContentMangler; |
2 | use Moose; |
cea75f84 |
3 | use MooseX::Types::Moose qw/HashRef/; |
dbfbfe18 |
4 | use MooseX::Types::Common::String qw/NonEmptySimpleStr/; |
5 | use Gitalist::ContentMangler::Resolver; |
6573774f |
6 | use namespace::autoclean; |
7 | |
8 | extends 'Catalyst::Model'; |
9 | |
dbfbfe18 |
10 | has resolver_class => ( |
11 | isa => NonEmptySimpleStr, |
12 | is => 'ro', |
13 | required => 1, |
14 | default => 'Gitalist::ContentMangler::Resolver::Default', |
15 | ); |
16 | |
17 | has resolver_config => ( |
cea75f84 |
18 | isa => HashRef, |
19 | is => 'ro', |
20 | default => sub { {} }, |
dbfbfe18 |
21 | ); |
22 | |
23 | has _resolver => ( |
24 | does => 'Gitalist::ContentMangler::Resolver', |
25 | handles => ['resolve'], |
26 | is => 'bare', lazy => 1, |
27 | default => sub { |
28 | my $self = shift; |
29 | my $class = $self->resolver_class; |
30 | Class::MOP::load_class($class); |
31 | return $class->new($self->resolver_config); |
cea75f84 |
32 | }, |
33 | ); |
34 | |
35 | # FIXME This method is a gross hack. |
36 | # |
37 | # We need to work out what types of content mangles we have for various things based on hit type |
38 | # file name and mime type, and perform the appropriate bits.. |
39 | |
40 | # We need to support multiple languages, and we also want to be able to do HTMLizing (for e.g. Pod) |
41 | |
42 | sub process { |
43 | my ($self, $c) = @_; |
44 | |
dbfbfe18 |
45 | my @steps = $self->resolve({ filename => $c->stash->{filename} }); |
46 | my @css = map { $_->[1]->{css} } grep { exists $_->[1] && exists $_->[1]->{css} && defined $_->[1]->{css} && length $_->[1]->{css} } @steps; |
47 | $c->stash(syntax_css => [ map { $c->uri_for('/static/css/syntax/' . $_ . '.css') } @css ]); |
cea75f84 |
48 | |
49 | if ($c->stash->{blobs} || $c->stash->{blob}) { |
dbfbfe18 |
50 | foreach my $step (@steps) { |
51 | for ($c->stash->{blobs} ? @{$c->stash->{blobs}} : $c->stash->{blob}) { |
52 | $_ = $c->view($step->[0])->render($c, $_, $step->[1]); |
53 | } |
cea75f84 |
54 | } |
55 | } |
56 | } |
57 | |
6573774f |
58 | __PACKAGE__->meta->make_immutable; |