| MojoMojo documentation | Contained in the MojoMojo distribution. |
Return true if the module is loaded.
MojoMojo::Formatter::Include - Include files in your content.
Include files verbatim in your content, by writing {{include <url>}}. Can be used for transclusion from the same wiki, in which case the inline version of the page is pulled.
Format order can be 1-99. The Include formatter runs on 5, before all
formatters (except Redirect), so that
included content (most often from the same wiki) can be parsed for markup.
To avoid markup interpretation, surround the {{include <url>}} with a
<div>:
<div>Some uninterpreted Markdown: {{include http://mysite.com/rawmarkdown.txt}}</div>
Calls the formatter. Takes a ref to the content as well as the context object.
Returns the content at the URL. Will store a cached version in
$c->cache.
Marcus Ramberg <mramberg@cpan.org>
This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself.
| MojoMojo documentation | Contained in the MojoMojo distribution. |
package MojoMojo::Formatter::Include; use strict; use parent 'MojoMojo::Formatter'; eval { require URI::Fetch; require LWP::Simple; # LWP::Simple is indeed required, and URI::Fetch doesn't depend on it }; my $dependencies_installed = !$@;
sub module_loaded { $dependencies_installed } our $VERSION = '0.01';
sub format_content_order { 5 }
sub format_content { my ( $class, $content, $c ) = @_; return unless $class->module_loaded; # Regexp::Common::URI is overkill my $re = $class->gen_re(qr( include \s+ (\S+) )x); if ( $$content =~ s/$re/$class->include( $c, $1 )/eg ) { # we don't want to precompile a page with comments so turn it off $c->stash->{precompile_off} = 1; } }
sub include { my ( $class, $c, $url ) = @_; $url = URI->new($url); return $c->loc('x is not a valid URL', $url) unless $url; # check if we're including a page from the same wiki my $rel = $url->rel( $c->req->base ); if (not $rel->scheme) { # if so, then return the inline version of the page is requests return $c->subreq( '/inline', { path => $rel.'' eq './' ? '/' : '/'.$rel } ); } my $res = URI::Fetch->fetch( $url, Cache => $c->cache ); return $res->content if defined $res; return $c->loc('Could not retrieve x', $url); }
1;