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