From 3158c37324420fb4c2414f47132e72a2836a63b4 Mon Sep 17 00:00:00 2001 From: aguingand Date: Thu, 18 Nov 2021 12:44:34 +0100 Subject: [PATCH] feat: Allow array of extensions for `enableInputRules` and `enablePasteRules` options (#2119) --- packages/core/src/ExtensionManager.ts | 5 +++-- .../core/src/helpers/isExtensionRulesEnabled.ts | 15 +++++++++++++++ packages/core/src/types.ts | 6 ++++-- 3 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 packages/core/src/helpers/isExtensionRulesEnabled.ts diff --git a/packages/core/src/ExtensionManager.ts b/packages/core/src/ExtensionManager.ts index afd5c0a7..c3f6cd61 100644 --- a/packages/core/src/ExtensionManager.ts +++ b/packages/core/src/ExtensionManager.ts @@ -13,6 +13,7 @@ import getNodeType from './helpers/getNodeType' import splitExtensions from './helpers/splitExtensions' import getAttributesFromExtensions from './helpers/getAttributesFromExtensions' import getRenderedAttributes from './helpers/getRenderedAttributes' +import isExtensionRulesEnabled from './helpers/isExtensionRulesEnabled' import callOrReturn from './utilities/callOrReturn' import findDuplicates from './utilities/findDuplicates' import { NodeConfig } from '.' @@ -270,7 +271,7 @@ export default class ExtensionManager { context, ) - if (editor.options.enableInputRules && addInputRules) { + if (isExtensionRulesEnabled(extension, editor.options.enableInputRules) && addInputRules) { inputRules.push(...addInputRules()) } @@ -280,7 +281,7 @@ export default class ExtensionManager { context, ) - if (editor.options.enablePasteRules && addPasteRules) { + if (isExtensionRulesEnabled(extension, editor.options.enablePasteRules) && addPasteRules) { pasteRules.push(...addPasteRules()) } diff --git a/packages/core/src/helpers/isExtensionRulesEnabled.ts b/packages/core/src/helpers/isExtensionRulesEnabled.ts new file mode 100644 index 00000000..f8886283 --- /dev/null +++ b/packages/core/src/helpers/isExtensionRulesEnabled.ts @@ -0,0 +1,15 @@ +import { AnyExtension, EnableRules } from '@tiptap/core' + +export default function isExtensionRulesEnabled(extension: AnyExtension, enabled: EnableRules): boolean { + if (Array.isArray(enabled)) { + return enabled.some(enabledExtension => { + const name = typeof enabledExtension === 'string' + ? enabledExtension + : enabledExtension.name + + return name === extension.name + }) + } + + return enabled +} diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index 2071e61e..68684db0 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -63,6 +63,8 @@ export interface EditorEvents { destroy: void, } +export type EnableRules = (AnyExtension | string)[] | boolean + export interface EditorOptions { element: Element, content: Content, @@ -72,8 +74,8 @@ export interface EditorOptions { editable: boolean, editorProps: EditorProps, parseOptions: ParseOptions, - enableInputRules: boolean, - enablePasteRules: boolean, + enableInputRules: EnableRules, + enablePasteRules: EnableRules, enableCoreExtensions: boolean, onBeforeCreate: (props: EditorEvents['beforeCreate']) => void, onCreate: (props: EditorEvents['create']) => void,