diff options
Diffstat (limited to 'app/assets/javascripts/content_editor/extensions/task_list.js')
-rw-r--r-- | app/assets/javascripts/content_editor/extensions/task_list.js | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/app/assets/javascripts/content_editor/extensions/task_list.js b/app/assets/javascripts/content_editor/extensions/task_list.js index b7f6c857bc7..72c6e020102 100644 --- a/app/assets/javascripts/content_editor/extensions/task_list.js +++ b/app/assets/javascripts/content_editor/extensions/task_list.js @@ -1,16 +1,24 @@ import { mergeAttributes } from '@tiptap/core'; import { TaskList } from '@tiptap/extension-task-list'; +import { PARSE_HTML_PRIORITY_HIGHEST } from '../constants'; +import { getMarkdownSource } from '../services/markdown_sourcemap'; export default TaskList.extend({ addAttributes() { return { - type: { - default: 'ul', - parseHTML: (element) => { - return { - type: element.tagName.toLowerCase() === 'ol' ? 'ol' : 'ul', - }; - }, + numeric: { + default: false, + parseHTML: (element) => element.tagName.toLowerCase() === 'ol', + }, + start: { + default: 1, + parseHTML: (element) => + element.hasAttribute('start') ? parseInt(element.getAttribute('start') || '', 10) : 1, + }, + + parens: { + default: false, + parseHTML: (element) => /^[0-9]+\)/.test(getMarkdownSource(element)), }, }; }, @@ -19,12 +27,12 @@ export default TaskList.extend({ return [ { tag: '.task-list', - priority: 100, + priority: PARSE_HTML_PRIORITY_HIGHEST, }, ]; }, - renderHTML({ HTMLAttributes: { type, ...HTMLAttributes } }) { - return [type, mergeAttributes(HTMLAttributes, { 'data-type': 'taskList' }), 0]; + renderHTML({ HTMLAttributes: { numeric, ...HTMLAttributes } }) { + return [numeric ? 'ol' : 'ul', mergeAttributes(HTMLAttributes, { 'data-type': 'taskList' }), 0]; }, }); |