po: added postscan hook, to make pages depend on the pages linking to them

... so that nicepagetitle hook's effects, such as translation status displayed
in links, are updated when the linked page changes.

The replacement of 'my %backlinks' with 'our %backlinks' in Render.pm made this
work: previously, every postscan hook was called with an almost empty
%backlinks, which defeated all my attempts to implement this feature.

This feature hits performance a bit. Its cost was quite small in my real-world
use-cases (a few percents bigger refresh time), but could be bigger in worst
cases. Time will tell.

NB: this hack could also be used by my meta branch. It may even be a ikiwiki
optional feature.

Signed-off-by: intrigeri <intrigeri@boum.org>
master
intrigeri 2008-12-31 22:27:12 +01:00
parent bbeb9a4a14
commit 85f865b5d9
3 changed files with 12 additions and 5 deletions

View File

@ -35,6 +35,7 @@ sub import { #{{{
hook(type => "filter", id => "po", call => \&filter); hook(type => "filter", id => "po", call => \&filter);
hook(type => "htmlize", id => "po", call => \&htmlize); hook(type => "htmlize", id => "po", call => \&htmlize);
hook(type => "pagetemplate", id => "po", call => \&pagetemplate, last => 1); hook(type => "pagetemplate", id => "po", call => \&pagetemplate, last => 1);
hook(type => "postscan", id => "po", call => \&postscan);
hook(type => "rename", id => "po", call => \&renamepages); hook(type => "rename", id => "po", call => \&renamepages);
hook(type => "delete", id => "po", call => \&mydelete); hook(type => "delete", id => "po", call => \&mydelete);
hook(type => "change", id => "po", call => \&change); hook(type => "change", id => "po", call => \&change);
@ -340,6 +341,16 @@ sub pagetemplate (@) { #{{{
} }
} # }}} } # }}}
sub postscan (@) {
my %params = @_;
my $page = $params{page};
# backlinks involve back-dependencies, so that nicepagetitle effects,
# such as translation status displayed in links, are updated
use IkiWiki::Render;
map add_depends($page, $_), keys %{$IkiWiki::backlinks{$page}};
}
# Add the renamed page translations to the list of to-be-renamed pages. # Add the renamed page translations to the list of to-be-renamed pages.
# Save information about master page rename, so that: # Save information about master page rename, so that:
# - our delete hook can ignore the translations not renamed already # - our delete hook can ignore the translations not renamed already

View File

@ -7,7 +7,7 @@ use strict;
use IkiWiki; use IkiWiki;
use Encode; use Encode;
my %backlinks; our %backlinks=();
my $backlinks_calculated=0; my $backlinks_calculated=0;
sub calculate_backlinks () { sub calculate_backlinks () {

View File

@ -511,10 +511,6 @@ intrigeri's `meta` branch, the generated links' text is based on the
page titles set with the [[meta|plugins/meta]] plugin. This has to be page titles set with the [[meta|plugins/meta]] plugin. This has to be
merged upstream, though. merged upstream, though.
### Backlinks
They are not updated when the source page changes (e.g. meta title).
Page formats Page formats
------------ ------------