return null;
}
+ /**
+ * Determines render language from image parameters
+ *
+ * @param array $params
+ * @return string
+ */
+ protected function getLanguageFromParams( array $params ) {
+ return $params['lang'] ?? $params['targetlang'] ?? 'en';
+ }
+
/**
* What language to render file in if none selected
*
* @param array &$params
* @return bool
*/
- function normaliseParams( $image, &$params ) {
- global $wgSVGMaxSize;
- if ( !parent::normaliseParams( $image, $params ) ) {
- return false;
+ public function normaliseParams( $image, &$params ) {
+ if ( parent::normaliseParams( $image, $params ) ) {
+ $params = $this->normaliseParamsInternal( $image, $params );
+ return true;
}
+
+ return false;
+ }
+
+ /**
+ * Code taken out of normaliseParams() for testability
+ *
+ * @since 1.33
+ *
+ * @param File $image
+ * @param array $params
+ * @return array Modified $params
+ */
+ protected function normaliseParamsInternal( $image, $params ) {
+ global $wgSVGMaxSize;
+
# Don't make an image bigger than wgMaxSVGSize on the smaller side
if ( $params['physicalWidth'] <= $params['physicalHeight'] ) {
if ( $params['physicalWidth'] > $wgSVGMaxSize ) {
$params['physicalHeight'] = $wgSVGMaxSize;
}
}
+ // To prevent the proliferation of thumbnails in languages not present in SVGs, unless
+ // explicitly forced by user.
+ if ( isset( $params['targetlang'] ) ) {
+ if ( !$image->getMatchedLanguage( $params['targetlang'] ) ) {
+ unset( $params['targetlang'] );
+ }
+ }
- return true;
+ return $params;
}
/**
$clientHeight = $params['height'];
$physicalWidth = $params['physicalWidth'];
$physicalHeight = $params['physicalHeight'];
- $lang = $params['lang'] ?? $this->getDefaultRenderLanguage( $image );
+ $lang = $this->getLanguageFromParams( $params );
if ( $flags & self::TRANSFORM_LATER ) {
return new ThumbnailImage( $image, $dstUrl, $dstPath, $params );
*/
public function makeParamString( $params ) {
$lang = '';
- if ( isset( $params['lang'] ) && $params['lang'] !== 'en' ) {
- $lang = 'lang' . strtolower( $params['lang'] ) . '-';
+ $code = $this->getLanguageFromParams( $params );
+ if ( $code !== 'en' ) {
+ $lang = 'lang' . strtolower( $code ) . '-';
}
if ( !isset( $params['width'] ) ) {
return false;