From b52abfd5e379e44896243526f5600b4a335c5dcd Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Fri, 19 Apr 2019 16:13:52 +0300 Subject: [PATCH] wax-prosemirror-components in progress --- .directory | 5 +- editors/default/package.json | 3 +- editors/default/src/Default.js | 22 ++ .../{menu => components}/HeadingsDropDown.js | 0 .../{menu => components}/ImageUpload.js | 0 .../{menu => components}/TableDropDown.js | 0 .../{menu => components/button}/Button.js | 2 +- .../button/button.css} | 7 - .../{ => icons}/icons.js | 0 wax-prosemirror-components/index.js | 1 + .../{menu => mainMenuBar}/MainMenuBar.js | 4 +- .../mainMenuBar/MenuBar.css | 6 + .../{ => mainMenuBar}/menu.js | 240 +----------------- 13 files changed, 42 insertions(+), 248 deletions(-) rename wax-prosemirror-components/{menu => components}/HeadingsDropDown.js (100%) rename wax-prosemirror-components/{menu => components}/ImageUpload.js (100%) rename wax-prosemirror-components/{menu => components}/TableDropDown.js (100%) rename wax-prosemirror-components/{menu => components/button}/Button.js (93%) rename wax-prosemirror-components/{menu/MenuBar.css => components/button/button.css} (76%) rename wax-prosemirror-components/{ => icons}/icons.js (100%) rename wax-prosemirror-components/{menu => mainMenuBar}/MainMenuBar.js (89%) create mode 100644 wax-prosemirror-components/mainMenuBar/MenuBar.css rename wax-prosemirror-components/{ => mainMenuBar}/menu.js (52%) diff --git a/.directory b/.directory index a60bc5dc8..0f5e88684 100644 --- a/.directory +++ b/.directory @@ -1,6 +1,3 @@ [Dolphin] -Timestamp=2019,4,9,16,57,35 +Timestamp=2019,4,18,13,0,59 Version=3 - -[Settings] -HiddenFilesShown=true diff --git a/editors/default/package.json b/editors/default/package.json index c6d39e458..53882e300 100644 --- a/editors/default/package.json +++ b/editors/default/package.json @@ -9,7 +9,8 @@ "wax-prosemirror-core": "0.0.1", "wax-prosemirror-schema": "0.0.1", "wax-prosemirror-themes": "0.0.1", - "wax-prosemirror-layouts": "0.0.1" + "wax-prosemirror-layouts": "0.0.1", + "wax-prosemirror-components": "0.0.1" }, "scripts": { "start": "react-app-rewired start", diff --git a/editors/default/src/Default.js b/editors/default/src/Default.js index 7289f7c1a..ab2c49246 100644 --- a/editors/default/src/Default.js +++ b/editors/default/src/Default.js @@ -1,6 +1,9 @@ import React, { Component } from "react"; +import styled from "styled-components"; + import { Wax, createSchema } from "wax-prosemirror-core"; import { defaultSchema } from "wax-prosemirror-schema"; +import { MainMenuBar } from "wax-prosemirror-components"; import "wax-prosemirror-layouts/defaultLayout.css"; import "wax-prosemirror-themes/defaultTheme.css"; @@ -11,6 +14,19 @@ const options = { schema: new createSchema(defaultSchema) }; +const MainEditor = styled.div` + ${"" /* style override*/}; +`; + +const menuItems = [ + "undo", + "redo", + "strong", + "image", + "table", + "tableDropDownOptions" +]; + class Default extends Component { render() { return ( @@ -21,6 +37,12 @@ class Default extends Component { theme="default" layout="default" debug + renderLayout={({ editor, ...props }) => ( + <React.Fragment> + <MainMenuBar menuItems={menuItems} {...props} /> + <MainEditor className="main-editor">{editor}</MainEditor> + </React.Fragment> + )} /> ); } diff --git a/wax-prosemirror-components/menu/HeadingsDropDown.js b/wax-prosemirror-components/components/HeadingsDropDown.js similarity index 100% rename from wax-prosemirror-components/menu/HeadingsDropDown.js rename to wax-prosemirror-components/components/HeadingsDropDown.js diff --git a/wax-prosemirror-components/menu/ImageUpload.js b/wax-prosemirror-components/components/ImageUpload.js similarity index 100% rename from wax-prosemirror-components/menu/ImageUpload.js rename to wax-prosemirror-components/components/ImageUpload.js diff --git a/wax-prosemirror-components/menu/TableDropDown.js b/wax-prosemirror-components/components/TableDropDown.js similarity index 100% rename from wax-prosemirror-components/menu/TableDropDown.js rename to wax-prosemirror-components/components/TableDropDown.js diff --git a/wax-prosemirror-components/menu/Button.js b/wax-prosemirror-components/components/button/Button.js similarity index 93% rename from wax-prosemirror-components/menu/Button.js rename to wax-prosemirror-components/components/button/Button.js index ea014794a..de880ccd8 100644 --- a/wax-prosemirror-components/menu/Button.js +++ b/wax-prosemirror-components/components/button/Button.js @@ -1,7 +1,7 @@ import React from "react"; import styled from "styled-components"; import classnames from "classnames"; -import classes from "../../css/MenuBar.css"; +import classes from "./button.css"; const ButtonStyled = styled.button` display: ${props => (props.select ? "inline" : "none")}; diff --git a/wax-prosemirror-components/menu/MenuBar.css b/wax-prosemirror-components/components/button/button.css similarity index 76% rename from wax-prosemirror-components/menu/MenuBar.css rename to wax-prosemirror-components/components/button/button.css index 216538ea6..9f6b6ef1b 100644 --- a/wax-prosemirror-components/menu/MenuBar.css +++ b/wax-prosemirror-components/components/button/button.css @@ -1,10 +1,3 @@ -.main-toolbar { - position: fixed; - display: flex; - margin: 0; - z-index: 999; -} - button { background: #fff; border: none; diff --git a/wax-prosemirror-components/icons.js b/wax-prosemirror-components/icons/icons.js similarity index 100% rename from wax-prosemirror-components/icons.js rename to wax-prosemirror-components/icons/icons.js diff --git a/wax-prosemirror-components/index.js b/wax-prosemirror-components/index.js index e69de29bb..6bdee14c2 100644 --- a/wax-prosemirror-components/index.js +++ b/wax-prosemirror-components/index.js @@ -0,0 +1 @@ +export { default as MainMenuBar } from "./mainMenuBar/MainMenuBar"; diff --git a/wax-prosemirror-components/menu/MainMenuBar.js b/wax-prosemirror-components/mainMenuBar/MainMenuBar.js similarity index 89% rename from wax-prosemirror-components/menu/MainMenuBar.js rename to wax-prosemirror-components/mainMenuBar/MainMenuBar.js index ad8102fdb..b828b56be 100644 --- a/wax-prosemirror-components/menu/MainMenuBar.js +++ b/wax-prosemirror-components/mainMenuBar/MainMenuBar.js @@ -1,7 +1,7 @@ import React from "react"; import map from "lodash/map"; -import classes from "../../css/MenuBar.css"; -import menu from "../../config/menu"; +import classes from "./MenuBar.css"; +import menu from "./menu"; const filtered = (menu, menuItems) => Object.keys(menu) diff --git a/wax-prosemirror-components/mainMenuBar/MenuBar.css b/wax-prosemirror-components/mainMenuBar/MenuBar.css new file mode 100644 index 000000000..9ba4c92ba --- /dev/null +++ b/wax-prosemirror-components/mainMenuBar/MenuBar.css @@ -0,0 +1,6 @@ +.main-toolbar { + position: fixed; + display: flex; + margin: 0; + z-index: 999; +} diff --git a/wax-prosemirror-components/menu.js b/wax-prosemirror-components/mainMenuBar/menu.js similarity index 52% rename from wax-prosemirror-components/menu.js rename to wax-prosemirror-components/mainMenuBar/menu.js index 05632479e..f8ee629e9 100644 --- a/wax-prosemirror-components/menu.js +++ b/wax-prosemirror-components/mainMenuBar/menu.js @@ -15,12 +15,12 @@ import { addColumnBefore } from "prosemirror-tables"; import { redo, undo } from "prosemirror-history"; import { wrapInList } from "prosemirror-schema-list"; -import icons from "./icons"; +import icons from "../icons/icons"; //Components -import Button from "../components/menu/Button"; -import TableDropDown from "../components/menu/TableDropDown"; -import ImageUpload from "../components/menu/ImageUpload"; -import HeadingsDropDown from "../components/menu/HeadingsDropDown"; +import Button from "../components/button/Button"; +import TableDropDown from "../components/TableDropDown"; +import ImageUpload from "../components/ImageUpload"; +import HeadingsDropDown from "../components/HeadingsDropDown"; const markActive = type => state => { const { from, $from, to, empty } = state.selection; @@ -90,94 +90,7 @@ export default { select: state => true, menu: props => <HeadingsDropDown key={uuid()} {...props} /> }, - heading1: { - title: "Change to Title", - content: "Title", - // active: blockActive(schema.nodes.heading, { level: 1 }), - // enable: setBlockType(schema.nodes.heading, { level: 1 }), - run(state, dispatch) { - setBlockType(state.config.schema.nodes.heading, { level: 1 })( - state, - dispatch - ); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - subtitle: { - title: "Change to Subtilte", - content: "Subtilte", - run(state, dispatch) { - setBlockType(state.config.schema.nodes.subtitle)(state, dispatch); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - epigraph: { - title: "Change to Epigraph", - content: "Epigraph", - run(state, dispatch) { - wrapIn(state.config.schema.nodes.epigraph)(state, dispatch); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - heading2: { - title: "Change to heading level 1", - content: "Heading 1", - // active: blockActive(schema.nodes.heading, { level: 1 }), - // enable: setBlockType(schema.nodes.heading, { level: 1 }), - run(state, dispatch) { - setBlockType(state.config.schema.nodes.heading, { level: 2 })( - state, - dispatch - ); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - heading3: { - title: "Change to heading level 2", - content: "Heading 2", - // active: blockActive(schema.nodes.heading, { level: 1 }), - // enable: setBlockType(schema.nodes.heading, { level: 1 }), - run(state, dispatch) { - setBlockType(state.config.schema.nodes.heading, { level: 3 })( - state, - dispatch - ); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - heading4: { - title: "Change to heading level 3", - content: "Heading 3", - // active: blockActive(schema.nodes.heading, { level: 1 }), - // enable: setBlockType(schema.nodes.heading, { level: 1 }), - run(state, dispatch) { - setBlockType(state.config.schema.nodes.heading, { level: 3 })( - state, - dispatch - ); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - heading5: { - title: "Change to heading level 4", - content: "Heading 4", - // active: blockActive(schema.nodes.heading, { level: 1 }), - // enable: setBlockType(schema.nodes.heading, { level: 1 }), - run(state, dispatch) { - setBlockType(state.config.schema.nodes.heading, { level: 4 })( - state, - dispatch - ); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, + plain: { title: "Change to General Text", // content: icons.paragraph, @@ -191,86 +104,7 @@ export default { select: state => true, menu: props => <Button key={uuid()} {...props} /> }, - imageTitle: { - title: "Change to Image Title", - // content: icons.paragraph, - content: "Image Title", - // active: blockActive(schema.nodes.paragraph), - // enable: setBlockType(schema.nodes.paragraph), - run(state, dispatch) { - setBlockType(state.config.schema.nodes.figureTitle)(state, dispatch); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - imageCaption: { - title: "Change to Image Caption", - // content: icons.paragraph, - content: "Image Caption", - // active: blockActive(schema.nodes.paragraph), - // enable: setBlockType(schema.nodes.paragraph), - run(state, dispatch) { - setBlockType(state.config.schema.nodes.figureCaption)(state, dispatch); - }, - - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - quote: { - title: "Change to Quote", - content: "Quote", - run(state, dispatch) { - wrapIn(state.config.schema.nodes.quote)(state, dispatch); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - special: { - title: "Change to Special", - content: "Special", - run(state, dispatch) { - wrapIn(state.config.schema.nodes.special)(state, dispatch); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - important: { - title: "Change to Important", - content: "Important", - run(state, dispatch) { - wrapIn(state.config.schema.nodes.important)(state, dispatch); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - recommended: { - title: "Change to Recommended", - content: "Recommended", - run(state, dispatch) { - wrapIn(state.config.schema.nodes.recommended)(state, dispatch); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - caution: { - title: "Change to Caution", - content: "Caution", - run(state, dispatch) { - wrapIn(state.config.schema.nodes.caution)(state, dispatch); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - tip: { - title: "Change to tip", - content: "Tip", - run(state, dispatch) { - wrapIn(state.config.schema.nodes.tip)(state, dispatch); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, em: { title: "Toggle emphasis", content: icons.em, @@ -396,17 +230,7 @@ export default { select: state => true, menu: props => <Button key={uuid()} {...props} /> }, - footnote: { - title: "Insert footnote", - content: icons.footnote, - // enable: canInsert(schema.nodes.footnote), - select: state => true, - run: (state, dispatch) => { - const footnote = state.config.schema.nodes.footnote.create(); - dispatch(state.tr.replaceSelectionWith(footnote)); - }, - menu: props => <Button key={uuid()} {...props} /> - }, + blockquote: { title: "Wrap in block quote", content: icons.blockquote, @@ -464,55 +288,5 @@ export default { select: state => true, run: option => true, menu: props => <ImageUpload key={uuid()} {...props} /> - }, - - table: { - title: "Insert table", - content: icons.table, - // enable: canInsert(schema.nodes.table), - run: (state, dispatch) => { - // const { from } = state.selection - let rowCount = window && window.prompt("How many rows?", 2); - let colCount = window && window.prompt("How many columns?", 2); - - const cells = []; - while (colCount--) { - cells.push(state.config.schema.nodes.table_cell.createAndFill()); - } - - const rows = []; - while (rowCount--) { - rows.push( - state.config.schema.nodes.table_row.createAndFill(null, cells) - ); - } - - const table = state.config.schema.nodes.table.createAndFill(null, rows); - dispatch(state.tr.replaceSelectionWith(table)); - - // const tr = state.tr.replaceSelectionWith(table) - // tr.setSelection(Selection.near(tr.doc.resolve(from))) - // dispatch(tr.scrollIntoView()) - // view.focus() - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> - }, - tableDropDownOptions: { - content: "table", - run: option => true, - title: "Select Options", - select: state => addColumnBefore(state), - menu: props => <TableDropDown key={uuid()} {...props} /> - }, - selectParentNode: { - title: "Toggle strong", - content: "FindP", - // active: markActive(schema.marks.strong), - run(state, dispatch) { - selectParentNode(state, dispatch); - }, - select: state => true, - menu: props => <Button key={uuid()} {...props} /> } }; -- GitLab