From 4396a87a8e7ff68deaac4d06da062da4f8c04b3d Mon Sep 17 00:00:00 2001 From: Giannis Kopanas <jkopanas@gmail.com> Date: Sat, 21 Dec 2019 00:27:18 +0200 Subject: [PATCH] fix(schemaService); support array of parseRUles and style match of nodes marks --- editors/editoria/src/Editoria.js | 2 +- wax-prosemirror-core/src/Wax.js | 1 + wax-prosemirror-services/.gitignore | 21 ++++++++++++++++ .../src/SchemaService/Mark.js | 25 +++++++++++++------ .../src/SchemaService/Node.js | 25 +++++++++++++------ .../src/SchemaService/ParseRule.js | 16 +++++++++--- 6 files changed, 70 insertions(+), 20 deletions(-) create mode 100644 wax-prosemirror-services/.gitignore diff --git a/editors/editoria/src/Editoria.js b/editors/editoria/src/Editoria.js index 2341165a6..8bad7ed11 100644 --- a/editors/editoria/src/Editoria.js +++ b/editors/editoria/src/Editoria.js @@ -48,7 +48,7 @@ const Editoria = () => ( autoFocus placeholder="Type Something..." fileUpload={file => renderImage(file)} - value="<p> hello <code> this is the code</code></p>" + value="<p> <span style='font-style:italic;'>test</span>hello <code> this is the code</code></p>" layout={EditoriaLayout} user={user} /> diff --git a/wax-prosemirror-core/src/Wax.js b/wax-prosemirror-core/src/Wax.js index 0ee634bb1..0bc808b5f 100644 --- a/wax-prosemirror-core/src/Wax.js +++ b/wax-prosemirror-core/src/Wax.js @@ -43,6 +43,7 @@ class Wax extends Component { super(props); this.application = Application.create(props); const schema = this.application.getSchema(); + console.log(schema); this.application.bootServices(); const { value, onChange } = this.props; diff --git a/wax-prosemirror-services/.gitignore b/wax-prosemirror-services/.gitignore new file mode 100644 index 000000000..7a2f31d8e --- /dev/null +++ b/wax-prosemirror-services/.gitignore @@ -0,0 +1,21 @@ +# dependencies +/node_modules + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* +yarn.lock +package-lock.json diff --git a/wax-prosemirror-services/src/SchemaService/Mark.js b/wax-prosemirror-services/src/SchemaService/Mark.js index bee9a57e6..eaa0e99e9 100644 --- a/wax-prosemirror-services/src/SchemaService/Mark.js +++ b/wax-prosemirror-services/src/SchemaService/Mark.js @@ -1,3 +1,4 @@ +import { isPlainObject } from "lodash"; import ParseRule from "./ParseRule"; import Middleware from "../lib/Middleware"; @@ -32,15 +33,23 @@ export default class Mark { Object.assign(this._attrs, value); } - set parseDOM(value) { - let parseRule = this._parseRules.find( - parseRule => parseRule.tag === value.tag - ); - if (!parseRule) { - parseRule = new ParseRule(value); - this._parseRules.push(parseRule); + set parseDOM(parseDom) { + let values = parseDom; + if (isPlainObject(parseDom)) { + values = [parseDom]; } - parseRule.addStack(value.getAttrs); + values.forEach(value => { + let parseRule = this._parseRules.find(parseRule => { + if (value.tag) return parseRule.tag === value.tag; + if (value.style) return parseRule.style === value.style; + return false; + }); + if (!parseRule) { + parseRule = new ParseRule(value); + this._parseRules.push(parseRule); + } + parseRule.addStack(value.getAttrs); + }); } toJSON() { diff --git a/wax-prosemirror-services/src/SchemaService/Node.js b/wax-prosemirror-services/src/SchemaService/Node.js index 3b7e738ec..085296aba 100644 --- a/wax-prosemirror-services/src/SchemaService/Node.js +++ b/wax-prosemirror-services/src/SchemaService/Node.js @@ -1,3 +1,4 @@ +import { isPlainObject } from "lodash"; import ParseRule from "./ParseRule"; import Middleware from "../lib/Middleware"; @@ -32,15 +33,23 @@ export default class Node { Object.assign(this._attrs, value); } - set parseDOM(value) { - let parseRule = this._parseRules.find( - parseRule => parseRule.tag === value.tag - ); - if (!parseRule) { - parseRule = new ParseRule(value); - this._parseRules.push(parseRule); + set parseDOM(parseDom) { + let values = parseDom; + if (isPlainObject(parseDom)) { + values = [parseDom]; } - parseRule.addStack(value.getAttrs); + values.forEach(value => { + let parseRule = this._parseRules.find(parseRule => { + if (value.tag) return parseRule.tag === value.tag; + if (value.style) return parseRule.style === value.style; + return false; + }); + if (!parseRule) { + parseRule = new ParseRule(value); + this._parseRules.push(parseRule); + } + parseRule.addStack(value.getAttrs); + }); } toJSON() { diff --git a/wax-prosemirror-services/src/SchemaService/ParseRule.js b/wax-prosemirror-services/src/SchemaService/ParseRule.js index f47be611b..03a91f519 100644 --- a/wax-prosemirror-services/src/SchemaService/ParseRule.js +++ b/wax-prosemirror-services/src/SchemaService/ParseRule.js @@ -2,11 +2,13 @@ import { omit } from "lodash"; import Middleware from "../lib/Middleware"; export default class ParseRule { - tag = ""; + tag = null; + style = null; exporter = null; - constructor({ getAttrs, tag }) { + constructor({ getAttrs, tag, style }) { this.tag = tag; + this.style = style; if (getAttrs) { this.exporter = new Middleware(); } @@ -20,7 +22,15 @@ export default class ParseRule { } parseSchema(exporter) { - const rule = { tag: this.tag }; + let rule = {}; + if (this.tag) { + rule = { tag: this.tag }; + } + + if (this.style) { + rule = { style: this.style }; + } + if (this.exporter) { rule.getAttrs = dom => { let hooks = {}; -- GitLab