X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/ffec6806087981420eaf83c8d83cc4523a46d0de..f38e61c53bfdde4c92e9d8cb5930420bfa95775a:/IkiWiki/Plugin/template.pm

diff --git a/IkiWiki/Plugin/template.pm b/IkiWiki/Plugin/template.pm
index 57bff20ff..3e024c5f8 100644
--- a/IkiWiki/Plugin/template.pm
+++ b/IkiWiki/Plugin/template.pm
@@ -10,7 +10,8 @@ use Encode;
 
 sub import {
 	hook(type => "getsetup", id => "template", call => \&getsetup);
-	hook(type => "preprocess", id => "template", call => \&preprocess);
+	hook(type => "preprocess", id => "template", call => \&preprocess,
+		scan => 1);
 }
 
 sub getsetup () {
@@ -18,12 +19,17 @@ sub getsetup () {
 		plugin => {
 			safe => 1,
 			rebuild => undef,
+			section => "widget",
 		},
 }
 
 sub preprocess (@) {
 	my %params=@_;
 
+	# This needs to run even in scan mode, in order to process
+	# links and other metadata included via the template.
+	my $scan=! defined wantarray;
+
 	if (! exists $params{id}) {
 		error gettext("missing id parameter")
 	}
@@ -57,20 +63,23 @@ sub preprocess (@) {
 	$params{basename}=IkiWiki::basename($params{page});
 
 	foreach my $param (keys %params) {
+		my $value=IkiWiki::preprocess($params{page}, $params{destpage},
+		          IkiWiki::filter($params{page}, $params{destpagea},
+		          $params{$param}), $scan);
 		if ($template->query(name => $param)) {
 			$template->param($param =>
 				IkiWiki::htmlize($params{page}, $params{destpage},
 					pagetype($pagesources{$params{page}}),
-					$params{$param}));
+					$value));
 		}
 		if ($template->query(name => "raw_$param")) {
-			$template->param("raw_$param" => $params{$param});
+			$template->param("raw_$param" => $value);
 		}
 	}
 
 	return IkiWiki::preprocess($params{page}, $params{destpage},
-		IkiWiki::filter($params{page}, $params{destpage},
-		$template->output));
+	       IkiWiki::filter($params{page}, $params{destpage},
+	       $template->output), $scan);
 }
 
 1