diff --git a/wax-prosemirror-layouts/src/layouts/EditoriaLayout.js b/wax-prosemirror-layouts/src/layouts/EditoriaLayout.js index 2ee3917ef7885cd48c5f63b7fc15749bec5abd16..55c91aef457ab7e5a823c6c374858170fa8ea1c4 100644 --- a/wax-prosemirror-layouts/src/layouts/EditoriaLayout.js +++ b/wax-prosemirror-layouts/src/layouts/EditoriaLayout.js @@ -52,6 +52,11 @@ const MainMenuInner = styled.div` top: 0; background: transparent; z-index: 9999; + div { + display: flex; + align-items: center; + justify-content: center; + } `; const SideMenuContainer = styled.div` diff --git a/wax-prosemirror-services/src/TextStyleService/TextStyle.js b/wax-prosemirror-services/src/TextStyleService/TextStyle.js index 09b03729f230cdc97dce7f7d2caacd81ee712165..0a7af60ef453ef272be64fe41d53184ccc3251cd 100644 --- a/wax-prosemirror-services/src/TextStyleService/TextStyle.js +++ b/wax-prosemirror-services/src/TextStyleService/TextStyle.js @@ -1,9 +1,17 @@ +import React from "react"; import { injectable, inject } from "inversify"; import ToolGroup from "../lib/ToolGroup"; - @injectable() export default class Annotation extends ToolGroup { tools = []; + title = () => { + return ( + <span> + Annotations + <hr /> + </span> + ); + }; constructor( @inject("Author") author, @inject("EpigraphPoetry") epigraphPoetry, @@ -28,12 +36,4 @@ export default class Annotation extends ToolGroup { title ]; } - - renderTools(view) { - const tools = []; - this.tools.forEach(tool => { - tools.push(tool.renderTool(view)); - }); - return tools; - } } diff --git a/wax-prosemirror-services/src/WaxToolGroups/AnnotationToolGroupService/Annotations.js b/wax-prosemirror-services/src/WaxToolGroups/AnnotationToolGroupService/Annotations.js index efec146dde9b0cebfe382704650ef526762ac7da..91a3c58bf189ebef049667075d926259c553d27a 100644 --- a/wax-prosemirror-services/src/WaxToolGroups/AnnotationToolGroupService/Annotations.js +++ b/wax-prosemirror-services/src/WaxToolGroups/AnnotationToolGroupService/Annotations.js @@ -1,6 +1,8 @@ import { injectable, inject } from "inversify"; import ToolGroup from "../../lib/ToolGroup"; - +import React, { useState } from "react"; +import { isFunction } from "lodash"; +import { NONAME } from "dns"; @injectable() class Annotations extends ToolGroup { tools = []; @@ -17,6 +19,11 @@ class Annotations extends ToolGroup { @inject("Blockquote") blockquote ) { super(); + code.hideOnToolbar = true; + strong.hideOnToolbar = true; + blockquote.hideOnToolbar = true; + subscript.hideOnToolbar = true; + superscript.hideOnToolbar = true; this.tools = [ code, emphasis, @@ -30,14 +37,6 @@ class Annotations extends ToolGroup { blockquote ]; } - - renderTools(view) { - const tools = []; - this.tools.forEach(tool => { - tools.push(tool.renderTool(view)); - }); - return tools; - } } export default Annotations; diff --git a/wax-prosemirror-services/src/WaxToolGroups/BaseToolGroupService/Base.js b/wax-prosemirror-services/src/WaxToolGroups/BaseToolGroupService/Base.js index e0b2190aa462d9271c67f657f4d2697b7fb7a47d..d9d35019ad83c726d610b45c19c7255c06a7b7fd 100644 --- a/wax-prosemirror-services/src/WaxToolGroups/BaseToolGroupService/Base.js +++ b/wax-prosemirror-services/src/WaxToolGroups/BaseToolGroupService/Base.js @@ -8,14 +8,6 @@ class Base extends ToolGroup { super(); this.tools = [undo, redo]; } - - renderTools(view) { - const tools = []; - this.tools.forEach(tool => { - tools.push(tool.renderTool(view)); - }); - return tools; - } } export default Base; diff --git a/wax-prosemirror-services/src/WaxToolGroups/ImageToolGroupService/Images.js b/wax-prosemirror-services/src/WaxToolGroups/ImageToolGroupService/Images.js index 2614e20a002804908ad6b902f87804b3cbb68fd4..7f6b397a683db2ad9e31d76bbf38e13e660561a1 100644 --- a/wax-prosemirror-services/src/WaxToolGroups/ImageToolGroupService/Images.js +++ b/wax-prosemirror-services/src/WaxToolGroups/ImageToolGroupService/Images.js @@ -8,14 +8,6 @@ class Images extends ToolGroup { super(); this.tools = [image]; } - - renderTools(view) { - const tools = []; - this.tools.forEach(tool => { - tools.push(tool.renderTool(view)); - }); - return tools; - } } export default Images; diff --git a/wax-prosemirror-services/src/WaxToolGroups/ListToolGroupService/Lists.js b/wax-prosemirror-services/src/WaxToolGroups/ListToolGroupService/Lists.js index 0e8bbf77740e9a225e26ee9a79b99a246414a822..2d0a9674a84b3a57167300ed51517ccf5865c922 100644 --- a/wax-prosemirror-services/src/WaxToolGroups/ListToolGroupService/Lists.js +++ b/wax-prosemirror-services/src/WaxToolGroups/ListToolGroupService/Lists.js @@ -13,14 +13,6 @@ class Lists extends ToolGroup { super(); this.tools = [orderedlist, bulletlist, joinup, lift]; } - - renderTools(view) { - const tools = []; - this.tools.forEach(tool => { - tools.push(tool.renderTool(view)); - }); - return tools; - } } export default Lists; diff --git a/wax-prosemirror-services/src/WaxToolGroups/TableToolGroupService/Tables.js b/wax-prosemirror-services/src/WaxToolGroups/TableToolGroupService/Tables.js index eff5bb286104f40cb9da9a5388df32d48cce1d54..c6719878a408aa708d654adc17e65a9634e7d8cf 100644 --- a/wax-prosemirror-services/src/WaxToolGroups/TableToolGroupService/Tables.js +++ b/wax-prosemirror-services/src/WaxToolGroups/TableToolGroupService/Tables.js @@ -11,14 +11,6 @@ class Tables extends ToolGroup { super(); this.tools = [table, tableDropDownOptions]; } - - renderTools(view) { - const tools = []; - this.tools.forEach(tool => { - tools.push(tool.renderTool(view)); - }); - return tools; - } } export default Tables; diff --git a/wax-prosemirror-services/src/lib/ToolGroup.js b/wax-prosemirror-services/src/lib/ToolGroup.js index f1f988e0b1d228bcaf6561fc39e26f75d655c833..1340e666f8fbfa0e1ae2f9bc57302b2fde3060ea 100644 --- a/wax-prosemirror-services/src/lib/ToolGroup.js +++ b/wax-prosemirror-services/src/lib/ToolGroup.js @@ -1,8 +1,11 @@ +import React, { useState } from "react"; import { injectable } from "inversify"; - +import { isFunction } from "lodash"; @injectable() export default class ToolGroup { _config = {}; + title = ""; + _tools = []; constructor() {} setGroupConfig(config) { this._config = config; @@ -12,7 +15,7 @@ export default class ToolGroup { const { exclude = [], include = [] } = this._config; if (include.length > 0) { - this.tools.map(tool => { + this._tools.map(tool => { if (include.includes(tool.constructor.name)) { tool.enableTool(); } else { @@ -20,7 +23,7 @@ export default class ToolGroup { } }); } else { - this.tools.map(tool => { + this._tools.map(tool => { if (exclude.includes(tool.constructor.name)) { tool.disableTool(); } @@ -28,11 +31,53 @@ export default class ToolGroup { } } + set tools(tools) { + this._tools = tools; + for (var i in this._tools) { + if (this._tools[i].hideOnToolbar) { + this._tools.push(this._tools.splice(i, 1)[0]); + } + } + } + renderTools(view) { + const [more, showHide] = useState(false); const tools = []; - this.tools.forEach(tool => { - tools.push(tool.renderTool(view)); + const rest = []; + this._tools.forEach(tool => { + if (tool.hideOnToolbar) { + rest.push(tool.renderTool(view)); + } else { + tools.push(tool.renderTool(view)); + } }); - return tools; + + const Title = isFunction(this.title) ? this.title : () => this.title; + + return ( + <div key={`groupName-${this.constructor.name}`}> + <Title /> + {tools} + {rest.length && !more ? ( + <button onClick={() => showHide(!more)}>...</button> + ) : null} + {more && ( + <div> + <button onClick={() => showHide(!more)}>...</button> + <div + style={{ + display: "flex", + width: "0", + top: "40px", + position: "relative", + right: "100%" + }} + > + {rest} + </div> + </div> + )} + </div> + ); } } diff --git a/wax-prosemirror-services/src/lib/Tools.js b/wax-prosemirror-services/src/lib/Tools.js index a89cf6f46d245a42b72e45ff6dc85d5d3eb88315..3495a7a4ca258779f441d112f59bbf20054d61a6 100644 --- a/wax-prosemirror-services/src/lib/Tools.js +++ b/wax-prosemirror-services/src/lib/Tools.js @@ -8,6 +8,7 @@ export default class Tools { title = "title"; content = "content"; _isEnabled = true; + hideOnToolbar = false; config = {}; pmplugins = {};