diff --git a/lib/utils/html_to_json/element_builders.dart b/lib/utils/html_to_json/element_builders.dart
index 176b28a..a27e661 100644
--- a/lib/utils/html_to_json/element_builders.dart
+++ b/lib/utils/html_to_json/element_builders.dart
@@ -147,3 +147,13 @@ class Iframe implements Node {
@override
String get type => "iframe";
}
+
+class Table implements Node {
+ // имплементирует ноду чтобы не применялись оптимизаци
+ List> rows;
+
+ Table(this.rows);
+
+ @override
+ String get type => "table";
+}
diff --git a/lib/utils/html_to_json/transformer.dart b/lib/utils/html_to_json/transformer.dart
index 75a389d..fa7a04c 100644
--- a/lib/utils/html_to_json/transformer.dart
+++ b/lib/utils/html_to_json/transformer.dart
@@ -173,8 +173,7 @@ List prepareChildrenHtmlBlocElement(dom.Element element) {
if (block.children.isEmpty) continue;
if (block.children.length == 1) {
final child = block.children[0];
- if (child is TextSpan && child.text.trim().isEmpty)
- continue;
+ if (child is TextSpan && child.text.trim().isEmpty) continue;
}
}
children.add(block);
@@ -233,6 +232,8 @@ Node prepareHtmlBlocElement(dom.Element element) {
case 'body':
case 'div':
case 'li':
+ case 'th':
+ case 'td':
if (element.classes.contains('spoiler')) {
return Details(
element.getElementsByClassName('spoiler_title')[0].text,
@@ -242,6 +243,8 @@ Node prepareHtmlBlocElement(dom.Element element) {
} else if (element.classes.contains('tm-iframe_temp')) {
final src = element.attributes['data-src'];
return Iframe(src);
+ } else if (element.classes.contains('scrollable-table')) {
+ return Scrollable(prepareHtmlBlocElement(element.children.first));
} else {
return BlockColumn(prepareChildrenHtmlBlocElement(element));
}
@@ -266,6 +269,14 @@ Node prepareHtmlBlocElement(dom.Element element) {
case 'iframe':
final src = element.attributes['src'];
return Iframe(src);
+ case 'table':
+ final rows = >[];
+ for (final tableItems in element.children) {
+ for (final elementsRow in tableItems.children) {
+ rows.add(elementsRow.children.map(prepareHtmlBlocElement).toList());
+ }
+ }
+ return Table(rows);
default:
print('Not found case for ${element.localName}');
throw UnsupportedError('${element.localName} not supported');
diff --git a/lib/widgets/html_view.dart b/lib/widgets/html_view.dart
index 31a067a..c84d5fd 100644
--- a/lib/widgets/html_view.dart
+++ b/lib/widgets/html_view.dart
@@ -41,7 +41,7 @@ class HtmlView extends StatelessWidget {
Widget widget;
if (element is view.HeadLine) {
final mode =
- HeadLineType.values[int.parse(element.mode.substring(1)) - 1];
+ HeadLineType.values[int.parse(element.mode.substring(1)) - 1];
widget = HeadLine(text: element.text, type: mode);
} else if (element is view.TextParagraph) {
widget = Text(
@@ -70,10 +70,7 @@ class HtmlView extends StatelessWidget {
widget = WrappedContainer(
children: [
widget,
- Text(element.caption, style: Theme
- .of(context)
- .textTheme
- .subtitle2)
+ Text(element.caption, style: Theme.of(context).textTheme.subtitle2)
],
distance: 5,
);
@@ -110,6 +107,16 @@ class HtmlView extends StatelessWidget {
widget = Iframe(
src: element.src,
);
+ } else if (element is view.Table) {
+ widget = Table(
+ defaultColumnWidth: IntrinsicColumnWidth(),
+ border: TableBorder.all(color: Theme.of(context).textTheme.bodyText2.color),
+ children: element.rows
+ .map((row) => TableRow(
+ children:
+ row.map((child) => TableCell(child: Padding(padding: EdgeInsets.all(5),child: buildTree(child, context)))).toList()))
+ .toList(),
+ );
} else {
logInfo("Not found case for $type");
}