From 1a26b43f57c7aa4c01417a174918d9c9fa4125cc Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Tue, 27 Oct 2020 19:45:01 +0200 Subject: [PATCH] add special characters files --- wax-prosemirror-components/index.js | 1 + .../findAndReplace/FindAndReplaceTool.js | 7 +-- .../SpecialCharactersComponent.js | 8 +++ .../SpecialCharactersTool.js | 57 +++++++++++++++++++ wax-prosemirror-services/index.js | 3 + .../SpecialCharacters.js | 0 .../SpecialCharactersService.js | 11 ++++ .../SpecialCharactersTool.js | 34 +++++++++++ .../SpecialCharacters.js | 13 +++++ .../SpecialCharactersToolGroupService.js | 11 ++++ wax-prosemirror-services/src/lib/Tools.js | 1 + 11 files changed, 140 insertions(+), 6 deletions(-) create mode 100644 wax-prosemirror-components/src/components/specialCharacters/SpecialCharactersComponent.js create mode 100644 wax-prosemirror-components/src/components/specialCharacters/SpecialCharactersTool.js delete mode 100644 wax-prosemirror-services/src/SpecialCharactersService/SpecialCharacters.js create mode 100644 wax-prosemirror-services/src/SpecialCharactersService/SpecialCharactersTool.js create mode 100644 wax-prosemirror-services/src/WaxToolGroups/SpecialCharactersToolGroupService/SpecialCharacters.js create mode 100644 wax-prosemirror-services/src/WaxToolGroups/SpecialCharactersToolGroupService/SpecialCharactersToolGroupService.js diff --git a/wax-prosemirror-components/index.js b/wax-prosemirror-components/index.js index 1d1488201..6203978ca 100644 --- a/wax-prosemirror-components/index.js +++ b/wax-prosemirror-components/index.js @@ -16,3 +16,4 @@ export { default as Tabs } from './src/ui/tabs/Tabs'; export { default as BlockLevelTools } from './src/ui/tabs/BlockLevelTools'; export { default as FindAndReplaceTool } from './src/components/findAndReplace/FindAndReplaceTool'; export { default as FullScreen } from './src/components/FullScreen'; +export { default as SpecialCharactersTool } from './src/components/specialCharacters/SpecialCharactersTool'; diff --git a/wax-prosemirror-components/src/components/findAndReplace/FindAndReplaceTool.js b/wax-prosemirror-components/src/components/findAndReplace/FindAndReplaceTool.js index 9bf822950..4936b7cb5 100644 --- a/wax-prosemirror-components/src/components/findAndReplace/FindAndReplaceTool.js +++ b/wax-prosemirror-components/src/components/findAndReplace/FindAndReplaceTool.js @@ -20,15 +20,10 @@ const DropWrapper = styled.div` `; const FindAndReplaceTool = ({ view = {}, item }) => { - const { state } = view; - const { enable, icon, run, select, title } = item; + const { icon, title } = item; const dropElement = useRef(); const [isOpen, setIsOpen] = useState(false); - // const isDisabled = - // enable && !enable(state) && !(select && select(state, activeViewId)); - // - let styles = { right: '-205px' }; const [style, setStyle] = useState(styles); diff --git a/wax-prosemirror-components/src/components/specialCharacters/SpecialCharactersComponent.js b/wax-prosemirror-components/src/components/specialCharacters/SpecialCharactersComponent.js new file mode 100644 index 000000000..461aa0d6b --- /dev/null +++ b/wax-prosemirror-components/src/components/specialCharacters/SpecialCharactersComponent.js @@ -0,0 +1,8 @@ +/* eslint react/prop-types: 0 */ +import React, { useState } from 'react'; + +const SpecialCharactersComponent = ({ close }) => { + return null; +}; + +export default SpecialCharactersComponent; diff --git a/wax-prosemirror-components/src/components/specialCharacters/SpecialCharactersTool.js b/wax-prosemirror-components/src/components/specialCharacters/SpecialCharactersTool.js new file mode 100644 index 000000000..59a9b8236 --- /dev/null +++ b/wax-prosemirror-components/src/components/specialCharacters/SpecialCharactersTool.js @@ -0,0 +1,57 @@ +import React, { useRef, useMemo, useState } from 'react'; + +import styled from 'styled-components'; +import { grid } from '@pubsweet/ui-toolkit'; + +import MenuButton from '../../ui/buttons/MenuButton'; +import SpecialCharactersComponent from './SpecialCharactersComponent'; + +const Wrapper = styled.div` + font-size: 0; + position: relative; + z-index: 2; +`; + +const DropWrapper = styled.div` + margin-top: ${grid(1)}; + position: absolute; + background: white; + top: 32px; +`; + +const SpecialCharactersTool = ({ view = {}, item }) => { + const { icon, title } = item; + const dropElement = useRef(); + const [isOpen, setIsOpen] = useState(false); + + const MemorizedDropdown = useMemo( + () => ( + <Wrapper> + <MenuButton + active={isOpen} + disabled={false} + iconName={icon} + onMouseDown={() => { + setIsOpen(!isOpen); + }} + title={title} + /> + + {isOpen && ( + <DropWrapper ref={dropElement}> + <SpecialCharactersComponent + close={() => { + setIsOpen(false); + }} + /> + </DropWrapper> + )} + </Wrapper> + ), + [isOpen], + ); + + return MemorizedDropdown; +}; + +export default SpecialCharactersTool; diff --git a/wax-prosemirror-services/index.js b/wax-prosemirror-services/index.js index 39b830cc9..c41319ad4 100644 --- a/wax-prosemirror-services/index.js +++ b/wax-prosemirror-services/index.js @@ -30,6 +30,8 @@ export { default as trackedTransaction } from './src/TrackChangeService/track-ch export { default as MathService } from './src/MathService/MathService'; export { default as FindAndReplaceService } from './src/FindAndReplaceService/FindAndReplaceService'; export { default as FullScreenService } from './src/FullScreenService/FullScreenService'; +export { default as SpecialCharactersService } from './src/SpecialCharactersService/SpecialCharactersService'; + /* ToolGroups */ @@ -47,3 +49,4 @@ export { default as DisplayTextToolGroupService } from './src/WaxToolGroups/Disp export { default as BlockDropDownToolGroupService } from './src/WaxToolGroups/BlockDropDownToolGroupService/BlockDropDownToolGroupService'; export { default as TrackingAndEditingToolGroupService } from './src/WaxToolGroups/TrackingAndEditingToolGroupService/TrackingAndEditingToolGroupService'; export { default as FullScreenToolGroupService } from './src/WaxToolGroups/FullScreenToolGroupService/FullScreenToolGroupService'; +export { default as SpecialCharactersToolGroupService } from './src/WaxToolGroups/SpecialCharactersToolGroupService/SpecialCharactersToolGroupService'; diff --git a/wax-prosemirror-services/src/SpecialCharactersService/SpecialCharacters.js b/wax-prosemirror-services/src/SpecialCharactersService/SpecialCharacters.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/wax-prosemirror-services/src/SpecialCharactersService/SpecialCharactersService.js b/wax-prosemirror-services/src/SpecialCharactersService/SpecialCharactersService.js index e69de29bb..046d5f1eb 100644 --- a/wax-prosemirror-services/src/SpecialCharactersService/SpecialCharactersService.js +++ b/wax-prosemirror-services/src/SpecialCharactersService/SpecialCharactersService.js @@ -0,0 +1,11 @@ +import Service from '../Service'; +import SpecialCharactersTool from './SpecialCharactersTool'; + +class SpecialCharactersService extends Service { + name = 'SpecialCharactersService'; + + register() { + this.container.bind('SpecialCharactersTool').to(SpecialCharactersTool); + } +} +export default SpecialCharactersService; diff --git a/wax-prosemirror-services/src/SpecialCharactersService/SpecialCharactersTool.js b/wax-prosemirror-services/src/SpecialCharactersService/SpecialCharactersTool.js new file mode 100644 index 000000000..bfb93e026 --- /dev/null +++ b/wax-prosemirror-services/src/SpecialCharactersService/SpecialCharactersTool.js @@ -0,0 +1,34 @@ +import React from 'react'; +import { isEmpty } from 'lodash'; +import { v4 as uuidv4 } from 'uuid'; +import { injectable } from 'inversify'; +import { SpecialCharactersTool } from 'wax-prosemirror-components'; +import Tools from '../lib/Tools'; + +export default +@injectable() +class SpecialCharacters extends Tools { + title = 'Find And Replace'; + icon = 'findAndReplace'; + name = 'find'; + + get run() { + return (state, dispatch) => {}; + } + + select = (state, activeViewId) => {}; + + get enable() { + return state => { + return true; + }; + } + + renderTool(view) { + if (isEmpty(view)) return null; + + return this._isDisplayed ? ( + <SpecialCharactersTool key={uuidv4()} item={this.toJSON()} view={view} /> + ) : null; + } +} diff --git a/wax-prosemirror-services/src/WaxToolGroups/SpecialCharactersToolGroupService/SpecialCharacters.js b/wax-prosemirror-services/src/WaxToolGroups/SpecialCharactersToolGroupService/SpecialCharacters.js new file mode 100644 index 000000000..e9e23413e --- /dev/null +++ b/wax-prosemirror-services/src/WaxToolGroups/SpecialCharactersToolGroupService/SpecialCharacters.js @@ -0,0 +1,13 @@ +import { injectable, inject } from 'inversify'; +import ToolGroup from '../../lib/ToolGroup'; + +@injectable() +class SpecialCharacters extends ToolGroup { + tools = []; + constructor(@inject('SpecialCharactersTool') specialCharactersTool) { + super(); + this.tools = [specialCharactersTool]; + } +} + +export default SpecialCharactersTool; diff --git a/wax-prosemirror-services/src/WaxToolGroups/SpecialCharactersToolGroupService/SpecialCharactersToolGroupService.js b/wax-prosemirror-services/src/WaxToolGroups/SpecialCharactersToolGroupService/SpecialCharactersToolGroupService.js new file mode 100644 index 000000000..7ad79f944 --- /dev/null +++ b/wax-prosemirror-services/src/WaxToolGroups/SpecialCharactersToolGroupService/SpecialCharactersToolGroupService.js @@ -0,0 +1,11 @@ +/* eslint-disable */ +import Service from '../../Service'; +import SpecialCharacters from './SpecialCharacters'; + +class SpecialCharactersToolGroupService extends Service { + register() { + this.container.bind('SpecialCharacters').to(SpecialCharacters); + } +} + +export default SpecialCharactersToolGroupService; diff --git a/wax-prosemirror-services/src/lib/Tools.js b/wax-prosemirror-services/src/lib/Tools.js index 47412051b..573530f89 100644 --- a/wax-prosemirror-services/src/lib/Tools.js +++ b/wax-prosemirror-services/src/lib/Tools.js @@ -1,3 +1,4 @@ +/* eslint-disable */ import React from 'react'; import { v4 as uuidv4 } from 'uuid'; import { isEmpty } from 'lodash'; -- GitLab