X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/abd233931247ef38f1b084afd5906619f02c13b6..78fd3b35a2805489185a14e00b53b450eec961f1:/IkiWiki.pm diff --git a/IkiWiki.pm b/IkiWiki.pm index 1327e4db5..78612cd08 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -1653,9 +1653,20 @@ sub saveindex () { sub template_file ($) { my $name=shift; + + my $tpage=($name =~ /^\//) ? $name : "templates/$name"; + if ($name !~ /\.tmpl$/ && exists $pagesources{$tpage}) { + $tpage=$pagesources{$tpage}; + $name.=".tmpl"; + } - my $template=srcfile("templates/$name", 1); - return $template if defined $template; + my $template=srcfile($tpage, 1); + if (defined $template) { + return $template, $tpage if wantarray; + return $template; + } + + $name=~s:/::; # avoid path traversal foreach my $dir ($config{templatedir}, "$installdir/share/ikiwiki/templates") { @@ -1664,39 +1675,33 @@ sub template_file ($) { return; } -sub template_params (@) { - filter => sub { - my $text_ref = shift; - ${$text_ref} = decode_utf8(${$text_ref}); - }, - loop_context_vars => 1, - die_on_bad_params => 0, - @_, - no_includes => 1, -} - -sub template ($;@) { - require HTML::Template; - return HTML::Template->new(template_params( - filename => template_file(shift), - @_ - )); -} - sub template_depends ($$;@) { my $name=shift; my $page=shift; - - if (defined $page) { - add_depends($page, "templates/$name"); + + my ($filename, $tpage)=template_file($name); + if (defined $page && defined $tpage) { + add_depends($page, $tpage); } - my $filename=template_file($name); + + return unless defined $filename; require HTML::Template; - return HTML::Template->new(template_params( + return HTML::Template->new( + filter => sub { + my $text_ref = shift; + ${$text_ref} = decode_utf8(${$text_ref}); + }, + loop_context_vars => 1, + die_on_bad_params => 0, filename => $filename, - @_ - )); + @_, + no_includes => 1, + ); +} + +sub template ($;@) { + template_depends(shift, undef, @_); } sub misctemplate ($$;@) {