Properly identify task lists inside a blockquote
Updated the task list regex to understand blockquote characters that can come before the task item marker
This commit is contained in:
parent
2e56b13468
commit
b1694896ff
4 changed files with 45 additions and 1 deletions
|
@ -15,7 +15,8 @@ module Taskable
|
|||
INCOMPLETE_PATTERN = /(\[[\s]\])/.freeze
|
||||
ITEM_PATTERN = %r{
|
||||
^
|
||||
\s*(?:[-+*]|(?:\d+\.)) # list prefix required - task item has to be always in a list
|
||||
(?:(?:>\s{0,4})*) # optional blockquote characters
|
||||
\s*(?:[-+*]|(?:\d+\.)) # list prefix required - task item has to be always in a list
|
||||
\s+ # whitespace prefix has to be always presented for a list item
|
||||
(\[\s\]|\[[xX]\]) # checkbox
|
||||
(\s.+) # followed by whitespace and some text.
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Better support clickable tasklists inside blockquotes
|
||||
merge_request: 30952
|
||||
author:
|
||||
type: fixed
|
|
@ -114,6 +114,23 @@ describe TaskListToggleService do
|
|||
expect(toggler.execute).to be_falsey
|
||||
end
|
||||
|
||||
it 'properly handles tasks in a blockquote' do
|
||||
markdown =
|
||||
<<-EOT.strip_heredoc
|
||||
> > * [ ] Task 1
|
||||
> * [x] Task 2
|
||||
EOT
|
||||
|
||||
markdown_html = Banzai::Pipeline::FullPipeline.call(markdown, project: nil)[:output].to_html
|
||||
toggler = described_class.new(markdown, markdown_html,
|
||||
toggle_as_checked: true,
|
||||
line_source: '> > * [ ] Task 1', line_number: 1)
|
||||
|
||||
expect(toggler.execute).to be_truthy
|
||||
expect(toggler.updated_markdown.lines[0]).to eq "> > * [x] Task 1\n"
|
||||
expect(toggler.updated_markdown_html).to include('disabled checked> Task 1')
|
||||
end
|
||||
|
||||
it 'properly handles a GitLab blockquote' do
|
||||
markdown =
|
||||
<<-EOT.strip_heredoc
|
||||
|
|
|
@ -105,4 +105,25 @@ shared_examples 'a Taskable' do
|
|||
expect(subject.task_status_short).to match('1 task')
|
||||
end
|
||||
end
|
||||
|
||||
describe 'with tasks in blockquotes' do
|
||||
before do
|
||||
subject.description = <<-EOT.strip_heredoc
|
||||
> - [ ] Task a
|
||||
> > - [x] Task a.1
|
||||
|
||||
>>>
|
||||
1. [ ] Task 1
|
||||
1. [x] Task 2
|
||||
>>>
|
||||
EOT
|
||||
end
|
||||
|
||||
it 'returns the correct task status' do
|
||||
expect(subject.task_status).to match('2 of')
|
||||
expect(subject.task_status).to match('4 tasks completed')
|
||||
expect(subject.task_status_short).to match('2/')
|
||||
expect(subject.task_status_short).to match('4 tasks')
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue