diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2011-01-30 23:02:46 +0100 |
---|---|---|
committer | Joey Hess <joey@kitenet.net> | 2011-02-09 14:39:28 -0400 |
commit | 2d5c2f301c04a3daa3164a2df70899fa2c1aaa38 (patch) | |
tree | 527f9f6211934932948a5d921db0948389d31ff3 /IkiWiki | |
parent | 7fef6fdc3830e8446ff1323d20490ed049ecb65d (diff) | |
download | ikiwiki-2d5c2f301c04a3daa3164a2df70899fa2c1aaa38.tar ikiwiki-2d5c2f301c04a3daa3164a2df70899fa2c1aaa38.tar.gz |
map: don't create useless </ul><ul> sequences
With the previous logic, same-level items would go down one level and
then again up one level closing and re-opening UL tags each time. The
resulting redundant lists caused whitespace layout issues in the
rendered pages.
Adjust the "moving up?" logic to check if the current item base is
different from the previous item _base_. Adjust the "going down?" logic
by moving it to an earlier phase and checking for (1) parent item not being
what it should be and (2) remaining bits; the root is grown unconditionally as
long as (2) is verified.
Diffstat (limited to 'IkiWiki')
-rw-r--r-- | IkiWiki/Plugin/map.pm | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/IkiWiki/Plugin/map.pm b/IkiWiki/Plugin/map.pm index ce3ac1d24..38f090ff7 100644 --- a/IkiWiki/Plugin/map.pm +++ b/IkiWiki/Plugin/map.pm @@ -94,8 +94,9 @@ sub preprocess (@) { if defined $common_prefix && length $common_prefix; my $depth = ($item =~ tr/\//\//) + 1; my $baseitem=IkiWiki::dirname($item); - while (length $parent && length $baseitem && $baseitem !~ /^\Q$parent\E(\/|$)/) { - $parent=IkiWiki::dirname($parent); + my $parentbase=IkiWiki::dirname($parent); + while (length $parentbase && length $baseitem && $baseitem !~ /^\Q$parentbase\E(\/|$)/) { + $parentbase=IkiWiki::dirname($parentbase); last if length $addparent && $baseitem =~ /^\Q$addparent\E(\/|$)/; $addparent=""; $indent--; @@ -113,14 +114,10 @@ sub preprocess (@) { } my @bits=split("/", $item); my $p=""; + $indent++ unless length $parent; $p.="/".shift(@bits) for 1..$indent; while ($depth > $indent) { - $indent++; - if ($indent > 1) { - $map .= "<ul>\n"; - } - if ($depth > $indent) { - $p.="/".shift(@bits); + if (@bits && !(length $parent && "/$parent" eq $p)) { $addparent=$p; $addparent=~s/^\///; $map .= "<li>" @@ -133,6 +130,11 @@ sub preprocess (@) { else { $openli=0; } + $indent++; + $p.="/".shift(@bits) if @bits; + if ($indent > 1) { + $map .= "<ul>\n"; + } } $map .= "</li>\n" if $openli; $map .= "<li>" |