Skip to content

Commit 2fed4b8

Browse files
committed
Support arrays of Imager X transforms in retconSrcset filter. Fixes #69
1 parent 7b24036 commit 2fed4b8

File tree

4 files changed

+31
-7
lines changed

4 files changed

+31
-7
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Retcon Changelog
22

3+
## 2.8.0 - 2024-06-28
4+
### Improved
5+
- Improves support for Imager X named transforms for the `retconSrcset` filter. [#69](https://github.com/mmikkel/Retcon-Craft/issues/69)
6+
37
## 2.7.5 - 2023-11-11
48

59
### Fixed

composer.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "mmikkel/retcon",
33
"description": "Powerful Twig filters for mutating and querying HTML",
44
"type": "craft-plugin",
5-
"version": "2.7.5",
5+
"version": "2.8.0",
66
"keywords": [
77
"craft",
88
"cms",

src/helpers/RetconHelper.php

+13-3
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,12 @@ public static function getImageTransform($transform)
135135
* @param $transform
136136
* @param array|null $imagerTransformDefaults
137137
* @param array|null $imagerConfigOverrides
138-
* @return RetconTransformedImage|null
138+
* @return RetconTransformedImage|RetconTransformedImage[]|null
139139
* @throws Exception
140140
* @throws \craft\errors\ImageException
141141
* @throws \spacecatninja\imagerx\exceptions\ImagerException
142142
*/
143-
public static function getTransformedImage(string $src, $transform, ?array $imagerTransformDefaults = null, ?array $imagerConfigOverrides = null): ?RetconTransformedImage
143+
public static function getTransformedImage(string $src, $transform, ?array $imagerTransformDefaults = null, ?array $imagerConfigOverrides = null): RetconTransformedImage|array|null
144144
{
145145

146146
// TODO: In Retcon 3.0, we should try to get the asset via RetconHelper::getAssetFromRef(), and transform that directly
@@ -169,7 +169,17 @@ public static function getTransformedImage(string $src, $transform, ?array $imag
169169
return null;
170170
}
171171
if (is_array($transformedImage)) {
172-
$transformedImage = $transformedImage[0] ?? null;
172+
return array_reduce($transformedImage, static function (array $carry, $transformedImage) {
173+
if (empty($transformedImage)) {
174+
return $carry;
175+
}
176+
$carry[] = new RetconTransformedImage([
177+
'url' => $transformedImage->getUrl(),
178+
'width' => $transformedImage->getWidth(),
179+
'height' => $transformedImage->getHeight(),
180+
]);
181+
return $carry;
182+
}, []) ?: null;
173183
}
174184
return new RetconTransformedImage([
175185
'url' => $transformedImage->getUrl(),

src/services/RetconService.php

+13-3
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,15 @@ public function transform($input, $transform, $selector = null, ?array $imagerTr
125125
continue;
126126
}
127127

128-
if (!$transformedImage = RetconHelper::getTransformedImage($src, $transform, $imagerTransformDefaults, $imagerConfigOverrides)) {
128+
$transformedImage = RetconHelper::getTransformedImage($src, $transform, $imagerTransformDefaults, $imagerConfigOverrides);
129+
if (empty($transformedImage)) {
129130
continue;
130131
}
131132

133+
if (is_array($transformedImage)) {
134+
$transformedImage = $transformedImage[0];
135+
}
136+
132137
$node->setAttribute('src', $transformedImage->url);
133138

134139
// Should we set width and height attributes?
@@ -229,9 +234,14 @@ public function srcset($input, $transforms, $selector = null, $sizes = null, ?bo
229234

230235
// Get transformed images
231236
$transformedImages = \array_reduce($transforms, static function ($carry, $transform) use ($src, $imagerTransformDefaults, $imagerConfigOverrides) {
232-
if ($transformedImage = RetconHelper::getTransformedImage($src, $transform, $imagerTransformDefaults, $imagerConfigOverrides)) {
233-
$carry[] = $transformedImage;
237+
$transformedImage = RetconHelper::getTransformedImage($src, $transform, $imagerTransformDefaults, $imagerConfigOverrides);
238+
if (empty($transformedImage)) {
239+
return $carry;
240+
}
241+
if (is_array($transformedImage)) {
242+
return array_merge($carry, $transformedImage);
234243
}
244+
$carry[] = $transformedImage;
235245
return $carry;
236246
}, []);
237247

0 commit comments

Comments
 (0)