Spaces:
No application file
No application file
| import { EditorState } from 'prosemirror-state'; | |
| import { type DirectEditorProps, EditorView } from 'prosemirror-view'; | |
| import { Schema, DOMParser } from 'prosemirror-model'; | |
| import { buildPlugins, type PluginOptions } from './plugins/index'; | |
| import { schemaNodes, schemaMarks } from './schema/index'; | |
| const schema = new Schema({ | |
| nodes: schemaNodes, | |
| marks: schemaMarks, | |
| }); | |
| export const createDocument = (content: string) => { | |
| const htmlString = `<div>${content}</div>`; | |
| const parser = new window.DOMParser(); | |
| const element = parser.parseFromString(htmlString, 'text/html').body.firstElementChild; | |
| return DOMParser.fromSchema(schema).parse(element as Element); | |
| }; | |
| export const initProsemirrorEditor = ( | |
| dom: Element, | |
| content: string, | |
| props: Omit<DirectEditorProps, 'state'>, | |
| pluginOptions?: PluginOptions, | |
| ) => { | |
| return new EditorView(dom, { | |
| state: EditorState.create({ | |
| doc: createDocument(content), | |
| plugins: buildPlugins(schema, pluginOptions), | |
| }), | |
| ...props, | |
| }); | |
| }; | |