diff --git a/editors/editoria/src/config/config.js b/editors/editoria/src/config/config.js index be39bf3281288077a27d1cdcb50d5a0b232abdef..669174167eb0446813151bc361a0e1a8d75fdbff 100644 --- a/editors/editoria/src/config/config.js +++ b/editors/editoria/src/config/config.js @@ -14,7 +14,7 @@ export default { }, { templateArea: "leftSideBar", - toolGroups: ["TextStyle"] + toolGroups: ["Display"] } ], diff --git a/wax-prosemirror-core/src/config/defaultConfig.js b/wax-prosemirror-core/src/config/defaultConfig.js index 6b29b6f8683a1479d73edec320595c1a2ec8ef2e..df0e8e662a90f1704090c2fab1d3263608831f6b 100644 --- a/wax-prosemirror-core/src/config/defaultConfig.js +++ b/wax-prosemirror-core/src/config/defaultConfig.js @@ -18,7 +18,11 @@ import { TableToolGroupService, BaseService, BaseToolGroupService, - ImageToolGroupService + ImageToolGroupService, + TextBlockLevelService, + TextToolGroupService, + DisplayBlockLevelService, + DisplayToolGroupService } from "wax-prosemirror-services"; export default { @@ -41,6 +45,10 @@ export default { new TablesService(), new BaseService(), new BaseToolGroupService(), - new ImageToolGroupService() + new ImageToolGroupService(), + new DisplayBlockLevelService(), + new DisplayToolGroupService() + // new TextBlockLevelService(), + // new TextToolGroupService() ] }; diff --git a/wax-prosemirror-schema/src/editoria/nodes.js b/wax-prosemirror-schema/src/editoria/nodes.js index 5b5dd6182734b41f308043d9c69b097cabb4cc55..76e43ae9d9a4c937b006a6e9d691ec967a74aeed 100644 --- a/wax-prosemirror-schema/src/editoria/nodes.js +++ b/wax-prosemirror-schema/src/editoria/nodes.js @@ -55,31 +55,6 @@ const nodes = { return ["img", { src, alt, title }]; } }, - author: { - content: "inline*", - group: "block", - priority: 0, - defining: true, - attrs: { - class: { default: "author" }, - track: { default: [] } - }, - parseDOM: [ - { - tag: "p.author", - getAttrs(dom) { - return { - class: dom.getAttribute("class"), - track: parseTracks(dom.dataset.track) - }; - } - } - ], - toDOM(node) { - const attrs = blockLevelToDOM(node); - return ["p", attrs, 0]; - } - }, epigraphProse: { content: "inline*", group: "block", diff --git a/wax-prosemirror-schema/src/nodes/authorNode.js b/wax-prosemirror-schema/src/nodes/authorNode.js index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a19909f2ce734a3f261eb290deb7c0910152a742 100644 --- a/wax-prosemirror-schema/src/nodes/authorNode.js +++ b/wax-prosemirror-schema/src/nodes/authorNode.js @@ -0,0 +1,30 @@ +import { parseFormatList, parseTracks, blockLevelToDOM } from "./helpers"; +const author = { + content: "inline*", + group: "block", + priority: 0, + defining: true, + attrs: { + class: { default: "author" }, + track: { default: [] } + }, + parseDOM: [ + { + tag: "p.author", + getAttrs(hook, next) { + Object.assign(hook, { + class: dom.getAttribute("class"), + track: parseTracks(hook.dom.dataset.track) + }); + next(); + } + } + ], + toDOM(hook, next) { + const attrs = blockLevelToDOM(hook.node); + hook.value = ["p", attrs, 0]; + next(); + } +}; + +export default author; diff --git a/wax-prosemirror-schema/src/nodes/helpers.js b/wax-prosemirror-schema/src/nodes/helpers.js new file mode 100644 index 0000000000000000000000000000000000000000..3020008e105df94bfb17663ceb35334c02fe3e97 --- /dev/null +++ b/wax-prosemirror-schema/src/nodes/helpers.js @@ -0,0 +1,50 @@ +const parseFormatList = str => { + if (!str) { + return []; + } + let formatList; + try { + formatList = JSON.parse(str); + } catch (error) { + return []; + } + if (!Array.isArray(formatList)) { + return []; + } + return formatList.filter(format => typeof format === "string"); // ensure there are only strings in list +}; + +const parseTracks = str => { + if (!str) { + return []; + } + let tracks; + try { + tracks = JSON.parse(str); + } catch (error) { + return []; + } + if (!Array.isArray(tracks)) { + return []; + } + return tracks.filter( + ( + track // ensure required fields are present + ) => + track.hasOwnProperty("user") && + track.hasOwnProperty("username") && + track.hasOwnProperty("date") + ); +}; + +const blockLevelToDOM = node => { + const attrs = node.attrs.track.length + ? { + class: node.attrs.class, + "data-track": JSON.stringify(node.attrs.track) + } + : { class: node.attrs.class }; + return attrs; +}; + +export { parseFormatList, parseTracks, blockLevelToDOM }; diff --git a/wax-prosemirror-services/index.js b/wax-prosemirror-services/index.js index 293867afcc2f5139d906a598af8a86a7e5d928c2..7ee09dcb21bcdb544100667b24d42ae2e38adb41 100644 --- a/wax-prosemirror-services/index.js +++ b/wax-prosemirror-services/index.js @@ -1,13 +1,19 @@ export { default as MenuService } from "./src/MenuService/MenuService"; export { default as LinkService } from "./src/LinkService/LinkService"; -export { default as TextStyleService } from "./src/TextStyleService/TextStyleService"; -export { default as PlaceholderService } from "./src/PlaceholderService/PlaceholderService"; +export { + default as TextStyleService +} from "./src/TextStyleService/TextStyleService"; +export { + default as PlaceholderService +} from "./src/PlaceholderService/PlaceholderService"; export { default as ImageService } from "./src/ImageService/ImageService"; export { default as RulesService } from "./src/RulesService/RulesService"; export { default as SchemaService } from "./src/SchemaService/SchemaService"; -export { default as ShortCutsService } from "./src/ShortCutsService/ShortCutsService"; +export { + default as ShortCutsService +} from "./src/ShortCutsService/ShortCutsService"; export { default as OverlayService } from "./src/OverlayService/OverlayService"; export { default as Tool } from "./src/lib/Tools"; @@ -16,19 +22,39 @@ export { default as Tool } from "./src/lib/Tools"; All Elements services */ export { default as BaseService } from "./src/BaseService/BaseService"; -export { default as InlineAnnotationsService } from "./src/InlineAnnotations/InlineAnnotationsService"; +export { + default as InlineAnnotationsService +} from "./src/InlineAnnotations/InlineAnnotationsService"; export { default as ListsService } from "./src/ListsService/ListsService"; export { default as TablesService } from "./src/TablesService/TablesService"; -export { default as TextBlockLevelService } from "./src/TextBlockLevel/TextBlockLevelService"; -export { default as DisplayBlockLevelService } from "./src/DisplayBlockLevel/DisplayBlockLevelService"; +export { + default as TextBlockLevelService +} from "./src/TextBlockLevel/TextBlockLevelService"; +export { + default as DisplayBlockLevelService +} from "./src/DisplayBlockLevel/DisplayBlockLevelService"; /* ToolGroups */ -export { default as BaseToolGroupService } from "./src/WaxToolGroups/BaseToolGroupService/BaseToolGroupService"; - -export { default as AnnotationToolGroupService } from "./src/WaxToolGroups/AnnotationToolGroupService/AnnotationToolGroupService"; -export { default as ListToolGroupService } from "./src/WaxToolGroups/ListToolGroupService/ListToolGroupService"; -export { default as ImageToolGroupService } from "./src/WaxToolGroups/ImageToolGroupService/ImageToolGroupService"; - -export { default as TableToolGroupService } from "./src/WaxToolGroups/TableToolGroupService/TableToolGroupService"; +export { + default as BaseToolGroupService +} from "./src/WaxToolGroups/BaseToolGroupService/BaseToolGroupService"; +export { + default as AnnotationToolGroupService +} from "./src/WaxToolGroups/AnnotationToolGroupService/AnnotationToolGroupService"; +export { + default as ListToolGroupService +} from "./src/WaxToolGroups/ListToolGroupService/ListToolGroupService"; +export { + default as ImageToolGroupService +} from "./src/WaxToolGroups/ImageToolGroupService/ImageToolGroupService"; +export { + default as TableToolGroupService +} from "./src/WaxToolGroups/TableToolGroupService/TableToolGroupService"; +export { + default as DisplayToolGroupService +} from "./src/WaxToolGroups/DisplayToolGroupService/DisplayToolGroupService"; +export { + default as TextToolGroupService +} from "./src/WaxToolGroups/TextToolGroupService/TextToolGroupService"; diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/AuthorService.js b/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/AuthorService.js index 09e110b3fcdedce4a6d676a19b305537e9ff92a9..c7a259badac013bdc51f3573abfe954fe7c91c7a 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/AuthorService.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/AuthorService/AuthorService.js @@ -1,4 +1,5 @@ import Service from "wax-prosemirror-core/src/services/Service"; +import { authorNode } from "wax-prosemirror-schema"; import Author from "./Author"; class AuthorService extends Service { @@ -6,6 +7,13 @@ class AuthorService extends Service { register() { this.container.bind("Author").to(Author); + const createNode = this.container.get("CreateNode"); + createNode( + { + author: authorNode + }, + { toWaxSchema: true } + ); } } diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/index.js b/wax-prosemirror-services/src/DisplayBlockLevel/index.js index 6e9670adff6ddceb74b8eade93a55b58d2e76781..3661a97fe9eca9cd814d66e0ff74673f8d9116cb 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/index.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/index.js @@ -5,9 +5,9 @@ import SubTitleService from "./SubTitleService/SubTitleService"; import TitleService from "./TitleService/TitleService"; export default [ - new AuthorService(), - new EpigraphPoetryService(), - new HeadingService(), - new SubTitleService(), - new TitleService() + new AuthorService() + // new EpigraphPoetryService(), + // new HeadingService(), + // new SubTitleService(), + // new TitleService() ]; diff --git a/wax-prosemirror-services/src/TextStyleService/TextStyle.js b/wax-prosemirror-services/src/TextStyleService/TextStyle.js index 0a7af60ef453ef272be64fe41d53184ccc3251cd..f00cb6d29dc30c09ad96cc8721d83a0c082c3b41 100644 --- a/wax-prosemirror-services/src/TextStyleService/TextStyle.js +++ b/wax-prosemirror-services/src/TextStyleService/TextStyle.js @@ -13,7 +13,6 @@ export default class Annotation extends ToolGroup { ); }; constructor( - @inject("Author") author, @inject("EpigraphPoetry") epigraphPoetry, @inject("EpigraphProse") epigraphProse, @inject("Heading1") heading1, @@ -25,7 +24,6 @@ export default class Annotation extends ToolGroup { ) { super(); this.tools = [ - author, epigraphPoetry, epigraphProse, heading1, diff --git a/wax-prosemirror-services/src/TextStyleService/tools/Author.js b/wax-prosemirror-services/src/TextStyleService/tools/Author.js deleted file mode 100644 index 6be138dd84d3867dcf35a138f1efc71f55025856..0000000000000000000000000000000000000000 --- a/wax-prosemirror-services/src/TextStyleService/tools/Author.js +++ /dev/null @@ -1,21 +0,0 @@ -import Tools from "../../lib/Tools"; -import { injectable } from "inversify"; -import { setBlockType } from "prosemirror-commands"; - -@injectable() -export default class Author extends Tools { - title = "Change to Author"; - content = "Author"; - - get run() { - return (state, dispatch) => { - setBlockType(state.config.schema.nodes.author)(state, dispatch); - }; - } - - get enable() { - return state => { - return setBlockType(state.config.schema.nodes.author)(state); - }; - } -} diff --git a/wax-prosemirror-services/src/TextStyleService/tools/index.js b/wax-prosemirror-services/src/TextStyleService/tools/index.js index 52ce53fe7004dab81ec2d3093507eafa58fac1da..7a9b47da04f1f2c077cc3319a3d7370a056a15cb 100644 --- a/wax-prosemirror-services/src/TextStyleService/tools/index.js +++ b/wax-prosemirror-services/src/TextStyleService/tools/index.js @@ -1,4 +1,3 @@ -export { default as Author } from "./Author"; export { default as EpigraphPoetry } from "./EpigraphPoetry"; export { default as EpigraphProse } from "./EpigraphProse"; export { default as Heading1 } from "./Heading1"; diff --git a/wax-prosemirror-services/src/WaxToolGroups/DisplayToolGroupService/Display.js b/wax-prosemirror-services/src/WaxToolGroups/DisplayToolGroupService/Display.js index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..af73f18897341935c4bf1e1ba511bc699024413c 100644 --- a/wax-prosemirror-services/src/WaxToolGroups/DisplayToolGroupService/Display.js +++ b/wax-prosemirror-services/src/WaxToolGroups/DisplayToolGroupService/Display.js @@ -0,0 +1,22 @@ +import React from "react"; +import { injectable, inject } from "inversify"; +import ToolGroup from "../../lib/ToolGroup"; + +@injectable() +class Display extends ToolGroup { + tools = []; + title = () => { + return ( + <span> + Display + <hr /> + </span> + ); + }; + constructor(@inject("Author") author) { + super(); + this.tools = [author]; + } +} + +export default Display; diff --git a/wax-prosemirror-services/src/WaxToolGroups/TextToolGroupService/Text.js b/wax-prosemirror-services/src/WaxToolGroups/TextToolGroupService/Text.js index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e14231b123a061a168b86fdb92242c48db81c95e 100644 --- a/wax-prosemirror-services/src/WaxToolGroups/TextToolGroupService/Text.js +++ b/wax-prosemirror-services/src/WaxToolGroups/TextToolGroupService/Text.js @@ -0,0 +1,13 @@ +import { injectable, inject } from "inversify"; +import ToolGroup from "../../lib/ToolGroup"; + +@injectable() +class Text extends ToolGroup { + tools = []; + constructor() { + super(); + this.tools = []; + } +} + +export default Text;