Skip to content

Commit

Permalink
TF-2903 Handling of 3D links
Browse files Browse the repository at this point in the history
  • Loading branch information
dab246 committed Jun 13, 2024
1 parent 052ff0b commit 09eb6f7
Show file tree
Hide file tree
Showing 9 changed files with 79 additions and 90 deletions.
1 change: 0 additions & 1 deletion core/lib/core.dart
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ export 'presentation/utils/style_utils.dart';
export 'presentation/utils/app_toast.dart';
export 'presentation/utils/html_transformer/html_transform.dart';
export 'presentation/utils/html_transformer/transform_configuration.dart';
export 'presentation/utils/html_transformer/dom/add_tooltip_link_transformers.dart';
export 'data/utils/device_manager.dart';
export 'utils/app_logger.dart';
export 'utils/benchmark.dart';
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import 'package:core/data/network/dio_client.dart';
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
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 {
final _sanitizeUrl = SanitizeUrl();
final bool useTooltip;

SanitizeTagAInHtmlTransformer({this.useTooltip = false});

@override
Future<void> process({
required Document document,
required DioClient dioClient,
Map<String, String>? mapUrlDownloadCID,
}) async {
final elements = document.querySelectorAll('a');
await Future.wait(elements.map((element) async {
_addToolTipWhenHoverLink(element);
_addBlankForTargetProperty(element);
_addNoReferrerForRelProperty(element);
}));
}

void _addToolTipWhenHoverLink(Element element) {
final url = element.attributes['href'] ?? '';

final urlSanitized = _sanitizeUrl.process(url);
if (urlSanitized.isEmpty) {
return;
}

element.attributes['href'] = urlSanitized;

final text = element.text;
final children = element.children;
if (children.isEmpty && text.isNotEmpty) {
final innerHtml = element.innerHtml;
final tagClass = element.attributes['class'];
if (tagClass != null) {
element.attributes['class'] = '$tagClass ${HtmlTemplate.nameClassToolTip}';
} else {
element.attributes['class'] = HtmlTemplate.nameClassToolTip;
}
element.innerHtml = '$innerHtml <span class="tooltiptext">$url</span>';
}
}

void _addBlankForTargetProperty(Element element) {
element.attributes['target'] = '_blank';
}

void _addNoReferrerForRelProperty(Element element) {
final rel = element.attributes['rel'];
if (rel == null || (!rel.contains('noopener') && !rel.contains('noreferrer'))) {
element.attributes['rel'] = 'noreferrer';
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,18 @@
import 'package:core/presentation/utils/html_transformer/base/dom_transformer.dart';
import 'package:core/presentation/utils/html_transformer/base/text_transformer.dart';
import 'package:core/presentation/utils/html_transformer/dom/add_lazy_loading_for_background_image_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/add_target_blank_in_tag_a_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/add_tooltip_link_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/blockcode_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/blockquoted_transformers.dart';
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/remove_collapsed_signature_button_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/remove_lazy_loading_for_background_image_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/remove_lazy_loading_image_transformers.dart';
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/script_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/sigature_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';
import 'package:core/utils/platform_info.dart';

Expand Down Expand Up @@ -53,9 +52,8 @@ class TransformConfiguration {
const RemoveScriptTransformer(),
const BlockQuotedTransformer(),
const BlockCodeTransformer(),
const AddTargetBlankInTagATransformer(),
SanitizeTagAInHtmlTransformer(useTooltip: true),
const ImageTransformer(),
const AddTooltipLinkTransformer(),
const AddLazyLoadingForBackgroundImageTransformer(),
const RemoveCollapsedSignatureButtonTransformer(),
]
Expand All @@ -74,7 +72,7 @@ class TransformConfiguration {
]);

/// Provides easy access to a standard configuration that does not block external images.
static const TransformConfiguration standardConfiguration = TransformConfiguration(
static TransformConfiguration standardConfiguration = TransformConfiguration(
standardDomTransformers,
standardTextTransformers
);
Expand All @@ -100,14 +98,14 @@ class TransformConfiguration {
);
}

static const List<DomTransformer> standardDomTransformers = [
RemoveScriptTransformer(),
BlockQuotedTransformer(),
BlockCodeTransformer(),
AddTargetBlankInTagATransformer(),
ImageTransformer(),
AddLazyLoadingForBackgroundImageTransformer(),
RemoveCollapsedSignatureButtonTransformer(),
static List<DomTransformer> standardDomTransformers = [
const RemoveScriptTransformer(),
const BlockQuotedTransformer(),
const BlockCodeTransformer(),
SanitizeTagAInHtmlTransformer(),
const ImageTransformer(),
const AddLazyLoadingForBackgroundImageTransformer(),
const RemoveCollapsedSignatureButtonTransformer(),
];

static const List<TextTransformer> standardTextTransformers = [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import 'package:core/presentation/utils/html_transformer/dom/add_target_blank_in_tag_a_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/add_tooltip_link_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/blockcode_transformers.dart';
import 'package:core/presentation/utils/html_transformer/dom/blockquoted_transformers.dart';
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/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 @@ -67,9 +66,8 @@ class IdentityDataSourceImpl extends IdentityDataSource {
const RemoveScriptTransformer(),
const BlockQuotedTransformer(),
const BlockCodeTransformer(),
const AddTargetBlankInTagATransformer(),
SanitizeTagAInHtmlTransformer(useTooltip: PlatformInfo.isWeb),
const ImageTransformer(),
if (PlatformInfo.isWeb) const AddTooltipLinkTransformer()
]));
return signatureUnescape;
}).catchError(_exceptionThrower.throwException);
Expand Down

0 comments on commit 09eb6f7

Please sign in to comment.