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;