From ecfa26b28adbfde4c18f749e0bb838fadebf3494 Mon Sep 17 00:00:00 2001 From: Hans Pagel Date: Wed, 30 Sep 2020 16:33:13 +0200 Subject: [PATCH] add support to configure the languageClassPrefix --- docs/src/docPages/api/extensions/code-block.md | 7 ++++--- packages/extension-code-block/index.ts | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/docs/src/docPages/api/extensions/code-block.md b/docs/src/docPages/api/extensions/code-block.md index 7f58eff6..6608c521 100644 --- a/docs/src/docPages/api/extensions/code-block.md +++ b/docs/src/docPages/api/extensions/code-block.md @@ -17,9 +17,10 @@ yarn add @tiptap/extension-code-block ``` ## Settings -| Option | Type | Default | Description | -| ------ | ------ | ------- | -------------------------------------------- | -| class | string | – | Add a custom class to the rendered HTML tag. | +| Option | Type | Default | Description | +| ------------------- | ------ | --------- | ---------------------------------------------------------------- | +| class | string | – | Add a custom class to the rendered HTML tag. | +| languageClassPrefix | string | language- | Adds a prefix to language classes that are applied to code tags. | ## Commands | Command | Options | Description | diff --git a/packages/extension-code-block/index.ts b/packages/extension-code-block/index.ts index 66a670d1..4ee60c57 100644 --- a/packages/extension-code-block/index.ts +++ b/packages/extension-code-block/index.ts @@ -1,6 +1,10 @@ import { Command, Node } from '@tiptap/core' import { textblockTypeInputRule } from 'prosemirror-inputrules' +export interface CodeBlockOptions { + languageClassPrefix: string, +} + export type CodeBlockCommand = () => Command declare module '@tiptap/core/src/Editor' { @@ -11,9 +15,12 @@ declare module '@tiptap/core/src/Editor' { export const inputRegex = /^```(?[a-z]*)? $/ -export default new Node() +export default new Node() .name('code_block') - .schema(() => ({ + .defaults({ + languageClassPrefix: 'language-', + }) + .schema(({ options }) => ({ attrs: { language: { default: null, @@ -42,11 +49,13 @@ export default new Node() return null } - return { language: classAttribute.replace(/^(language-)/, '') } + const regexLanguageClassPrefix = new RegExp(`^(${options.languageClassPrefix})`) + + return { language: classAttribute.replace(regexLanguageClassPrefix, '') } }, }, ], - toDOM: node => ['pre', ['code', { class: node.attrs.language && `language-${node.attrs.language}` }, 0]], + toDOM: node => ['pre', ['code', { class: node.attrs.language && options.languageClassPrefix + node.attrs.language }, 0]], })) .commands(({ name }) => ({ codeBlock: attrs => ({ commands }) => {