UNPKG

@curvenote/schema

Version:

Schema and markdown parser for @curvenote/editor

83 lines 3.61 kB
import { Schema } from 'prosemirror-model'; import * as basic from './nodes/basic'; import { nodes as tableNodes } from './nodes/table'; import * as basicMarks from './marks'; import * as Nodes from './nodes'; export const listNodes = { ordered_list: basic.ordered_list, bullet_list: basic.bullet_list, list_item: basic.list_item, }; export const presentationalNodes = { aside: Nodes.Aside.default, callout: Nodes.Callout.default, link_block: Nodes.LinkBlock.default, iframe: Nodes.IFrame.default, }; export const citationNodes = { cite: Nodes.Cite.default, cite_group: Nodes.CiteGroup.default, }; export const mathNodes = { math: Nodes.Math.default, equation: Nodes.Equation.default, }; export const mathNodesNoDisplay = { math: Nodes.Math.mathNoDisplay, equation: Nodes.Equation.equationNoDisplay, }; export const reactiveDisplayNodes = { // Does NOT include variable definitions display: Nodes.Display.default, dynamic: Nodes.Dynamic.default, range: Nodes.Range.default, switch: Nodes.Switch.default, button: Nodes.Button.default, }; export const reactiveNodes = Object.assign({ variable: Nodes.Variable.default }, reactiveDisplayNodes); export const nodes = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ // Basic markdown doc: basic.doc, text: basic.text, paragraph: basic.paragraph, heading: Nodes.Heading.default, footnote: Nodes.Footnote.default, blockquote: basic.blockquote, code_block: Nodes.Code.default, figure: Nodes.Figure.default, figcaption: Nodes.Figcaption.default, image: Nodes.Image.default, horizontal_rule: basic.horizontal_rule, hard_break: basic.hard_break, time: Nodes.Time.default }, listNodes), tableNodes), presentationalNodes), citationNodes), mathNodes), reactiveNodes); export const marks = { link: basicMarks.link, code: basicMarks.code, em: basicMarks.em, strong: basicMarks.strong, superscript: basicMarks.superscript, subscript: basicMarks.subscript, strikethrough: basicMarks.strikethrough, underline: basicMarks.underline, abbr: basicMarks.abbr, }; export const presets = { full: { nodes, marks, }, paragraph: { nodes: Object.assign(Object.assign(Object.assign({ doc: basic.docParagraph, paragraph: basic.paragraph, text: basic.text, hard_break: basic.hard_break, time: Nodes.Time.default, footnote: Nodes.Footnote.default }, citationNodes), { math: mathNodes.math }), reactiveDisplayNodes), marks, }, comment: { nodes: Object.assign(Object.assign(Object.assign({ doc: basic.docComment, paragraph: basic.paragraph, heading: Nodes.Heading.default, text: basic.text, blockquote: basic.blockquote, footnote: Nodes.Footnote.default, code_block: Nodes.Code.default, horizontal_rule: basic.horizontal_rule, hard_break: basic.hard_break, time: Nodes.Time.default, mention: Nodes.Mention.default }, listNodes), citationNodes), mathNodesNoDisplay), marks, }, }; export function getSchema(useSchema) { if (typeof useSchema === 'string') { switch (useSchema) { case 'full': return new Schema(presets.full); case 'paragraph': return new Schema(presets.paragraph); case 'comment': return new Schema(presets.comment); default: throw new Error(`Schema '${useSchema}' is not defined.`); } } if ('spec' in useSchema) return useSchema; return new Schema(useSchema); } //# sourceMappingURL=schemas.js.map