Fix dart-lang/markdown#601: checkbox list separated with blank lines (dart-lang/markdown#602)
* Fix dart-lang/markdown#586: encode image tag's src attribute
* Fix dart-lang/markdown#601: checkbox list separated with blank lines
diff --git a/pkgs/markdown/lib/src/block_syntaxes/list_syntax.dart b/pkgs/markdown/lib/src/block_syntaxes/list_syntax.dart
index d8711bb..534ca3e 100644
--- a/pkgs/markdown/lib/src/block_syntaxes/list_syntax.dart
+++ b/pkgs/markdown/lib/src/block_syntaxes/list_syntax.dart
@@ -268,7 +268,7 @@
final children = itemParser.parseLines(parentSyntax: this);
final itemElement = checkboxToInsert == null
? Element('li', children)
- : (Element('li', [checkboxToInsert, ...children])
+ : (Element('li', _addCheckbox(children, checkboxToInsert))
..attributes['class'] = taskListClass);
itemNodes.add(itemElement);
@@ -318,6 +318,17 @@
return listElement;
}
+ List<Node> _addCheckbox(List<Node> children, Element checkbox) {
+ if (children.isNotEmpty) {
+ final firstChild = children.first;
+ if (firstChild is Element && firstChild.tag == 'p') {
+ firstChild.children!.insert(0, checkbox);
+ return children;
+ }
+ }
+ return [checkbox, ...children];
+ }
+
void _removeLeadingEmptyLine(ListItem item) {
if (item.lines.isNotEmpty && item.lines.first.isBlankLine) {
item.lines.removeAt(0);
diff --git a/pkgs/markdown/test/extensions/unordered_list_with_checkboxes.unit b/pkgs/markdown/test/extensions/unordered_list_with_checkboxes.unit
index 170b6de..f33161e 100644
--- a/pkgs/markdown/test/extensions/unordered_list_with_checkboxes.unit
+++ b/pkgs/markdown/test/extensions/unordered_list_with_checkboxes.unit
@@ -62,4 +62,22 @@
<pre><code>[ ] five
</code></pre>
</li>
+</ul>
+>>> checkbox list separated with blank lines
+- [ ] A
+
+- [ ] B
+
+- [ ]
+<<<
+<ul class="contains-task-list">
+<li class="task-list-item">
+<p><input type="checkbox"></input>A</p>
+</li>
+<li class="task-list-item">
+<p><input type="checkbox"></input>B</p>
+</li>
+<li>
+<p>[ ]</p>
+</li>
</ul>
\ No newline at end of file