From fe210f68edbae1183b610716dba917a3fbc87748 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philipp=20Ku=CC=88hn?= Date: Wed, 10 Oct 2018 15:08:37 +0200 Subject: [PATCH] fix toggle blockquotes --- .../tiptap-commands/src/commands/toggleWrap.js | 14 ++++++++++++++ packages/tiptap-commands/src/index.js | 2 ++ packages/tiptap-extensions/src/nodes/Blockquote.js | 12 ++++++------ 3 files changed, 22 insertions(+), 6 deletions(-) create mode 100644 packages/tiptap-commands/src/commands/toggleWrap.js diff --git a/packages/tiptap-commands/src/commands/toggleWrap.js b/packages/tiptap-commands/src/commands/toggleWrap.js new file mode 100644 index 00000000..e8d0c942 --- /dev/null +++ b/packages/tiptap-commands/src/commands/toggleWrap.js @@ -0,0 +1,14 @@ +import { wrapIn, lift } from 'prosemirror-commands' +import { nodeIsActive } from 'tiptap-utils' + +export default function (type) { + return (state, dispatch, view) => { + const isActive = nodeIsActive(state, type) + + if (isActive) { + return lift(state, dispatch) + } + + return wrapIn(type)(state, dispatch, view) + } +} diff --git a/packages/tiptap-commands/src/index.js b/packages/tiptap-commands/src/index.js index 0b83c23f..0701c096 100644 --- a/packages/tiptap-commands/src/index.js +++ b/packages/tiptap-commands/src/index.js @@ -46,6 +46,7 @@ import setInlineBlockType from './commands/setInlineBlockType' import splitToDefaultListItem from './commands/splitToDefaultListItem' import toggleBlockType from './commands/toggleBlockType' import toggleList from './commands/toggleList' +import toggleWrap from './commands/toggleWrap' import updateMark from './commands/updateMark' export { @@ -95,5 +96,6 @@ export { splitToDefaultListItem, toggleBlockType, toggleList, + toggleWrap, updateMark, } diff --git a/packages/tiptap-extensions/src/nodes/Blockquote.js b/packages/tiptap-extensions/src/nodes/Blockquote.js index 0823c89c..7605a335 100644 --- a/packages/tiptap-extensions/src/nodes/Blockquote.js +++ b/packages/tiptap-extensions/src/nodes/Blockquote.js @@ -1,5 +1,5 @@ -import { Node, Plugin } from 'tiptap' -import { wrappingInputRule, wrapIn } from 'tiptap-commands' +import { Node } from 'tiptap' +import { wrappingInputRule, toggleWrap } from 'tiptap-commands' export default class BlockquoteNode extends Node { @@ -9,7 +9,7 @@ export default class BlockquoteNode extends Node { get schema() { return { - content: 'block+', + content: 'block*', group: 'block', defining: true, draggable: false, @@ -20,13 +20,13 @@ export default class BlockquoteNode extends Node { } } - command({ type }) { - return wrapIn(type) + command({ type, schema }) { + return toggleWrap(type, schema.nodes.paragraph) } keys({ type }) { return { - 'Ctrl->': wrapIn(type), + 'Ctrl->': toggleWrap(type), } }