From 11e170978ba66d90bebc7659d5f0d16742a86990 Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 31 Jul 2025 11:54:20 +0700 Subject: [PATCH] TF-3918 Fix email text be overlapped in body Signed-off-by: dab246 --- ...lize_line_height_in_style_transformer.dart | 35 +++++++++++++++++++ .../transform_configuration.dart | 9 ++++- 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 core/lib/presentation/utils/html_transformer/dom/normalize_line_height_in_style_transformer.dart diff --git a/core/lib/presentation/utils/html_transformer/dom/normalize_line_height_in_style_transformer.dart b/core/lib/presentation/utils/html_transformer/dom/normalize_line_height_in_style_transformer.dart new file mode 100644 index 000000000..5415daf1a --- /dev/null +++ b/core/lib/presentation/utils/html_transformer/dom/normalize_line_height_in_style_transformer.dart @@ -0,0 +1,35 @@ +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 NormalizeLineHeightInStyleTransformer extends DomTransformer { + const NormalizeLineHeightInStyleTransformer(); + + @override + Future process({ + required Document document, + required DioClient dioClient, + Map? mapUrlDownloadCID, + }) async { + try { + final elements = document.querySelectorAll('[style*="line-height"]'); + + for (final element in elements) { + final originalStyle = element.attributes['style']; + if (originalStyle == null) continue; + + final updatedStyle = originalStyle.replaceAllMapped( + RegExp(r'line-height\s*:\s*1px\s*;?', caseSensitive: false), + (match) => '', + ); + + if (updatedStyle != originalStyle) { + element.attributes['style'] = updatedStyle; + } + } + } catch (e) { + logError('$runtimeType::process: Exception = $e'); + } + } +} diff --git a/core/lib/presentation/utils/html_transformer/transform_configuration.dart b/core/lib/presentation/utils/html_transformer/transform_configuration.dart index 00aa5c405..4cdf9d701 100644 --- a/core/lib/presentation/utils/html_transformer/transform_configuration.dart +++ b/core/lib/presentation/utils/html_transformer/transform_configuration.dart @@ -6,6 +6,7 @@ import 'package:core/presentation/utils/html_transformer/dom/hide_draft_signatur import 'package:core/presentation/utils/html_transformer/dom/block_code_transformers.dart'; import 'package:core/presentation/utils/html_transformer/dom/block_quoted_transformers.dart'; import 'package:core/presentation/utils/html_transformer/dom/image_transformers.dart'; +import 'package:core/presentation/utils/html_transformer/dom/normalize_line_height_in_style_transformer.dart'; import 'package:core/presentation/utils/html_transformer/dom/remove_collapsed_signature_button_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_lazy_loading_image_transformers.dart'; @@ -46,6 +47,7 @@ class TransformConfiguration { const RemoveTooltipLinkTransformer(), const SignatureTransformer(), const RemoveCollapsedSignatureButtonTransformer(), + const NormalizeLineHeightInStyleTransformer(), ]); factory TransformConfiguration.forReplyForwardEmptyEmail() => TransformConfiguration.fromDomTransformers([ @@ -54,7 +56,10 @@ class TransformConfiguration { ]); factory TransformConfiguration.forDraftsEmail() => TransformConfiguration.create( - customDomTransformers: [const ImageTransformer()] + customDomTransformers: [ + const ImageTransformer(), + const NormalizeLineHeightInStyleTransformer(), + ] ); factory TransformConfiguration.forEditDraftsEmail() => TransformConfiguration.create( customDomTransformers: [ @@ -73,6 +78,7 @@ class TransformConfiguration { const ImageTransformer(), const AddLazyLoadingForBackgroundImageTransformer(), const RemoveCollapsedSignatureButtonTransformer(), + const NormalizeLineHeightInStyleTransformer(), ] ); @@ -137,6 +143,7 @@ class TransformConfiguration { const ImageTransformer(), const AddLazyLoadingForBackgroundImageTransformer(), const RemoveCollapsedSignatureButtonTransformer(), + const NormalizeLineHeightInStyleTransformer(), ]; static const List standardTextTransformers = [