From 34d2b8da547d15ee2aa4e00263fdc27212017810 Mon Sep 17 00:00:00 2001 From: Brion Vibber Date: Mon, 30 Apr 2007 19:51:56 +0000 Subject: [PATCH] * (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 --- RELEASE-NOTES | 5 +++++ includes/Parser.php | 18 ++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 8da8dc3839..cae552f0b0 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -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 == diff --git a/includes/Parser.php b/includes/Parser.php index 8e36e170de..9bfe3ddc95 100644 --- a/includes/Parser.php +++ b/includes/Parser.php @@ -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 ); } -- 2.20.1