Hello!
Here’s my demo editor, modified from prosemirror-example-setup, I’ve added a color markSpec
import {EditorState} from "prosemirror-state"
import {EditorView} from "prosemirror-view"
import {Schema, DOMParser} from "prosemirror-model"
import {schema} from "prosemirror-schema-basic"
import {addListNodes} from "prosemirror-schema-list"
import {exampleSetup} from "prosemirror-example-setup"
const mySchema = new Schema({
nodes: addListNodes(schema.spec.nodes, "paragraph block*", "block"),
marks: {
...schema.spec.marks,
color: {
attrs: {
color: { default: "#333" },
},
parseDOM: [
{
priority: 20,
tag: "span[style*=color]",
getAttrs: (node: HTMLElement) => ({ color: node.getAttribute("data-color") }),
},
],
toDOM(node) {
return ["span", { style: `color: ${node.attrs.color}`, "data-color": `color: ${node.attrs.color}` }];
},
}
}
})
window.view = new EditorView(document.querySelector("#editor"), {
state: EditorState.create({
doc: DOMParser.fromSchema(mySchema).parse(document.querySelector("#content")),
plugins: exampleSetup({schema: mySchema})
})
})
The #content DOM structure is:
<div id="content">
<p><span data-color="#f5222d" style="color: #f5222d">你好</span></p>
</div>
When composing Chinese text between “你” and “好”, the cursor appears after “好”, but I expect it to be positioned before “好”.
