X-Git-Url: https://scripts.mit.edu/gitweb/www/ikiwiki.git/blobdiff_plain/78fd3b35a2805489185a14e00b53b450eec961f1..5afda336720dc83e0fd4c6e2f311ff6664c68211:/IkiWiki.pm diff --git a/IkiWiki.pm b/IkiWiki.pm index 78612cd08..63a7f5e2a 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -13,8 +13,8 @@ use open qw{:utf8 :std}; use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase %pagestate %wikistate %renderedfiles %oldrenderedfiles - %pagesources %destsources %depends %depends_simple %hooks - %forcerebuild %loaded_plugins %typedlinks %oldtypedlinks + %pagesources %destsources %depends %depends_simple @mass_depends + %hooks %forcerebuild %loaded_plugins %typedlinks %oldtypedlinks %autofiles}; use Exporter q{import}; @@ -152,7 +152,7 @@ sub getsetup () { templatedir => { type => "string", default => "$installdir/share/ikiwiki/templates", - description => "location of template files", + description => "additional directory to search for template files", advanced => 1, safe => 0, # path rebuild => 1, @@ -1654,23 +1654,27 @@ sub saveindex () { sub template_file ($) { my $name=shift; - my $tpage=($name =~ /^\//) ? $name : "templates/$name"; + my $tpage=($name =~ s/^\///) ? $name : "templates/$name"; if ($name !~ /\.tmpl$/ && exists $pagesources{$tpage}) { $tpage=$pagesources{$tpage}; $name.=".tmpl"; } my $template=srcfile($tpage, 1); - if (defined $template) { - return $template, $tpage if wantarray; - return $template; + if (! defined $template) { + $name=~s:/::; # avoid path traversal + foreach my $dir ($config{templatedir}, + "$installdir/share/ikiwiki/templates") { + if (-e "$dir/$name") { + $template="$dir/$name"; + last; + } + } } - $name=~s:/::; # avoid path traversal - - foreach my $dir ($config{templatedir}, - "$installdir/share/ikiwiki/templates") { - return "$dir/$name" if -e "$dir/$name"; + if (defined $template) { + return $template, $tpage if wantarray; + return $template; } return; } @@ -1686,8 +1690,7 @@ sub template_depends ($$;@) { return unless defined $filename; - require HTML::Template; - return HTML::Template->new( + my @opts=( filter => sub { my $text_ref = shift; ${$text_ref} = decode_utf8(${$text_ref}); @@ -1698,6 +1701,10 @@ sub template_depends ($$;@) { @_, no_includes => 1, ); + return @opts if wantarray; + + require HTML::Template; + return HTML::Template->new(@opts); } sub template ($;@) { @@ -1708,7 +1715,8 @@ sub misctemplate ($$;@) { my $title=shift; my $pagebody=shift; - my $template=template("misc.tmpl", + my $template=template("misc.tmpl"); + $template->param( title => $title, indexlink => indexlink(), wikiname => $config{wikiname},