MediaWiki:Gadget-collapsible.js

Z Wikisłownika – wolnego słownika wielojęzycznego

Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.

  • Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
  • Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
  • Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
  • Opera: Naciśnij klawisze Ctrl+F5.
// Przeniesienie kodu z Common.js: [[Specjalna:Niezmienny link/4436185]]
// Przeróbki: [[User:Peter Bowman]]
// Zobacz też:
// * wersja z Mobile.js: [[Specjalna:Niezmienny link/4293067]]
// * [[mw:Manual:Collapsible elements]]

var collapseCaption = 'ukryj▲';
var expandCaption = 'pokaż▼';

var navigationBarHide = mw.format( '[$1]', collapseCaption );
var navigationBarShow = mw.format( '[$1]', expandCaption );

var storageKey = 'ext.gadget.collapsible.state';

var collapseState = mw.storage.getObject( storageKey ) || {
	inflection: 'expanded',
	signLanguage: 'expanded'
};

/**
 * Dynamic Navigation Bars. See [[Wikipedia:NavFrame]]
 * 
 * Based on script from en.wikipedia.org, 2008-09-15.
 *
 * @source www.mediawiki.org/wiki/MediaWiki:Gadget-NavFrame.js
 * @maintainer Helder.wiki, 2012–2013
 * @maintainer Krinkle, 2013
 */

function toggleNavigationBar( $navFrame, $navToggle ) {
	var property = $navFrame.hasClass( 'collapse-sign-language' )
		? 'signLanguage'
		: 'inflection';
	
	if ( $navFrame.data( 'collapsed' ) ) {
		$navFrame.find( 'div.NavContent' ).show();
		$navToggle.text( navigationBarHide );
		$navFrame.data( 'collapsed', false );
		collapseState[ property ] = 'expanded';
	} else {
		$navFrame.find( 'div.NavContent' ).hide();
		$navToggle.text( navigationBarShow );
		$navFrame.data( 'collapsed', true );
		collapseState[ property ] = 'collapsed';
	}
	
	mw.storage.setObject( storageKey, collapseState );
	return false;
}

function createNavigationBarToggleButton( $content ) {
	var $navFrame, $navToggle;
		
	// Iterate over all (new) nav frames
	$.each( $content.find( 'div.NavFrame' ), function ( i, navFrame ) {
		$navFrame = $( navFrame ).data( 'collapsed', false );
		
		// If found a navigation bar
		$navToggle = $( '<span>' )
			.addClass( 'NavToggle' )
			.attr( 'role', 'button' )
			.text( navigationBarHide )
			.appendTo( $navFrame.find( 'div.NavHead' ) );
		
		$navToggle.on( 'click', $.proxy( toggleNavigationBar, null, $navFrame, $navToggle ) );
		
		if (
			$navFrame.hasClass( 'collapsed' ) ||
		(
			$navFrame.hasClass( 'collapse-odmiana' ) &&
			collapseState.inflection === 'collapsed'
		) || (
			$navFrame.hasClass( 'collapse-sign-language' ) &&
			collapseState.signLanguage === 'collapsed'
		) ) {
			toggleNavigationBar( $navFrame, $navToggle );
		}
	} );
}

mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );

/**
 * Collapsible tables
 *
 * @version 2.0.2 (2014-03-14)
 * @source https://www.mediawiki.org/wiki/MediaWiki:Gadget-collapsibleTables.js
 * @author [[User:R. Koot]]
 * @author [[User:Krinkle]]
 * @deprecated Since MediaWiki 1.20: Use class="mw-collapsible" instead which
 * is supported in MediaWiki core.
 */

function collapseTable( $button, $table ) {
	var $rows = $table.find( 'tr' );
	
	if ( $table.data( 'collapsed' ) ) {
		$rows.slice( 1 ).css( 'display', $rows.first().css( 'display' ) );
		$button.text( navigationBarHide );
		$table.data( 'collapsed', false );
	} else {
		$rows.slice( 1 ).hide();
		$button.text( navigationBarShow );
		$table.data( 'collapsed', true );
	}
	
	return false;
}

function createCollapseButtons( $content ) {
	var $table, $header, $button;
	
	$.each( $content.find( 'table.collapsible' ), function ( i, table ) {
		$table = $( table );
		$header = $table.find( 'tr' ).first().find( 'th' ).first();
		
		if ( !$header.length ) {
			return true;
		}
		
		$table.data( 'collapsed', false );
		
		$button = $( '<span>' )
			.addClass( 'collapse-button' )
			.attr( 'role', 'button' )
			.text( navigationBarHide )
			.prependTo( $header );
			
		$button.on( 'click', $.proxy( collapseTable, null, $button, $table ) );
		
		if ( $table.hasClass( 'collapsed' ) ) {
			collapseTable( $button, $table );
		}
	} );
}

mw.hook( 'wikipage.content' ).add( createCollapseButtons );