Commit | Line | Data |
03297637 |
1 | package Gitalist::Model::ContentMangler; |
2 | use Moose; |
b2e0fe31 |
3 | use MooseX::Types::Moose qw/HashRef/; |
7c781a87 |
4 | use MooseX::Types::Common::String qw/NonEmptySimpleStr/; |
5 | use Gitalist::ContentMangler::Resolver; |
03297637 |
6 | use namespace::autoclean; |
7 | |
8 | extends 'Catalyst::Model'; |
9 | |
7c781a87 |
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 => ( |
b2e0fe31 |
18 | isa => HashRef, |
19 | is => 'ro', |
20 | default => sub { {} }, |
7c781a87 |
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); |
b2e0fe31 |
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 | |
7c781a87 |
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; |
b4ecc157 |
47 | $c->stash( |
48 | syntax_css => [ map { $c->uri_for('/static/css/syntax/' . $_ . '.css') } @css ], |
49 | mangled => scalar @steps, |
50 | ); |
b2e0fe31 |
51 | |
52 | if ($c->stash->{blobs} || $c->stash->{blob}) { |
7c781a87 |
53 | foreach my $step (@steps) { |
54 | for ($c->stash->{blobs} ? @{$c->stash->{blobs}} : $c->stash->{blob}) { |
55 | $_ = $c->view($step->[0])->render($c, $_, $step->[1]); |
56 | } |
b2e0fe31 |
57 | } |
58 | } |
59 | } |
60 | |
03297637 |
61 | __PACKAGE__->meta->make_immutable; |