MediaWiki:Gadget-hide-empty-fields.js: Różnice pomiędzy wersjami

Z Wikisłownika – wolnego słownika wielojęzycznego
Usunięta treść Dodana treść
prosciej: zachowaj liste pustych pol
czasem wstawiamy samotne (1.1) w pierwszej linii w pokrewnych, zob. Specjalna:Niezmienny link/6148623
Linia 44: Linia 44:
// pole z zawartością poprzedzoną dwukropkiem (wyjątek: '(1.1)' np. w przykładach)
// pole z zawartością poprzedzoną dwukropkiem (wyjątek: '(1.1)' np. w przykładach)
'(1.1) '.indexOf( $dd.text() ) !== 0 ||
'(1.1) '.indexOf( $dd.text() ) !== 0 ||
// wyjątek do powyższego, np. samotne '(1.1)' w pierwszej linii w pokrewnych
$dd.next( 'dd' ).length ||
// nowy blok tekstu pod polem, np. znaczenia, tłumaczenia
// nowy blok tekstu pod polem, np. znaczenia, tłumaczenia
$dl.next().hasClass( fldnClass ) ||
$dl.next().hasClass( fldnClass ) ||

Wersja z 13:24, 30 cze 2018

/*
 * Skrypt ukrywający puste pola w artykułach. Przeróbka kodu do rozwijania
 * skrótów autorstwa [[User:Sp5uhe]].
 * Autorzy przeróbek: [[User:Olaf]], [[User:Peter Bowman]]
 */

var hef = mw.libs.hideEmptyFields = {
		state: null,
		$emptyFields: $( [] ),
		$content: $( [] ),
		$caEmptyFields: $( [] )
	},
	L10n = {
		'qqx': [ 'hide-empty-fields-hide', 'hide-empty-fields-show', 'hide-empty-fields-no-empty', 'hide-empty-fields-tooltip' ],
		'en': [ 'Hide empty fields', 'Show empty fields', 'No empty fields', 'Show/hide empty fields' ],
		'pl': [ 'Ukryj puste pola', 'Pokaż puste pola', 'Brak pustych pól', 'Pokaż/ukryj puste pola' ]
	},
	config = mw.config.get( [
		'wgNamespaceNumber',
		'wgAction',
		'wgTitle',
		'wgUserLanguage'
	] ),
	state = {
		HIDE: 'hide',
		SHOW: 'show'
	},
	cookieKey = 'HideEmptyFields',
	fldnRegex = /^.*\bfldn-(\d+)\b.*$/;

mw.libs.hideEmptyFields.browseContent = function () {
	mw.libs.hideEmptyFields.$content.find( '.field' ).each( function ( i, el ) {
		var $dt = $( el ).parent( 'dt' ),
			$dd = $dt.next( 'dd' ),
			$dl = $dt.parent( 'dl' ),
			fldn = $dt.attr( 'class' ).match( fldnRegex )[ 1 ],
			fldnClass = mw.format( 'fldn-$1', fldn );
		
		if ( !fldn ) {
			return true;
		}
		
		if ( !(
			// pole z zawartością poprzedzoną dwukropkiem (wyjątek: '(1.1)' np. w przykładach)
			'(1.1) '.indexOf( $dd.text() ) !== 0 ||
			// wyjątek do powyższego, np. samotne '(1.1)' w pierwszej linii w pokrewnych
			$dd.next( 'dd' ).length ||
			// nowy blok tekstu pod polem, np. znaczenia, tłumaczenia
			$dl.next().hasClass( fldnClass ) ||
			// lista przypisów pod polem źródeł
			$dl.next().is( 'div.mw-references-wrap' )
		) ) {
			mw.libs.hideEmptyFields.$emptyFields.push( $dl.get( 0 ) );
		}
	} );
};

mw.libs.hideEmptyFields.processContent = function () {
	mw.libs.hideEmptyFields.updatePortletLink();
	
	if ( mw.libs.hideEmptyFields.state === state.SHOW ) {
		mw.libs.hideEmptyFields.$emptyFields.show();
	} else {
		mw.libs.hideEmptyFields.$emptyFields.hide();
	}
};

mw.libs.hideEmptyFields.toggleState = function () {
	if ( mw.libs.hideEmptyFields.state === state.SHOW ) {
		mw.libs.hideEmptyFields.state = state.HIDE;
	} else {
		mw.libs.hideEmptyFields.state = state.SHOW;
	}
	
	mw.cookie.set( cookieKey, mw.libs.hideEmptyFields.state );
};

mw.libs.hideEmptyFields.updatePortletLink = function () {
	var newText = '';
	
	if ( mw.libs.hideEmptyFields.$emptyFields.length ) {
		if ( mw.libs.hideEmptyFields.state === state.SHOW ) {
			newText = mw.msg( 'hide-empty-fields-hide' );
		} else {
			newText = mw.msg( 'hide-empty-fields-show' );
		}
	} else {
		newText = mw.msg( 'hide-empty-fields-no-empty' );
	}
	
	mw.libs.hideEmptyFields.$caEmptyFields.find( 'a' ).text( newText );
};

if (
	config.wgNamespaceNumber === 0 &&
	config.wgAction === 'view' &&
	config.wgTitle.indexOf( 'Słownik ' ) !== 0
) {
	$.each( L10n[ config.wgUserLanguage ] || L10n.en, function ( i, message ) {
		mw.messages.set( L10n.qqx[ i ], message );
	} );
	
	mw.libs.hideEmptyFields.state = mw.cookie.get( cookieKey, null, state.HIDE );
	
	$( function () {
		mw.libs.hideEmptyFields.$caEmptyFields = $( mw.util.addPortletLink(
			'p-cactions',
			'#',
			mw.msg( 'hide-empty-fields-show' ),
			'ca-empty-fields',
			mw.msg( 'hide-empty-fields-tooltip' ),
			'1',
			'#ca-history'
		) )
		.on( 'click', function ( e ) {
			mw.libs.hideEmptyFields.toggleState();
			mw.libs.hideEmptyFields.processContent();
			return false;
		} );
		
		mw.libs.hideEmptyFields.updatePortletLink();
	} );
	
	mw.hook( 'sectionLinks.ready' ).add( function ( $content ) {
		mw.libs.hideEmptyFields.$content = $content;
		mw.libs.hideEmptyFields.$emptyFields = $( [] );
		mw.libs.hideEmptyFields.browseContent();
		mw.libs.hideEmptyFields.processContent();
		mw.hook( 'hideEmptyFields.ready' ).fire( $content );
		
		// zapobiega wskokowi w niewlasciwe miejsce wskutek ukrycia pustych sekcji po zaladowaniu strony
		//if ( location.hash ) location.hash = location.hash;
	} );
}