projects
/
ikiwiki.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
comments, branch review, questions
[ikiwiki.git]
/
IkiWiki.pm
diff --git
a/IkiWiki.pm
b/IkiWiki.pm
index 7382f11e4202f4960895b447de94ee4fb55f6f09..5ff1a5ae65fbfcd796550a1cf478272986ce9550 100644
(file)
--- a/
IkiWiki.pm
+++ b/
IkiWiki.pm
@@
-5,7
+5,6
@@
package IkiWiki;
use warnings;
use strict;
use Encode;
use warnings;
use strict;
use Encode;
-use HTML::Entities;
use URI::Escape q{uri_escape_utf8};
use POSIX ();
use Storable;
use URI::Escape q{uri_escape_utf8};
use POSIX ();
use Storable;
@@
-13,8
+12,8
@@
use open qw{:utf8 :std};
use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
%pagestate %wikistate %renderedfiles %oldrenderedfiles
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};
%autofiles};
use Exporter q{import};
@@
-152,7
+151,7
@@
sub getsetup () {
templatedir => {
type => "string",
default => "$installdir/share/ikiwiki/templates",
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,
advanced => 1,
safe => 0, # path
rebuild => 1,
@@
-1531,8
+1530,8
@@
sub loadindex () {
my $d=$pages->{$src};
my $page=pagename($src);
$pagectime{$page}=$d->{ctime};
my $d=$pages->{$src};
my $page=pagename($src);
$pagectime{$page}=$d->{ctime};
+ $pagesources{$page}=$src;
if (! $config{rebuild}) {
if (! $config{rebuild}) {
- $pagesources{$page}=$src;
$pagemtime{$page}=$d->{mtime};
$renderedfiles{$page}=$d->{dest};
if (exists $d->{links} && ref $d->{links}) {
$pagemtime{$page}=$d->{mtime};
$renderedfiles{$page}=$d->{dest};
if (exists $d->{links} && ref $d->{links}) {
@@
-1654,14
+1653,18
@@
sub saveindex () {
sub template_file ($) {
my $name=shift;
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 ($name !~ /\.tmpl$/ && exists $pagesources{$tpage}) {
$tpage=$pagesources{$tpage};
$name.=".tmpl";
}
my $template=srcfile($tpage, 1);
- if (! defined $template) {
+ if (defined $template) {
+ return $template, $tpage, 1 if wantarray;
+ return $template;
+ }
+ else {
$name=~s:/::; # avoid path traversal
foreach my $dir ($config{templatedir},
"$installdir/share/ikiwiki/templates") {
$name=~s:/::; # avoid path traversal
foreach my $dir ($config{templatedir},
"$installdir/share/ikiwiki/templates") {
@@
-1670,12
+1673,12
@@
sub template_file ($) {
last;
}
}
last;
}
}
+ if (defined $template) {
+ return $template, $tpage if wantarray;
+ return $template;
+ }
}
}
- if (defined $template) {
- return $template, $tpage if wantarray;
- return $template;
- }
return;
}
return;
}
@@
-1683,15
+1686,14
@@
sub template_depends ($$;@) {
my $name=shift;
my $page=shift;
my $name=shift;
my $page=shift;
- my ($filename, $tpage)=template_file($name);
+ my ($filename, $tpage
, $untrusted
)=template_file($name);
if (defined $page && defined $tpage) {
add_depends($page, $tpage);
}
return unless defined $filename;
if (defined $page && defined $tpage) {
add_depends($page, $tpage);
}
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});
filter => sub {
my $text_ref = shift;
${$text_ref} = decode_utf8(${$text_ref});
@@
-1700,8
+1702,12
@@
sub template_depends ($$;@) {
die_on_bad_params => 0,
filename => $filename,
@_,
die_on_bad_params => 0,
filename => $filename,
@_,
-
no_includes => 1
,
+
($untrusted ? (no_includes => 1) : ())
,
);
);
+ return @opts if wantarray;
+
+ require HTML::Template;
+ return HTML::Template->new(@opts);
}
sub template ($;@) {
}
sub template ($;@) {
@@
-1712,7
+1718,8
@@
sub misctemplate ($$;@) {
my $title=shift;
my $pagebody=shift;
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},
title => $title,
indexlink => indexlink(),
wikiname => $config{wikiname},
@@
-2295,7
+2302,11
@@
sub match_glob ($$;@) {
my $regexp=IkiWiki::glob2re($glob);
if ($page=~/^$regexp$/i) {
my $regexp=IkiWiki::glob2re($glob);
if ($page=~/^$regexp$/i) {
- if (! IkiWiki::isinternal($page) || $params{internal}) {
+ if ($params{onlypage} &&
+ ! defined IkiWiki::pagetype($IkiWiki::pagesources{$page})) {
+ return IkiWiki::FailReason->new("$page is not a page");
+ }
+ elsif (! IkiWiki::isinternal($page) || $params{internal}) {
return IkiWiki::SuccessReason->new("$glob matches $page");
}
else {
return IkiWiki::SuccessReason->new("$glob matches $page");
}
else {
@@
-2311,6
+2322,10
@@
sub match_internal ($$;@) {
return match_glob($_[0], $_[1], @_, internal => 1)
}
return match_glob($_[0], $_[1], @_, internal => 1)
}
+sub match_page ($$;@) {
+ return match_glob($_[0], $_[1], @_, onlypage => 1)
+}
+
sub match_link ($$;@) {
my $page=shift;
my $link=lc(shift);
sub match_link ($$;@) {
my $page=shift;
my $link=lc(shift);