From a64ab426d0c3f64fe30bcb7ce38d1975bd3e2a41 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Fri, 15 Nov 2019 12:01:30 +0200 Subject: [PATCH] break into nodes and marks files --- .../src/editoria/EditoriaSchema.js | 699 +----------------- wax-prosemirror-schema/src/editoria/marks.js | 259 +++++++ wax-prosemirror-schema/src/editoria/nodes.js | 437 +++++++++++ 3 files changed, 700 insertions(+), 695 deletions(-) create mode 100644 wax-prosemirror-schema/src/editoria/marks.js create mode 100644 wax-prosemirror-schema/src/editoria/nodes.js diff --git a/wax-prosemirror-schema/src/editoria/EditoriaSchema.js b/wax-prosemirror-schema/src/editoria/EditoriaSchema.js index e0fdba73b..a8411b0c8 100644 --- a/wax-prosemirror-schema/src/editoria/EditoriaSchema.js +++ b/wax-prosemirror-schema/src/editoria/EditoriaSchema.js @@ -1,700 +1,9 @@ -import { parseFormatList, parseTracks, blockLevelToDOM } from "./helpers"; +import nodes from "./nodes"; +import marks from "./marks"; -// Npdes -const pDOM = ["p", 0], - brDOM = ["br"], - blockquoteDOM = ["blockquote", 0]; - -//Marks -const emDOM = ["em", 0], - strongDOM = ["strong", 0], - codeDOM = ["code", 0]; const EditoriaSchema = { - nodes: { - doc: { - content: "block+" - }, - - text: { - group: "inline" - }, - - hard_break: { - inline: true, - group: "inline", - selectable: false, - parseDOM: [{ tag: "br" }], - toDOM() { - return brDOM; - } - }, - image: { - inline: true, - attrs: { - src: {}, - alt: { default: null }, - title: { default: null }, - track: { default: [] } - }, - group: "inline", - draggable: true, - parseDOM: [ - { - tag: "img[src]", - getAttrs(dom) { - return { - src: dom.getAttribute("src"), - title: dom.getAttribute("title"), - track: parseTracks(dom.dataset.track), - alt: dom.getAttribute("alt") - }; - } - } - ], - toDOM(node) { - const attrs = {}; - let temp = ""; - if (node.attrs.track.length) { - attrs["data-track"] = JSON.stringify(node.attrs.track); - } - let { src, alt, title } = node.attrs; - return ["img", { src, alt, title }]; - } - }, - paragraph: { - group: "block", - content: "inline*", - attrs: { - class: { default: "paragraph" }, - track: { default: [] } - }, - parseDOM: [ - { - tag: "p.paragraph", - getAttrs(dom) { - return { - class: dom.getAttribute("class"), - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = blockLevelToDOM(node); - return ["p", attrs, 0]; - } - }, - author: { - content: "inline*", - group: "block", - priority: 0, - defining: true, - attrs: { - class: { default: "author" }, - track: { default: [] } - }, - parseDOM: [ - { - tag: "p.author", - getAttrs(dom) { - return { - class: dom.getAttribute("class"), - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = blockLevelToDOM(node); - return ["p", attrs, 0]; - } - }, - epigraphProse: { - content: "inline*", - group: "block", - priority: 0, - defining: true, - attrs: { - class: { default: "epigraph-prose" }, - track: { default: [] } - }, - parseDOM: [ - { - tag: "p.epigraph-prose", - getAttrs(dom) { - return { - class: dom.getAttribute("class"), - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = blockLevelToDOM(node); - return ["p", attrs, 0]; - } - }, - epigraphPoetry: { - content: "inline*", - group: "block", - priority: 0, - defining: true, - attrs: { - class: { default: "epigraph-poetry" }, - track: { default: [] } - }, - parseDOM: [ - { - tag: "p.epigraph-poetry", - getAttrs(dom) { - return { - class: dom.getAttribute("class"), - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = blockLevelToDOM(node); - return ["p", attrs, 0]; - } - }, - sourceNote: { - content: "inline*", - group: "block", - priority: 0, - defining: true, - attrs: { - class: { default: "source-note" }, - track: { default: [] } - }, - parseDOM: [ - { - tag: "p.source-note", - getAttrs(dom) { - return { - class: dom.getAttribute("class"), - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = blockLevelToDOM(node); - return ["p", attrs, 0]; - } - }, - paragraphCont: { - content: "inline*", - group: "block", - priority: 0, - defining: true, - attrs: { - class: { default: "paragraph-cont" }, - track: { default: [] } - }, - parseDOM: [ - { - tag: "p.paragraph-cont", - getAttrs(dom) { - return { - class: dom.getAttribute("class"), - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = blockLevelToDOM(node); - return ["p", attrs, 0]; - } - }, - extractProse: { - content: "inline*", - group: "block", - priority: 0, - defining: true, - attrs: { - class: { default: "extract-prose" }, - track: { default: [] } - }, - parseDOM: [ - { - tag: "p.extract-prose", - getAttrs(dom) { - return { - class: dom.getAttribute("class"), - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = blockLevelToDOM(node); - return ["p", attrs, 0]; - } - }, - extractPoetry: { - content: "inline*", - group: "block", - priority: 0, - defining: true, - attrs: { - class: { default: "extract-poetry" }, - track: { default: [] } - }, - parseDOM: [ - { - tag: "p.extract-poetry", - getAttrs(dom) { - return { - class: dom.getAttribute("class"), - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = blockLevelToDOM(node); - return ["p", attrs, 0]; - } - }, - title: { - content: "inline*", - group: "block", - priority: 0, - defining: true, - attrs: { - class: { default: "title" }, - track: { default: [] } - }, - parseDOM: [ - { - tag: "p.title", - getAttrs(dom) { - return { - class: dom.getAttribute("class"), - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = blockLevelToDOM(node); - return ["p", attrs, 0]; - } - }, - subtitle: { - content: "inline*", - group: "block", - priority: 0, - defining: true, - attrs: { - class: { default: "cst" }, - track: { default: [] } - }, - parseDOM: [ - { - tag: "p.cst", - getAttrs(dom) { - return { - class: dom.getAttribute("class"), - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = blockLevelToDOM(node); - return ["p", attrs, 0]; - } - }, - heading: { - attrs: { - level: { default: 1 }, - track: { default: [] } - }, - content: "inline*", - group: "block", - defining: true, - parseDOM: [ - { - tag: "h1", - attrs: { level: 1 }, - getAttrs(dom) { - return { - track: parseTracks(dom.dataset.track) - }; - } - }, - { - tag: "h2", - attrs: { level: 2 }, - getAttrs(dom) { - return { - track: parseTracks(dom.dataset.track) - }; - } - }, - { - tag: "h3", - attrs: { level: 3 }, - getAttrs(dom) { - return { - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = {}; - if (node.attrs.track.length) { - attrs["data-track"] = JSON.stringify(node.attrs.track); - } - return [`h${node.attrs.level}`, attrs, 0]; - } - }, - ordered_list: { - group: "block", - content: "list_item+", - attrs: { - order: { default: 1 }, - track: { default: [] } - }, - parseDOM: [ - { - tag: "ol", - getAttrs(dom) { - return { - order: dom.hasAttribute("start") ? +dom.getAttribute("start") : 1, - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = {}; - if (node.attrs.order !== 1) { - attrs.start = node.attrs.order; - } - if (node.attrs.track.length) { - attrs["data-track"] = JSON.stringify(node.attrs.track); - } - return ["ol", attrs, 0]; - } - }, - bullet_list: { - group: "block", - content: "list_item+", - attrs: { - track: { default: [] } - }, - parseDOM: [ - { - tag: "ul", - getAttrs(dom) { - return { - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = {}; - if (node.attrs.track.length) { - attrs["data-track"] = JSON.stringify(node.attrs.track); - } - return ["ul", attrs, 0]; - } - }, - list_item: { - content: "block+", - attrs: { - track: { default: [] } - }, - parseDOM: [ - { - tag: "li", - getAttrs(dom) { - return { - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = {}; - if (node.attrs.track.length) { - attrs["data-track"] = JSON.stringify(node.attrs.track); - } - return ["li", attrs, 0]; - }, - defining: true - }, - blockquote: { - content: "block+", - group: "block", - defining: true, - parseDOM: [{ tag: "blockquote" }], - toDOM() { - return blockquoteDOM; - } - } - }, - marks: { - link: { - attrs: { - href: { default: null }, - rel: { default: "" }, - target: { default: "blank" }, - title: { default: null } - }, - inclusive: false, - parseDOM: [ - { - tag: "a[href]", - getAttrs: dom => { - const href = dom.getAttribute("href"); - const target = href && href.indexOf("#") === 0 ? "" : "blank"; - return { - href: dom.getAttribute("href"), - title: dom.getAttribute("title"), - target - }; - } - } - ], - toDOM(node) { - return ["a", node.attrs, 0]; - } - }, - em: { - parseDOM: [{ tag: "i" }, { tag: "em" }, { style: "font-style=italic" }], - toDOM() { - return emDOM; - } - }, - strong: { - parseDOM: [ - { tag: "strong" }, - { - tag: "b", - getAttrs: node => node.style.fontWeight != "normal" && null - }, - { - style: "font-weight", - getAttrs: value => /^(bold(er)?|[5-9]\d{2,})$/.test(value) && null - } - ], - toDOM() { - return strongDOM; - } - }, - code: { - parseDOM: [{ tag: "code" }], - toDOM() { - return codeDOM; - } - }, - subscript: { - excludes: "superscript", - parseDOM: [{ tag: "sub" }, { style: "vertical-align=sub" }], - toDOM: () => ["sub"] - }, - superscript: { - excludes: "subscript", - parseDOM: [{ tag: "sup" }, { style: "vertical-align=super" }], - toDOM: () => ["sup"] - }, - strikethrough: { - parseDOM: [ - { tag: "strike" }, - { style: "text-decoration:line-through" }, - { style: "text-decoration-line:line-through" } - ], - toDOM: () => [ - "span", - { - style: "text-decoration-line:line-through" - } - ] - }, - underline: { - parseDOM: [{ tag: "u" }, { style: "text-decoration:underline" }], - toDOM: () => [ - "span", - { - style: "text-decoration:underline" - } - ] - }, - // small_caps: { - // attrs: { - // class: { default: "small-caps" } - // }, - // inclusive: false, - // parseDOM: [ - // { - // tag: "span", - // getAttrs(dom) { - // return { class: dom.getAttribute("class") }; - // } - // } - // ], - // toDOM(node) { - // return ["span", node.attrs, 0]; - // } - // }, - source: { - parseDOM: [{ tag: "cite" }], - toDOM() { - return ["cite", 0]; - } - }, - insertion: { - attrs: { - user: { - default: 0 - }, - username: { - default: "" - }, - date: { - default: 0 - }, - approved: { - default: true - } - }, - inclusive: false, - group: "track", - parseDOM: [ - { - tag: "span.insertion", - getAttrs(dom) { - return { - user: parseInt(dom.dataset.user), - username: dom.dataset.username, - date: parseInt(dom.dataset.date), - inline: true, - approved: false - }; - } - }, - { - tag: "span.approved-insertion", - getAttrs(dom) { - return { - user: parseInt(dom.dataset.user), - username: dom.dataset.username, - date: parseInt(dom.dataset.date), - inline: true, - approved: true - }; - } - } - ], - toDOM(node) { - return [ - "span", - { - class: node.attrs.approved - ? "approved-insertion" - : `insertion user-${node.attrs.user}`, - "data-user": node.attrs.user, - "data-username": node.attrs.username, - "data-date": node.attrs.date - } - ]; - } - }, - deletion: { - attrs: { - user: { - default: 0 - }, - username: { - default: "" - }, - date: { - default: 0 - } - }, - inclusive: false, - group: "track", - parseDOM: [ - { - tag: "span.deletion", - getAttrs(dom) { - return { - user: parseInt(dom.dataset.user), - username: dom.dataset.username, - date: parseInt(dom.dataset.date) - }; - } - } - ], - toDOM(node) { - return [ - "span", - { - class: `deletion user-${node.attrs.user}`, - "data-user": node.attrs.user, - "data-username": node.attrs.username, - "data-date": node.attrs.date - } - ]; - } - }, - format_change: { - attrs: { - user: { - default: 0 - }, - username: { - default: "" - }, - date: { - default: 0 - }, - before: { - default: [] - }, - after: { - default: [] - } - }, - inclusive: false, - group: "track", - parseDOM: [ - { - tag: "span.format-change", - getAttrs(dom) { - return { - user: parseInt(dom.dataset.user), - username: dom.dataset.username, - date: parseInt(dom.dataset.date), - before: parseFormatList(dom.dataset.before), - after: parseFormatList(dom.dataset.after) - }; - } - } - ], - toDOM(node) { - return [ - "span", - { - class: `format-change user-${node.attrs.user}`, - "data-user": node.attrs.user, - "data-username": node.attrs.username, - "data-date": node.attrs.date, - "data-before": JSON.stringify(node.attrs.before), - "data-after": JSON.stringify(node.attrs.after) - } - ]; - } - } - } + nodes, + marks }; export default EditoriaSchema; diff --git a/wax-prosemirror-schema/src/editoria/marks.js b/wax-prosemirror-schema/src/editoria/marks.js new file mode 100644 index 000000000..f3299466f --- /dev/null +++ b/wax-prosemirror-schema/src/editoria/marks.js @@ -0,0 +1,259 @@ +const emDOM = ["em", 0], + strongDOM = ["strong", 0], + codeDOM = ["code", 0]; + +const marks = { + link: { + attrs: { + href: { default: null }, + rel: { default: "" }, + target: { default: "blank" }, + title: { default: null } + }, + inclusive: false, + parseDOM: [ + { + tag: "a[href]", + getAttrs: dom => { + const href = dom.getAttribute("href"); + const target = href && href.indexOf("#") === 0 ? "" : "blank"; + return { + href: dom.getAttribute("href"), + title: dom.getAttribute("title"), + target + }; + } + } + ], + toDOM(node) { + return ["a", node.attrs, 0]; + } + }, + em: { + parseDOM: [{ tag: "i" }, { tag: "em" }, { style: "font-style=italic" }], + toDOM() { + return emDOM; + } + }, + strong: { + parseDOM: [ + { tag: "strong" }, + { + tag: "b", + getAttrs: node => node.style.fontWeight != "normal" && null + }, + { + style: "font-weight", + getAttrs: value => /^(bold(er)?|[5-9]\d{2,})$/.test(value) && null + } + ], + toDOM() { + return strongDOM; + } + }, + code: { + parseDOM: [{ tag: "code" }], + toDOM() { + return codeDOM; + } + }, + subscript: { + excludes: "superscript", + parseDOM: [{ tag: "sub" }, { style: "vertical-align=sub" }], + toDOM: () => ["sub"] + }, + superscript: { + excludes: "subscript", + parseDOM: [{ tag: "sup" }, { style: "vertical-align=super" }], + toDOM: () => ["sup"] + }, + strikethrough: { + parseDOM: [ + { tag: "strike" }, + { style: "text-decoration:line-through" }, + { style: "text-decoration-line:line-through" } + ], + toDOM: () => [ + "span", + { + style: "text-decoration-line:line-through" + } + ] + }, + underline: { + parseDOM: [{ tag: "u" }, { style: "text-decoration:underline" }], + toDOM: () => [ + "span", + { + style: "text-decoration:underline" + } + ] + }, + // small_caps: { + // attrs: { + // class: { default: "small-caps" } + // }, + // inclusive: false, + // parseDOM: [ + // { + // tag: "span", + // getAttrs(dom) { + // return { class: dom.getAttribute("class") }; + // } + // } + // ], + // toDOM(node) { + // return ["span", node.attrs, 0]; + // } + // }, + source: { + parseDOM: [{ tag: "cite" }], + toDOM() { + return ["cite", 0]; + } + }, + insertion: { + attrs: { + user: { + default: 0 + }, + username: { + default: "" + }, + date: { + default: 0 + }, + approved: { + default: true + } + }, + inclusive: false, + group: "track", + parseDOM: [ + { + tag: "span.insertion", + getAttrs(dom) { + return { + user: parseInt(dom.dataset.user), + username: dom.dataset.username, + date: parseInt(dom.dataset.date), + inline: true, + approved: false + }; + } + }, + { + tag: "span.approved-insertion", + getAttrs(dom) { + return { + user: parseInt(dom.dataset.user), + username: dom.dataset.username, + date: parseInt(dom.dataset.date), + inline: true, + approved: true + }; + } + } + ], + toDOM(node) { + return [ + "span", + { + class: node.attrs.approved + ? "approved-insertion" + : `insertion user-${node.attrs.user}`, + "data-user": node.attrs.user, + "data-username": node.attrs.username, + "data-date": node.attrs.date + } + ]; + } + }, + deletion: { + attrs: { + user: { + default: 0 + }, + username: { + default: "" + }, + date: { + default: 0 + } + }, + inclusive: false, + group: "track", + parseDOM: [ + { + tag: "span.deletion", + getAttrs(dom) { + return { + user: parseInt(dom.dataset.user), + username: dom.dataset.username, + date: parseInt(dom.dataset.date) + }; + } + } + ], + toDOM(node) { + return [ + "span", + { + class: `deletion user-${node.attrs.user}`, + "data-user": node.attrs.user, + "data-username": node.attrs.username, + "data-date": node.attrs.date + } + ]; + } + }, + format_change: { + attrs: { + user: { + default: 0 + }, + username: { + default: "" + }, + date: { + default: 0 + }, + before: { + default: [] + }, + after: { + default: [] + } + }, + inclusive: false, + group: "track", + parseDOM: [ + { + tag: "span.format-change", + getAttrs(dom) { + return { + user: parseInt(dom.dataset.user), + username: dom.dataset.username, + date: parseInt(dom.dataset.date), + before: parseFormatList(dom.dataset.before), + after: parseFormatList(dom.dataset.after) + }; + } + } + ], + toDOM(node) { + return [ + "span", + { + class: `format-change user-${node.attrs.user}`, + "data-user": node.attrs.user, + "data-username": node.attrs.username, + "data-date": node.attrs.date, + "data-before": JSON.stringify(node.attrs.before), + "data-after": JSON.stringify(node.attrs.after) + } + ]; + } + } +}; +export default marks; diff --git a/wax-prosemirror-schema/src/editoria/nodes.js b/wax-prosemirror-schema/src/editoria/nodes.js new file mode 100644 index 000000000..ddcecac7a --- /dev/null +++ b/wax-prosemirror-schema/src/editoria/nodes.js @@ -0,0 +1,437 @@ +import { parseFormatList, parseTracks, blockLevelToDOM } from "./helpers"; +const pDOM = ["p", 0], + brDOM = ["br"], + blockquoteDOM = ["blockquote", 0]; + +const nodes = { + doc: { + content: "block+" + }, + + text: { + group: "inline" + }, + + hard_break: { + inline: true, + group: "inline", + selectable: false, + parseDOM: [{ tag: "br" }], + toDOM() { + return brDOM; + } + }, + image: { + inline: true, + attrs: { + src: {}, + alt: { default: null }, + title: { default: null }, + track: { default: [] } + }, + group: "inline", + draggable: true, + parseDOM: [ + { + tag: "img[src]", + getAttrs(dom) { + return { + src: dom.getAttribute("src"), + title: dom.getAttribute("title"), + track: parseTracks(dom.dataset.track), + alt: dom.getAttribute("alt") + }; + } + } + ], + toDOM(node) { + const attrs = {}; + let temp = ""; + if (node.attrs.track.length) { + attrs["data-track"] = JSON.stringify(node.attrs.track); + } + let { src, alt, title } = node.attrs; + return ["img", { src, alt, title }]; + } + }, + paragraph: { + group: "block", + content: "inline*", + attrs: { + class: { default: "paragraph" }, + track: { default: [] } + }, + parseDOM: [ + { + tag: "p.paragraph", + getAttrs(dom) { + return { + class: dom.getAttribute("class"), + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = blockLevelToDOM(node); + return ["p", attrs, 0]; + } + }, + author: { + content: "inline*", + group: "block", + priority: 0, + defining: true, + attrs: { + class: { default: "author" }, + track: { default: [] } + }, + parseDOM: [ + { + tag: "p.author", + getAttrs(dom) { + return { + class: dom.getAttribute("class"), + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = blockLevelToDOM(node); + return ["p", attrs, 0]; + } + }, + epigraphProse: { + content: "inline*", + group: "block", + priority: 0, + defining: true, + attrs: { + class: { default: "epigraph-prose" }, + track: { default: [] } + }, + parseDOM: [ + { + tag: "p.epigraph-prose", + getAttrs(dom) { + return { + class: dom.getAttribute("class"), + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = blockLevelToDOM(node); + return ["p", attrs, 0]; + } + }, + epigraphPoetry: { + content: "inline*", + group: "block", + priority: 0, + defining: true, + attrs: { + class: { default: "epigraph-poetry" }, + track: { default: [] } + }, + parseDOM: [ + { + tag: "p.epigraph-poetry", + getAttrs(dom) { + return { + class: dom.getAttribute("class"), + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = blockLevelToDOM(node); + return ["p", attrs, 0]; + } + }, + sourceNote: { + content: "inline*", + group: "block", + priority: 0, + defining: true, + attrs: { + class: { default: "source-note" }, + track: { default: [] } + }, + parseDOM: [ + { + tag: "p.source-note", + getAttrs(dom) { + return { + class: dom.getAttribute("class"), + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = blockLevelToDOM(node); + return ["p", attrs, 0]; + } + }, + paragraphCont: { + content: "inline*", + group: "block", + priority: 0, + defining: true, + attrs: { + class: { default: "paragraph-cont" }, + track: { default: [] } + }, + parseDOM: [ + { + tag: "p.paragraph-cont", + getAttrs(dom) { + return { + class: dom.getAttribute("class"), + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = blockLevelToDOM(node); + return ["p", attrs, 0]; + } + }, + extractProse: { + content: "inline*", + group: "block", + priority: 0, + defining: true, + attrs: { + class: { default: "extract-prose" }, + track: { default: [] } + }, + parseDOM: [ + { + tag: "p.extract-prose", + getAttrs(dom) { + return { + class: dom.getAttribute("class"), + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = blockLevelToDOM(node); + return ["p", attrs, 0]; + } + }, + extractPoetry: { + content: "inline*", + group: "block", + priority: 0, + defining: true, + attrs: { + class: { default: "extract-poetry" }, + track: { default: [] } + }, + parseDOM: [ + { + tag: "p.extract-poetry", + getAttrs(dom) { + return { + class: dom.getAttribute("class"), + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = blockLevelToDOM(node); + return ["p", attrs, 0]; + } + }, + title: { + content: "inline*", + group: "block", + priority: 0, + defining: true, + attrs: { + class: { default: "title" }, + track: { default: [] } + }, + parseDOM: [ + { + tag: "p.title", + getAttrs(dom) { + return { + class: dom.getAttribute("class"), + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = blockLevelToDOM(node); + return ["p", attrs, 0]; + } + }, + subtitle: { + content: "inline*", + group: "block", + priority: 0, + defining: true, + attrs: { + class: { default: "cst" }, + track: { default: [] } + }, + parseDOM: [ + { + tag: "p.cst", + getAttrs(dom) { + return { + class: dom.getAttribute("class"), + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = blockLevelToDOM(node); + return ["p", attrs, 0]; + } + }, + heading: { + attrs: { + level: { default: 1 }, + track: { default: [] } + }, + content: "inline*", + group: "block", + defining: true, + parseDOM: [ + { + tag: "h1", + attrs: { level: 1 }, + getAttrs(dom) { + return { + track: parseTracks(dom.dataset.track) + }; + } + }, + { + tag: "h2", + attrs: { level: 2 }, + getAttrs(dom) { + return { + track: parseTracks(dom.dataset.track) + }; + } + }, + { + tag: "h3", + attrs: { level: 3 }, + getAttrs(dom) { + return { + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = {}; + if (node.attrs.track.length) { + attrs["data-track"] = JSON.stringify(node.attrs.track); + } + return [`h${node.attrs.level}`, attrs, 0]; + } + }, + ordered_list: { + group: "block", + content: "list_item+", + attrs: { + order: { default: 1 }, + track: { default: [] } + }, + parseDOM: [ + { + tag: "ol", + getAttrs(dom) { + return { + order: dom.hasAttribute("start") ? +dom.getAttribute("start") : 1, + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = {}; + if (node.attrs.order !== 1) { + attrs.start = node.attrs.order; + } + if (node.attrs.track.length) { + attrs["data-track"] = JSON.stringify(node.attrs.track); + } + return ["ol", attrs, 0]; + } + }, + bullet_list: { + group: "block", + content: "list_item+", + attrs: { + track: { default: [] } + }, + parseDOM: [ + { + tag: "ul", + getAttrs(dom) { + return { + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = {}; + if (node.attrs.track.length) { + attrs["data-track"] = JSON.stringify(node.attrs.track); + } + return ["ul", attrs, 0]; + } + }, + list_item: { + content: "block+", + attrs: { + track: { default: [] } + }, + parseDOM: [ + { + tag: "li", + getAttrs(dom) { + return { + track: parseTracks(dom.dataset.track) + }; + } + } + ], + toDOM(node) { + const attrs = {}; + if (node.attrs.track.length) { + attrs["data-track"] = JSON.stringify(node.attrs.track); + } + return ["li", attrs, 0]; + }, + defining: true + }, + blockquote: { + content: "block+", + group: "block", + defining: true, + parseDOM: [{ tag: "blockquote" }], + toDOM() { + return blockquoteDOM; + } + } +}; +export default nodes; -- GitLab