2021-01-04 16:19:24 +00:00
|
|
|
import { MenuItem } from "prosemirror-menu";
|
|
|
|
import { buildMenuItems } from "prosemirror-example-setup";
|
|
|
|
|
|
|
|
import { writeFreelySchema } from "./schema";
|
|
|
|
|
|
|
|
function canInsert(state, nodeType, attrs) {
|
2021-01-07 23:33:35 +00:00
|
|
|
let $from = state.selection.$from;
|
|
|
|
for (let d = $from.depth; d >= 0; d--) {
|
|
|
|
let index = $from.index(d);
|
|
|
|
if ($from.node(d).canReplaceWith(index, index, nodeType, attrs))
|
|
|
|
return true;
|
2021-01-04 16:19:24 +00:00
|
|
|
}
|
2021-01-07 23:33:35 +00:00
|
|
|
return false;
|
|
|
|
}
|
2021-01-04 16:19:24 +00:00
|
|
|
|
|
|
|
const ReadMoreItem = new MenuItem({
|
2021-01-07 23:33:35 +00:00
|
|
|
label: "Read more",
|
|
|
|
select: (state) => canInsert(state, writeFreelySchema.nodes.readmore),
|
|
|
|
run(state, dispatch) {
|
|
|
|
dispatch(
|
|
|
|
state.tr.replaceSelectionWith(writeFreelySchema.nodes.readmore.create())
|
|
|
|
);
|
|
|
|
},
|
2021-01-04 16:19:24 +00:00
|
|
|
});
|
|
|
|
|
2021-01-07 23:33:35 +00:00
|
|
|
export const getMenu = () => {
|
|
|
|
const menuContent = [
|
|
|
|
...buildMenuItems(writeFreelySchema).fullMenu,
|
|
|
|
[ReadMoreItem],
|
|
|
|
];
|
|
|
|
return menuContent;
|
|
|
|
};
|