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() {