# trail2 => ["member0", undef],
# }
my %member_to_trails;
+my %up_in_trail;
# member => 1
my %rebuild_trail_members;
next unless exists $pagestate{$trail}{trail}{contents};
my $members = [];
+ my $up_in_trail = 0;
my @contents = @{$pagestate{$trail}{trail}{contents}};
foreach my $c (@contents) {
@$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];
}
$trail_to_members{$trail} = $members;
+ $up_in_trail{$trail} = $up_in_trail;
}
foreach my $member (keys %pagestate) {
my $page = $params{page};
my $template = $params{template};
+ return unless length $page;
+
if ($template->query(name => 'trails') && ! $recursive) {
prerender();
$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);