added new plugin: pedigree
authorintrigeri <intrigeri@boum.org>
Sat, 12 Jul 2008 21:04:35 +0000 (23:04 +0200)
committerintrigeri <intrigeri@boum.org>
Sun, 13 Jul 2008 20:02:23 +0000 (22:02 +0200)
Signed-off-by: intrigeri <intrigeri@boum.org>
IkiWiki/Plugin/pedigree.pm [new file with mode: 0644]

diff --git a/IkiWiki/Plugin/pedigree.pm b/IkiWiki/Plugin/pedigree.pm
new file mode 100644 (file)
index 0000000..efe6c3e
--- /dev/null
@@ -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