From f06b05b4a69d64dd5dc2b87df3eef5b11aec84f7 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Wed, 24 Feb 2021 16:00:37 +0200 Subject: [PATCH] track custom block nodes --- .../src/nodes/customBlockNode.js | 1 + .../src/nodes/epigraphPoetryNode.js | 18 ++++---- .../src/nodes/epigraphProseNode.js | 18 ++++---- .../src/nodes/extractPoetryNode.js | 18 ++++---- .../src/nodes/extractProseNode.js | 18 ++++---- .../trackChangesNodes/customBlockTrackNode.js | 41 +++++++++++++++++++ .../src/nodes/trackChangesNodes/index.js | 32 ++++++++------- 7 files changed, 95 insertions(+), 51 deletions(-) create mode 100644 wax-prosemirror-schema/src/nodes/trackChangesNodes/customBlockTrackNode.js diff --git a/wax-prosemirror-schema/src/nodes/customBlockNode.js b/wax-prosemirror-schema/src/nodes/customBlockNode.js index 076af0ef7..a3d78e9f1 100644 --- a/wax-prosemirror-schema/src/nodes/customBlockNode.js +++ b/wax-prosemirror-schema/src/nodes/customBlockNode.js @@ -24,6 +24,7 @@ const customBlockNode = { class: hook.node.attrs.class, 'data-type': hook.node.attrs.type, }; + // eslint-disable-next-line no-param-reassign hook.value = ['p', attrs, 0]; next(); }, diff --git a/wax-prosemirror-schema/src/nodes/epigraphPoetryNode.js b/wax-prosemirror-schema/src/nodes/epigraphPoetryNode.js index 088ee7e96..e3bea1e30 100644 --- a/wax-prosemirror-schema/src/nodes/epigraphPoetryNode.js +++ b/wax-prosemirror-schema/src/nodes/epigraphPoetryNode.js @@ -1,27 +1,27 @@ const epigraphPoetry = { - content: "inline*", - group: "block", + content: 'inline*', + group: 'block', priority: 0, defining: true, attrs: { - class: { default: "epigraph-poetry" } + class: { default: 'epigraph-poetry' }, }, parseDOM: [ { - tag: "p.epigraph-poetry", + tag: 'p.epigraph-poetry', getAttrs(hook, next) { Object.assign(hook, { - class: hook.dom.getAttribute("class") + class: hook.dom.getAttribute('class'), }); next(); - } - } + }, + }, ], toDOM(hook, next) { const attrs = { class: hook.node.attrs.class }; - hook.value = ["p", attrs, 0]; + hook.value = ['p', attrs, 0]; next(); - } + }, }; export default epigraphPoetry; diff --git a/wax-prosemirror-schema/src/nodes/epigraphProseNode.js b/wax-prosemirror-schema/src/nodes/epigraphProseNode.js index 04a885dc5..328ed0846 100644 --- a/wax-prosemirror-schema/src/nodes/epigraphProseNode.js +++ b/wax-prosemirror-schema/src/nodes/epigraphProseNode.js @@ -1,27 +1,27 @@ const epigraphProse = { - content: "inline*", - group: "block", + content: 'inline*', + group: 'block', priority: 0, defining: true, attrs: { - class: { default: "epigraph-prose" } + class: { default: 'epigraph-prose' }, }, parseDOM: [ { - tag: "p.epigraph-prose", + tag: 'p.epigraph-prose', getAttrs(hook, next) { Object.assign(hook, { - class: hook.dom.getAttribute("class") + class: hook.dom.getAttribute('class'), }); next(); - } - } + }, + }, ], toDOM(hook, next) { const attrs = { class: hook.node.attrs.class }; - hook.value = ["p", attrs, 0]; + hook.value = ['p', attrs, 0]; next(); - } + }, }; export default epigraphProse; diff --git a/wax-prosemirror-schema/src/nodes/extractPoetryNode.js b/wax-prosemirror-schema/src/nodes/extractPoetryNode.js index d5122c74f..55228cd55 100644 --- a/wax-prosemirror-schema/src/nodes/extractPoetryNode.js +++ b/wax-prosemirror-schema/src/nodes/extractPoetryNode.js @@ -1,27 +1,27 @@ const extractPoetry = { - content: "inline*", - group: "block", + content: 'inline*', + group: 'block', priority: 0, defining: true, attrs: { - class: { default: "extract-poetry" } + class: { default: 'extract-poetry' }, }, parseDOM: [ { - tag: "p.extract-poetry", + tag: 'p.extract-poetry', getAttrs(hook, next) { Object.assign(hook, { - class: hook.dom.getAttribute("class") + class: hook.dom.getAttribute('class'), }); next(); - } - } + }, + }, ], toDOM(hook, next) { const attrs = { class: hook.node.attrs.class }; - hook.value = ["p", attrs, 0]; + hook.value = ['p', attrs, 0]; next(); - } + }, }; export default extractPoetry; diff --git a/wax-prosemirror-schema/src/nodes/extractProseNode.js b/wax-prosemirror-schema/src/nodes/extractProseNode.js index 705b14648..deea59771 100644 --- a/wax-prosemirror-schema/src/nodes/extractProseNode.js +++ b/wax-prosemirror-schema/src/nodes/extractProseNode.js @@ -1,27 +1,27 @@ const extractProse = { - content: "inline*", - group: "block", + content: 'inline*', + group: 'block', priority: 0, defining: true, attrs: { - class: { default: "extract-prose" } + class: { default: 'extract-prose' }, }, parseDOM: [ { - tag: "p.extract-prose", + tag: 'p.extract-prose', getAttrs(hook, next) { Object.assign(hook, { - class: hook.dom.getAttribute("class") + class: hook.dom.getAttribute('class'), }); next(); - } - } + }, + }, ], toDOM(hook, next) { const attrs = { class: hook.node.attrs.class }; - hook.value = ["p", attrs, 0]; + hook.value = ['p', attrs, 0]; next(); - } + }, }; export default extractProse; diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/customBlockTrackNode.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/customBlockTrackNode.js new file mode 100644 index 000000000..c9413a700 --- /dev/null +++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/customBlockTrackNode.js @@ -0,0 +1,41 @@ +import { SchemaHelpers } from 'wax-prosemirror-utilities'; + +const customBlockNode = { + content: 'inline*', + group: 'block', + priority: 0, + defining: true, + attrs: { + id: { default: '' }, + track: { default: [] }, + group: { default: '' }, + viewid: { default: '' }, + }, + parseDOM: [ + { + tag: 'p[data-type="block"]', + getAttrs(hook, next) { + Object.assign(hook, { + id: hook.dom.dataset.id, + track: SchemaHelpers.parseTracks(hook.dom.dataset.track), + group: hook.dom.dataset.group, + viewid: hook.dom.dataset.viewid, + }); + next(); + }, + }, + ], + toDOM(hook, next) { + if (hook.node.attrs.track.length) { + Object.assign(hook.value[1], { + 'data-id': hook.node.attrs.id, + 'data-track': JSON.stringify(hook.node.attrs.track), + 'data-group': hook.node.attrs.group, + 'data-viewid': hook.node.attrs.viewid, + }); + } + next(); + }, +}; + +export default customBlockNode; diff --git a/wax-prosemirror-schema/src/nodes/trackChangesNodes/index.js b/wax-prosemirror-schema/src/nodes/trackChangesNodes/index.js index c3c9b1ed5..d0e92ccb9 100644 --- a/wax-prosemirror-schema/src/nodes/trackChangesNodes/index.js +++ b/wax-prosemirror-schema/src/nodes/trackChangesNodes/index.js @@ -1,17 +1,18 @@ -import authorTrackNode from "./authorTrackNode"; -import titleTrackNode from "./titleTrackNode"; -import subTitleTrackNode from "./subTitleTrackNode"; -import epigraphProseTrackNode from "./epigraphProseTrackNode"; -import epigraphPoetryTrackNode from "./epigraphPoetryTrackNode"; -import headingTrackNode from "./headingTrackNode"; -import paragraphContTrackNode from "./paragraphContTrackNode"; -import extractProseTrackNode from "./extractProseTrackNode"; -import extractPoetryTrackNode from "./extractPoetryTrackNode"; -import sourceNoteTrackNode from "./sourceNoteTrackNode"; -import bulletListTrackNode from "./bulletListTrackNode"; -import orderedListTrackNode from "./orderedListTrackNode"; -import listItemTrackNode from "./listItemTrackNode"; -import imageTrackNode from "./imageTrackNode"; +import authorTrackNode from './authorTrackNode'; +import titleTrackNode from './titleTrackNode'; +import subTitleTrackNode from './subTitleTrackNode'; +import epigraphProseTrackNode from './epigraphProseTrackNode'; +import epigraphPoetryTrackNode from './epigraphPoetryTrackNode'; +import headingTrackNode from './headingTrackNode'; +import paragraphContTrackNode from './paragraphContTrackNode'; +import extractProseTrackNode from './extractProseTrackNode'; +import extractPoetryTrackNode from './extractPoetryTrackNode'; +import sourceNoteTrackNode from './sourceNoteTrackNode'; +import bulletListTrackNode from './bulletListTrackNode'; +import orderedListTrackNode from './orderedListTrackNode'; +import listItemTrackNode from './listItemTrackNode'; +import imageTrackNode from './imageTrackNode'; +import customBlockTrackNode from './customBlockTrackNode'; export default { author: authorTrackNode, @@ -24,7 +25,8 @@ export default { extractPoetry: extractPoetryTrackNode, orderedlist: orderedListTrackNode, sourceNote: sourceNoteTrackNode, - heading: headingTrackNode + heading: headingTrackNode, + customTagBlock: customBlockTrackNode, // bulletlist: bulletListTrackNode, // list_item: listItemTrackNode, // image: imageTrackNode -- GitLab