From ec1e3fb0753c7b68a20de7de9a623fbe5110dc15 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 13 Apr 2022 11:06:19 +0700 Subject: [PATCH] Fix show view flyover for links in Email Detail --- .../dom/link_transformers.dart | 32 ++++++++++++------- .../dom/meta_transformers.dart | 4 +-- .../transform_configuration.dart | 4 +-- .../html_content_viewer_on_web_widget.dart | 4 --- 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/core/lib/presentation/utils/html_transformer/dom/link_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/link_transformers.dart index 350c45443..2210f8f34 100644 --- a/core/lib/presentation/utils/html_transformer/dom/link_transformers.dart +++ b/core/lib/presentation/utils/html_transformer/dom/link_transformers.dart @@ -4,9 +4,9 @@ import 'package:core/presentation/utils/html_transformer/base/dom_transformer.da import 'package:core/utils/app_logger.dart'; import 'package:html/dom.dart'; -class EnsureRelationNoReferrerTransformer extends DomTransformer { +class LinkTransformer extends DomTransformer { - const EnsureRelationNoReferrerTransformer(); + const LinkTransformer(); @override Future process( @@ -18,20 +18,28 @@ class EnsureRelationNoReferrerTransformer extends DomTransformer { final linkElements = document.getElementsByTagName('a'); await Future.wait(linkElements.map((linkElement) async { linkElement.attributes['rel'] = 'noopener noreferrer'; - final tagClass = linkElement.attributes['class']; - linkElement.attributes['class'] = '$tagClass tooltip'; - final url = linkElement.attributes['href']; - final text = linkElement.text; - if (url != null && url.isNotEmpty) { - linkElement.innerHtml = textHasToolTip(text, url); - } - log('EnsureRelationNoReferrerTransformer::process(): ${linkElement.outerHtml}'); + _addToolTipWhenHoverLink(linkElement); })); } - String textHasToolTip(String text, String? url) { + void _addToolTipWhenHoverLink(Element element) { + log('LinkTransformer::_addToolTipWhenHoverLink(): Before: ${element.outerHtml}'); + final url = element.attributes['href']; + final text = element.text; + final children = element.children; + if (children.isEmpty && text.isNotEmpty && url?.isNotEmpty == true) { + final innerHtml = element.innerHtml; + final tagClass = element.attributes['class']; + element.attributes['class'] = '$tagClass tooltip'; + if (text.isNotEmpty && url != null && url.isNotEmpty) { + element.innerHtml = innerHtml + textHasToolTip(url); + } + log('LinkTransformer::_addToolTipWhenHoverLink(): After: ${element.outerHtml}'); + } + } + + String textHasToolTip(String url) { return ''' - ${text.isNotEmpty ? text : url} $url '''; } diff --git a/core/lib/presentation/utils/html_transformer/dom/meta_transformers.dart b/core/lib/presentation/utils/html_transformer/dom/meta_transformers.dart index 2287fa269..0fe0befc9 100644 --- a/core/lib/presentation/utils/html_transformer/dom/meta_transformers.dart +++ b/core/lib/presentation/utils/html_transformer/dom/meta_transformers.dart @@ -3,14 +3,14 @@ import 'package:core/data/network/dio_client.dart'; import 'package:html/dom.dart'; import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart'; -class ViewPortTransformer extends DomTransformer { +class MetaTransformer extends DomTransformer { static final Element _viewPortMetaElement = Element.html( ''); static final Element _contentTypeMetaElement = Element.html( ''); - const ViewPortTransformer(); + const MetaTransformer(); @override Future process( diff --git a/core/lib/presentation/utils/html_transformer/transform_configuration.dart b/core/lib/presentation/utils/html_transformer/transform_configuration.dart index 45d588ba1..a7b66c43a 100644 --- a/core/lib/presentation/utils/html_transformer/transform_configuration.dart +++ b/core/lib/presentation/utils/html_transformer/transform_configuration.dart @@ -58,10 +58,10 @@ class TransformConfiguration { static const int? standardMaxImageWidth = null; static const List standardDomTransformers = [ - ViewPortTransformer(), + MetaTransformer(), RemoveScriptTransformer(), ImageTransformer(), - EnsureRelationNoReferrerTransformer(), + LinkTransformer(), BlockQuotedTransformer(), ]; diff --git a/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart b/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart index 6d0d354b7..f62cf5b9c 100644 --- a/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart +++ b/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart @@ -123,10 +123,6 @@ class _HtmlContentViewerOnWebState extends State { '''; final tooltipLinkCss = ''' - .tooltip { - position: relative; - display: inline-block; - } .tooltip .tooltiptext { visibility: hidden; max-width: 400px;