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