From cbb3218db762341a1eafbf2892cb100755772f78 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Fri, 21 Feb 2014 21:10:43 +0000 Subject: [PATCH] add readtemplate hook --- IkiWiki.pm | 10 +++++++++- doc/plugins/write.mdwn | 20 ++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/IkiWiki.pm b/IkiWiki.pm index e5da04a3b..5e17c4a73 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -2021,11 +2021,19 @@ sub template_depends ($$;@) { if (defined $page && defined $tpage) { add_depends($page, $tpage); } - + my @opts=( filter => sub { my $text_ref = shift; ${$text_ref} = decode_utf8(${$text_ref}); + run_hooks(readtemplate => sub { + ${$text_ref} = shift->( + id => $name, + page => $tpage, + content => ${$text_ref}, + untrusted => $untrusted, + ); + }); }, loop_context_vars => 1, die_on_bad_params => 0, diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn index d2d1a6329..f4620b623 100644 --- a/doc/plugins/write.mdwn +++ b/doc/plugins/write.mdwn @@ -211,6 +211,26 @@ them to `%links`. Present in IkiWiki 2.40 and later. The function is passed named parameters "page" and "content". Its return value is ignored. +### readtemplate + + hook(type => "readtemplate", id => "foo", call => \&readtemplate); + +Runs on the raw source of a page or `*.tmpl` file that is being +used as a template, before it is parsed by [[!cpan HTML::Template]]. + +The function is passed named parameters: + +* `id`: the name under which the template was looked up, + such as `page.tmpl` or `note` +* `page`: the name of the template as a page or attachment in the wiki, + such as `templates/note`, or `undef` if it's outside the wiki (e.g. in + `/usr/share/ikiwiki/templates`) +* `content`: the content of the corresponding file +* `untrusted`: true if the template was loaded from the wiki or an underlay, + false if it was loaded from a trusted location + +It should return the replacement content. + ### filter hook(type => "filter", id => "foo", call => \&filter); -- 2.39.5