diff options
Diffstat (limited to 'app/assets/javascripts/content_editor/extensions/blockquote.js')
-rw-r--r-- | app/assets/javascripts/content_editor/extensions/blockquote.js | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/app/assets/javascripts/content_editor/extensions/blockquote.js b/app/assets/javascripts/content_editor/extensions/blockquote.js index 45f53fe230b..4512ead44bc 100644 --- a/app/assets/javascripts/content_editor/extensions/blockquote.js +++ b/app/assets/javascripts/content_editor/extensions/blockquote.js @@ -1 +1,33 @@ -export { Blockquote as default } from '@tiptap/extension-blockquote'; +import { Blockquote } from '@tiptap/extension-blockquote'; +import { wrappingInputRule } from 'prosemirror-inputrules'; +import { getParents } from '~/lib/utils/dom_utils'; +import { getMarkdownSource } from '../services/markdown_sourcemap'; + +export const multilineInputRegex = /^\s*>>>\s$/gm; + +export default Blockquote.extend({ + addAttributes() { + return { + ...this.parent?.(), + + multiline: { + default: false, + parseHTML: (element) => { + const source = getMarkdownSource(element); + const parentsIncludeBlockquote = getParents(element).some( + (p) => p.nodeName.toLowerCase() === 'blockquote', + ); + + return source && !source.startsWith('>') && !parentsIncludeBlockquote; + }, + }, + }; + }, + + addInputRules() { + return [ + ...this.parent?.(), + wrappingInputRule(multilineInputRegex, this.type, () => ({ multiline: true })), + ]; + }, +}); |