#!/usr/bin/perl
-# -*- cperl-indent-level: 8; -*-
-# Ikiwiki pedigree plugin.
-package IkiWiki::Plugin::pedigree;
+# Ikiwiki parentlinks plugin.
+package IkiWiki::Plugin::parentlinks;
use warnings;
use strict;
-use IkiWiki 2.00;
+use IkiWiki 3.00;
-sub import { #{{{
- hook(type => "pagetemplate", id => "pedigree", call => \&pagetemplate);
-} # }}}
+sub import {
+ hook(type => "parentlinks", id => "parentlinks", call => \&parentlinks);
+ hook(type => "pagetemplate", id => "parentlinks", call => \&pagetemplate);
+ hook(type => "getsetup", id => "parentlinks", call => \&getsetup);
+}
-sub pedigree ($) { #{{{
+sub getsetup () {
+ return
+ plugin => {
+ safe => 1,
+ rebuild => 1,
+ section => "core",
+ },
+}
+
+sub parentlinks ($) {
my $page=shift;
+ if (! length $page) {
+ # dynamic page
+ return {
+ url => IkiWiki::baseurl(undef),
+ page => $config{wikiname},
+ };
+ }
+
my @ret;
my $path="";
my $title=$config{wikiname};
$depth=$i;
$height=($pagedepth - $depth);
push @ret, {
- url => urlto($path, $page),
- page => $title,
- depth => $depth,
- height => $height,
- "depth_$depth" => 1,
- "height_$height" => 1,
- };
+ url => urlto(bestlink($page, $path), $page),
+ page => $title,
+ depth => $depth,
+ height => $height,
+ "depth_$depth" => 1,
+ "height_$height" => 1,
+ };
$path.="/".$dir;
- $title=IkiWiki::pagetitle($dir);
+ $title=pagetitle($dir);
$i++;
}
return @ret;
-} #}}}
+}
-sub pagetemplate (@) { #{{{
+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 => "parentlinks") ||
+ $template->query(name => "has_parentlinks")) {
+ my @links=parentlinks($params{page});
+ $template->param(parentlinks => \@links);
+ $template->param(has_parentlinks => (@links > 0));
}
-} # }}}
+}
1