import { Mark as ProsemirrorMark, DOMOutputSpec } from 'prosemirror-model'; import { toggleMark } from 'prosemirror-commands'; import Mark from '@/spec/mark'; import { getCustomAttrs, getDefaultCustomAttrs } from '@/wysiwyg/helper/node'; import { EditorCommand } from '@t/spec'; export class Strike extends Mark { get name() { return 'strike'; } get schema() { const parseDOM = ['s', 'del'].map((tag) => { return { tag, getAttrs(dom: Node | string) { const rawHTML = (dom as HTMLElement).getAttribute('data-raw-html'); return { ...(rawHTML && { rawHTML }), }; }, }; }); return { attrs: { rawHTML: { default: null }, ...getDefaultCustomAttrs(), }, parseDOM, toDOM({ attrs }: ProsemirrorMark): DOMOutputSpec { return [attrs.rawHTML || 'del', getCustomAttrs(attrs)]; }, }; } commands(): EditorCommand { return () => (state, dispatch) => toggleMark(state.schema.marks.strike)(state, dispatch); } keymaps() { const strikeCommand = this.commands()(); return { 'Mod-s': strikeCommand, 'Mod-S': strikeCommand, }; } }