From 3a7432d74f7bdc5aff0505da310ad1f98b557284 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Mon, 13 Jan 2020 12:40:24 +0200
Subject: [PATCH] add headings

---
 wax-prosemirror-schema/index.js               |  1 +
 wax-prosemirror-schema/src/editoria/nodes.js  | 45 ----------------
 .../src/nodes/epigraphPoetryNode.js           | 17 +++---
 .../src/nodes/epigraphProseNode.js            | 17 +++---
 .../src/nodes/extractPoetryNode.js            | 17 +++---
 .../src/nodes/headingNode.js                  | 52 +++++++++++++++++++
 .../EpigraphPoetryService.js                  |  8 +++
 .../EpigraphProseService.js                   |  8 +++
 .../HeadingService/HeadingService.js          | 10 +++-
 .../SubTitleService/SubTitleService.js        |  4 +-
 .../src/DisplayBlockLevel/index.js            |  6 ++-
 .../DisplayToolGroupService/Display.js        | 18 ++++++-
 12 files changed, 130 insertions(+), 73 deletions(-)
 create mode 100644 wax-prosemirror-schema/src/nodes/headingNode.js

diff --git a/wax-prosemirror-schema/index.js b/wax-prosemirror-schema/index.js
index d69a32d33..4dc71b758 100644
--- a/wax-prosemirror-schema/index.js
+++ b/wax-prosemirror-schema/index.js
@@ -33,3 +33,4 @@ export { default as bulletListNode } from "./src/nodes/bulletListNode";
 export { default as listItemNode } from "./src/nodes/listItemNode";
 export { default as subTitleNode } from "./src/nodes/subTitleNode";
 export { default as imageNode } from "./src/nodes/imageNode";
+export { default as headingNode } from "./src/nodes/headingNode";
diff --git a/wax-prosemirror-schema/src/editoria/nodes.js b/wax-prosemirror-schema/src/editoria/nodes.js
index 5b593dae4..72e283f05 100644
--- a/wax-prosemirror-schema/src/editoria/nodes.js
+++ b/wax-prosemirror-schema/src/editoria/nodes.js
@@ -22,51 +22,6 @@ const nodes = {
       return brDOM;
     }
   },
-  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];
-    }
-  },
   blockquote: {
     content: "block+",
     group: "block",
diff --git a/wax-prosemirror-schema/src/nodes/epigraphPoetryNode.js b/wax-prosemirror-schema/src/nodes/epigraphPoetryNode.js
index 0f38a7c1e..5a385f30c 100644
--- a/wax-prosemirror-schema/src/nodes/epigraphPoetryNode.js
+++ b/wax-prosemirror-schema/src/nodes/epigraphPoetryNode.js
@@ -1,3 +1,4 @@
+import { parseTracks, blockLevelToDOM } from "./helpers";
 const epigraphPoetry = {
   content: "inline*",
   group: "block",
@@ -10,17 +11,19 @@ const epigraphPoetry = {
   parseDOM: [
     {
       tag: "p.epigraph-poetry",
-      getAttrs(dom) {
-        return {
+      getAttrs(hook, next) {
+        Object.assign(hook, {
           class: dom.getAttribute("class"),
-          track: parseTracks(dom.dataset.track)
-        };
+          track: parseTracks(hook.dom.dataset.track)
+        });
+        next();
       }
     }
   ],
-  toDOM(node) {
-    const attrs = blockLevelToDOM(node);
-    return ["p", attrs, 0];
+  toDOM(hook, next) {
+    const attrs = blockLevelToDOM(hook.node);
+    hook.value = ["p", attrs, 0];
+    next();
   }
 };
 
diff --git a/wax-prosemirror-schema/src/nodes/epigraphProseNode.js b/wax-prosemirror-schema/src/nodes/epigraphProseNode.js
index debc90d6e..ede596562 100644
--- a/wax-prosemirror-schema/src/nodes/epigraphProseNode.js
+++ b/wax-prosemirror-schema/src/nodes/epigraphProseNode.js
@@ -1,3 +1,4 @@
+import { parseTracks, blockLevelToDOM } from "./helpers";
 const epigraphProse = {
   content: "inline*",
   group: "block",
@@ -10,17 +11,19 @@ const epigraphProse = {
   parseDOM: [
     {
       tag: "p.epigraph-prose",
-      getAttrs(dom) {
-        return {
+      getAttrs(hook, next) {
+        Object.assign(hook, {
           class: dom.getAttribute("class"),
-          track: parseTracks(dom.dataset.track)
-        };
+          track: parseTracks(hook.dom.dataset.track)
+        });
+        next();
       }
     }
   ],
-  toDOM(node) {
-    const attrs = blockLevelToDOM(node);
-    return ["p", attrs, 0];
+  toDOM(hook, next) {
+    const attrs = blockLevelToDOM(hook.node);
+    hook.value = ["p", attrs, 0];
+    next();
   }
 };
 
diff --git a/wax-prosemirror-schema/src/nodes/extractPoetryNode.js b/wax-prosemirror-schema/src/nodes/extractPoetryNode.js
index c5befa860..e2e88ed14 100644
--- a/wax-prosemirror-schema/src/nodes/extractPoetryNode.js
+++ b/wax-prosemirror-schema/src/nodes/extractPoetryNode.js
@@ -1,3 +1,4 @@
+import { parseTracks, blockLevelToDOM } from "./helpers";
 const extractPoetry = {
   content: "inline*",
   group: "block",
@@ -10,17 +11,19 @@ const extractPoetry = {
   parseDOM: [
     {
       tag: "p.extract-poetry",
-      getAttrs(dom) {
-        return {
+      getAttrs(hook, next) {
+        Object.assign(hook, {
           class: dom.getAttribute("class"),
-          track: parseTracks(dom.dataset.track)
-        };
+          track: parseTracks(hook.dom.dataset.track)
+        });
+        next();
       }
     }
   ],
-  toDOM(node) {
-    const attrs = blockLevelToDOM(node);
-    return ["p", attrs, 0];
+  toDOM(hook, next) {
+    const attrs = blockLevelToDOM(hook.node);
+    hook.value[("p", attrs, 0)];
+    next();
   }
 };
 
diff --git a/wax-prosemirror-schema/src/nodes/headingNode.js b/wax-prosemirror-schema/src/nodes/headingNode.js
new file mode 100644
index 000000000..85993a2da
--- /dev/null
+++ b/wax-prosemirror-schema/src/nodes/headingNode.js
@@ -0,0 +1,52 @@
+import { parseTracks } from "./helpers";
+const heading = {
+  attrs: {
+    level: { default: 1 },
+    track: { default: [] }
+  },
+  content: "inline*",
+  group: "block",
+  defining: true,
+  parseDOM: [
+    {
+      tag: "h1",
+      attrs: { level: 1 },
+      getAttrs(hook, next) {
+        Object.assign(hook, {
+          track: parseTracks(hook.dom.dataset.track)
+        });
+        next();
+      }
+    },
+    {
+      tag: "h2",
+      attrs: { level: 2 },
+      getAttrs(hook, next) {
+        Object.assign(hook, {
+          track: parseTracks(hook.dom.dataset.track)
+        });
+        next();
+      }
+    },
+    {
+      tag: "h3",
+      attrs: { level: 3 },
+      getAttrs(hook, next) {
+        Object.assign(hook, {
+          track: parseTracks(hook.dom.dataset.track)
+        });
+        next();
+      }
+    }
+  ],
+  toDOM(hook, next) {
+    const attrs = {};
+    if (hook.node.attrs.track.length) {
+      attrs["data-track"] = JSON.stringify(hook.node.attrs.track);
+    }
+    hook.value = [`h${hook.node.attrs.level}`, attrs, 0];
+    next();
+  }
+};
+
+export default heading;
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetryService.js b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetryService.js
index 0e6fa7861..8827f9725 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetryService.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetryService.js
@@ -1,4 +1,5 @@
 import Service from "wax-prosemirror-core/src/services/Service";
+import { epigraphPoetryNode } from "wax-prosemirror-schema";
 import EpigraphPoetry from "./EpigraphPoetry";
 
 class EpigraphPoetryService extends Service {
@@ -6,6 +7,13 @@ class EpigraphPoetryService extends Service {
 
   register() {
     this.container.bind("EpigraphPoetry").to(EpigraphPoetry);
+    const createNode = this.container.get("CreateNode");
+    createNode(
+      {
+        epigraphPoetry: epigraphPoetryNode
+      },
+      { toWaxSchema: true }
+    );
   }
 }
 
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProseService.js b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProseService.js
index 1a098f520..e399616db 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProseService.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProseService.js
@@ -1,4 +1,5 @@
 import Service from "wax-prosemirror-core/src/services/Service";
+import { epigraphProseNode } from "wax-prosemirror-schema";
 import EpigraphProse from "./EpigraphProse";
 
 class EpigraphProseService extends Service {
@@ -6,6 +7,13 @@ class EpigraphProseService extends Service {
 
   register() {
     this.container.bind("EpigraphProse").to(EpigraphProse);
+    const createNode = this.container.get("CreateNode");
+    createNode(
+      {
+        epigraphProse: epigraphProseNode
+      },
+      { toWaxSchema: true }
+    );
   }
 }
 
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/HeadingService.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/HeadingService.js
index 7233dbec0..4a2e6cc71 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/HeadingService.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/HeadingService.js
@@ -1,6 +1,7 @@
 import Service from "wax-prosemirror-core/src/services/Service";
+import { headingNode } from "wax-prosemirror-schema";
 import Heading1 from "./Heading1";
-import Heading2 from "./Heading3";
+import Heading2 from "./Heading2";
 import Heading3 from "./Heading3";
 
 class HeadingService extends Service {
@@ -10,6 +11,13 @@ class HeadingService extends Service {
     this.container.bind("Heading1").to(Heading1);
     this.container.bind("Heading2").to(Heading2);
     this.container.bind("Heading3").to(Heading3);
+    const createNode = this.container.get("CreateNode");
+    createNode(
+      {
+        heading: headingNode
+      },
+      { toWaxSchema: true }
+    );
   }
 }
 
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitleService.js b/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitleService.js
index e28541d0a..aa825e2ed 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitleService.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitleService.js
@@ -1,5 +1,5 @@
 import Service from "wax-prosemirror-core/src/services/Service";
-import { SubTitleNode } from "wax-prosemirror-schema";
+import { subTitleNode } from "wax-prosemirror-schema";
 import SubTitle from "./SubTitle";
 
 class SubTitleService extends Service {
@@ -10,7 +10,7 @@ class SubTitleService extends Service {
     const createNode = this.container.get("CreateNode");
     createNode(
       {
-        subtitle: SubTitleNode
+        subtitle: subTitleNode
       },
       { toWaxSchema: true }
     );
diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/index.js b/wax-prosemirror-services/src/DisplayBlockLevel/index.js
index 5762e112a..847094daf 100644
--- a/wax-prosemirror-services/src/DisplayBlockLevel/index.js
+++ b/wax-prosemirror-services/src/DisplayBlockLevel/index.js
@@ -1,13 +1,15 @@
 import AuthorService from "./AuthorService/AuthorService";
 import EpigraphPoetryService from "./EpigraphPoetryService/EpigraphPoetryService";
+import EpigraphProseService from "./EpigraphProseService/EpigraphProseService";
 import HeadingService from "./HeadingService/HeadingService";
 import SubTitleService from "./SubTitleService/SubTitleService";
 import TitleService from "./TitleService/TitleService";
 
 export default [
   new AuthorService(),
-  // new EpigraphPoetryService(),
-  // new HeadingService(),
+  new EpigraphProseService(),
+  new EpigraphPoetryService(),
+  new HeadingService(),
   new SubTitleService(),
   new TitleService()
 ];
diff --git a/wax-prosemirror-services/src/WaxToolGroups/DisplayToolGroupService/Display.js b/wax-prosemirror-services/src/WaxToolGroups/DisplayToolGroupService/Display.js
index a1daffc56..274216ffc 100644
--- a/wax-prosemirror-services/src/WaxToolGroups/DisplayToolGroupService/Display.js
+++ b/wax-prosemirror-services/src/WaxToolGroups/DisplayToolGroupService/Display.js
@@ -16,10 +16,24 @@ class Display extends ToolGroup {
   constructor(
     @inject("Author") author,
     @inject("Title") title,
-    @inject("SubTitle") subtitle
+    @inject("SubTitle") subtitle,
+    @inject("EpigraphProse") epigraphprose,
+    @inject("EpigraphPoetry") epigraphpoetry,
+    @inject("Heading1") heading1,
+    @inject("Heading2") heading2,
+    @inject("Heading3") heading3
   ) {
     super();
-    this.tools = [title, author, subtitle];
+    this.tools = [
+      title,
+      author,
+      subtitle,
+      epigraphprose,
+      epigraphpoetry,
+      heading1,
+      heading2,
+      heading3
+    ];
   }
 }
 
-- 
GitLab