diff options
author | intrigeri <intrigeri@boum.org> | 2008-07-14 14:16:17 +0200 |
---|---|---|
committer | intrigeri <intrigeri@boum.org> | 2008-07-14 14:25:42 +0200 |
commit | b857b229d8ff3601bbf01fafa51a3b3d3da928d8 (patch) | |
tree | 223ccfde52d424aae8ca252853c35dec66a05224 | |
parent | df42a5ef21fd3e97ab287fa48ccd3aafd34e0375 (diff) |
pedigree: fix RELDEPTH in PEDIGREE_BUT_ROOT...
... at least when it's not used in the same template as
PEDIGREE_BUT_TWO_OLDEST (see Known bugs section in pedigree.mdwn for
details)
Signed-off-by: intrigeri <intrigeri@boum.org>
-rw-r--r-- | IkiWiki/Plugin/pedigree.pm | 29 |
1 files changed, 17 insertions, 12 deletions
diff --git a/IkiWiki/Plugin/pedigree.pm b/IkiWiki/Plugin/pedigree.pm index 3d1e3764d..1bc9ee14d 100644 --- a/IkiWiki/Plugin/pedigree.pm +++ b/IkiWiki/Plugin/pedigree.pm @@ -54,8 +54,11 @@ sub forget_oldest ($@) { #{{{ # references to hashes)... $parent=shift @pedigree; # ... but we have no copy of the referenced hashes, so we - # actually are modifying them in-place, but we don't care - # here since reldepth has to be computed everytime anyway. + # actually are modifying them in-place, which + # means the second (and following) calls to + # this function overwrite the previous one's + # reldepth values => known bug if PEDIGREE_BUT_ROOT and + # PEDIGREE_BUT_TWO_OLDEST are used in the same template $parent->{reldepth}=($parent->{absdepth} - $offset); push @ret, $parent; } @@ -68,16 +71,18 @@ sub pagetemplate (@) { #{{{ my $page=$params{page}; my $template=$params{template}; - if ($template->query(name => "pedigree") - or $template->query(name => "pedigree_but_root") - or $template->query(name => "pedigree_but_two_oldest") - ) - { - my @pedigree=pedigree($page); - $template->param(pedigree => \@pedigree); - $template->param(pedigree_but_root => [forget_oldest(1, @pedigree)]); - $template->param(pedigree_but_two_oldest => [forget_oldest(2, @pedigree)]); - } + my @pedigree=pedigree($page) + if ($template->query(name => "pedigree") + or $template->query(name => "pedigree_but_root") + or $template->query(name => "pedigree_but_two_oldest") + ); + + $template->param(pedigree => \@pedigree) + if ($template->query(name => "pedigree")); + $template->param(pedigree_but_root => [forget_oldest(1, @pedigree)]) + if ($template->query(name => "pedigree_but_root")); + $template->param(pedigree_but_two_oldest => [forget_oldest(2, @pedigree)]) + if ($template->query(name => "pedigree_but_two_oldest")); } # }}} |