summaryrefslogtreecommitdiff
path: root/resources/src/mediawiki/mediawiki.toc.js
blob: 78627fcae0d20d5c2f11e6cc4081f49f9487342e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
( function ( mw, $ ) {
	'use strict';

	// Table of contents toggle
	mw.hook( 'wikipage.content' ).add( function ( $content ) {
		var $toc, $tocTitle, $tocToggleLink, $tocList, hideToc;
		$toc = $content.find( '#toc' );
		$tocTitle = $content.find( '#toctitle' );
		$tocToggleLink = $content.find( '#togglelink' );
		$tocList = $toc.find( 'ul' ).eq( 0 );

		// Hide/show the table of contents element
		function toggleToc() {
			if ( $tocList.is( ':hidden' ) ) {
				$tocList.slideDown( 'fast' );
				$tocToggleLink.text( mw.msg( 'hidetoc' ) );
				$toc.removeClass( 'tochidden' );
				mw.cookie.set( 'hidetoc', null );
			} else {
				$tocList.slideUp( 'fast' );
				$tocToggleLink.text( mw.msg( 'showtoc' ) );
				$toc.addClass( 'tochidden' );
				mw.cookie.set( 'hidetoc', '1' );
			}
		}

		// Only add it if there is a complete TOC and it doesn't
		// have a toggle added already
		if ( $toc.length && $tocTitle.length && $tocList.length && !$tocToggleLink.length ) {
			hideToc = mw.cookie.get( 'hidetoc' ) === '1';

			$tocToggleLink = $( '<a href="#" id="togglelink"></a>' )
				.text( hideToc ? mw.msg( 'showtoc' ) : mw.msg( 'hidetoc' ) )
				.click( function ( e ) {
					e.preventDefault();
					toggleToc();
				} );

			$tocTitle.append(
				$tocToggleLink
					.wrap( '<span class="toctoggle"></span>' )
					.parent()
						.prepend( '&nbsp;[' )
						.append( ']&nbsp;' )
			);

			if ( hideToc ) {
				$tocList.hide();
				$toc.addClass( 'tochidden' );
			}
		}
	} );

}( mediaWiki, jQuery ) );