Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Gadget-lyrics-options.js: Difference between revisions

MediaWiki interface page
Content added Content deleted
(clean up legacy code)
(prevent adding column selector when there is only one column)
 
(One intermediate revision by the same user not shown)
Line 44: Line 44:
if (
if (
typeof languages === 'string' &&
typeof languages !== 'string' ||
languages.length === 0
typeof labels !== 'undefined'
) {
) {
console.error(
var langSelector = makeLanguageSelector(
'Lyrics options ' +
id,
languages.split( ',' ),
'#' + id + ': ' +
'Unable to get columns.'
labels
);
);
return;
}
var fieldset = new OO.ui.FieldsetLayout( {
label: 'Lyrics display options'
var languagesList = languages.split( ',' )
.filter( function ( language ) {
return language.length > 0;
} );
} );
for ( var i = 0; i < languagesList.length; i++ ) {
fieldset.addItems( [
var language = languagesList[i];
new OO.ui.FieldLayout(
if (!(language in labels)) {
langSelector,
console.error(
{ label: 'Visible columns', align: 'inline' }
'Lyrics options ' +
)
] );
'#' + id + ': ' +
'No label found for column "' + language + '".'
);
$( this ).append( fieldset.$element );
} else {
return;
}
console.error('Unable to load lyrics options.');
}
}
if (languagesList.length <= 1) {
// Do not add options for tables with one column or less
return;
}
var langSelector = makeLanguageSelector( id, languagesList, labels );
var fieldset = new OO.ui.FieldsetLayout( {
label: 'Lyrics display options'
} );
fieldset.addItems( [
new OO.ui.FieldLayout(
langSelector,
{ label: 'Visible columns', align: 'inline' }
)
] );
$( this ).append( fieldset.$element );
} );
} );
} );
} );

Latest revision as of 03:14, 15 April 2023

( function ( $, mw ) {
	'use strict';
	
	function makeLanguageSelector ( id, languages, labels ) {
		var selector = new OO.ui.ButtonSelectWidget( {
			items: languages.map( function ( language ) {
				return new OO.ui.ButtonOptionWidget( {
					data: language,
					label: labels[language],
					selected: true
				} );
			} ),
			align: 'left',
			multiselect: true
		} );
		
		function langSelect ( item, selected ) {
			var cssSelector = '#lyrics-' + id + ' .lyrics-row';
			
			var changedLanguage = item.getData();
			var languageSelector = '.lyrics-' + changedLanguage;
			
			$( cssSelector ).each( function () {
				var $lyricsElement = $( this ).find( languageSelector );
				
				if ( selected ) {
					$lyricsElement.show();
				} else {
					$lyricsElement.hide();
				}
			} );
		}
		
		selector.on( 'choose', langSelect );
		
		return selector;
	}
	
	$( function () {
		$( '.lyrics-options' ).each( function () {
			var id = $( this ).data( 'id' );
			var languages = $( this ).data( 'languages' );
			var labels = $( this ).data( 'labels' );
			
			if (
				typeof languages !== 'string' ||
				languages.length === 0
			) {
				console.error(
					'Lyrics options ' + 
					'#' + id + ': ' +
					'Unable to get columns.'
				);
				return;
			}
			
			var languagesList = languages.split( ',' )
				.filter( function ( language ) {
					return language.length > 0;
				} );
			
			for ( var i = 0; i < languagesList.length; i++ ) {
				var language = languagesList[i];
				if (!(language in labels)) {
					console.error(
						'Lyrics options ' +
						'#' + id + ': ' +
						'No label found for column "' + language + '".' 
					);
					return;
				}
			}
			
			if (languagesList.length <= 1) {
				// Do not add options for tables with one column or less
				return;
			}
			
			var langSelector = makeLanguageSelector( id, languagesList, labels );
			
			var fieldset = new OO.ui.FieldsetLayout( {
				label: 'Lyrics display options'
			} );
		
			fieldset.addItems( [
				new OO.ui.FieldLayout( 
					langSelector,
					{ label: 'Visible columns', align: 'inline' } 
				)
			] );
			
			$( this ).append( fieldset.$element );
		} );
	} );
	
} )( jQuery, mediaWiki );
Cookies help us deliver our services. By using our services, you agree to our use of cookies.