зеркало из https://github.com/nextcloud/text.git
Merge pull request #2455 from nextcloud/bugfix/hard-break
Fix non-working hard line breaks
This commit is contained in:
Коммит
b548bf8f60
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -27,6 +27,7 @@
|
|||
"@tiptap/extension-code-block-lowlight": "^2.0.0-beta.68",
|
||||
"@tiptap/extension-document": "^2.0.0-beta.15",
|
||||
"@tiptap/extension-dropcursor": "^2.0.0-beta.25",
|
||||
"@tiptap/extension-hard-break": "^2.0.0-beta.30",
|
||||
"@tiptap/extension-heading": "^2.0.0-beta.26",
|
||||
"@tiptap/extension-history": "^2.0.0-beta.21",
|
||||
"@tiptap/extension-horizontal-rule": "^2.0.0-beta.31",
|
||||
|
@ -3422,6 +3423,18 @@
|
|||
"@tiptap/core": "^2.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@tiptap/extension-hard-break": {
|
||||
"version": "2.0.0-beta.30",
|
||||
"resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.30.tgz",
|
||||
"integrity": "sha512-X9xj/S+CikrbIE7ccUFVwit5QHEbflnKVxod+4zPwr1cxogFbE9AyLZE2MpYdx3z9LcnTYYi9leBqFrP4T/Olw==",
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/ueberdosis"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@tiptap/core": "^2.0.0-beta.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@tiptap/extension-heading": {
|
||||
"version": "2.0.0-beta.26",
|
||||
"resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.26.tgz",
|
||||
|
@ -21446,6 +21459,12 @@
|
|||
"tippy.js": "^6.3.7"
|
||||
}
|
||||
},
|
||||
"@tiptap/extension-hard-break": {
|
||||
"version": "2.0.0-beta.30",
|
||||
"resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.30.tgz",
|
||||
"integrity": "sha512-X9xj/S+CikrbIE7ccUFVwit5QHEbflnKVxod+4zPwr1cxogFbE9AyLZE2MpYdx3z9LcnTYYi9leBqFrP4T/Olw==",
|
||||
"requires": {}
|
||||
},
|
||||
"@tiptap/extension-heading": {
|
||||
"version": "2.0.0-beta.26",
|
||||
"resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.26.tgz",
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
"@tiptap/extension-code-block-lowlight": "^2.0.0-beta.68",
|
||||
"@tiptap/extension-document": "^2.0.0-beta.15",
|
||||
"@tiptap/extension-dropcursor": "^2.0.0-beta.25",
|
||||
"@tiptap/extension-hard-break": "^2.0.0-beta.30",
|
||||
"@tiptap/extension-heading": "^2.0.0-beta.26",
|
||||
"@tiptap/extension-history": "^2.0.0-beta.21",
|
||||
"@tiptap/extension-horizontal-rule": "^2.0.0-beta.31",
|
||||
|
|
|
@ -52,7 +52,7 @@ import {
|
|||
TaskItem,
|
||||
Callout,
|
||||
} from './nodes/index.js'
|
||||
import { Markdown, Emoji } from './extensions/index.js'
|
||||
import { HardBreak, Markdown, Emoji } from './extensions/index.js'
|
||||
import { translate as t } from '@nextcloud/l10n'
|
||||
import { listLanguages, registerLanguage } from 'lowlight/lib/core'
|
||||
import { emojiSearch } from '@nextcloud/vue/dist/Functions/emoji'
|
||||
|
@ -83,6 +83,7 @@ const createEditor = ({ content, onCreate, onUpdate, extensions, enableRichEditi
|
|||
Markdown,
|
||||
Document,
|
||||
Paragraph,
|
||||
HardBreak,
|
||||
Heading,
|
||||
Strong,
|
||||
Italic,
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* @copyright Copyright (c) 2022 Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @author Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
import TipTapHardBreak from '@tiptap/extension-hard-break'
|
||||
|
||||
const HardBreak = TipTapHardBreak.extend({
|
||||
|
||||
toMarkdown(state, node, parent, index) {
|
||||
for (let i = index + 1; i < parent.childCount; i++) {
|
||||
if (parent.child(i).type !== node.type) {
|
||||
state.write(' \n')
|
||||
return
|
||||
}
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
export default HardBreak
|
|
@ -21,6 +21,7 @@
|
|||
*/
|
||||
|
||||
import Emoji from './Emoji.js'
|
||||
import HardBreak from './HardBreak.js'
|
||||
import Keymap from './Keymap.js'
|
||||
import UserColor from './UserColor.js'
|
||||
import Collaboration from './Collaboration.js'
|
||||
|
@ -28,6 +29,7 @@ import Markdown from './Markdown.js'
|
|||
|
||||
export {
|
||||
Emoji,
|
||||
HardBreak,
|
||||
Keymap,
|
||||
UserColor,
|
||||
Collaboration,
|
||||
|
|
|
@ -58,6 +58,11 @@ describe('Markdown though editor', () => {
|
|||
expect(markdownThroughEditor('#### Test')).toBe('#### Test')
|
||||
expect(markdownThroughEditor('##### Test')).toBe('##### Test')
|
||||
})
|
||||
test('hard breaks', () => {
|
||||
expect(markdownThroughEditor('hard \nbreak')).toBe('hard \nbreak')
|
||||
expect(markdownThroughEditor('hard\\\nbreak')).toBe('hard \nbreak')
|
||||
expect(markdownThroughEditor('no\nbreak')).toBe('no break')
|
||||
})
|
||||
test('inline format', () => {
|
||||
expect(markdownThroughEditor('**Test**')).toBe('**Test**')
|
||||
expect(markdownThroughEditor('__Test__')).toBe('__Test__')
|
||||
|
@ -131,6 +136,11 @@ describe('Markdown serializer from html', () => {
|
|||
test('paragraph', () => {
|
||||
expect(markdownThroughEditorHtml('<p>hello</p><p>world</p>')).toBe('hello\n\nworld')
|
||||
})
|
||||
test('hard line breaks', () => {
|
||||
expect(markdownThroughEditorHtml('<p>hard<br />break</p>')).toBe('hard \nbreak')
|
||||
expect(markdownThroughEditorHtml('<p>hard<br>break</p>')).toBe('hard \nbreak')
|
||||
expect(markdownThroughEditorHtml('<p>no\nbreak</p>')).toBe('no break')
|
||||
})
|
||||
test('links', () => {
|
||||
expect(markdownThroughEditorHtml('<a href="foo">test</a>')).toBe('[test](foo)')
|
||||
})
|
||||
|
|
Загрузка…
Ссылка в новой задаче