my $page=shift;
my $content=shift;
- run_hooks(postscan => sub {
- shift->(page => $page, content => $content);
+ run_hooks(indexhtml => sub {
+ shift->(page => $page, destpage => $page, content => $content);
});
my $templatefile;
$templatefile=$file;
}
});
- my $template=template(defined $templatefile ? $templatefile : 'page.tmpl', blind_cache => 1);
- my $actions=0;
+ my $template;
+ if (defined $templatefile) {
+ $template=template_depends($templatefile, $page,
+ blind_cache => 1);
+ }
+ else {
+ # no explicit depends as special case
+ $template=template('page.tmpl',
+ blind_cache => 1);
+ }
+ my $actions=0;
if (length $config{cgiurl}) {
if (IkiWiki->can("cgi_editpage")) {
$template->param(editurl => cgiurl(do => "edit", page => $page));
$actions++;
}
- if (exists $hooks{auth}) {
- $template->param(prefsurl => cgiurl(do => "prefs"));
- $actions++;
- }
}
-
if (defined $config{historyurl} && length $config{historyurl}) {
my $u=$config{historyurl};
$u=~s/\[\[file\]\]/$pagesources{$page}/g;
$actions++;
}
}
-
if ($actions) {
$template->param(have_actions => 1);
}
+ templateactions($template, $page);
my @backlinks=sort { $a->{page} cmp $b->{page} } backlinks($page);
my ($backlinks, $more_backlinks);
backlinks => $backlinks,
more_backlinks => $more_backlinks,
mtime => displaytime($pagemtime{$page}),
- ctime => displaytime($pagectime{$page}),
+ ctime => displaytime($pagectime{$page}, undef, 1),
baseurl => baseurl($page),
+ html5 => $config{html5},
);
run_hooks(pagetemplate => sub {
my ($f) = $file =~ /$config{wiki_file_regexp}/; # untaint
if (! defined $f) {
warn(sprintf(gettext("skipping bad filename %s"), $file)."\n");
+ return;
}
if ($underlay) {
my @del;
my @internal_del;
- foreach my $page (keys %pagemtime) {
+ foreach my $page (keys %pagesources) {
if (! $pages->{$page}) {
if (isinternal($page)) {
push @internal_del, $pagesources{$page};
}
delete $pagecase{lc $page};
+ $delpagesources{$page}=$pagesources{$page};
delete $pagesources{$page};
}
}
my $old = shift;
return 0 if !defined $new && !defined $old;
- return 1 if !defined $new || !defined $old;
+ return 1 if (!defined $new && %$old) || (!defined $old && %$new);
while (my ($type, $links) = each %$new) {
foreach my $link (keys %$links) {
my %lc_changed = map { lc(pagename($_)) => 1 } @changed;
my %lc_exists_changed = map { lc(pagename($_)) => 1 } @exists_changed;
+
+ foreach my $p ("templates/page.tmpl", keys %{$depends_simple{""}}) {
+ if ($rendered{$p} || grep { $_ eq $p } @$del) {
+ foreach my $f (@$files) {
+ next if $rendered{$f};
+ render($f, sprintf(gettext("building %s, which depends on %s"), $f, $p));
+ }
+ return 0;
+ }
+ }
foreach my $f (@$files) {
next if $rendered{$f};
my $p=pagename($f);
my $reason = undef;
-
- if (exists $depends_simple{$p}) {
+
+ if (exists $depends_simple{$p} && ! defined $reason) {
foreach my $d (keys %{$depends_simple{$p}}) {
if (($depends_simple{$p}{$d} & $IkiWiki::DEPEND_CONTENT &&
$lc_changed{$d})
# only consider internal files
# if the page explicitly depends
# on such files
- my $internal_dep=$dep =~ /internal\(/;
+ my $internal_dep=$dep =~ /(?:internal|comment|comment_pending)\(/;
my $in=sub {
my $list=shift;
my $pages=shift;
my $del=shift;
- if (srcfile($autofile, 1) || file_pruned($autofile)) {
+ if (file_pruned($autofile)) {
return;
}
-
+
my ($file)="$config{srcdir}/$autofile" =~ /$config{wiki_file_regexp}/; # untaint
- if (! defined $file || -l $file || -d _ || -e _) {
+ if (! defined $file) {
return;
}
- if ((!defined $file) ||
- (exists $wikistate{$autofiles{$autofile}{plugin}}{autofile}{$autofile})) {
+ # Remember autofiles that were tried, and never try them again later.
+ if (exists $wikistate{$autofiles{$autofile}{plugin}}{autofile}{$autofile}) {
+ return;
+ }
+ $wikistate{$autofiles{$autofile}{plugin}}{autofile}{$autofile}=1;
+
+ if (srcfile($autofile, 1) || file_pruned($autofile)) {
return;
}
+ if (-l $file || -d _ || -e _) {
+ return;
+ }
+
my $page = pagename($file);
if ($pages->{$page}) {
return;
}
$autofiles{$autofile}{generator}->();
- $wikistate{$autofiles{$autofile}{plugin}}{autofile}{$autofile}=1;
$pages->{$page}=1;
return 1;
}
foreach my $file (@$new, @$del) {
render_linkers($file);
}
-
+
if (@$changed || @$internal_changed ||
@$del || @$internal_del || @$internal_new) {
1 while render_dependent($files, $new, $internal_new,
render_backlinks($backlinkchanged);
remove_unrendered();
- if (@$del) {
- run_hooks(delete => sub { shift->(@$del) });
+ if (@$del || @$internal_del) {
+ run_hooks(delete => sub { shift->(@$del, @$internal_del) });
}
if (%rendered) {
run_hooks(change => sub { shift->(keys %rendered) });