From 697e01005d3dfc7f23f3a64a8a68cc51ca83ad65 Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 4 Apr 2024 10:01:59 +0700 Subject: [PATCH] TF-2772 Fix print a long mail start with a blank page --- ...max_width_in_image_style_transformers.dart | 24 +++++++++++++++++++ ...remove_style_tag_outside_transformers.dart | 20 ++++++++++++++++ .../transform_configuration.dart | 4 ++++ 3 files changed, 48 insertions(+) create mode 100644 core/lib/presentation/utils/html_transformer/dom/remove_max_width_in_image_style_transformers.dart create mode 100644 core/lib/presentation/utils/html_transformer/dom/remove_style_tag_outside_transformers.dart diff --git a/core/lib/presentation/utils/html_transformer/dom/remove_max_width_in_image_style_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/remove_max_width_in_image_style_transformers.dart new file mode 100644 index 000000000..d1ac864cc --- /dev/null +++ b/core/lib/presentation/utils/html_transformer/dom/remove_max_width_in_image_style_transformers.dart @@ -0,0 +1,24 @@ +import 'package:core/data/network/dio_client.dart'; +import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart'; +import 'package:html/dom.dart'; + +class RemoveMaxWidthInImageStyleTransformer extends DomTransformer { + + const RemoveMaxWidthInImageStyleTransformer(); + + @override + Future process({ + required Document document, + required DioClient dioClient, + Map? mapUrlDownloadCID, + }) async { + final imageElements = document.querySelectorAll('img[style*="max-width"]'); + await Future.wait(imageElements.map((imageElement) async { + var exStyle = imageElement.attributes['style']; + if (exStyle != null) { + exStyle = exStyle.replaceAll('max-width:100%;', ''); + imageElement.attributes['style'] = exStyle; + } + })); + } +} \ No newline at end of file diff --git a/core/lib/presentation/utils/html_transformer/dom/remove_style_tag_outside_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/remove_style_tag_outside_transformers.dart new file mode 100644 index 000000000..e275ef7fa --- /dev/null +++ b/core/lib/presentation/utils/html_transformer/dom/remove_style_tag_outside_transformers.dart @@ -0,0 +1,20 @@ +import 'package:core/data/network/dio_client.dart'; +import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart'; +import 'package:html/dom.dart'; + +class RemoveStyleTagOutsideTransformer extends DomTransformer { + + const RemoveStyleTagOutsideTransformer(); + + @override + Future process({ + required Document document, + required DioClient dioClient, + Map? mapUrlDownloadCID, + }) async { + final styleElements = document.querySelectorAll('style'); + await Future.wait(styleElements.map((element) async { + element.remove(); + })); + } +} \ No newline at end of file diff --git a/core/lib/presentation/utils/html_transformer/transform_configuration.dart b/core/lib/presentation/utils/html_transformer/transform_configuration.dart index 7519af662..9e1b03cd0 100644 --- a/core/lib/presentation/utils/html_transformer/transform_configuration.dart +++ b/core/lib/presentation/utils/html_transformer/transform_configuration.dart @@ -9,6 +9,8 @@ import 'package:core/presentation/utils/html_transformer/dom/blockquoted_transfo import 'package:core/presentation/utils/html_transformer/dom/image_transformers.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_max_width_in_image_style_transformers.dart'; +import 'package:core/presentation/utils/html_transformer/dom/remove_style_tag_outside_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'; @@ -66,6 +68,8 @@ class TransformConfiguration { const RemoveTooltipLinkTransformer(), const RemoveLazyLoadingForBackgroundImageTransformer(), const RemoveCollapsedSignatureButtonTransformer(), + const RemoveStyleTagOutsideTransformer(), + const RemoveMaxWidthInImageStyleTransformer(), ]); /// Provides easy access to a standard configuration that does not block external images.