summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorintrigeri <intrigeri@boum.org>2008-07-13 21:14:29 +0200
committerintrigeri <intrigeri@boum.org>2008-07-13 22:03:22 +0200
commitdf42a5ef21fd3e97ab287fa48ccd3aafd34e0375 (patch)
treec464f5a864aaa7cbdc51916fad9a74bd3335a1d8
parent16cf69477d9511debba84152629d9f08a6e643a5 (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.pm39
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)]);
+ }
} # }}}