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
(split language selector into legacy and new mode)
(prevent adding column selector when there is only one column)
 
(5 intermediate revisions by the same user not shown)
Line 1: Line 1:
( function ( $, mw ) {
( function ( $, mw ) {
'use strict';
'use strict';
function makeLanguageSelectorLegacy ( id ) {
var selector = new OO.ui.ButtonSelectWidget( {
items: [
new OO.ui.ButtonOptionWidget( { data: 'jp', label: 'Japanese', selected: true } ),
new OO.ui.ButtonOptionWidget( { data: 'rm', label: 'Romaji', selected: true } ),
new OO.ui.ButtonOptionWidget( { data: 'en', label: 'English', selected: true } )
],
align: 'left',
multiselect: true
} );
function langSelect ( item, selected ) {
var cssSelector = '#lyrics-' + id + ' .lyric';
var changedLang = item.getData();
var langSelector = '';
switch( changedLang ) {
case 'jp':
langSelector = '.ly-jp';
break;
case 'rm':
langSelector = '.ly-rm';
break;
case 'en':
langSelector = '.ly-en';
break;
default:
return;
}
$( cssSelector ).each( function() {
var $ly = $( this ).find( langSelector );
if ( selected ) {
$ly.show();
} else {
$ly.hide();
}
} );
}
selector.on( 'choose', langSelect );
return selector;
}
function makeLanguageSelector ( id, languages, labels ) {
function makeLanguageSelector ( id, languages, labels ) {
Line 64: Line 16:
function langSelect ( item, selected ) {
function langSelect ( item, selected ) {
var cssSelector = '#lyrics-' + id + ' .lyric';
var cssSelector = '#lyrics-' + id + ' .lyrics-row';
var changedLanguage = item.getData();
var changedLanguage = item.getData();
Line 91: Line 43:
var labels = $( this ).data( 'labels' );
var labels = $( this ).data( 'labels' );
if (
var langSelector;
if (typeof languages === 'string' && typeof labels !== 'undefined') {
typeof languages !== 'string' ||
languages.length === 0
langSelector = makeLanguageSelector(
id,
) {
languages.splti( ',' )
console.error(
'Lyrics options ' +
'#' + id + ': ' +
'Unable to get columns.'
);
);
return;
} else { // legacy mode
langSelector = makeLanguageSelectorLegacy( id );
}
}
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( {
var fieldset = new OO.ui.FieldsetLayout( {
label: 'Lyrics display options'
label: 'Lyrics display options'
} );
} );
fieldset.addItems( [
fieldset.addItems( [
new OO.ui.FieldLayout( langSelector, { label: 'Display language', align: 'inline' } )
new OO.ui.FieldLayout(
langSelector,
{ label: 'Visible columns', align: 'inline' }
)
] );
] );
$( this ).append( fieldset.$element );
$( 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.