|
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, |
|
}) |
|
} |