diff --git a/lib/pages/chat/events/html_message.dart b/lib/pages/chat/events/html_message.dart index f6cb99003..51defb5f5 100644 --- a/lib/pages/chat/events/html_message.dart +++ b/lib/pages/chat/events/html_message.dart @@ -156,6 +156,11 @@ class HtmlMessage extends StatelessWidget { // We must not render elements nested more than 100 elements deep: if (depth >= 100) return const TextSpan(); + if (node is dom.Element && + ignoredHtmlTags.contains(node.localName?.toLowerCase())) { + return const TextSpan(); + } + // This is a text node or not permitted node, so we render it as text: if (node is! dom.Element || !allowedHtmlTags.contains(node.localName)) { var text = node.text ?? ''; @@ -170,8 +175,6 @@ class HtmlMessage extends StatelessWidget { ); } - if (ignoredHtmlTags.contains(node.localName)) return const TextSpan(); - switch (node.localName) { case 'br': return const TextSpan(text: '\n'); @@ -260,13 +263,15 @@ class HtmlMessage extends StatelessWidget { child: Text.rich( TextSpan( children: [ - if (node.parent?.localName == 'ul') - const TextSpan(text: '• '), - if (node.parent?.localName == 'ol') - TextSpan( - text: - '${(node.parent?.nodes.whereType().toList().indexOf(node) ?? 0) + (int.tryParse(node.parent?.attributes['start'] ?? '1') ?? 1)}. ', - ), + if (!isCheckbox) ...[ + if (node.parent?.localName == 'ul') + const TextSpan(text: '• '), + if (node.parent?.localName == 'ol') + TextSpan( + text: + '${(node.parent?.nodes.whereType().toList().indexOf(node) ?? 0) + (int.tryParse(node.parent?.attributes['start'] ?? '1') ?? 1)}. ', + ), + ], if (node.className == 'task-list-item') WidgetSpan( child: Padding(