Remove silly DOCTYPE
[scpubgit/App-SCS.git] / lib / App / SCS / Plugin / Core.pm
CommitLineData
632f0e07 1package App::SCS::Plugin::Core;
2
0034f151 3use Module::Runtime qw(use_module);
4use IO::All;
632f0e07 5use Moo;
6no warnings::illegalproto;
7use Safe::Isa;
8
9with 'App::SCS::Role::Plugin';
10
11has templates => (is => 'lazy');
12
13sub _build_templates {
14 my ($self) = @_;
15 return use_module('App::SCS::PageSet')->new(
0034f151 16 base_dir => io->dir($self->app->share_dir)->catdir('templates'),
17 plugin_config => {
18 plugin_map => $self->app->page_plugin_config->{plugin_map}
19 }
632f0e07 20 );
21}
22
23has includes => (is => 'lazy');
24
25sub _build_includes {
26 my ($self) = @_;
27 return use_module('App::SCS::PageSet')->new(
28 base_dir => io->dir($self->app->config->{share_dir})->catdir('includes'),
29 );
30}
31
32sub page_plugins {
33 my ($self) = @_;
34 PageList => 'App::SCS::Plugin::Core::PagePlugin::PageList',
e2e7175f 35 RemovePlugin => 'App::SCS::Plugin::Core::PagePlugin::RemovePlugin',
632f0e07 36 Template => {
37 class => 'App::SCS::Plugin::Core::PagePlugin::Template',
0034f151 38 config => sub { templates => $self->templates },
632f0e07 39 },
40 Include => {
41 class => 'App::SCS::Plugin::Core::PagePlugin::Include',
0034f151 42 config => sub { includes => $self->includes },
632f0e07 43 },
44 PageData => 'App::SCS::Plugin::Core::PagePlugin::PageData',
45}
46
47sub default_page_plugins {
48 Template => {
49 name => 'layout',
50 },
51 PageData => {},
52}
53
54sub page_dispatchers {
55 my ($self) = @_;
56 sub (/) {
57 $self->pages->get({ path => 'index' });
58 },
59 sub (/**) {
60 [ 302, [ 'Location' => "/$_[1]/" ], [] ]
61 },
62 sub (/**:path/) {
63 $self->pages->get({ %_ })
64 },
65 sub () {
66 $self->pages
67 ->get({ path => 'error_404' })
68 ->$_call_if_object(with_plugin_config => Status => 404);
69 },
70}
71
2f1cc197 72sub provides_pages {
73 my ($self) = @_;
74 "/", map "$_/", $self->pages->all_paths;
75}
76
632f0e07 771;