X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/6f1539320b7b2701d391c9921177b31898767bb7..HEAD:/IkiWiki/Plugin/parentlinks.pm diff --git a/IkiWiki/Plugin/parentlinks.pm b/IkiWiki/Plugin/parentlinks.pm index ebf1d449a..ef08118b4 100644 --- a/IkiWiki/Plugin/parentlinks.pm +++ b/IkiWiki/Plugin/parentlinks.pm @@ -9,6 +9,7 @@ use IkiWiki 3.00; sub import { hook(type => "parentlinks", id => "parentlinks", call => \&parentlinks); hook(type => "pagetemplate", id => "parentlinks", call => \&pagetemplate); + hook(type => "getsetup", id => "parentlinks", call => \&getsetup); } sub getsetup () { @@ -16,12 +17,21 @@ sub getsetup () { 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}; @@ -31,20 +41,25 @@ sub parentlinks ($) { my @pagepath=(split("/", $page)); my $pagedepth=@pagepath; + + # The last element in @pagepath is the page itself, so punt that + # (These are /parent/ links, after all.) + pop @pagepath; + foreach my $dir (@pagepath) { next if $dir eq 'index'; $depth=$i; $height=($pagedepth - $depth); + $path.="/".$dir; + $title=pagetitle($dir); push @ret, { - url => urlto($path, $page), + url => urlto(bestlink($page, $path), $page), page => $title, depth => $depth, height => $height, "depth_$depth" => 1, "height_$height" => 1, }; - $path.="/".$dir; - $title=pagetitle($dir); $i++; } return @ret; @@ -52,11 +67,13 @@ sub parentlinks ($) { sub pagetemplate (@) { my %params=@_; - my $page=$params{page}; my $template=$params{template}; - if ($template->query(name => "parentlinks")) { - $template->param(parentlinks => [parentlinks($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)); } }