|
1 | 1 | import { Markdown } from './../../extensions/index.js' |
2 | 2 | import { createMarkdownSerializer } from './../../extensions/Markdown.js' |
| 3 | +import CodeBlock from '@tiptap/extension-code-block' |
| 4 | +import Blockquote from '@tiptap/extension-blockquote' |
3 | 5 | import Image from './../../nodes/Image.js' |
4 | 6 | import ImageInline from './../../nodes/ImageInline.js' |
5 | 7 | import TaskList from './../../nodes/TaskList.js' |
6 | 8 | import TaskItem from './../../nodes/TaskItem.js' |
7 | 9 | import Underline from './../../marks/Underline.js' |
8 | 10 | import TiptapImage from '@tiptap/extension-image' |
9 | 11 | import { getExtensionField } from '@tiptap/core' |
| 12 | +import { __serializeForClipboard as serializeForClipboard } from '@tiptap/pm/view' |
10 | 13 | import { createCustomEditor } from '../helpers.js' |
11 | 14 |
|
12 | 15 | describe('Markdown extension unit', () => { |
@@ -77,4 +80,37 @@ describe('Markdown extension integrated in the editor', () => { |
77 | 80 | expect(serializer.serialize(editor.state.doc)).toBe('inline image  inside text') |
78 | 81 | }) |
79 | 82 |
|
| 83 | + it('copies task lists to plaintext like markdown', () => { |
| 84 | + const editor = createCustomEditor({ |
| 85 | + content: '<p><ul class="contains-task-list"><li><input type="checkbox">Hello</li></ul></p>', |
| 86 | + extensions: [Markdown, TaskList, TaskItem], |
| 87 | + }) |
| 88 | + editor.commands.selectAll() |
| 89 | + const slice = editor.state.selection.content() |
| 90 | + const { text } = serializeForClipboard(editor.view, slice) |
| 91 | + expect(text).toBe('\n- [ ] Hello') |
| 92 | + }) |
| 93 | + |
| 94 | + it('copies code block content to plaintext according to their spec', () => { |
| 95 | + const editor = createCustomEditor({ |
| 96 | + content: '<pre><code>Hello</code></pre>', |
| 97 | + extensions: [Markdown, CodeBlock], |
| 98 | + }) |
| 99 | + editor.commands.selectAll() |
| 100 | + const slice = editor.state.selection.content() |
| 101 | + const { text } = serializeForClipboard(editor.view, slice) |
| 102 | + expect(text).toBe('Hello') |
| 103 | + }) |
| 104 | + |
| 105 | + it('copies nested task list nodes to markdown like syntax', () => { |
| 106 | + const editor = createCustomEditor({ |
| 107 | + content: '<blockquote><p><ul class="contains-task-list"><li><input type="checkbox">Hello</li></ul></blockquote>', |
| 108 | + extensions: [Markdown, Blockquote, TaskList, TaskItem], |
| 109 | + }) |
| 110 | + editor.commands.selectAll() |
| 111 | + const slice = editor.state.selection.content() |
| 112 | + const { text } = serializeForClipboard(editor.view, slice) |
| 113 | + expect(text).toBe('\n- [ ] Hello') |
| 114 | + }) |
| 115 | + |
80 | 116 | }) |
0 commit comments