]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/trail.pm
memoize check for up in trail (untested)
[git.ikiwiki.info.git] / IkiWiki / Plugin / trail.pm
index d5fb2b5d624c1b21cf0fa9163b5b223a090e917e..429f742acc9e49039f19d782313d9af3eff27009 100644 (file)
@@ -228,6 +228,7 @@ my %trail_to_members;
 #      trail2 => ["member0", undef],
 # }
 my %member_to_trails;
+my %up_in_trail;
 
 # member => 1
 my %rebuild_trail_members;
@@ -291,6 +292,7 @@ sub prerender {
                next unless exists $pagestate{$trail}{trail}{contents};
 
                my $members = [];
+               my $up_in_trail = 0;
                my @contents = @{$pagestate{$trail}{trail}{contents}};
 
                foreach my $c (@contents) {
@@ -329,11 +331,14 @@ sub prerender {
                        @$members = reverse @$members;
                }
 
+
+
                # uniquify
                my %seen;
                my @tmp;
                foreach my $member (@$members) {
                        push @tmp, $member unless $seen{$member};
+                       $up_in_trail = 1 if $member eq $trail;
                        $seen{$member} = 1;
                }
                $members = [@tmp];
@@ -353,6 +358,7 @@ sub prerender {
                }
 
                $trail_to_members{$trail} = $members;
+               $up_in_trail{$trail} = $up_in_trail;
        }
 
        foreach my $member (keys %pagestate) {
@@ -447,17 +453,26 @@ sub pagetemplate (@) {
                                $nexttitle = title_of($next);
                        }
 
-                       push @trails, {
+                       my %trail_info = (
                                prevpage => $prev,
                                prevtitle => $prevtitle,
                                prevurl => $prevurl,
                                nextpage => $next,
                                nexttitle => $nexttitle,
                                nexturl => $nexturl,
-                               trailpage => $trail,
-                               trailtitle => title_of($trail),
-                               trailurl => urlto($trail, $page),
+                       );
+
+                       # the trail index is added as 'up' page, but only if it's
+                       # not a page in the trail itself. This allows the definition of
+                       # up-less trails by using e.g. the trailitems directive in one of the
+                       # pages of the trail
+                       unless ($up_in_trail{$trail}) {
+                               $trail_info{trailpage} = $trail;
+                               $trail_info{trailtitle} = title_of($trail);
+                               $trail_info{trailurl} = urlto($trail, $page);
                        };
+
+                       push @trails, \%trail_info;
                }
 
                $template->param(trailloop => \@trails);