From 95edd63c040c102fcc523a4572d65c5b88b94610 Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 17 Oct 2023 09:45:07 +0700 Subject: [PATCH] Remove lazy loading background-image on composer Signed-off-by: dab246 (cherry picked from commit ef5da059628de3e1de6c240836af9488fc9d3cfb) --- ...ing_for_background_image_transformers.dart | 32 +++++++++++++++++++ .../transform_configuration.dart | 2 ++ .../presentation/composer_controller.dart | 2 +- 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 core/lib/presentation/utils/html_transformer/dom/remove_lazy_loading_for_background_image_transformers.dart diff --git a/core/lib/presentation/utils/html_transformer/dom/remove_lazy_loading_for_background_image_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/remove_lazy_loading_for_background_image_transformers.dart new file mode 100644 index 000000000..3a397b960 --- /dev/null +++ b/core/lib/presentation/utils/html_transformer/dom/remove_lazy_loading_for_background_image_transformers.dart @@ -0,0 +1,32 @@ +import 'package:core/data/network/dio_client.dart'; +import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart'; +import 'package:core/utils/app_logger.dart'; +import 'package:html/dom.dart'; + +class RemoveLazyLoadingForBackgroundImageTransformer extends DomTransformer { + const RemoveLazyLoadingForBackgroundImageTransformer(); + + @override + Future process({ + required Document document, + required DioClient dioClient, + Map? mapUrlDownloadCID, + }) async { + final elements = document.querySelectorAll('[lazy]'); + log('RemoveLazyLoadingForBackgroundImageTransformer::process:elements: ${elements.length}'); + await Future.wait(elements.map((element) async { + var exStyle = element.attributes['style']; + final dataSrc = element.attributes['data-src']; + final backgroundImgUrl = 'background-image:url($dataSrc);'; + if (exStyle != null) { + exStyle = '$exStyle;$backgroundImgUrl'; + element.attributes['style'] = exStyle; + } else { + element.attributes['style'] = backgroundImgUrl; + } + element.attributes.remove('data-src'); + element.attributes.remove('lazy'); + log('RemoveLazyLoadingForBackgroundImageTransformer::process:NEW_ELEMENT: ${element.outerHtml}'); + })); + } +} diff --git a/core/lib/presentation/utils/html_transformer/transform_configuration.dart b/core/lib/presentation/utils/html_transformer/transform_configuration.dart index 12295c42b..2c61271b6 100644 --- a/core/lib/presentation/utils/html_transformer/transform_configuration.dart +++ b/core/lib/presentation/utils/html_transformer/transform_configuration.dart @@ -7,6 +7,7 @@ import 'package:core/presentation/utils/html_transformer/dom/add_tooltip_link_tr import 'package:core/presentation/utils/html_transformer/dom/blockcode_transformers.dart'; import 'package:core/presentation/utils/html_transformer/dom/blockquoted_transformers.dart'; import 'package:core/presentation/utils/html_transformer/dom/image_transformers.dart'; +import 'package:core/presentation/utils/html_transformer/dom/remove_lazy_loading_for_background_image_transformers.dart'; import 'package:core/presentation/utils/html_transformer/dom/remove_tooltip_link_transformers.dart'; import 'package:core/presentation/utils/html_transformer/dom/script_transformers.dart'; import 'package:core/presentation/utils/html_transformer/dom/sigature_transformers.dart'; @@ -38,6 +39,7 @@ class TransformConfiguration { if (PlatformInfo.isWeb) const RemoveTooltipLinkTransformer(), const SignatureTransformer(), + const RemoveLazyLoadingForBackgroundImageTransformer(), ]); factory TransformConfiguration.forDraftsEmail() => TransformConfiguration.empty(); diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 359060e5e..053bec7d5 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -1418,7 +1418,7 @@ class ComposerController extends BaseController { accountId, emailId, mailboxDashBoardController.baseDownloadUrl, - TransformConfiguration.empty() + TransformConfiguration.forDraftsEmail() )); } }