From c4657c46619471cb667731a47fd0985e27d1d800 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Sat, 23 Sep 2023 22:43:31 -0400 Subject: [PATCH] Add support for allocated height for inline images --- src/Model/Item.php | 23 +++++++++++++++-------- src/Model/Post/Media.php | 17 +++++++++++++++++ 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/Model/Item.php b/src/Model/Item.php index 31cc0ac875..6eba41392b 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -33,6 +33,7 @@ use Friendica\Core\Worker; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Post\Category; +use Friendica\Model\Post\Media; use Friendica\Network\HTTPException\InternalServerErrorException; use Friendica\Protocol\Activity; use Friendica\Protocol\ActivityPub; @@ -3344,7 +3345,19 @@ class Item if (empty($attachment['preview']) || ($attachment['type'] != Post\Media::IMAGE)) { continue; } - $s = str_replace('(.*?)">#'; + + $s = preg_replace_callback($pattern, function () use ($attachment, $uri_id) { + return Renderer::replaceMacros(Renderer::getMarkupTemplate('content/image.tpl'), [ + '$image' => [ + 'src' => $attachment['url'], + 'uri_id' => $uri_id, + 'attachment' => $attachment, + ], + '$allocated_height' => Media::getAllocatedHeightByMedia($attachment), + ]); + }, $s); } return $s; } @@ -3513,15 +3526,9 @@ class Item if (count($images) > 1) { $media = self::makeImageGrid($images); } elseif (count($images) == 1) { - if (!empty($images[0]['attachment']['preview-height'])) { - $allocated_height = (100 * $images[0]['attachment']['preview-height'] / $images[0]['attachment']['preview-width']) . '%'; - } else { - $allocated_height = (100 * $images[0]['attachment']['height'] / $images[0]['attachment']['width']) . '%'; - } - $media = Renderer::replaceMacros(Renderer::getMarkupTemplate('content/image.tpl'), [ '$image' => $images[0], - '$allocated_height' => $allocated_height, + '$allocated_height' => Media::getAllocatedHeightByMedia($images[0]['attachment']), ]); } diff --git a/src/Model/Post/Media.php b/src/Model/Post/Media.php index a0d55b6e00..23370de3f4 100644 --- a/src/Model/Post/Media.php +++ b/src/Model/Post/Media.php @@ -1164,4 +1164,21 @@ class Media } return $url . $id; } + + /** + * Computes the allocated height value used in the content/image.tpl template based on a post-media record + * + * @param array $media A post-media record array + * @return string + */ + public static function getAllocatedHeightByMedia(array $media): string + { + if (!empty($media['preview-height'])) { + $allocated_height = (100 * $media['preview-height'] / $media['preview-width']) . '%'; + } else { + $allocated_height = (100 * $media['height'] / $media['width']) . '%'; + } + + return $allocated_height; + } }