Skip to content
Snippets Groups Projects
Commit 1dc90fc4 authored by Vinnie Okada's avatar Vinnie Okada
Browse files

Fix nested task lists

When nesting task list items, the parent item is wrapped in a `<p>` tag.
Update the task list parser to handle these paragraph wrappers.
parent c6dd117c
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -5,7 +5,7 @@
# Used by MergeRequest and Issue
module Taskable
TASK_PATTERN_MD = /^(?<bullet> *[*-] *)\[(?<checked>[ xX])\]/.freeze
TASK_PATTERN_HTML = /^<li>\[(?<checked>[ xX])\]/.freeze
TASK_PATTERN_HTML = /^<li>(?<p_tag>\s*<p>)?\[(?<checked>[ xX])\]/.freeze
 
# Change the state of a task list item for this Taskable. Edit the object's
# description by finding the nth task item and changing its checkbox
Loading
Loading
Loading
Loading
@@ -352,11 +352,12 @@ module Gitlab
# ActiveSupport::SafeBuffer, hence the `String.new`
String.new(text).gsub(Taskable::TASK_PATTERN_HTML) do
checked = $LAST_MATCH_INFO[:checked].downcase == 'x'
p_tag = $LAST_MATCH_INFO[:p_tag]
 
if checked
"#{li_tag}#{checked_box}"
"#{li_tag}#{p_tag}#{checked_box}"
else
"#{li_tag}#{unchecked_box}"
"#{li_tag}#{p_tag}#{unchecked_box}"
end
end
end
Loading
Loading
Loading
Loading
@@ -817,6 +817,17 @@ EOT
)
end
 
it 'should render checkboxes for nested tasks' do
rendered_text = markdown(@source_text_asterisk, parse_tasks: true)
expect(rendered_text).to match(
/<input.*checkbox.*valid unchecked nested task/
)
expect(rendered_text).to match(
/<input.*checkbox.*valid checked nested task/
)
end
it 'should not be confused by whitespace before bullets' do
rendered_text_asterisk = markdown(@source_text_asterisk,
parse_tasks: true)
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment