Hello,
I updated my interpretation of the tooltip / menu plugins to include list commands, but facing some issues:
// Buttons in toolbox. They have a command assignment (command), and DOM representation description (dom).
let toolboxButtons = [
{command: toggleMark(editorSchema.marks.strong), dom: toolboxButton(null, "bold")},
{command: toggleMark(editorSchema.marks.em), dom: toolboxButton(null, "italic")},
{command: setBlockType(editorSchema.nodes.paragraph), dom: toolboxButton("p", null)},
heading(1), heading(2), heading(3),
{command: wrapInList(editorSchema.nodes.bullet_list), dom: toolboxButton(null, "list-bulleted")},
{command: wrapInList(editorSchema.nodes.ordered_list), dom: toolboxButton(null, "list-numbered")},
{command: wrapIn(editorSchema.nodes.blockquote), dom: toolboxButton(null, "quote")}
];
I used this as the schema definition and editor:
export const editorSchema = new Schema({
nodes: addListNodes(schema.spec.nodes, "paragraph block*", "block"),
marks: schema.spec.marks
});
//- Editor
let content = document.getElementById("content")
let state = EditorState.create({
doc: DOMParser.fromSchema(editorSchema).parse(content),
editorSchema,
plugins: [
history(),
keymap({"Mod-z": undo, "Mod-y": redo}),
keymap(baseKeymap),
toolboxPlugin({schema: editorSchema})
]
})
Mainly, a switch from simple schema to schema with list nodes.
Issue #1: As soon as I pass this new schema to commands, all of them stop working except the toggleMark. What am I missing? They work with the simple schema.
Issue #2: I re-defined the same schema variable in the plugin file as I could not find a good way to pass the schema from Editor → toolboxPlugin → commands array. Is that OK? How would you do this?
Toolbox plugin definition:
export function toolboxPlugin(args) {
return new Plugin({
view(editorView) {
// Create new class to hold editor and internal state such as editorView, HTML Dom elements, commands
let toolboxView = new ToolboxView(toolboxButtons, editorView)
// Append DOM portion of toolbox to current editor.
editorView.dom.parentNode.appendChild(toolboxView.dom);
// Return toolbox class. Caller will call its update method in every editor update.
return toolboxView;
}
})
}
Issue #3: Is this the right way to define commands for ordered/unordered lists? What else do I need?
{command: wrapInList(editorSchema.nodes.bullet_list), dom: toolboxButton(null, "list-bulleted")},
{command: wrapInList(editorSchema.nodes.ordered_list), dom: toolboxButton(null, "list-numbered")},
Original code before above updates: toolbar-plugin/toolboxPlugin.js at master · buzz-software/toolbar-plugin · GitHub