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 ceb4be419..350c45443 100644
--- a/core/lib/presentation/utils/html_transformer/dom/link_transformers.dart
+++ b/core/lib/presentation/utils/html_transformer/dom/link_transformers.dart
@@ -1,6 +1,7 @@
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 EnsureRelationNoReferrerTransformer extends DomTransformer {
@@ -17,6 +18,21 @@ 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}');
}));
}
+
+ String textHasToolTip(String text, String? url) {
+ return '''
+ ${text.isNotEmpty ? text : url}
+ $url
+ ''';
+ }
}
\ No newline at end of file
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 30abc151b..6d0d354b7 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
@@ -93,15 +93,22 @@ class _HtmlContentViewerOnWebState extends State {
}
function handleOnClickLink(e) {
- var link = e.target;
+ let link = e.target;
+ let textContent = e.target.textContent;
console.log("handleOnClickLink: " + link);
- if (link && isValidHttpUrl(link)) {
+ console.log("handleOnClickLink: " + textContent);
+ if (link && isValidUrl(link)) {
window.parent.postMessage(JSON.stringify({"view": "$createdViewId", "type": "toDart: OpenLink", "url": "" + link}), "*");
e.preventDefault();
+ } else if (textContent && isValidUrl(textContent)) {
+ window.parent.postMessage(JSON.stringify({"view": "$createdViewId", "type": "toDart: OpenLink", "url": "" + textContent}), "*");
+ e.preventDefault();
+ } else {
+ e.preventDefault();
}
}
- function isValidHttpUrl(string) {
+ function isValidUrl(string) {
let url;
try {
@@ -115,6 +122,30 @@ class _HtmlContentViewerOnWebState extends State {
''';
+ final tooltipLinkCss = '''
+ .tooltip {
+ position: relative;
+ display: inline-block;
+ }
+ .tooltip .tooltiptext {
+ visibility: hidden;
+ max-width: 400px;
+ background-color: black;
+ color: #fff;
+ text-align: center;
+ border-radius: 6px;
+ padding: 5px 8px 5px 8px;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ position: absolute;
+ z-index: 1;
+ }
+ .tooltip:hover .tooltiptext {
+ visibility: visible;
+ }
+ ''';
+
final htmlTemplate = '''
@@ -143,6 +174,7 @@ class _HtmlContentViewerOnWebState extends State {
padding: 13px;
margin: 0px;
}
+ $tooltipLinkCss
$htmlScripts