Skip to content

Commit

Permalink
add tables in html view
Browse files Browse the repository at this point in the history
  • Loading branch information
avdosev committed Mar 9, 2021
1 parent 7c51e66 commit b8c981e
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 7 deletions.
10 changes: 10 additions & 0 deletions lib/utils/html_to_json/element_builders.dart
Original file line number Diff line number Diff line change
Expand Up @@ -147,3 +147,13 @@ class Iframe implements Node {
@override
String get type => "iframe";
}

class Table implements Node {
// имплементирует ноду чтобы не применялись оптимизаци
List<List<Node>> rows;

Table(this.rows);

@override
String get type => "table";
}
15 changes: 13 additions & 2 deletions lib/utils/html_to_json/transformer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -173,8 +173,7 @@ List<Node> 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);
Expand Down Expand Up @@ -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,
Expand All @@ -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));
}
Expand All @@ -266,6 +269,14 @@ Node prepareHtmlBlocElement(dom.Element element) {
case 'iframe':
final src = element.attributes['src'];
return Iframe(src);
case 'table':
final rows = <List<Node>>[];
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');
Expand Down
17 changes: 12 additions & 5 deletions lib/widgets/html_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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,
);
Expand Down Expand Up @@ -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");
}
Expand Down

0 comments on commit b8c981e

Please sign in to comment.