diff options
-rw-r--r-- | IkiWiki/Plugin/pedigree.pm | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/pedigree.pm b/IkiWiki/Plugin/pedigree.pm new file mode 100644 index 000000000..efe6c3e77 --- /dev/null +++ b/IkiWiki/Plugin/pedigree.pm @@ -0,0 +1,53 @@ +#!/usr/bin/perl +# -*- cperl-indent-level: 8; -*- +# Ikiwiki pedigree plugin. +package IkiWiki::Plugin::pedigree; + +use warnings; +use strict; +use IkiWiki 2.00; + +sub import { #{{{ + hook(type => "pagetemplate", id => "pedigree", call => \&pagetemplate); +} # }}} + +sub pedigree ($) { #{{{ + my $page=shift; + + my @ret; + my $path=""; + my $title=$config{wikiname}; + my $i; + + my @pagepath=(split("/", $page)); + my $pageloc=@pagepath - 1; + foreach my $dir (@pagepath) { + next if $dir eq 'index'; + push @ret, { + url => urlto($path, $page), + page => $title, + level => $i, + is_root => ($i eq 0), + is_first_child => ($i eq 1), + is_mother => ($i eq ($pageloc - 1)), + is_grand_mother => ($i eq ($pageloc - 2)) + }; + $path.="/".$dir; + $title=pagetitle($dir); + $i++; + } + return @ret; +} #}}} + +sub pagetemplate (@) { #{{{ + my %params=@_; + my $page=$params{page}; + my $template=$params{template}; + + if ($template->query(name => "pedigree")) { + $template->param(pedigree => [pedigree($page)]); + } + +} # }}} + +1 |