TF-2047 Handle sanitize and autolink html for input text

(cherry picked from commit 9078ef1e6fe6bf5f05c98a85f694600cfcb2129d)
This commit is contained in:
dab246
2023-07-31 16:45:39 +07:00
committed by Dat Vu
parent 4731add0e5
commit a00c5d8230
2 changed files with 65 additions and 78 deletions
@@ -0,0 +1,65 @@
import 'dart:convert';
import 'package:core/utils/app_logger.dart';
import 'package:linkify/linkify.dart';
class SanitizeAutolinkFilter {
final HtmlEscape htmlEscape;
final _linkifyOption = const LinkifyOptions(
humanize: true,
looseUrl: true,
defaultToHttps: true,
removeWww: true
);
final _linkifier = <Linkifier>[
const EmailLinkifier(),
const UrlLinkifier()
];
SanitizeAutolinkFilter(this.htmlEscape);
String process(String inputText) {
if (inputText.isEmpty) {
return '';
}
final elements = linkify(
inputText,
options: _linkifyOption,
linkifiers: _linkifier
);
log('AutolinkFilter::process:elements: $elements');
final htmlTextBuffer = StringBuffer();
for (var element in elements) {
if (element is TextElement) {
final escapedHtml = htmlEscape.convert(element.text);
htmlTextBuffer.write(escapedHtml);
} else if (element is EmailElement) {
final emailLinkTag = _buildEmailLinkTag(
mailToLink: element.url,
value: element.text
);
htmlTextBuffer.write(emailLinkTag);
} else if (element is UrlElement) {
final urlLinkTag = _buildUrlLinkTag(
urlLink: element.url,
value: element.text
);
htmlTextBuffer.write(urlLinkTag);
}
}
return htmlTextBuffer.toString();
}
String _buildUrlLinkTag({required String urlLink, required String value}) {
return '<a href="$urlLink" target="_blank">$value</a>';
}
String _buildEmailLinkTag({required String mailToLink, required String value}) {
return '<a href="$mailToLink">$value</a>';
}
}