From df097022e0a06401ebe67371575287741e68a6c9 Mon Sep 17 00:00:00 2001
From: chris <kokosias@yahoo.gr>
Date: Mon, 23 Dec 2019 19:52:29 +0200
Subject: [PATCH] feat: ordered list

---
 .../src/config/defaultConfig.js               |  6 +-
 wax-prosemirror-schema/index.js               |  1 +
 wax-prosemirror-schema/src/editoria/nodes.js  | 58 +++++++++----------
 .../src/nodes/orderedListNode.js              | 35 +++++++++++
 wax-prosemirror-services/index.js             |  1 +
 .../src/AnnotationService/Annotation.js       |  4 +-
 .../{ListsSerivce.js => ListsService.js}      |  0
 .../OrderedListService/OrderedList.js         | 14 ++---
 .../OrderedListService/OrderedListService.js  |  7 ++-
 9 files changed, 86 insertions(+), 40 deletions(-)
 create mode 100644 wax-prosemirror-schema/src/nodes/orderedListNode.js
 rename wax-prosemirror-services/src/ListsService/{ListsSerivce.js => ListsService.js} (100%)

diff --git a/wax-prosemirror-core/src/config/defaultConfig.js b/wax-prosemirror-core/src/config/defaultConfig.js
index 97d6d7b29..83635b631 100644
--- a/wax-prosemirror-core/src/config/defaultConfig.js
+++ b/wax-prosemirror-core/src/config/defaultConfig.js
@@ -10,7 +10,8 @@ import {
   ShortCutsService,
   TextStyleService,
   InlineAnnotationsService,
-  LinkService
+  LinkService,
+  ListsService
 } from "wax-prosemirror-services";
 
 export default {
@@ -26,6 +27,7 @@ export default {
     new PlaceholderService(),
     new ImageService(),
     new InlineAnnotationsService(),
-    new LinkService()
+    new LinkService(),
+    new ListsService()
   ]
 };
diff --git a/wax-prosemirror-schema/index.js b/wax-prosemirror-schema/index.js
index d6a70f2e5..57add7e5b 100644
--- a/wax-prosemirror-schema/index.js
+++ b/wax-prosemirror-schema/index.js
@@ -28,3 +28,4 @@ export { default as paragraphContNode } from "./src/nodes/paragraphContNode";
 export { default as extractProseNode } from "./src/nodes/extractProseNode";
 export { default as extractPoetryNode } from "./src/nodes/extractPoetryNode";
 export { default as titleNode } from "./src/nodes/titleNode";
+export { default as orderedListNode } from "./src/nodes/orderedListNode";
diff --git a/wax-prosemirror-schema/src/editoria/nodes.js b/wax-prosemirror-schema/src/editoria/nodes.js
index 3cb24c35c..a80de139d 100644
--- a/wax-prosemirror-schema/src/editoria/nodes.js
+++ b/wax-prosemirror-schema/src/editoria/nodes.js
@@ -355,35 +355,35 @@ const nodes = {
       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];
-    }
-  },
+  // 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+",
diff --git a/wax-prosemirror-schema/src/nodes/orderedListNode.js b/wax-prosemirror-schema/src/nodes/orderedListNode.js
new file mode 100644
index 000000000..375936124
--- /dev/null
+++ b/wax-prosemirror-schema/src/nodes/orderedListNode.js
@@ -0,0 +1,35 @@
+const orderedlist = {
+  group: "block",
+  content: "list_item+",
+  attrs: {
+    order: { default: 1 },
+    track: { default: [] }
+  },
+  parseDOM: [
+    {
+      tag: "ol",
+      getAttrs(hook, next) {
+        Object.assign(hook, {
+          order: hook.dom.hasAttribute("start")
+            ? +hook.dom.getAttribute("start")
+            : 1,
+          track: parseTracks(hook.dom.dataset.track)
+        });
+        next();
+      }
+    }
+  ],
+  toDOM(hook, next) {
+    const attrs = {};
+    if (hook.node.attrs.order !== 1) {
+      attrs.start = hook.node.attrs.order;
+    }
+    if (hook.node.attrs.track.length) {
+      attrs["data-track"] = JSON.stringify(hook.node.attrs.track);
+    }
+    hook.value = ["ol", attrs, 0];
+    next();
+  }
+};
+
+export default orderedlist;
diff --git a/wax-prosemirror-services/index.js b/wax-prosemirror-services/index.js
index 3a8e4b44f..951afea2c 100644
--- a/wax-prosemirror-services/index.js
+++ b/wax-prosemirror-services/index.js
@@ -22,5 +22,6 @@ export {
 export {
   default as InlineAnnotationsService
 } from "./src/InlineAnnotations/InlineAnnotationsService";
+export { default as ListsService } from "./src/ListsService/ListsService";
 
 export { default as Tool } from "./src/lib/Tools";
diff --git a/wax-prosemirror-services/src/AnnotationService/Annotation.js b/wax-prosemirror-services/src/AnnotationService/Annotation.js
index 90f17c46b..afc5d0223 100644
--- a/wax-prosemirror-services/src/AnnotationService/Annotation.js
+++ b/wax-prosemirror-services/src/AnnotationService/Annotation.js
@@ -16,6 +16,7 @@ export default class Annotation extends ToolGroup {
     @inject("Underline") underline,
     @inject("Blockquote") blockquote,
     @inject("Image") image,
+    @inject("OrderedList") orderedlist,
     @inject("Table") table,
     @inject("TableDropDownOptions") tableDropDownOptions
   ) {
@@ -33,7 +34,8 @@ export default class Annotation extends ToolGroup {
       blockquote,
       tableDropDownOptions,
       image,
-      table
+      table,
+      orderedlist
     ];
   }
 
diff --git a/wax-prosemirror-services/src/ListsService/ListsSerivce.js b/wax-prosemirror-services/src/ListsService/ListsService.js
similarity index 100%
rename from wax-prosemirror-services/src/ListsService/ListsSerivce.js
rename to wax-prosemirror-services/src/ListsService/ListsService.js
diff --git a/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedList.js b/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedList.js
index 2224e28cf..2b9755325 100644
--- a/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedList.js
+++ b/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedList.js
@@ -11,19 +11,19 @@ export default class OrderedList extends Tools {
 
   get run() {
     return (state, dispatch) => {
-      wrapInList(state.config.schema.nodes.ordered_list)(state, dispatch);
+      wrapInList(state.config.schema.nodes.orderedlist)(state, dispatch);
     };
   }
 
-  get enable() {
-    return state => {
-      return wrapInList(state.config.schema.nodes.ordered_list)(state);
-    };
-  }
+  // get enable() {
+  //   return state => {
+  //     return wrapInList(state.config.schema.nodes.orderedlist)(state);
+  //   };
+  // }
 
   get active() {
     return state => {
-      return blockActive(state.config.schema.nodes.ordered_list)(state);
+      return blockActive(state.config.schema.nodes.orderedlist)(state);
     };
   }
 }
diff --git a/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedListService.js b/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedListService.js
index 3594004f0..a34ee06ee 100644
--- a/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedListService.js
+++ b/wax-prosemirror-services/src/ListsService/OrderedListService/OrderedListService.js
@@ -1,11 +1,16 @@
+import { orderedListNode } from "wax-prosemirror-schema";
 import Service from "wax-prosemirror-core/src/services/Service";
 import OrderedList from "./OrderedList";
-
+console.log(orderedListNode);
 class OrderedListService extends Service {
   boot() {}
 
   register() {
     this.container.bind("OrderedList").to(OrderedList);
+    this.container
+      .bind("schema")
+      .toConstantValue({ orderedlist: orderedListNode })
+      .whenTargetNamed("node");
   }
 }
 
-- 
GitLab