* (bug 6204) Fixes for indentation with $wgMaxTocLevel:
authorBrion Vibber <brion@users.mediawiki.org>
Mon, 30 Apr 2007 19:51:56 +0000 (19:51 +0000)
committerBrion Vibber <brion@users.mediawiki.org>
Mon, 30 Apr 2007 19:51:56 +0000 (19:51 +0000)
  - don't emit too many list close tags after an invisible header
  - don't emit too many final list close tags if last header is invisible
  - don't emit TOC when there are no visible headers

RELEASE-NOTES
includes/Parser.php

index 8da8dc3..cae552f 100644 (file)
@@ -365,6 +365,11 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN
 * (bug 8602) Converted Special:Contributions to use an IndexPager. The 
   interpretation of the offset parameter has changed, and the go parameter 
   has been removed.
+* (bug 6204) Fixes for indentation with $wgMaxTocLevel:
+  - don't emit too many list close tags after an invisible header
+  - don't emit too many final list close tags if last header is invisible
+  - don't emit TOC when there are no visible headers
+
 
 == Maintenance ==
 
index 8e36e17..9bfe3dd 100644 (file)
@@ -3453,17 +3453,13 @@ class Parser
                        $enoughToc = true;
                }
 
-               # Never ever show TOC if no headers
-               if( $numMatches < 1 ) {
-                       $enoughToc = false;
-               }
-
                # We need this to perform operations on the HTML
                $sk = $this->mOptions->getSkin();
 
                # headline counter
                $headlineCount = 0;
                $sectionCount = 0; # headlineCount excluding template sections
+               $numVisible = 0;
 
                # Ugh .. the TOC should have neat indentation levels which can be
                # passed to the skin functions. These are determined here
@@ -3493,7 +3489,6 @@ class Parser
 
                        if( $toclevel ) {
                                $prevlevel = $level;
-                               $prevtoclevel = $toclevel;
                        }
                        $level = $matches[1][$headlineCount];
 
@@ -3504,7 +3499,9 @@ class Parser
                                        $toclevel++;
                                        $sublevelCount[$toclevel] = 0;
                                        if( $toclevel<$wgMaxTocLevel ) {
+                                               $prevtoclevel = $toclevel;
                                                $toc .= $sk->tocIndent();
+                                               $numVisible++;
                                        }
                                }
                                elseif ( $level < $prevlevel && $toclevel > 1 ) {
@@ -3611,9 +3608,14 @@ class Parser
                                $sectionCount++;
                }
 
+               # Never ever show TOC if no headers
+               if( $numVisible < 1 ) {
+                       $enoughToc = false;
+               }
+               
                if( $enoughToc ) {
-                       if( $toclevel<$wgMaxTocLevel ) {
-                               $toc .= $sk->tocUnindent( $toclevel - 1 );
+                       if( $prevtoclevel > 0 && $prevtoclevel < $wgMaxTocLevel ) {
+                               $toc .= $sk->tocUnindent( $prevtoclevel - 1 );
                        }
                        $toc = $sk->tocList( $toc );
                }