1
0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-07-28 17:02:04 +03:00

Split marks and nodes into their own files

This commit is contained in:
Dan Brown
2022-01-11 16:26:12 +00:00
parent c3595b1807
commit 34db138a64
4 changed files with 92 additions and 83 deletions

View File

@ -5,7 +5,7 @@ import {
import {toggleMark} from "prosemirror-commands";
import {menuBar} from "./menubar"
import schema from "../schema";
import index from "../schema/schema";
function cmdItem(cmd, options) {
@ -53,49 +53,49 @@ function markItem(markType, options) {
}
const inlineStyles = [
markItem(schema.marks.strong, {title: "Bold", icon: icons.strong}),
markItem(schema.marks.em, {title: "Italic", icon: icons.em}),
markItem(schema.marks.underline, {title: "Underline", label: 'U'}),
markItem(schema.marks.strike, {title: "Strikethrough", label: '-S-'}),
markItem(schema.marks.superscript, {title: "Superscript", label: 'sup'}),
markItem(schema.marks.subscript, {title: "Subscript", label: 'sub'}),
markItem(index.marks.strong, {title: "Bold", icon: icons.strong}),
markItem(index.marks.em, {title: "Italic", icon: icons.em}),
markItem(index.marks.underline, {title: "Underline", label: 'U'}),
markItem(index.marks.strike, {title: "Strikethrough", label: '-S-'}),
markItem(index.marks.superscript, {title: "Superscript", label: 'sup'}),
markItem(index.marks.subscript, {title: "Subscript", label: 'sub'}),
];
const formats = [
blockTypeItem(schema.nodes.heading, {
blockTypeItem(index.nodes.heading, {
label: "Header Large",
attrs: {level: 2}
}),
blockTypeItem(schema.nodes.heading, {
blockTypeItem(index.nodes.heading, {
label: "Header Medium",
attrs: {level: 3}
}),
blockTypeItem(schema.nodes.heading, {
blockTypeItem(index.nodes.heading, {
label: "Header Small",
attrs: {level: 4}
}),
blockTypeItem(schema.nodes.heading, {
blockTypeItem(index.nodes.heading, {
label: "Header Tiny",
attrs: {level: 5}
}),
blockTypeItem(schema.nodes.paragraph, {
blockTypeItem(index.nodes.paragraph, {
label: "Paragraph",
attrs: {}
}),
new DropdownSubmenu([
blockTypeItem(schema.nodes.callout, {
blockTypeItem(index.nodes.callout, {
label: "Info Callout",
attrs: {type: 'info'}
}),
blockTypeItem(schema.nodes.callout, {
blockTypeItem(index.nodes.callout, {
label: "Danger Callout",
attrs: {type: 'danger'}
}),
blockTypeItem(schema.nodes.callout, {
blockTypeItem(index.nodes.callout, {
label: "Success Callout",
attrs: {type: 'success'}
}),
blockTypeItem(schema.nodes.callout, {
blockTypeItem(index.nodes.callout, {
label: "Warning Callout",
attrs: {type: 'warning'}
})

View File

@ -0,0 +1,40 @@
import {schema as basicSchema} from "prosemirror-schema-basic";
const baseMarks = basicSchema.spec.marks;
const underline = {
parseDOM: [{tag: "u"}, {style: "text-decoration=underline"}],
toDOM() {
return ["span", {style: "text-decoration: underline;"}, 0];
}
};
const strike = {
parseDOM: [{tag: "s"}, {tag: "strike"}, {style: "text-decoration=line-through"}],
toDOM() {
return ["span", {style: "text-decoration: line-through;"}, 0];
}
};
const superscript = {
parseDOM: [{tag: "sup"}],
toDOM() {
return ["sup", 0];
}
};
const subscript = {
parseDOM: [{tag: "sub"}],
toDOM() {
return ["sub", 0];
}
};
const marks = baseMarks.append({
underline,
strike,
superscript,
subscript,
});
export default marks;

View File

@ -0,0 +1,30 @@
import {schema as basicSchema} from "prosemirror-schema-basic";
import {addListNodes} from "prosemirror-schema-list";
const baseNodes = addListNodes(basicSchema.spec.nodes, "paragraph block*", "block");
const callout = {
attrs: {
type: {default: 'info'},
},
content: "inline*",
group: "block",
defining: true,
parseDOM: [
{tag: 'p.callout.info', attrs: {type: 'info'}, priority: 75,},
{tag: 'p.callout.success', attrs: {type: 'success'}, priority: 75,},
{tag: 'p.callout.danger', attrs: {type: 'danger'}, priority: 75,},
{tag: 'p.callout.warning', attrs: {type: 'warning'}, priority: 75,},
{tag: 'p.callout', attrs: {type: 'info'}, priority: 75},
],
toDOM(node) {
const type = node.attrs.type || 'info';
return ['p', {class: 'callout ' + type}, 0];
}
};
const nodes = baseNodes.append({
callout,
});
export default nodes;

View File

@ -1,72 +1,11 @@
import {Schema} from "prosemirror-model";
import {schema as basicSchema} from "prosemirror-schema-basic";
import {addListNodes} from "prosemirror-schema-list";
const baseNodes = addListNodes(basicSchema.spec.nodes, "paragraph block*", "block");
const baseMarks = basicSchema.spec.marks;
import nodes from "./schema-nodes";
import marks from "./schema-marks";
const nodeCallout = {
attrs: {
type: {default: 'info'},
},
content: "inline*",
group: "block",
defining: true,
parseDOM: [
{tag: 'p.callout.info', attrs: {type: 'info'}, priority: 75,},
{tag: 'p.callout.success', attrs: {type: 'success'}, priority: 75,},
{tag: 'p.callout.danger', attrs: {type: 'danger'}, priority: 75,},
{tag: 'p.callout.warning', attrs: {type: 'warning'}, priority: 75,},
{tag: 'p.callout', attrs: {type: 'info'}, priority: 75},
],
toDOM(node) {
const type = node.attrs.type || 'info';
return ['p', {class: 'callout ' + type}, 0];
}
};
const markUnderline = {
parseDOM: [{tag: "u"}, {style: "text-decoration=underline"}],
toDOM() {
return ["span", {style: "text-decoration: underline;"}, 0];
}
};
const markStrike = {
parseDOM: [{tag: "s"}, {tag: "strike"}, {style: "text-decoration=line-through"}],
toDOM() {
return ["span", {style: "text-decoration: line-through;"}, 0];
}
};
const markSuperscript = {
parseDOM: [{tag: "sup"}],
toDOM() {
return ["sup", 0];
}
};
const markSubscript = {
parseDOM: [{tag: "sub"}],
toDOM() {
return ["sub", 0];
}
};
const customNodes = baseNodes.append({
callout: nodeCallout,
const index = new Schema({
nodes,
marks,
});
const customMarks = baseMarks.append({
underline: markUnderline,
strike: markStrike,
superscript: markSuperscript,
subscript: markSubscript,
});
const schema = new Schema({
nodes: customNodes,
marks: customMarks,
})
export default schema;
export default index;