Exclude duplicate srcset urls
Bug: T135550 Change-Id: I956dc155426739d60052a0dc77dafdf0414d5bd7
This commit is contained in:
parent
f59fddc35c
commit
8c32946ca1
4 changed files with 42 additions and 4 deletions
|
|
@ -1020,9 +1020,21 @@ class Html {
|
|||
static function srcSet( array $urls ) {
|
||||
$candidates = [];
|
||||
foreach ( $urls as $density => $url ) {
|
||||
// Cast density to float to strip 'x'.
|
||||
$candidates[] = $url . ' ' . (float)$density . 'x';
|
||||
// Cast density to float to strip 'x', then back to string to serve
|
||||
// as array index.
|
||||
$density = (string)(float)$density;
|
||||
$candidates[$density] = $url;
|
||||
}
|
||||
|
||||
// Remove duplicates that are the same as a smaller value
|
||||
ksort( $candidates, SORT_NUMERIC );
|
||||
$candidates = array_unique( $candidates );
|
||||
|
||||
// Append density info to the url
|
||||
foreach ( $candidates as $density => $url ) {
|
||||
$candidates[$density] = $url . ' ' . $density . 'x';
|
||||
}
|
||||
|
||||
return implode( ", ", $candidates );
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -421,8 +421,10 @@ class ThumbnailImage extends MediaTransformOutput {
|
|||
}
|
||||
|
||||
// Additional densities for responsive images, if specified.
|
||||
if ( !empty( $this->responsiveUrls ) ) {
|
||||
$attribs['srcset'] = Html::srcSet( $this->responsiveUrls );
|
||||
// If any of these urls is the same as src url, it'll be excluded.
|
||||
$responsiveUrls = array_diff( $this->responsiveUrls, [ $this->url ] );
|
||||
if ( !empty( $responsiveUrls ) ) {
|
||||
$attribs['srcset'] = Html::srcSet( $responsiveUrls );
|
||||
}
|
||||
|
||||
Hooks::run( 'ThumbnailBeforeProduceHTML', [ $this, &$attribs, &$linkAttribs ] );
|
||||
|
|
|
|||
|
|
@ -27080,3 +27080,17 @@ Empty LI (T49673)
|
|||
<li>b</li>
|
||||
</ul>
|
||||
!! end
|
||||
|
||||
!! test
|
||||
Thumbnail output
|
||||
!! wikitext
|
||||
[[File:Thumb.png|thumb]]
|
||||
!! html/php+tidy
|
||||
<div class="thumb tright">
|
||||
<div class="thumbinner" style="width:137px;"><a href="/wiki/File:Thumb.png" class="image"><img alt="Thumb.png" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>
|
||||
<div class="thumbcaption">
|
||||
<div class="magnify"><a href="/wiki/File:Thumb.png" class="internal" title="Enlarge"></a></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
!! end
|
||||
|
|
|
|||
|
|
@ -738,6 +738,16 @@ class HtmlTest extends MediaWikiTestCase {
|
|||
'1x.png 1x, 1_5x.png 1.5x, 2x.png 2x',
|
||||
'pixel depth keys may omit a trailing "x"'
|
||||
],
|
||||
[
|
||||
[ '1' => 'small.png', '1.5' => 'large.png', '2' => 'large.png' ],
|
||||
'small.png 1x, large.png 1.5x',
|
||||
'omit larger duplicates'
|
||||
],
|
||||
[
|
||||
[ '1' => 'small.png', '2' => 'large.png', '1.5' => 'large.png' ],
|
||||
'small.png 1x, large.png 1.5x',
|
||||
'omit larger duplicates in irregular order'
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue