summaryrefslogtreecommitdiff
path: root/IkiWiki
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2011-01-30 23:02:46 +0100
committerJoey Hess <joey@kitenet.net>2011-02-09 14:39:28 -0400
commit2d5c2f301c04a3daa3164a2df70899fa2c1aaa38 (patch)
tree527f9f6211934932948a5d921db0948389d31ff3 /IkiWiki
parent7fef6fdc3830e8446ff1323d20490ed049ecb65d (diff)
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.pm18
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>"