mirror of
https://github.com/go-vikunja/vikunja.git
synced 2025-12-05 19:16:51 -06:00
fix(editor): preserve consecutive whitespace in comments in TipTap
Ensure multiple spaces in comment content are no longer collapsed when editing/saving by: - Adding SetContentOptions with parseOptions.preserveWhitespace = 'full' - Applying those options to all setContent calls (initial load, exit edit mode, post-upload cleanup) - Enabling preserveWhitespace in editor parseOptions Previously, repeated spaces were normalized away after setContent(false), causing comments with deliberate spacing to be altered unexpectedly. No behavioral changes beyond whitespace retention; renders identical except space fidelity.
This commit is contained in:
@@ -145,7 +145,7 @@ import {eventToHotkeyString} from '@github/hotkey'
|
||||
import EditorToolbar from './EditorToolbar.vue'
|
||||
|
||||
import StarterKit from '@tiptap/starter-kit'
|
||||
import {Extension, mergeAttributes} from '@tiptap/core'
|
||||
import {Extension, mergeAttributes, type SetContentOptions} from '@tiptap/core'
|
||||
import {EditorContent, type Extensions, useEditor, VueNodeViewRenderer} from '@tiptap/vue-3'
|
||||
import {Plugin, PluginKey} from '@tiptap/pm/state'
|
||||
import {marked} from 'marked'
|
||||
@@ -213,6 +213,12 @@ const tiptapInstanceRef = ref<HTMLInputElement | null>(null)
|
||||
|
||||
const {t} = useI18n()
|
||||
|
||||
const defaultSetContentOptions: SetContentOptions = {
|
||||
parseOptions: {
|
||||
preserveWhitespace: 'full',
|
||||
},
|
||||
}
|
||||
|
||||
const CustomTableCell = TableCell.extend({
|
||||
addAttributes() {
|
||||
return {
|
||||
@@ -539,6 +545,9 @@ const editor = useEditor({
|
||||
onUpdate: () => {
|
||||
bubbleNow()
|
||||
},
|
||||
parseOptions: {
|
||||
preserveWhitespace: 'full',
|
||||
},
|
||||
})
|
||||
|
||||
watch(
|
||||
@@ -583,7 +592,7 @@ function bubbleSave() {
|
||||
}
|
||||
|
||||
function exitEditMode() {
|
||||
editor.value?.commands.setContent(lastSavedState, false)
|
||||
editor.value?.commands.setContent(lastSavedState, defaultSetContentOptions)
|
||||
if (isEditing.value) {
|
||||
internalMode.value = 'preview'
|
||||
}
|
||||
@@ -630,7 +639,7 @@ function uploadAndInsertFiles(files: File[] | FileList) {
|
||||
|
||||
const html = editor.value?.getHTML().replace(UPLOAD_PLACEHOLDER_ELEMENT, '') ?? ''
|
||||
|
||||
editor.value?.commands.setContent(html, false)
|
||||
editor.value?.commands.setContent(html, defaultSetContentOptions)
|
||||
|
||||
bubbleSave()
|
||||
})
|
||||
@@ -689,7 +698,7 @@ onBeforeUnmount(() => {
|
||||
|
||||
function setModeAndValue(value: string) {
|
||||
internalMode.value = isEditorContentEmpty(value) ? 'edit' : 'preview'
|
||||
editor.value?.commands.setContent(value, false)
|
||||
editor.value?.commands.setContent(value, defaultSetContentOptions)
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user