import { HTMLConvertorMap } from '@toast-ui/toastmark'; import { history } from 'prosemirror-history'; import MarkdownEditor from '@/markdown/mdEditor'; export function getTextContent(editor: MarkdownEditor) { const { doc } = editor.view.state; const docSize = doc.content.size; let text = ''; doc.nodesBetween(0, docSize, (node, pos) => { if (node.isText) { text += node.text!.slice(Math.max(0, pos) - pos, docSize - pos); } else if (node.isBlock && pos > 0) { text += '\n'; } }); return text; } export function removeDataAttr(html: string) { return html.replace(/\sdata-nodeid="\d{1,}"/g, '').trim(); } export function createHTMLrenderer() { const customHTMLRenderer: HTMLConvertorMap = { htmlBlock: { // @ts-ignore iframe(node: MdLikeNode) { return [ { type: 'openTag', tagName: 'iframe', outerNewLine: true, attributes: node.attrs }, { type: 'html', content: node.childrenHTML }, { type: 'closeTag', tagName: 'iframe', outerNewLine: true }, ]; }, }, htmlInline: { // @ts-ignore big(node: MdLikeNode, { entering }: Context) { return entering ? { type: 'openTag', tagName: 'big', attributes: node.attrs } : { type: 'closeTag', tagName: 'big' }; }, }, }; return customHTMLRenderer; } export class TestEditorWithNoneDelayHistory extends MarkdownEditor { get defaultPlugins() { return [...this.keymaps, history({ newGroupDelay: -1 })]; } }