diff --git a/src/nodes/Table/TableHeadRow.js b/src/nodes/Table/TableHeadRow.js index e2974c7e8a9..677780389d6 100644 --- a/src/nodes/Table/TableHeadRow.js +++ b/src/nodes/Table/TableHeadRow.js @@ -22,7 +22,7 @@ export default TableRow.extend({ parseHTML() { return [ - { tag: 'tr', priority: 70 }, + { tag: 'tr:first-of-type', priority: 80 }, ] }, }) diff --git a/src/nodes/Table/TableRow.js b/src/nodes/Table/TableRow.js index b7343eb9a61..b6ce01d823b 100644 --- a/src/nodes/Table/TableRow.js +++ b/src/nodes/Table/TableRow.js @@ -11,7 +11,7 @@ export default TableRow.extend({ parseHTML() { return [ - { tag: 'tr', priority: 80 }, + { tag: 'tr', priority: 70 }, ] }, }) diff --git a/src/tests/helpers.js b/src/tests/helpers.js index 5195792712e..38c17153d6a 100644 --- a/src/tests/helpers.js +++ b/src/tests/helpers.js @@ -49,3 +49,18 @@ export function markdownThroughEditorHtml(html) { const serializer = createMarkdownSerializer(tiptap.schema) return serializer.serialize(tiptap.state.doc) } + +/** + * Paste HTML into the Editor and return the serialized markdown + * + * @param {string} html + * @returns {string} + */ +export function markdownFromPaste(html) { + const tiptap = createEditor({ + enableRichEditing: true + }) + tiptap.commands.insertContent(html) + const serializer = createMarkdownSerializer(tiptap.schema) + return serializer.serialize(tiptap.state.doc) +} diff --git a/src/tests/markdown.spec.js b/src/tests/markdown.spec.js index 40e31fca2a2..83df8bb499d 100644 --- a/src/tests/markdown.spec.js +++ b/src/tests/markdown.spec.js @@ -1,7 +1,11 @@ import spec from "./fixtures/spec" import markdownit from './../markdownit' import { typesAvailable } from './../markdownit/callouts' -import { markdownThroughEditor, markdownThroughEditorHtml } from "./helpers"; +import { + markdownThroughEditor, + markdownThroughEditorHtml, + markdownFromPaste +} from "./helpers"; import { createMarkdownSerializer } from "../extensions/Markdown"; import createEditor from "../EditorFactory"; @@ -195,11 +199,20 @@ describe('Markdown serializer from html', () => { )).toBe(`::: warn\n!warning!\n\n:::`) }) + test('table', () => { + expect(markdownThroughEditorHtml('
greetings
hello
')).toBe('| greetings |\n|-----------|\n| hello |\n') + }) + test('table cell escaping', () => { // while '|' has no special meaning in commonmark is has to be escaped for GFM tables expect(markdownThroughEditorHtml('
greetings
hello | hallo
')).toBe('| greetings |\n|-----------|\n| hello \\| hallo |\n') }) + test('table pastes (#2708)', () => { + // while '|' has no special meaning in commonmark is has to be escaped for GFM tables + expect(markdownFromPaste('
greetings
hello
')).toBe('| greetings |\n|-----------|\n| hello |\n') + }) + test('front matter', () => { expect(markdownThroughEditorHtml('
some: value

Heading

')).toBe('---\nsome: value\n---\n\n# Heading') // Test --- within front matter is allowed