File Coverage

File:lib/Yukki/Web/Settings.pm
Coverage:100.0%

linestmtbrancondsubpodtimecode
1package Yukki::Web::Settings;
2
3
1
1
7
2
use v5.24;
4
1
1
1
3
1
5
use utf8;
5
1
1
1
9
2
2
use Moo;
6
7extends 'Yukki::Settings';
8
9
1
1
1
177
1
5
use Types::Path::Tiny qw( Path );
10
1
1
1
225
2
2
use Types::Standard qw( ArrayRef HashRef Str );
11
1
1
1
553
1
4
use Yukki::Types qw( BaseURL PluginConfig );
12
13
1
1
1
340
2
3
use namespace::clean;
14
15# ABSTRACT: provides structure and validation to web settings in yukki.conf
16
17 - 27
=head1 DESCRIPTION

L<Yukki::Web> needs a few additional settings.

=head1 ATTRIBUTES

=head2 template_path

THis is the folder where Yukki will find templates under the C<root>. The default is F<root/template>.

=cut
28
29has template_path => (
30    is          => 'ro',
31    isa         => Path,
32    required    => 1,
33    coerce      => 1,
34    default     => 'root/template',
35);
36
37 - 41
=head2 static_path

This is the folder where Yukki will find the static files to serve for your application.

=cut
42
43has static_path => (
44    is          => 'ro',
45    isa         => Path,
46    required    => 1,
47    coerce      => 1,
48    default     => 'root',
49);
50
51 - 57
=head2 base_url

This configures the L<Yukki::Web::Context/base_url> attribute. It is either an absolute URL or the words C<SCRIPT_NAME> or C<REWRITE>. See L<Yukki::Web::Context/base_url> for more information.

The default is C<SCRIPT_NAME>.

=cut
58
59has base_url => (
60    is          => 'ro',
61    isa         => BaseURL,
62    required    => 1,
63    coerce      => 1,
64    default     => 'SCRIPT_NAME',
65);
66
67 - 92
=head2 scripts

=head2 styles

This is a list of the JavaScript and CSS files, respectively, to load into the
shell template. If not set, the defaults are:

  scripts:
      - script/lib/jquery/jquery.js
      - script/lib/jquery/jquery-ui.js
      - script/lib/jquery/jquery.caret.js
      - script/lib/jquery/jquery.tag-editor.js
      - script/lib/plupload/plupload.full.js
      - script/lib/sha1/sha1.js
      - script/yukki.js

  styles:
      - style/yukki.css
      - style/lib/jquery/jquery.css
      - style/lib/jquery/jquery.tag-editor.css

As you can see, these are full paths and may be given as paths to foreign hosts.
In order to keep Yukki working in good order, you will probaby want to include
at least the scripts listed above.

=cut
93
94has scripts => (
95    is          => 'ro',
96    isa         => ArrayRef[Str],
97    required    => 1,
98    default     => sub {
99        [ qw(
100            script/lib/jquery/jquery.js
101            script/lib/jquery/jquery-ui.js
102            script/lib/jquery/jquery.caret.js
103            script/lib/jquery/jquery.tag-editor.js
104            script/lib/plupload/plupload.full.js
105            script/lib/sha1/sha1.js
106            script/yukki.js
107        ) ]
108    },
109);
110
111sub all_scripts {
112
2
1
22
    my $self = shift;
113
2
30
    $self->scripts->@*;
114}
115
116has styles => (
117    is          => 'ro',
118    isa         => ArrayRef[Str],
119    required    => 1,
120    default     => sub {
121        [ qw(
122            style/yukki.css
123            style/lib/jquery/jquery.css
124            style/lib/jquery/jquery.tag-editor.css
125        ) ]
126    },
127);
128
129sub all_styles {
130
2
1
15
    my $self = shift;
131
2
15
    $self->styles->@*;
132}
133
134 - 146
=head2 menu_names

In case your templates have custom menus on them, you may need to set this. The default is:

  menu_names:
      - repository
      - user
      - page
      - page_bottom

This will insure that those menus are empty when they should be empty.

=cut
147
148has menu_names => (
149    is          => 'ro',
150    isa         => ArrayRef[Str],
151    required    => 1,
152    default     => sub { [ qw(
153        repository
154        user
155        page
156        page_bottom
157    ) ] },
158);
159
160 - 180
=head2 page_views

This is the list of page views to provide. By default, this is

  page_views:
      default:
          label: View
          sort: 10
          template: shell.html
      slides:
          label: Slides
          sort: 11
          template: slides.html
          hide: 1
          vars:
              "head link.local":
                  - style/slides.css
              "head script.local":
                  - script/slides.js

=cut
181
182has page_views => (
183    is          => 'ro',
184    isa         => HashRef[HashRef],
185    required    => 1,
186    default     => sub { +{
187        default => {
188            label    => 'View',
189            sort     => 10,
190            template => 'shell.html',
191        },
192        slides => {
193            label    => 'Slides',
194            sort     => 11,
195            template => 'slides.html',
196            hide     => 1,
197            vars     => {
198                "head link.local"   => [ qw( style/slides.css ) ],
199                "head script.local" => [ qw( script/slides.js ) ],
200            },
201        },
202    } },
203);
204
205 - 209
=head2 plugins

This is the list of plugins to use. This is an array of hashes. The hashes must have a C<module> key naming the class defining the plugin. The rest of the keys will be passed to the plugin constructor.

=cut
210
211has plugins => (
212    is          => 'ro',
213    isa         => PluginConfig,
214    required    => 1,
215    default     => sub { [
216        { module => 'Attachment' },
217        { module => 'YukkiText' },
218    ] },
219);
220
221 - 227
=head2 media_types

This is a list of custom media types. Because media types are detected using L<LWP::MediaTypes>, you may also configured media types by putting a F<.media.types> file in the home directory of the user running Yukki.

By default, "text/yukki" is mapped to the "yukki" file extension.

=cut
228
229has media_types => (
230    is          => 'ro',
231    isa         => HashRef[Str|ArrayRef[Str]],
232    required    => 1,
233    default     => sub { +{
234        'text/yukki' => 'yukki',
235    } },
236);
237
238 - 248
=head1 METHODS

=head2 all_scripts

Convenience accessor that returns C<scripts> as a list.

=head2 all_styles

Convenience accessor that returns C<styles> as a list.

=cut
249
2501;