Skip to content

Commit

Permalink
Support arrays of Imager X transforms in retconSrcset filter. Fixes #69
Browse files Browse the repository at this point in the history
  • Loading branch information
mmikkel committed Jun 28, 2024
1 parent 9d97745 commit 86e622a
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 7 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/).

## 3.2.0 - 2024-06-28
### Improved
- Improves support for Imager X named transforms for the `retconSrcset` filter. [#69](https://github.com/mmikkel/Retcon-Craft/issues/69)

## 3.1.1 - 2024-06-14
### Fixed
- Fixed a compatibility issue with CKEditor 4.1, where applying a Retcon filter to a CKEditor field's output would cause nested entries to not render
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "mmikkel/retcon",
"description": "Powerful Twig filters for mutating and querying HTML",
"type": "craft-plugin",
"version": "3.1.1",
"version": "3.2.0",
"keywords": [
"craft",
"cms",
Expand Down
16 changes: 13 additions & 3 deletions src/helpers/RetconHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -133,12 +133,12 @@ public static function getImageTransform($transform)
* @param $transform
* @param array|null $imagerTransformDefaults
* @param array|null $imagerConfigOverrides
* @return RetconTransformedImage|null
* @return RetconTransformedImage|RetconTransformedImage[]|null
* @throws Exception
* @throws \craft\errors\ImageException
* @throws \spacecatninja\imagerx\exceptions\ImagerException
*/
public static function getTransformedImage(string $src, $transform, ?array $imagerTransformDefaults = null, ?array $imagerConfigOverrides = null): ?RetconTransformedImage
public static function getTransformedImage(string $src, $transform, ?array $imagerTransformDefaults = null, ?array $imagerConfigOverrides = null): RetconTransformedImage|array|null
{

// TODO: In Retcon 3.0, we should try to get the asset via RetconHelper::getAssetFromRef(), and transform that directly
Expand Down Expand Up @@ -167,7 +167,17 @@ public static function getTransformedImage(string $src, $transform, ?array $imag
return null;
}
if (is_array($transformedImage)) {
$transformedImage = $transformedImage[0] ?? null;
return array_reduce($transformedImage, static function (array $carry, $transformedImage) {
if (empty($transformedImage)) {
return $carry;
}
$carry[] = new RetconTransformedImage([
'url' => $transformedImage->getUrl(),
'width' => $transformedImage->getWidth(),
'height' => $transformedImage->getHeight(),
]);
return $carry;
}, []) ?: null;
}
return new RetconTransformedImage([
'url' => $transformedImage->getUrl(),
Expand Down
16 changes: 13 additions & 3 deletions src/services/RetconService.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,10 +108,15 @@ public function transform($input, $transform, $selector = null, ?array $imagerTr
continue;
}

if (!$transformedImage = RetconHelper::getTransformedImage($src, $transform, $imagerTransformDefaults, $imagerConfigOverrides)) {
$transformedImage = RetconHelper::getTransformedImage($src, $transform, $imagerTransformDefaults, $imagerConfigOverrides);
if (empty($transformedImage)) {
continue;
}

if (is_array($transformedImage)) {
$transformedImage = $transformedImage[0];
}

$node->setAttribute('src', $transformedImage->url);

// Should we set width and height attributes?
Expand Down Expand Up @@ -212,9 +217,14 @@ public function srcset($input, $transforms, $selector = null, $sizes = null, ?bo

// Get transformed images
$transformedImages = \array_reduce($transforms, static function ($carry, $transform) use ($src, $imagerTransformDefaults, $imagerConfigOverrides) {
if ($transformedImage = RetconHelper::getTransformedImage($src, $transform, $imagerTransformDefaults, $imagerConfigOverrides)) {
$carry[] = $transformedImage;
$transformedImage = RetconHelper::getTransformedImage($src, $transform, $imagerTransformDefaults, $imagerConfigOverrides);
if (empty($transformedImage)) {
return $carry;
}
if (is_array($transformedImage)) {
return array_merge($carry, $transformedImage);
}
$carry[] = $transformedImage;
return $carry;
}, []);

Expand Down

0 comments on commit 86e622a

Please sign in to comment.