# Copyright 2013-2014 Stefan Goebel. # # This file is part of Newcomen. # # Newcomen is free software: you can redistribute it and/or modify it under the terms of the GNU # General Public License as published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # Newcomen is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even # the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along with Newcomen. If not, see # . package Newcomen::Plugin::Blog::Defaults; our $VERSION = 2014052501; use namespace::autoclean; use Moose '-meta_name' => '_moose_meta'; use MooseX::StrictConstructor; extends 'Newcomen::Plugin::Base'; with 'Newcomen::Role::Attribute::Config'; override '_build_hook_order' => sub {{ 'hook_formatters' => 100, 'hook_renderer' => 900, 'hook_writer' => 900, }}; override '_build_default_config' => sub {{ 'blog' => { 'defaults' => { 'page_info' => {}, 'formatters' => undef, 'renderer' => undef, 'writer' => undef, }, } }}; sub hook_formatters { my $self = shift; my $content = shift; my $page = shift; my $index = shift; return unless $page -> creator () =~ /^Blog::/; $content -> formatters () -> add ( $self -> _config () -> get (['blog', 'defaults', 'formatters']) // [] ); } sub hook_renderer { my $self = shift; my $page = shift; $page -> set_renderer ( $self -> _config () -> get (['blog', 'defaults', 'renderer']), qr/^Blog::/ ); } sub hook_writer { my $self = shift; my $page = shift; $page -> set_writer ( $self -> _config () -> get (['blog', 'defaults', 'writer']), qr/^Blog::/ ); } __PACKAGE__ -> _moose_meta () -> make_immutable (); 1; __END__ #################################################################################################### =head1 NAME Newcomen::Plugin::Blog::Defaults - Sets some defaults for blog pages. =head1 DESCRIPTION This plugin will add default formatters for all blog contents, and set renderer and writer for all blog pages (unless a renderer/writer is already set). The default formatter(s) will always be added to all L instances on a page with a creator ID starting with C<'Blog::'>, early during the I hook (see L). However, formatters will not be added twice, if a formatter of the same name already exists in the content's formatter list, it will not be added again. The default renderer and writer will be set for all L instances with a creator ID starting with C<'Blog::'>, unless a renderer or writer is already set for the page. This will be done late during the I/I hook, respectively. See L. =head1 OPTIONS { 'blog' => { 'defaults' => { 'page_info' => {}, 'formatters' => undef, 'renderer' => undef, 'writer' => undef, }, }, } These are the default options set by this plugin. They may be overridden by user configuration. In the following description the term specification refers to either a simple string, in which case it must be the basename of a formatter/renderer/writer backend to be used, i.e. the backend's module name without the C<'Newcomen::*::'> prefix. In this case no additional backend options will be used. A specification may also be a hashref, in which case it must contain the key I, to specify the backend's basename (as described before), and it may contain another key I, which must be set to a hashref containing the backend options to be used (the I hashref may be empty). See the individual backends for details on their options. Other keys in the specification hashref will be ignored. Backend names are case sensitive. I, if set, must either be a single formatter specification or an arrayref containing an arbitrary number of formatter specifications, as described above. I and I must be set to a renderer/writer specification (as described above) that should be used for blog pages. Any of these three options may also be set to C (the default), in which case no defaults will be applied to any content item's and/or pages. Setting I to an empty arrayref has the same effect as setting it to C. The I option must be set to a hashref. It may be empty (the default). Several other plugins use this hashref to set additional meta data for the pages. The documentation of these plugins will contain a reference to this option if it is used, as well as a description of the processing of its contents. =head1 HOOKS This plugin implements the following hooks: I (priority C<100>), I (priority C<900>) and I (priority C<900>). =head1 SEE ALSO L, L, L, L, L =head1 VERSION This is version C<2014052501>. =head1 AUTHOR Stefan Goebel - newcomen {at} subtype {dot} de =head1 COPYRIGHT AND LICENSE Copyright 2013-2014 Stefan Goebel. This file is part of Newcomen. Newcomen is free software: you can redistribute it and/or modify it under the terms of the L as published by the L, either version 3 of the license, or (at your option) any later version. Newcomen is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the L for more details. You should have received a copy of the L along with Newcomen. If not, see >. =cut #################################################################################################### # :indentSize=3:tabSize=3:noTabs=true:mode=perl:maxLineLen=100: