diff options
author | intrigeri <intrigeri@boum.org> | 2008-07-13 21:14:29 +0200 |
---|---|---|
committer | intrigeri <intrigeri@boum.org> | 2008-07-13 22:03:22 +0200 |
commit | df42a5ef21fd3e97ab287fa48ccd3aafd34e0375 (patch) | |
tree | c464f5a864aaa7cbdc51916fad9a74bd3335a1d8 | |
parent | 16cf69477d9511debba84152629d9f08a6e643a5 (diff) |
pedigree: added _but_root & _but_two_oldest loops
... after having learned a bit of Perl, knocked my head against
Perl references and arrays of hashes, tried to use some nice
functionnal programming constructs - no success - to make things
more generic... I'm back to the roots, with this simple code :)
Signed-off-by: intrigeri <intrigeri@boum.org>
-rw-r--r-- | IkiWiki/Plugin/pedigree.pm | 39 |
1 files changed, 35 insertions, 4 deletions
diff --git a/IkiWiki/Plugin/pedigree.pm b/IkiWiki/Plugin/pedigree.pm index b051a6da2..3d1e3764d 100644 --- a/IkiWiki/Plugin/pedigree.pm +++ b/IkiWiki/Plugin/pedigree.pm @@ -26,7 +26,7 @@ sub pedigree ($) { #{{{ push @ret, { url => urlto($path, $page), page => $title, - level => $i, + absdepth => $i, is_root => ($i eq 0), is_second_ancestor => ($i eq 1), is_grand_mother => ($i eq ($pagedepth - 2)), @@ -39,14 +39,45 @@ sub pedigree ($) { #{{{ return @ret; } #}}} +sub forget_oldest ($@) { #{{{ + my $offset=shift; + my @pedigree=@_; + my @ret; + my $parent; + unless ($offset ge scalar(@pedigree)) { + for (my $i=0; $i < $offset; $i++) { + shift @pedigree; + } + while (@pedigree) { + # Doing so does not modify the original @pedigree, we've + # got our own copy of its "content" (i.e. a pile of + # 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. + $parent->{reldepth}=($parent->{absdepth} - $offset); + push @ret, $parent; + } + } + return @ret; +} #}}} + sub pagetemplate (@) { #{{{ my %params=@_; my $page=$params{page}; my $template=$params{template}; - if ($template->query(name => "pedigree")) { - $template->param(pedigree => [pedigree($page)]); - } + 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)]); + } } # }}} |