27 lines
661 B
TypeScript
27 lines
661 B
TypeScript
import { Node as ProsemirrorNode, Mark } from "prosemirror-model";
|
|
import { EditorState } from "prosemirror-state";
|
|
import Node from "../nodes/Node";
|
|
|
|
export default function getMarkAttrs(state: EditorState, type: Node) {
|
|
const { from, to } = state.selection;
|
|
let marks: Mark[] = [];
|
|
|
|
state.doc.nodesBetween(from, to, (node: ProsemirrorNode) => {
|
|
marks = [...marks, ...node.marks];
|
|
|
|
if (node.content) {
|
|
node.content.forEach((content) => {
|
|
marks = [...marks, ...content.marks];
|
|
});
|
|
}
|
|
});
|
|
|
|
const mark = marks.find((markItem) => markItem.type.name === type.name);
|
|
|
|
if (mark) {
|
|
return mark.attrs;
|
|
}
|
|
|
|
return {};
|
|
}
|