From 0bcf81a5f974cb5a43e9c1bdf28e3dfd6fb34fcb Mon Sep 17 00:00:00 2001 From: Alexander Ackermann Date: Wed, 16 Sep 2026 03:08:34 +0200 Subject: [PATCH] Revert "fix: remove pasted text/background colors in Tiptap editor (#3275)" This reverts commit a8341a96fb9c7a28bb096a2589c44de4a3bbf664. --- .../src/editor/composables/useTextEditor.ts | 4 --- packages/web-pkg/src/editor/helpers/index.ts | 1 - packages/web-pkg/src/editor/helpers/paste.ts | 29 --------------- .../tests/unit/editor/helpers/paste.spec.ts | 36 ------------------- 4 files changed, 70 deletions(-) delete mode 100644 packages/web-pkg/src/editor/helpers/paste.ts delete mode 100644 packages/web-pkg/tests/unit/editor/helpers/paste.spec.ts diff --git a/packages/web-pkg/src/editor/composables/useTextEditor.ts b/packages/web-pkg/src/editor/composables/useTextEditor.ts index 4a574dee049..4b6f49e59b8 100644 --- a/packages/web-pkg/src/editor/composables/useTextEditor.ts +++ b/packages/web-pkg/src/editor/composables/useTextEditor.ts @@ -18,7 +18,6 @@ import type { import { DEFAULT_YDOC_FRAGMENT } from '../types' import type { EditorAction, EditorActionGroup } from './useEditorActions' import { Mentions, SlashCommands } from '../extensions' -import { stripColorFormattingFromPastedHtml } from '../helpers' import { useContentStrategy } from './useContentStrategy' import { useConfigStore } from '../../composables' import { useYjsCollaborators } from '../../composables/yjs' @@ -188,9 +187,6 @@ export function useTextEditor(options: TextEditorOptions): TextEditorInstance { editorOptions.editorProps = { attributes: editorAttributes, - transformPastedHTML(html: string) { - return stripColorFormattingFromPastedHtml(html) - }, handleDOMEvents: { auxclick(view: Editor['view'], event: Event) { const target = event.target diff --git a/packages/web-pkg/src/editor/helpers/index.ts b/packages/web-pkg/src/editor/helpers/index.ts index d3b826380fe..35c0b57bc54 100644 --- a/packages/web-pkg/src/editor/helpers/index.ts +++ b/packages/web-pkg/src/editor/helpers/index.ts @@ -1,4 +1,3 @@ export * from './actionState' export * from './link' -export * from './paste' export * from './print' diff --git a/packages/web-pkg/src/editor/helpers/paste.ts b/packages/web-pkg/src/editor/helpers/paste.ts deleted file mode 100644 index 7ed72d89f16..00000000000 --- a/packages/web-pkg/src/editor/helpers/paste.ts +++ /dev/null @@ -1,29 +0,0 @@ -const STYLE_PROPERTIES_TO_REMOVE_ON_PASTE = ['color', 'background-color'] as const -const HTML_ATTRIBUTES_TO_REMOVE_ON_PASTE = ['color', 'bgcolor'] as const - -export function stripColorFormattingFromPastedHtml(html: string): string { - if (!html || typeof DOMParser === 'undefined') { - return html - } - - const parsedHtml = new DOMParser().parseFromString(html, 'text/html') - const allElements = parsedHtml.body.querySelectorAll('*') - - allElements.forEach((element) => { - if (element.hasAttribute('style')) { - STYLE_PROPERTIES_TO_REMOVE_ON_PASTE.forEach((propertyName) => { - element.style.removeProperty(propertyName) - }) - - if (!element.style.cssText.trim()) { - element.removeAttribute('style') - } - } - - HTML_ATTRIBUTES_TO_REMOVE_ON_PASTE.forEach((attributeName) => { - element.removeAttribute(attributeName) - }) - }) - - return parsedHtml.body.innerHTML -} diff --git a/packages/web-pkg/tests/unit/editor/helpers/paste.spec.ts b/packages/web-pkg/tests/unit/editor/helpers/paste.spec.ts deleted file mode 100644 index 17127f3a619..00000000000 --- a/packages/web-pkg/tests/unit/editor/helpers/paste.spec.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { describe, expect, it } from 'vitest' -import { stripColorFormattingFromPastedHtml } from '../../../../src/editor/helpers/paste' - -describe('stripColorFormattingFromPastedHtml', () => { - it('removes color and background-color styles but keeps other styles', () => { - const transformedHtml = stripColorFormattingFromPastedHtml( - '

Styled

' - ) - const parsedHtml = new DOMParser().parseFromString(transformedHtml, 'text/html') - const span = parsedHtml.body.querySelector('span') - - expect(span?.getAttribute('style')).toContain('font-weight') - expect(span?.style.color).toBe('') - expect(span?.style.backgroundColor).toBe('') - }) - - it('removes style attribute when only color styles were present', () => { - const transformedHtml = stripColorFormattingFromPastedHtml( - '

Styled

' - ) - const parsedHtml = new DOMParser().parseFromString(transformedHtml, 'text/html') - const span = parsedHtml.body.querySelector('span') - - expect(span?.hasAttribute('style')).toBe(false) - }) - - it('removes deprecated color and bgcolor attributes', () => { - const transformedHtml = stripColorFormattingFromPastedHtml( - '

Legacy
Cell

' - ) - const parsedHtml = new DOMParser().parseFromString(transformedHtml, 'text/html') - - expect(parsedHtml.body.querySelector('[color]')).toBeNull() - expect(parsedHtml.body.querySelector('[bgcolor]')).toBeNull() - }) -})