From 85fcc29ac6ef9e07847d5e0a5cdd318f4300a832 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20K=C3=BChn?= Date: Wed, 26 Jan 2022 09:32:29 +0100 Subject: [PATCH] fix: add attributes to pre tag instead of code tag by default, fix #2440 --- .../injectExtensionAttributesToParseRule.ts | 30 ++++++++----------- .../extension-code-block/src/code-block.ts | 28 +++++++++-------- 2 files changed, 28 insertions(+), 30 deletions(-) diff --git a/packages/core/src/helpers/injectExtensionAttributesToParseRule.ts b/packages/core/src/helpers/injectExtensionAttributesToParseRule.ts index 9452647d..3bc0ae18 100644 --- a/packages/core/src/helpers/injectExtensionAttributesToParseRule.ts +++ b/packages/core/src/helpers/injectExtensionAttributesToParseRule.ts @@ -25,26 +25,20 @@ export function injectExtensionAttributesToParseRule(parseRule: ParseRule, exten return false } - const newAttributes = extensionAttributes - .filter(item => item.attribute.rendered) - .reduce((items, item) => { - const value = item.attribute.parseHTML - ? item.attribute.parseHTML(node as HTMLElement) - : fromString((node as HTMLElement).getAttribute(item.name)) + const newAttributes = extensionAttributes.reduce((items, item) => { + const value = item.attribute.parseHTML + ? item.attribute.parseHTML(node as HTMLElement) + : fromString((node as HTMLElement).getAttribute(item.name)) - if (isObject(value)) { - console.warn(`[tiptap warn]: BREAKING CHANGE: "parseHTML" for your attribute "${item.name}" returns an object but should return the value itself. If this is expected you can ignore this message. This warning will be removed in one of the next releases. Further information: https://github.com/ueberdosis/tiptap/issues/1863`) - } + if (value === null || value === undefined) { + return items + } - if (value === null || value === undefined) { - return items - } - - return { - ...items, - [item.name]: value, - } - }, {}) + return { + ...items, + [item.name]: value, + } + }, {}) return { ...oldAttributes, ...newAttributes } }, diff --git a/packages/extension-code-block/src/code-block.ts b/packages/extension-code-block/src/code-block.ts index 69bdc34d..bd7632e7 100644 --- a/packages/extension-code-block/src/code-block.ts +++ b/packages/extension-code-block/src/code-block.ts @@ -1,4 +1,4 @@ -import { Node, textblockTypeInputRule } from '@tiptap/core' +import { Node, textblockTypeInputRule, mergeAttributes } from '@tiptap/core' import { Plugin, PluginKey, TextSelection } from 'prosemirror-state' export interface CodeBlockOptions { @@ -81,15 +81,7 @@ export const CodeBlock = Node.create({ return language }, - renderHTML: attributes => { - if (!attributes.language) { - return null - } - - return { - class: this.options.languageClassPrefix + attributes.language, - } - }, + rendered: false, }, } }, @@ -103,8 +95,20 @@ export const CodeBlock = Node.create({ ] }, - renderHTML({ HTMLAttributes }) { - return ['pre', this.options.HTMLAttributes, ['code', HTMLAttributes, 0]] + renderHTML({ node, HTMLAttributes }) { + return [ + 'pre', + mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), + [ + 'code', + { + class: node.attrs.language + ? this.options.languageClassPrefix + node.attrs.language + : null, + }, + 0, + ], + ] }, addCommands() {