From dd5ea7ab4ef5fd7553fef15ebbb13504d0d881ad Mon Sep 17 00:00:00 2001 From: Inverle Date: Tue, 3 Jun 2025 00:14:50 +0200 Subject: Include remaining tags/attributes for lazy loading (#7636) * Include remaining tags/attributes for lazy loading * Suggested change --- lib/lib_rss.php | 16 ++++++++++++---- p/scripts/main.js | 8 ++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/lib/lib_rss.php b/lib/lib_rss.php index bcd8e51b0..f76ac49e9 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -368,7 +368,11 @@ function customSimplePie(array $attributes = [], array $curl_options = []): \Sim 'iframe' => 'src', 'img' => [ 'longdesc', - 'src' + 'src', + ], + 'image' => [ + 'longdesc', + 'src', ], 'input' => 'src', 'ins' => 'cite', @@ -632,16 +636,20 @@ function validateEmailAddress(string $email): bool { /** * Add support of image lazy loading - * Move content from src attribute to data-original + * Move content from src/poster attribute to data-original * @param string $content is the text we want to parse */ function lazyimg(string $content): string { return preg_replace([ - '/<((?:img|iframe)[^>]+?)src="([^"]+)"([^>]*)>/i', - "/<((?:img|iframe)[^>]+?)src='([^']+)'([^>]*)>/i", + '/<((?:img|image|iframe)[^>]+?)src="([^"]+)"([^>]*)>/i', + "/<((?:img|image|iframe)[^>]+?)src='([^']+)'([^>]*)>/i", + '/<((?:video)[^>]+?)poster="([^"]+)"([^>]*)>/i', + "/<((?:video)[^>]+?)poster='([^']+)'([^>]*)>/i", ], [ '<$1src="' . Minz_Url::display('/themes/icons/grey.gif') . '" data-original="$2"$3>', "<$1src='" . Minz_Url::display('/themes/icons/grey.gif') . "' data-original='$2'$3>", + '<$1poster="' . Minz_Url::display('/themes/icons/grey.gif') . '" data-original="$2"$3>', + "<$1poster='" . Minz_Url::display('/themes/icons/grey.gif') . "' data-original='$2'$3>", ], $content ) ?? ''; diff --git a/p/scripts/main.js b/p/scripts/main.js index c0e31ef98..3e825ff96 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -431,8 +431,12 @@ const freshrssOpenArticleEvent = document.createEvent('Event'); freshrssOpenArticleEvent.initEvent('freshrss:openArticle', true, true); function loadLazyImages(rootElement) { - rootElement.querySelectorAll('img[data-original], iframe[data-original]').forEach(function (el) { - el.src = el.getAttribute('data-original'); + rootElement.querySelectorAll('img[data-original], iframe[data-original], video[data-original]').forEach(function (el) { + if (el.tagName === 'VIDEO') { + el.poster = el.getAttribute('data-original'); + } else { + el.src = el.getAttribute('data-original'); + } el.removeAttribute('data-original'); }); } -- cgit v1.2.3