diff --git a/frontend/app_flowy/packages/flowy_editor/lib/infra/html_converter.dart b/frontend/app_flowy/packages/flowy_editor/lib/infra/html_converter.dart index 13f30ce4ef..68bb8555f9 100644 --- a/frontend/app_flowy/packages/flowy_editor/lib/infra/html_converter.dart +++ b/frontend/app_flowy/packages/flowy_editor/lib/infra/html_converter.dart @@ -149,8 +149,16 @@ class HTMLConverter { _handleImage(nodes, image); return; } + final testInput = element.querySelector("input"); + bool checked = false; + final isCheckbox = + testInput != null && testInput.attributes["type"] == "checkbox"; + if (isCheckbox) { + checked = testInput.attributes.containsKey("checked") && + testInput.attributes["checked"] != "false"; + } - var delta = Delta(); + final delta = Delta(); for (final child in element.nodes.toList()) { if (child is html.Element) { @@ -161,7 +169,12 @@ class HTMLConverter { } if (delta.operations.isNotEmpty) { - nodes.add(TextNode(type: "text", delta: delta, attributes: attributes)); + final textNode = TextNode(type: "text", delta: delta); + if (isCheckbox) { + textNode.attributes["subtype"] = StyleKey.checkbox; + textNode.attributes["checkbox"] = checked; + } + nodes.add(textNode); } } @@ -207,12 +220,16 @@ class HTMLConverter { } } -html.Element textNodeToHtml(TextNode textNode, {int? end}) { +html.Element textNodeToHtml(TextNode textNode, {int? end, bool? checked}) { String? subType = textNode.attributes["subtype"]; - return deltaToHtml(textNode.delta, subType: subType, end: end); + return deltaToHtml(textNode.delta, + subType: subType, + end: end, + checked: textNode.attributes["checkbox"] == true); } -html.Element deltaToHtml(Delta delta, {String? subType, int? end}) { +html.Element deltaToHtml(Delta delta, + {String? subType, int? end, bool? checked}) { if (end != null) { delta = delta.slice(0, end); } @@ -223,7 +240,11 @@ html.Element deltaToHtml(Delta delta, {String? subType, int? end}) { if (subType == StyleKey.bulletedList) { tagName = tagList; } else if (subType == StyleKey.checkbox) { - childNodes.add(html.Element.html('')); + final node = html.Element.html(''); + if (checked != null && checked) { + node.attributes["checked"] = "true"; + } + childNodes.add(node); } for (final op in delta.operations) {