From dc93bf1b37caa1ec9f8695ac441a74bac269797e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartosz=20Dziewo=C5=84ski?= Date: Fri, 22 Jan 2021 21:36:31 +0100 Subject: [PATCH] Parse alternative magic word translations when prefilling image fields In some languages, image options like 'alt' or 'thumb' can have multiple synonyms. They were only handled for English (and were hard-coded). Change-Id: Ib03932d3d85a5540bea325f2717da3365756a90e --- includes/WikiEditorHooks.php | 4 +- modules/jquery.wikiEditor.dialogs.config.js | 46 ++++++++++----------- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/includes/WikiEditorHooks.php b/includes/WikiEditorHooks.php index f7c66bcc..d3f0a3c4 100644 --- a/includes/WikiEditorHooks.php +++ b/includes/WikiEditorHooks.php @@ -218,7 +218,7 @@ class WikiEditorHooks { /** * Expose useful magic words which are used by the wikieditor toolbar - * @return string[] + * @return string[][] */ private static function getMagicWords() { $requiredMagicWords = [ @@ -235,7 +235,7 @@ class WikiEditorHooks { $magicWords = []; $factory = MediaWikiServices::getInstance()->getMagicWordFactory(); foreach ( $requiredMagicWords as $name ) { - $magicWords[$name] = $factory->get( $name )->getSynonym( 0 ); + $magicWords[$name] = $factory->get( $name )->getSynonyms(); } return $magicWords; } diff --git a/modules/jquery.wikiEditor.dialogs.config.js b/modules/jquery.wikiEditor.dialogs.config.js index f1835139..18db8248 100644 --- a/modules/jquery.wikiEditor.dialogs.config.js +++ b/modules/jquery.wikiEditor.dialogs.config.js @@ -550,7 +550,7 @@ $( this ).find( '[data-i18n-magic]' ) .text( function () { - return magicWordsI18N[ $( this ).attr( 'data-i18n-magic' ) ]; + return magicWordsI18N[ $( this ).attr( 'data-i18n-magic' ) ][ 0 ]; } ) .removeAttr( 'data-i18n-magic' ); $( this ).find( '#wikieditor-toolbar-file-size' ) @@ -614,7 +614,7 @@ return val.length && val !== 'default'; } ); if ( fileAlt.length ) { - options.push( magicWordsI18N.img_alt.replace( '$1', fileAlt ) ); + options.push( magicWordsI18N.img_alt[ 0 ].replace( '$1', fileAlt ) ); } if ( caption.length ) { options.push( caption ); @@ -643,7 +643,7 @@ '#wikieditor-toolbar-file-size' ].join( ',' ) ).val( '' ); $( '#wikieditor-toolbar-file-float' ).val( 'default' ); - $( '#wikieditor-toolbar-file-format' ).val( magicWordsI18N.img_thumbnail ); + $( '#wikieditor-toolbar-file-format' ).val( magicWordsI18N.img_thumbnail[ 0 ] ); }, 'wikieditor-toolbar-tool-file-cancel': function () { $( this ).dialog( 'close' ); @@ -685,13 +685,13 @@ fileAlt: '', fileSize: '', fileFloat: 'default', - fileFormat: magicWordsI18N.img_thumbnail + fileFormat: magicWordsI18N.img_thumbnail[ 0 ] }; parseFileSyntax = function ( wikitext ) { var escapedPipe = '\u0001', result = {}, - match, params, file, i, param, text, altTexti18n; + match, params, file, i, param; if ( wikitext.indexOf( escapedPipe ) !== -1 ) { return false; } @@ -711,28 +711,24 @@ return false; } result.fileName = file.getMainText(); - altTexti18n = magicWordsI18N.img_alt.split( '=' )[ 0 ]; for ( i = 1; i < params.length; i++ ) { param = params[ i ].toLowerCase(); - if ( param === 'right' || param === magicWordsI18N.img_right ) { - result.fileFloat = magicWordsI18N.img_right; - } else if ( param === 'left' || param === magicWordsI18N.img_left ) { - result.fileFloat = magicWordsI18N.img_left; - } else if ( param === 'none' || param === magicWordsI18N.img_none ) { - result.fileFloat = magicWordsI18N.img_none; - } else if ( param === 'center' || param === 'centre' || param === magicWordsI18N.img_center ) { - result.fileFloat = magicWordsI18N.img_center; - } else if ( param === 'thumbnail' || param === 'thumb' || param === magicWordsI18N.img_thumbnail ) { - result.fileFormat = magicWordsI18N.img_thumbnail; - } else if ( param === 'framed' || param === 'enframed' || param === 'frame' || param === magicWordsI18N.img_framed ) { - result.fileFormat = magicWordsI18N.img_framed; - } else if ( param === 'frameless' || param === magicWordsI18N.img_frameless ) { - result.fileFormat = magicWordsI18N.img_frameless; - } else if ( param.indexOf( 'alt=' ) === 0 || param.indexOf( altTexti18n + '=' ) === 0 ) { - text = param.split( '=' ); - if ( text[ 0 ] === 'alt' || text[ 0 ] === altTexti18n ) { - result.fileAlt = text[ 1 ].trim(); - } + if ( magicWordsI18N.img_right.indexOf( param ) !== -1 ) { + result.fileFloat = magicWordsI18N.img_right[ 0 ]; + } else if ( magicWordsI18N.img_left.indexOf( param ) !== -1 ) { + result.fileFloat = magicWordsI18N.img_left[ 0 ]; + } else if ( magicWordsI18N.img_none.indexOf( param ) !== -1 ) { + result.fileFloat = magicWordsI18N.img_none[ 0 ]; + } else if ( magicWordsI18N.img_center.indexOf( param ) !== -1 ) { + result.fileFloat = magicWordsI18N.img_center[ 0 ]; + } else if ( magicWordsI18N.img_thumbnail.indexOf( param ) !== -1 ) { + result.fileFormat = magicWordsI18N.img_thumbnail[ 0 ]; + } else if ( magicWordsI18N.img_framed.indexOf( param ) !== -1 ) { + result.fileFormat = magicWordsI18N.img_framed[ 0 ]; + } else if ( magicWordsI18N.img_frameless.indexOf( param ) !== -1 ) { + result.fileFormat = magicWordsI18N.img_frameless[ 0 ]; + } else if ( magicWordsI18N.img_alt.indexOf( param.split( '=', 2 )[ 0 ] + '=$1' ) !== -1 ) { + result.fileAlt = param.split( '=', 2 )[ 1 ]; } else if ( /.+px$/.test( param ) ) { result.fileSize = param.replace( /px$/, '' ); } else if ( param === '' ) {