summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin/pedigree.pm
blob: b051a6da2f29bf59ab63d935e866042f8edb580f (plain)
  1. #!/usr/bin/perl
  2. # -*- cperl-indent-level: 8; -*-
  3. # Ikiwiki pedigree plugin.
  4. package IkiWiki::Plugin::pedigree;
  5. use warnings;
  6. use strict;
  7. use IkiWiki 2.00;
  8. sub import { #{{{
  9. hook(type => "pagetemplate", id => "pedigree", call => \&pagetemplate);
  10. } # }}}
  11. sub pedigree ($) { #{{{
  12. my $page=shift;
  13. my @ret;
  14. my $path="";
  15. my $title=$config{wikiname};
  16. my $i=0;
  17. my @pagepath=(split("/", $page));
  18. my $pagedepth=@pagepath;
  19. foreach my $dir (@pagepath) {
  20. next if $dir eq 'index';
  21. push @ret, {
  22. url => urlto($path, $page),
  23. page => $title,
  24. level => $i,
  25. is_root => ($i eq 0),
  26. is_second_ancestor => ($i eq 1),
  27. is_grand_mother => ($i eq ($pagedepth - 2)),
  28. is_mother => ($i eq ($pagedepth - 1)),
  29. };
  30. $path.="/".$dir;
  31. $title=IkiWiki::pagetitle($dir);
  32. $i++;
  33. }
  34. return @ret;
  35. } #}}}
  36. sub pagetemplate (@) { #{{{
  37. my %params=@_;
  38. my $page=$params{page};
  39. my $template=$params{template};
  40. if ($template->query(name => "pedigree")) {
  41. $template->param(pedigree => [pedigree($page)]);
  42. }
  43. } # }}}
  44. 1