X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/e44ccca13c61bd9105ad3de24506523d8d9bdb93..f7d4904fee5fcc380196d9c6825676040270270f:/IkiWiki/Render.pm diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index e5ba0079b..740bb52b0 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -62,8 +62,8 @@ sub genpage ($$) { 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; @@ -84,19 +84,14 @@ sub genpage ($$) { $template=template('page.tmpl', blind_cache => 1); } - my $actions=0; + 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; @@ -111,17 +106,10 @@ sub genpage ($$) { $actions++; } } - - my @actions; - run_hooks(pageactions => sub { - push @actions, map { { action => $_ } } - grep { defined } shift->(page => $page); - }); - $template->param(actions => \@actions); - - if ($actions || @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); @@ -304,12 +292,16 @@ sub find_src_files () { eval q{use File::Find}; error($@) if $@; - my ($page, $dir, $underlay); + eval q{use Cwd}; + die $@ if $@; + my $origdir=getcwd(); + my $abssrcdir=Cwd::abs_path($config{srcdir}); + + my ($page, $underlay); my $helper=sub { my $file=decode_utf8($_); - return if -l $file || -d _; - $file=~s/^\Q$dir\E\/?//; + $file=~s/^\.\///; return if ! length $file; $page = pagename($file); if (! exists $pagesources{$page} && @@ -326,7 +318,7 @@ sub find_src_files () { if ($underlay) { # avoid underlaydir override attacks; see security.mdwn - if (! -l "$config{srcdir}/$f" && ! -e _) { + if (! -l "$abssrcdir/$f" && ! -e _) { if (! $pages{$page}) { push @files, $f; $pages{$page}=1; @@ -342,17 +334,23 @@ sub find_src_files () { } }; + chdir($config{srcdir}) || die "chdir: $!"; find({ no_chdir => 1, wanted => $helper, - }, $dir=$config{srcdir}); + }, '.'); + chdir($origdir) || die "chdir: $!"; + $underlay=1; foreach (@{$config{underlaydirs}}, $config{underlaydir}) { + chdir($_) || die "chdir: $!"; find({ no_chdir => 1, wanted => $helper, - }, $dir=$_); + }, '.'); + chdir($origdir) || die "chdir: $!"; }; + return \@files, \%pages; } @@ -454,6 +452,7 @@ sub remove_del (@) { } delete $pagecase{lc $page}; + $delpagesources{$page}=$pagesources{$page}; delete $pagesources{$page}; } } @@ -641,7 +640,7 @@ sub render_dependent ($$$$$$$) { # 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; @@ -800,8 +799,8 @@ sub refresh () { 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) });