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