From f527304ffbe4c8cf6656405479c1e2d01785ee09 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Tue, 4 Jan 2022 13:04:23 +0200 Subject: [PATCH] add list support --- .../components/QuestionEditorComponent.js | 29 ++++++++++++------- .../plugins/placeholder.js | 6 +++- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/QuestionEditorComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/QuestionEditorComponent.js index d19ad04d1..2d5a16dab 100644 --- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/QuestionEditorComponent.js +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/components/QuestionEditorComponent.js @@ -7,9 +7,14 @@ import { EditorView } from 'prosemirror-view'; import { EditorState, TextSelection } from 'prosemirror-state'; import { StepMap } from 'prosemirror-transform'; import { keymap } from 'prosemirror-keymap'; -import { baseKeymap } from 'prosemirror-commands'; +import { baseKeymap, chainCommands } from 'prosemirror-commands'; import { undo, redo } from 'prosemirror-history'; import { WaxContext } from 'wax-prosemirror-core'; +import { + splitListItem, + liftListItem, + sinkListItem, +} from 'prosemirror-schema-list'; import Placeholder from '../plugins/placeholder'; const EditorWrapper = styled.div` @@ -40,7 +45,6 @@ const EditorWrapper = styled.div` } } `; - const QuestionEditorComponent = ({ node, view, getPos }) => { const editorRef = useRef(); @@ -56,7 +60,11 @@ const QuestionEditorComponent = ({ node, view, getPos }) => { const createKeyBindings = () => { const keys = getKeys(); Object.keys(baseKeymap).forEach(key => { - keys[key] = baseKeymap[key]; + if (keys[key]) { + keys[key] = chainCommands(keys[key], baseKeymap[key]); + } else { + keys[key] = baseKeymap[key]; + } }); return keys; }; @@ -65,6 +73,13 @@ const QuestionEditorComponent = ({ node, view, getPos }) => { return { 'Mod-z': () => undo(view.state, view.dispatch), 'Mod-y': () => redo(view.state, view.dispatch), + 'Mod-[': liftListItem(view.state.schema.nodes.list_item), + 'Mod-]': sinkListItem(view.state.schema.nodes.list_item), + Enter: () => + splitListItem(questionView.state.schema.nodes.list_item)( + questionView.state, + questionView.dispatch, + ), }; }; @@ -105,14 +120,6 @@ const QuestionEditorComponent = ({ node, view, getPos }) => { ), ), ); - // context.view[activeViewId].dispatch( - // context.view[activeViewId].state.tr.setSelection( - // TextSelection.between( - // context.view[activeViewId].state.selection.$anchor, - // context.view[activeViewId].state.selection.$head, - // ), - // ), - // ); context.updateView({}, questionId); // Kludge to prevent issues due to the fact that the whole // footnote is node-selected (and thus DOM-selected) when diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/plugins/placeholder.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/plugins/placeholder.js index de3fd8058..76b602b84 100644 --- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/plugins/placeholder.js +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/plugins/placeholder.js @@ -9,11 +9,15 @@ export default props => { props: { decorations: state => { const decorations = []; + const isList = + state.doc.content.content[0].type.name !== 'orderedlist' || + state.doc.content.content[0].type.name !== 'bulletlist'; const decorate = (node, pos) => { if ( node.type.isBlock && node.childCount === 0 && - state.doc.content.childCount === 1 + state.doc.content.childCount === 1 && + !isList ) { decorations.push( Decoration.node(pos, pos + node.nodeSize, { -- GitLab