Commit b8ad3647 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Merge branch 'fix-nested-tasks' into 'master'

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.

cc @sytse

See merge request !413
parents c3c97034 b7ed7d05
...@@ -17,6 +17,7 @@ v 7.10.0 (unreleased) ...@@ -17,6 +17,7 @@ v 7.10.0 (unreleased)
- Add changelog, license and contribution guide links to project sidebar. - Add changelog, license and contribution guide links to project sidebar.
- Improve diff UI - Improve diff UI
- Fix alignment of navbar toggle button (Cody Mize) - Fix alignment of navbar toggle button (Cody Mize)
- Fix checkbox rendering for nested task lists
- Identical look of selectboxes in UI - Identical look of selectboxes in UI
- Move "Import existing repository by URL" option to button. - Move "Import existing repository by URL" option to button.
- Improve error message when save profile has error. - Improve error message when save profile has error.
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
# Used by MergeRequest and Issue # Used by MergeRequest and Issue
module Taskable module Taskable
TASK_PATTERN_MD = /^(?<bullet> *[*-] *)\[(?<checked>[ xX])\]/.freeze 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 # 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 # description by finding the nth task item and changing its checkbox
......
...@@ -352,11 +352,12 @@ module Gitlab ...@@ -352,11 +352,12 @@ module Gitlab
# ActiveSupport::SafeBuffer, hence the `String.new` # ActiveSupport::SafeBuffer, hence the `String.new`
String.new(text).gsub(Taskable::TASK_PATTERN_HTML) do String.new(text).gsub(Taskable::TASK_PATTERN_HTML) do
checked = $LAST_MATCH_INFO[:checked].downcase == 'x' checked = $LAST_MATCH_INFO[:checked].downcase == 'x'
p_tag = $LAST_MATCH_INFO[:p_tag]
if checked if checked
"#{li_tag}#{checked_box}" "#{li_tag}#{p_tag}#{checked_box}"
else else
"#{li_tag}#{unchecked_box}" "#{li_tag}#{p_tag}#{unchecked_box}"
end end
end end
end end
......
...@@ -817,6 +817,17 @@ EOT ...@@ -817,6 +817,17 @@ EOT
) )
end 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 it 'should not be confused by whitespace before bullets' do
rendered_text_asterisk = markdown(@source_text_asterisk, rendered_text_asterisk = markdown(@source_text_asterisk,
parse_tasks: true) parse_tasks: true)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment