From d63dbc37d027ee68ce2bc05d42ac1cd32ccd5c52 Mon Sep 17 00:00:00 2001 From: Yorhel Date: Sun, 10 Jan 2010 18:58:04 +0100 Subject: Handler::Tags: Fixed major bug with parent tag display on tag pages --- lib/VNDB/Handler/Tags.pm | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) (limited to 'lib') diff --git a/lib/VNDB/Handler/Tags.pm b/lib/VNDB/Handler/Tags.pm index df91a1c3..edd73496 100644 --- a/lib/VNDB/Handler/Tags.pm +++ b/lib/VNDB/Handler/Tags.pm @@ -74,21 +74,13 @@ sub tagpage { p; my @p = @{$t->{parents}}; - my @r; - for (0..$#p) { - if($_ && $p[$_-1]{lvl} < $p[$_]{lvl}) { - pop @r for (1..($p[$_]{lvl}-$p[$_-1]{lvl})); - } - if($_ < $#p && $p[$_+1]{lvl} < $p[$_]{lvl}) { - push @r, $p[$_]; - } elsif($#p == $_ || $p[$_+1]{lvl} >= $p[$_]{lvl}) { - a href => '/g', mt '_tagp_indexlink'; - for ($p[$_], reverse @r) { - txt ' > '; - a href => "/g$_->{id}", $_->{name}; - } - txt " > $t->{name}\n"; + for my $p (_parenttags(@p)) { + a href => '/g', mt '_tagp_indexlink'; + for (reverse @$p) { + txt ' > '; + a href => "/g$_->{id}", $_->{name}; } + txt " > $t->{name}\n"; } if(!@p) { a href => '/g', mt '_tagp_indexlink'; @@ -128,6 +120,22 @@ sub tagpage { $self->htmlFooter; } + +# arg: tag hashref +# returns: [ [ tag1, tag2, tag3 ], [ tag1, tag2, tag5 ] ] +sub _parenttags { + my @r; + for my $t (@_) { + for (@{$t->{'sub'}}) { + my @p = _parenttags($_); + push @r, [ $t, @p?@{$p[0]}:() ]; + } + push @r, [$t] if !@{$t->{'sub'}}; + } + return @r; +} + + # used for on both /g and /g+ sub _childtags { my($self, $t, $index) = @_; -- cgit v1.2.3