Skip to content

Commit

Permalink
TF-2903 Handle mailto link on web
Browse files Browse the repository at this point in the history
  • Loading branch information
dab246 committed Jun 18, 2024
1 parent 09eb6f7 commit 1078260
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,11 @@ import 'package:core/presentation/utils/html_transformer/sanitize_url.dart';
import 'package:core/utils/html/html_template.dart';
import 'package:html/dom.dart';

class SanitizeTagAInHtmlTransformer extends DomTransformer {
class SanitizeHyperLinkTagInHtmlTransformer extends DomTransformer {
final _sanitizeUrl = SanitizeUrl();
final bool useTooltip;
SanitizeTagAInHtmlTransformer({this.useTooltip = false});

SanitizeHyperLinkTagInHtmlTransformer({this.useTooltip = false});

@override
Future<void> process({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import 'package:core/presentation/utils/html_transformer/dom/remove_lazy_loading
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/sanitize_tag_a_in_html_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/sanitize_hyper_link_tag_in_html_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/script_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/signature_transformers.dart';
import 'package:core/presentation/utils/html_transformer/text/sanitize_autolink_html_transformers.dart';
Expand Down Expand Up @@ -52,7 +52,7 @@ class TransformConfiguration {
const RemoveScriptTransformer(),
const BlockQuotedTransformer(),
const BlockCodeTransformer(),
SanitizeTagAInHtmlTransformer(useTooltip: true),
SanitizeHyperLinkTagInHtmlTransformer(useTooltip: true),
const ImageTransformer(),
const AddLazyLoadingForBackgroundImageTransformer(),
const RemoveCollapsedSignatureButtonTransformer(),
Expand Down Expand Up @@ -102,7 +102,7 @@ class TransformConfiguration {
const RemoveScriptTransformer(),
const BlockQuotedTransformer(),
const BlockCodeTransformer(),
SanitizeTagAInHtmlTransformer(),
SanitizeHyperLinkTagInHtmlTransformer(),
const ImageTransformer(),
const AddLazyLoadingForBackgroundImageTransformer(),
const RemoveCollapsedSignatureButtonTransformer(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,6 @@ class _HtmlContentViewerOnWebState extends State<HtmlContentViewerOnWeb> {
final webViewActionScripts = '''
<script type="text/javascript">
window.parent.addEventListener('message', handleMessage, false);
window.addEventListener('click', handleOnClickLink, true);
window.addEventListener('load', handleOnLoad);
window.addEventListener('pagehide', (event) => {
window.parent.removeEventListener('message', handleMessage, false);
Expand Down Expand Up @@ -174,34 +173,21 @@ class _HtmlContentViewerOnWebState extends State<HtmlContentViewerOnWeb> {
}
}
function handleOnClickLink(e) {
let link = e.target;
let textContent = e.target.textContent;
if (link && isValidMailtoLink(link)) {
window.parent.postMessage(JSON.stringify({"view": "$_createdViewId", "type": "toDart: OpenLink", "url": "" + link}), "*");
e.preventDefault();
} else if (textContent && isValidMailtoLink(textContent)) {
window.parent.postMessage(JSON.stringify({"view": "$_createdViewId", "type": "toDart: OpenLink", "url": "" + textContent}), "*");
e.preventDefault();
}
function handleOnClickEmailLink(e) {
var href = this.href;
window.parent.postMessage(JSON.stringify({"view": "$_createdViewId", "type": "toDart: OpenLink", "url": "" + href}), "*");
e.preventDefault();
}
function isValidMailtoLink(string) {
let url;
try {
url = new URL(string);
} catch (_) {
return false;
}
return url.protocol === "mailto:";
}
function handleOnLoad() {
window.parent.postMessage(JSON.stringify({"view": "$_createdViewId", "message": "$iframeOnLoadMessage"}), "*");
window.parent.postMessage(JSON.stringify({"view": "$_createdViewId", "type": "toIframe: getHeight"}), "*");
window.parent.postMessage(JSON.stringify({"view": "$_createdViewId", "type": "toIframe: getWidth"}), "*");
var emailLinks = document.querySelectorAll('a[href^="mailto:"]');
for(var i=0; i < emailLinks.length; i++){
emailLinks[i].addEventListener('click', handleOnClickEmailLink);
}
}
</script>
''';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
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/sanitize_tag_a_in_html_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/sanitize_hyper_link_tag_in_html_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/script_transformers.dart';
import 'package:core/presentation/utils/html_transformer/html_transform.dart';
import 'package:core/presentation/utils/html_transformer/transform_configuration.dart';
Expand Down Expand Up @@ -66,7 +66,7 @@ class IdentityDataSourceImpl extends IdentityDataSource {
const RemoveScriptTransformer(),
const BlockQuotedTransformer(),
const BlockCodeTransformer(),
SanitizeTagAInHtmlTransformer(useTooltip: PlatformInfo.isWeb),
SanitizeHyperLinkTagInHtmlTransformer(useTooltip: PlatformInfo.isWeb),
const ImageTransformer(),
]));
return signatureUnescape;
Expand Down

0 comments on commit 1078260

Please sign in to comment.