package Mojolicious::Plugin::EPLRenderer; use Mojo::Base 'Mojolicious::Plugin'; use Mojo::Template; use Mojo::Util qw(encode md5_sum); sub register { my ($self, $app) = @_; $app->renderer->add_handler( epl => sub { _render(@_, Mojo::Template->new, $_[1]) }); } sub _render { my ($renderer, $c, $output, $options, $mt, @args) = @_; # Cached if ($mt->compiled) { $c->app->log->debug("Rendering cached @{[$mt->name]}"); $$output = $mt->process(@args); } # Not cached else { my $inline = $options->{inline}; my $name = defined $inline ? md5_sum encode('UTF-8', $inline) : undef; return unless defined($name //= $renderer->template_name($options)); # Inline if (defined $inline) { $c->app->log->debug(qq{Rendering inline template "$name"}); $$output = $mt->name(qq{inline template "$name"})->render($inline, @args); } # File else { if (my $encoding = $renderer->encoding) { $mt->encoding($encoding) } # Try template if (defined(my $path = $renderer->template_path($options))) { $c->app->log->debug(qq{Rendering template "$name"}); $$output = $mt->name(qq{template "$name"})->render_file($path, @args); } # Try DATA section elsif (defined(my $d = $renderer->get_data_template($options))) { $c->app->log->debug(qq{Rendering template "$name" from DATA section}); $$output = $mt->name(qq{template "$name" from DATA section}) ->render($d, @args); } # No template else { $c->app->log->debug(qq{Template "$name" not found}) } } } # Exception die $$output if ref $$output; } 1; =encoding utf8 =head1 NAME Mojolicious::Plugin::EPLRenderer - Embedded Perl Lite renderer plugin =head1 SYNOPSIS # Mojolicious $app->plugin('EPLRenderer'); # Mojolicious::Lite plugin 'EPLRenderer'; =head1 DESCRIPTION L is a renderer for C templates, which are pretty much just raw L. This is a core plugin, that means it is always enabled and its code a good example for learning to build new plugins, you're welcome to fork it. See L for a list of plugins that are available by default. =head1 METHODS L inherits all methods from L and implements the following new ones. =head2 register $plugin->register(Mojolicious->new); Register renderer in L application. =head1 SEE ALSO L, L, L. =cut