diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading5.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading5.js new file mode 100644 index 0000000000000000000000000000000000000000..c2dc1b987391cd6d8e280ffec45d1df871147815 --- /dev/null +++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading5.js @@ -0,0 +1,57 @@ +import React from 'react'; +import { injectable } from 'inversify'; +import { isEmpty } from 'lodash'; +import { LeftSideButton } from 'wax-prosemirror-components'; +import { Commands } from 'wax-prosemirror-utilities'; +import Tools from '../../lib/Tools'; + +export default +@injectable() +class Heading2 extends Tools { + title = 'Change to heading level 5'; + label = 'Heading 5'; + name = 'Heading5'; + + get run() { + return (state, dispatch) => { + Commands.setBlockType(state.config.schema.nodes.heading5)( + state, + dispatch, + ); + }; + } + + get active() { + return (state, activeViewId) => { + let isActive = false; + if (activeViewId !== 'main') return false; + + const { from, to } = state.selection; + state.doc.nodesBetween(from, to, (node, pos) => { + if (node.type.name === 'heading5') { + isActive = true; + } + }); + return isActive; + }; + } + + select = (state, activeViewId) => { + if (activeViewId !== 'main') return false; + return true; + }; + + get enable() { + return state => { + return Commands.setBlockType(state.config.schema.nodes.heading5)(state); + }; + } + + renderTool(view) { + if (isEmpty(view)) return null; + // eslint-disable-next-line no-underscore-dangle + return this._isDisplayed ? ( + <LeftSideButton item={this.toJSON()} key="Heading5" view={view} /> + ) : null; + } +} diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading6.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading6.js new file mode 100644 index 0000000000000000000000000000000000000000..8d668648e062cbba2d533cc208a7a4c039a8a0d0 --- /dev/null +++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/Heading6.js @@ -0,0 +1,57 @@ +import React from 'react'; +import { injectable } from 'inversify'; +import { isEmpty } from 'lodash'; +import { LeftSideButton } from 'wax-prosemirror-components'; +import { Commands } from 'wax-prosemirror-utilities'; +import Tools from '../../lib/Tools'; + +export default +@injectable() +class Heading2 extends Tools { + title = 'Change to heading level 6'; + label = 'Heading 6'; + name = 'Heading6'; + + get run() { + return (state, dispatch) => { + Commands.setBlockType(state.config.schema.nodes.heading6)( + state, + dispatch, + ); + }; + } + + get active() { + return (state, activeViewId) => { + let isActive = false; + if (activeViewId !== 'main') return false; + + const { from, to } = state.selection; + state.doc.nodesBetween(from, to, (node, pos) => { + if (node.type.name === 'heading6') { + isActive = true; + } + }); + return isActive; + }; + } + + select = (state, activeViewId) => { + if (activeViewId !== 'main') return false; + return true; + }; + + get enable() { + return state => { + return Commands.setBlockType(state.config.schema.nodes.heading6)(state); + }; + } + + renderTool(view) { + if (isEmpty(view)) return null; + // eslint-disable-next-line no-underscore-dangle + return this._isDisplayed ? ( + <LeftSideButton item={this.toJSON()} key="Heading5" view={view} /> + ) : null; + } +} diff --git a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/HeadingService.js b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/HeadingService.js index 077cbdae15903a23b66be97c3b544638a48fe977..ebc6e23641689ad376007cb88c9cd864cea10dde 100644 --- a/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/HeadingService.js +++ b/wax-prosemirror-services/src/DisplayBlockLevel/HeadingService/HeadingService.js @@ -1,15 +1,17 @@ import Heading2 from './Heading2'; import Heading3 from './Heading3'; import Heading4 from './Heading4'; +import Heading5 from './Heading5'; +import Heading6 from './Heading6'; import Service from '../../Service'; class HeadingService extends Service { - // boot() {} - register() { this.container.bind('Heading2').to(Heading2); this.container.bind('Heading3').to(Heading3); this.container.bind('Heading4').to(Heading4); + this.container.bind('Heading5').to(Heading5); + this.container.bind('Heading6').to(Heading6); const createNode = this.container.get('CreateNode'); createNode({ heading2: { @@ -56,6 +58,36 @@ class HeadingService extends Service { }, }, }); + createNode({ + heading5: { + content: 'inline*', + group: 'block', + defining: true, + parseDOM: [ + { + tag: 'h5', + }, + ], + toDOM(node) { + return ['h5', 0]; + }, + }, + }); + createNode({ + heading6: { + content: 'inline*', + group: 'block', + defining: true, + parseDOM: [ + { + tag: 'h6', + }, + ], + toDOM(node) { + return ['h6', 0]; + }, + }, + }); } } diff --git a/wax-prosemirror-services/src/WaxToolGroups/DisplayToolGroupService/Display.js b/wax-prosemirror-services/src/WaxToolGroups/DisplayToolGroupService/Display.js index a6a407a2b87c3c713aaa62d9b115c15f5a9a7106..95ad024f0d57221094af8800422c8e9f00885b18 100644 --- a/wax-prosemirror-services/src/WaxToolGroups/DisplayToolGroupService/Display.js +++ b/wax-prosemirror-services/src/WaxToolGroups/DisplayToolGroupService/Display.js @@ -17,6 +17,8 @@ class Display extends ToolGroup { @inject('Heading2') heading2, @inject('Heading3') heading3, @inject('Heading4') heading4, + @inject('Heading5') heading5, + @inject('Heading6') heading6, ) { super(); this.tools = [ @@ -28,6 +30,8 @@ class Display extends ToolGroup { heading2, heading3, heading4, + heading5, + heading6, ]; } }