From e7dc82a3f0f9e93bbda3cf6e190a4d590e48c603 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Tue, 12 May 2020 15:39:35 +0300 Subject: [PATCH] replace setblockType to preserver attrs --- .../src/components/HeadingsDropDown.js | 9 +++--- .../DisplayBlockLevel/AuthorService/Author.js | 6 ++-- .../EpigraphPoetryService/EpigraphPoetry.js | 11 +++++-- .../EpigraphProseService/EpigraphProse.js | 11 +++++-- .../HeadingService/Heading1.js | 9 +++--- .../HeadingService/Heading2.js | 9 +++--- .../HeadingService/Heading3.js | 9 +++--- .../SubTitleService/SubTitle.js | 9 ++++-- .../DisplayBlockLevel/TitleService/Title.js | 6 ++-- .../ExtractPoetryService/ExtractPoetry.js | 11 +++++-- .../ExtractProseService/ExtractProse.js | 11 +++++-- .../ParagraphContinued.js | 11 +++++-- .../ParagraphService/Paragraph.js | 9 ++++-- .../SourceNoteService/SourceNote.js | 9 ++++-- .../src/commands/Commands.js | 30 +++++++++++++++++++ 15 files changed, 110 insertions(+), 50 deletions(-) diff --git a/wax-prosemirror-components/src/components/HeadingsDropDown.js b/wax-prosemirror-components/src/components/HeadingsDropDown.js index 9de03389a..d4fdcaea7 100644 --- a/wax-prosemirror-components/src/components/HeadingsDropDown.js +++ b/wax-prosemirror-components/src/components/HeadingsDropDown.js @@ -1,6 +1,6 @@ import React from "react"; import styled from "styled-components"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; import Dropdown from "react-dropdown"; import "react-dropdown/style.css"; @@ -21,10 +21,9 @@ const HeadingsDropDown = ({ dispatch, state, item }) => ( <DropdownStyled options={dropDownOptions} onChange={option => { - setBlockType(state.config.schema.nodes.heading, { level: option.value })( - state, - dispatch - ); + Commands.setBlockType(state.config.schema.nodes.heading, { + level: option.value + })(state, dispatch); }} placeholder="Choose heading" select={item.select && item.select(state)} diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/Author.js b/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/Author.js index 6be138dd8..e5bbf60a3 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/Author.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/Author.js @@ -1,6 +1,6 @@ import Tools from "../../lib/Tools"; import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; @injectable() export default class Author extends Tools { @@ -9,13 +9,13 @@ export default class Author extends Tools { get run() { return (state, dispatch) => { - setBlockType(state.config.schema.nodes.author)(state, dispatch); + Commands.setBlockType(state.config.schema.nodes.author)(state, dispatch); }; } get enable() { return state => { - return setBlockType(state.config.schema.nodes.author)(state); + return Commands.setBlockType(state.config.schema.nodes.author)(state); }; } } diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetry.js b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetry.js index e3d63856a..f09ca8a85 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetry.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphPoetryService/EpigraphPoetry.js @@ -1,6 +1,6 @@ import Tools from "../../lib/Tools"; import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; @injectable() export default class EpigraphPoetry extends Tools { @@ -9,13 +9,18 @@ export default class EpigraphPoetry extends Tools { get run() { return (state, dispatch) => { - setBlockType(state.config.schema.nodes.epigraphPoetry)(state, dispatch); + Commands.setBlockType(state.config.schema.nodes.epigraphPoetry)( + state, + dispatch + ); }; } get enable() { return state => { - return setBlockType(state.config.schema.nodes.epigraphPoetry)(state); + return Commands.setBlockType(state.config.schema.nodes.epigraphPoetry)( + state + ); }; } } diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProse.js b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProse.js index 8347f6bcb..735e98ada 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProse.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/EpigraphProseService/EpigraphProse.js @@ -1,6 +1,6 @@ import Tools from "../../lib/Tools"; import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; @injectable() export default class EpigraphProse extends Tools { @@ -9,13 +9,18 @@ export default class EpigraphProse extends Tools { get run() { return (state, dispatch) => { - setBlockType(state.config.schema.nodes.epigraphProse)(state, dispatch); + Commands.setBlockType(state.config.schema.nodes.epigraphProse)( + state, + dispatch + ); }; } get enable() { return state => { - return setBlockType(state.config.schema.nodes.epigraphProse)(state); + return Commands.setBlockType(state.config.schema.nodes.epigraphProse)( + state + ); }; } } diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading1.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading1.js index 8ad2dc681..7cd58aec6 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading1.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading1.js @@ -1,6 +1,6 @@ import Tools from "../../lib/Tools"; import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; @injectable() export default class Heading1 extends Tools { @@ -9,7 +9,7 @@ export default class Heading1 extends Tools { get run() { return (state, dispatch) => { - setBlockType(state.config.schema.nodes.heading, { level: 1 })( + Commands.setBlockType(state.config.schema.nodes.heading, { level: 1 })( state, dispatch ); @@ -18,9 +18,8 @@ export default class Heading1 extends Tools { get enable() { return state => { - return setBlockType(state.config.schema.nodes.heading, { - level: 1, - track: [] + return Commands.setBlockType(state.config.schema.nodes.heading, { + level: 1 })(state); }; } diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js index 80a7b88e8..77bc4d4ea 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading2.js @@ -1,6 +1,6 @@ import Tools from "../../lib/Tools"; import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; @injectable() export default class Heading2 extends Tools { @@ -9,7 +9,7 @@ export default class Heading2 extends Tools { get run() { return (state, dispatch) => { - setBlockType(state.config.schema.nodes.heading, { level: 2 })( + Commands.setBlockType(state.config.schema.nodes.heading, { level: 2 })( state, dispatch ); @@ -18,9 +18,8 @@ export default class Heading2 extends Tools { get enable() { return state => { - return setBlockType(state.config.schema.nodes.heading, { - level: 2, - track: [] + return Commands.setBlockType(state.config.schema.nodes.heading, { + level: 2 })(state); }; } diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js index 8163289fb..bf27f4bce 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading3.js @@ -1,6 +1,6 @@ import Tools from "../../lib/Tools"; import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; @injectable() export default class Heading3 extends Tools { @@ -9,7 +9,7 @@ export default class Heading3 extends Tools { get run() { return (state, dispatch) => { - setBlockType(state.config.schema.nodes.heading, { level: 3 })( + Commands.setBlockType(state.config.schema.nodes.heading, { level: 3 })( state, dispatch ); @@ -18,9 +18,8 @@ export default class Heading3 extends Tools { get enable() { return state => { - return setBlockType(state.config.schema.nodes.heading, { - level: 3, - track: [] + return Commands.setBlockType(state.config.schema.nodes.heading, { + level: 3 })(state); }; } diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitle.js b/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitle.js index caac1427b..e5932b625 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitle.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/SubTitleService/SubTitle.js @@ -1,6 +1,6 @@ import Tools from "../../lib/Tools"; import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; @injectable() export default class SubTitle extends Tools { @@ -9,13 +9,16 @@ export default class SubTitle extends Tools { get run() { return (state, dispatch) => { - setBlockType(state.config.schema.nodes.subtitle)(state, dispatch); + Commands.setBlockType(state.config.schema.nodes.subtitle)( + state, + dispatch + ); }; } get enable() { return state => { - return setBlockType(state.config.schema.nodes.subtitle)(state); + return Commands.setBlockType(state.config.schema.nodes.subtitle)(state); }; } } diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/TitleService/Title.js b/wax-prosemirror-services/src/DisplayBlockLevel/TitleService/Title.js index 9f77b510c..e61b8665f 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/TitleService/Title.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/TitleService/Title.js @@ -1,6 +1,6 @@ import Tools from "../../lib/Tools"; import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; @injectable() export default class Title extends Tools { @@ -9,13 +9,13 @@ export default class Title extends Tools { get run() { return (state, dispatch) => { - setBlockType(state.config.schema.nodes.title)(state, dispatch); + Commands.setBlockType(state.config.schema.nodes.title)(state, dispatch); }; } get enable() { return state => { - return setBlockType(state.config.schema.nodes.title)(state); + return Commands.setBlockType(state.config.schema.nodes.title)(state); }; } } diff --git a/wax-prosemirror-services/src/TextBlockLevel/ExtractPoetryService/ExtractPoetry.js b/wax-prosemirror-services/src/TextBlockLevel/ExtractPoetryService/ExtractPoetry.js index f3507f5d8..6987304d1 100644 --- a/wax-prosemirror-services/src/TextBlockLevel/ExtractPoetryService/ExtractPoetry.js +++ b/wax-prosemirror-services/src/TextBlockLevel/ExtractPoetryService/ExtractPoetry.js @@ -1,6 +1,6 @@ import Tools from "../../lib/Tools"; import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; @injectable() class ExtractPoetry extends Tools { @@ -9,13 +9,18 @@ class ExtractPoetry extends Tools { get run() { return (state, dispatch) => { - setBlockType(state.config.schema.nodes.extractPoetry)(state, dispatch); + Commands.setBlockType(state.config.schema.nodes.extractPoetry)( + state, + dispatch + ); }; } get enable() { return state => { - return setBlockType(state.config.schema.nodes.extractPoetry)(state); + return Commands.setBlockType(state.config.schema.nodes.extractPoetry)( + state + ); }; } } diff --git a/wax-prosemirror-services/src/TextBlockLevel/ExtractProseService/ExtractProse.js b/wax-prosemirror-services/src/TextBlockLevel/ExtractProseService/ExtractProse.js index 261cfe18d..05dd9edad 100644 --- a/wax-prosemirror-services/src/TextBlockLevel/ExtractProseService/ExtractProse.js +++ b/wax-prosemirror-services/src/TextBlockLevel/ExtractProseService/ExtractProse.js @@ -1,6 +1,6 @@ import Tools from "../../lib/Tools"; import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; @injectable() class ExtractProse extends Tools { @@ -9,13 +9,18 @@ class ExtractProse extends Tools { get run() { return (state, dispatch) => { - setBlockType(state.config.schema.nodes.extractProse)(state, dispatch); + Commands.setBlockType(state.config.schema.nodes.extractProse)( + state, + dispatch + ); }; } get enable() { return state => { - return setBlockType(state.config.schema.nodes.extractProse)(state); + return Commands.setBlockType(state.config.schema.nodes.extractProse)( + state + ); }; } } diff --git a/wax-prosemirror-services/src/TextBlockLevel/ParagraphContinuedService/ParagraphContinued.js b/wax-prosemirror-services/src/TextBlockLevel/ParagraphContinuedService/ParagraphContinued.js index bcc3c506e..1d2206f84 100644 --- a/wax-prosemirror-services/src/TextBlockLevel/ParagraphContinuedService/ParagraphContinued.js +++ b/wax-prosemirror-services/src/TextBlockLevel/ParagraphContinuedService/ParagraphContinued.js @@ -1,6 +1,6 @@ import Tools from "../../lib/Tools"; import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; @injectable() class ParagraphContinued extends Tools { @@ -9,13 +9,18 @@ class ParagraphContinued extends Tools { get run() { return (state, dispatch) => { - setBlockType(state.config.schema.nodes.paragraphCont)(state, dispatch); + Commands.setBlockType(state.config.schema.nodes.paragraphCont)( + state, + dispatch + ); }; } get enable() { return state => { - return setBlockType(state.config.schema.nodes.paragraphCont)(state); + return Commands.setBlockType(state.config.schema.nodes.paragraphCont)( + state + ); }; } } diff --git a/wax-prosemirror-services/src/TextBlockLevel/ParagraphService/Paragraph.js b/wax-prosemirror-services/src/TextBlockLevel/ParagraphService/Paragraph.js index b4480b8d9..4d7b2bbed 100644 --- a/wax-prosemirror-services/src/TextBlockLevel/ParagraphService/Paragraph.js +++ b/wax-prosemirror-services/src/TextBlockLevel/ParagraphService/Paragraph.js @@ -1,6 +1,6 @@ import Tools from "../../lib/Tools"; import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; @injectable() export default class Paragraph extends Tools { @@ -9,13 +9,16 @@ export default class Paragraph extends Tools { get run() { return (state, dispatch) => { - setBlockType(state.config.schema.nodes.paragraph)(state, dispatch); + Commands.setBlockType(state.config.schema.nodes.paragraph)( + state, + dispatch + ); }; } get enable() { return state => { - return setBlockType(state.config.schema.nodes.paragraph)(state); + return Commands.setBlockType(state.config.schema.nodes.paragraph)(state); }; } } diff --git a/wax-prosemirror-services/src/TextBlockLevel/SourceNoteService/SourceNote.js b/wax-prosemirror-services/src/TextBlockLevel/SourceNoteService/SourceNote.js index 5e05eea06..833bb7fc9 100644 --- a/wax-prosemirror-services/src/TextBlockLevel/SourceNoteService/SourceNote.js +++ b/wax-prosemirror-services/src/TextBlockLevel/SourceNoteService/SourceNote.js @@ -1,6 +1,6 @@ import Tools from "../../lib/Tools"; import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; +import { Commands } from "wax-prosemirror-utilities"; @injectable() class SourceNote extends Tools { @@ -9,13 +9,16 @@ class SourceNote extends Tools { get run() { return (state, dispatch) => { - setBlockType(state.config.schema.nodes.sourceNote)(state, dispatch); + Commands.setBlockType(state.config.schema.nodes.sourceNote)( + state, + dispatch + ); }; } get enable() { return state => { - return setBlockType(state.config.schema.nodes.sourceNote)(state); + return Commands.setBlockType(state.config.schema.nodes.sourceNote)(state); }; } } diff --git a/wax-prosemirror-utilities/src/commands/Commands.js b/wax-prosemirror-utilities/src/commands/Commands.js index 74d926b4d..555e9f2fd 100644 --- a/wax-prosemirror-utilities/src/commands/Commands.js +++ b/wax-prosemirror-utilities/src/commands/Commands.js @@ -1,5 +1,34 @@ import { v4 as uuidv4 } from "uuid"; +const setBlockType = (nodeType, attrs = {}) => { + return (state, dispatch) => { + const { from, to } = state.selection; + const tr = state.tr; + state.doc.nodesBetween(from, to, (node, pos) => { + if (!node.isTextblock || node.hasMarkup(nodeType, attrs)) return; + let applicable = false; + if (node.type == nodeType) { + applicable = true; + } else { + const $pos = state.doc.resolve(pos), + index = $pos.index(); + applicable = $pos.parent.canReplaceWith(index, index + 1, nodeType); + } + if (applicable) { + tr.setBlockType( + pos, + pos + node.nodeSize, + nodeType, + Object.assign({}, node.attrs, attrs) + ); + } + }); + if (!tr.steps.length) return false; + if (dispatch) dispatch(tr.scrollIntoView()); + return true; + }; +}; + const markActive = type => state => { const { from, $from, to, empty } = state.selection; @@ -83,6 +112,7 @@ const createComment = (state, dispatch, group) => { }; export default { + setBlockType, blockActive, canInsert, createComment, -- GitLab