Optionally add indentation to maps
authorSimon McVittie <smcv@debian.org>
Fri, 3 Aug 2012 11:48:46 +0000 (12:48 +0100)
committerSimon McVittie <smcv@debian.org>
Sun, 24 Feb 2013 13:10:24 +0000 (13:10 +0000)
This makes them easier to debug by showing the structure. Sample output
when $spaces is set to 4 spaces:

<div class='map'>
<ul>
    <li>
    <a href="../alpha" class="mapparent">alpha</a>
        <ul>
        <li>
        <a href="../alpha/1" class="mapitem">1</a>
        </li>
        </ul>
    </li>
    <li>
    <a href="../beta" class="mapitem">beta</a>
    </li>
</ul>
</div>

IkiWiki/Plugin/map.pm

index ce3ac1d24e93be888ca9e81f597f55d8b2f41424..6567331fa41dca1ebdfa6895cab386814a8382ae 100644 (file)
@@ -72,6 +72,9 @@ sub preprocess (@) {
                $common_prefix=IkiWiki::dirname($common_prefix);
        }
 
+       # Set this to 1 or more spaces to pretty-print maps for debugging
+       my $spaces = "";
+
        # Create the map.
        my $parent="";
        my $indent=0;
@@ -98,18 +101,18 @@ sub preprocess (@) {
                        $parent=IkiWiki::dirname($parent);
                        last if length $addparent && $baseitem =~ /^\Q$addparent\E(\/|$)/;
                        $addparent="";
-                       $indent--;
-                       $map .= "</li>\n";
-                       if ($indent > 0) {
-                               $map .= "</ul>\n";
+                       $map .= ($spaces x $indent) . "</li>\n";
+                       if ($indent > 1) {
+                               $map .= ($spaces x $indent) . "</ul>\n";
                        }
+                       $indent--;
                }
                while ($depth < $indent) {
-                       $indent--;
-                       $map .= "</li>\n";
-                       if ($indent > 0) {
-                               $map .= "</ul>\n";
+                       $map .= ($spaces x $indent) . "</li>\n";
+                       if ($indent > 1) {
+                               $map .= ($spaces x $indent) . "</ul>\n";
                        }
+                       $indent--;
                }
                my @bits=split("/", $item);
                my $p="";
@@ -117,13 +120,14 @@ sub preprocess (@) {
                while ($depth > $indent) {
                        $indent++;
                        if ($indent > 1) {
-                               $map .= "<ul>\n";
+                               $map .= ($spaces x $indent) . "<ul>\n";
                        }
                        if ($depth > $indent) {
                                $p.="/".shift(@bits);
                                $addparent=$p;
                                $addparent=~s/^\///;
-                               $map .= "<li>"
+                               $map .= ($spaces x $indent) . "<li>\n";
+                               $map .= ($spaces x $indent)
                                        .htmllink($params{page}, $params{destpage},
                                                 "/".$common_prefix.$p, class => "mapparent",
                                                 noimageinline => 1)
@@ -134,8 +138,9 @@ sub preprocess (@) {
                                $openli=0;
                        }
                }
-               $map .= "</li>\n" if $openli;
-               $map .= "<li>"
+               $map .= ($spaces x $indent) . "</li>\n" if $openli;
+               $map .= ($spaces x $indent) . "<li>\n";
+               $map .= ($spaces x $indent)
                        .htmllink($params{page}, $params{destpage}, 
                                "/".$common_prefix."/".$item,
                                @linktext,
@@ -145,8 +150,9 @@ sub preprocess (@) {
                $parent=$item;
        }
        while ($indent > 0) {
+               $map .= ($spaces x $indent) . "</li>\n";
                $indent--;
-               $map .= "</li>\n</ul>\n";
+               $map .= ($spaces x $indent) . "</ul>\n";
        }
        $map .= "</div>\n";
        return $map;