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