From 091758ba2e264103c33f2a3e51f1b46b6cdcfe58 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Wed, 24 Nov 2021 11:27:37 +0200 Subject: [PATCH] move to commands and start from service --- editors/demo/src/HHMI/config/config.js | 2 -- .../MultipleChoiceQuestion.js | 14 +++------- .../MultipleChoiceQuestionService.js | 3 +++ .../MultipleChoiceSingleCorrectQuestion.js | 14 +++------- .../MultipleDropDown.js | 26 ++++++++----------- wax-prosemirror-utilities/package.json | 1 + .../src/commands/Commands.js | 15 ++++++++++- 7 files changed, 37 insertions(+), 38 deletions(-) diff --git a/editors/demo/src/HHMI/config/config.js b/editors/demo/src/HHMI/config/config.js index 5e2ace8e2..13c015786 100644 --- a/editors/demo/src/HHMI/config/config.js +++ b/editors/demo/src/HHMI/config/config.js @@ -21,7 +21,6 @@ import { EditorInfoToolGroupServices, BottomInfoService, MultipleChoiceQuestionService, - MultipleChoiceSingleCorrectQuestionService, MultipleChoiceToolGroupService, FillTheGapQuestionService, FillTheGapToolGroupService, @@ -69,7 +68,6 @@ export default { ], services: [ - new MultipleChoiceSingleCorrectQuestionService(), new FillTheGapQuestionService(), new FillTheGapToolGroupService(), new MultipleChoiceQuestionService(), diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestion.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestion.js index 754bc979a..df0d5eaaf 100644 --- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestion.js +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestion.js @@ -63,16 +63,10 @@ class MultipleChoiceQuestion extends Tools { get active() { return state => { - let type = ''; - const predicate = node => - node.type === state.config.schema.nodes.multiple_choice; - for (let i = state.selection.$from.depth; i > 0; i--) { - const node = state.selection.$from.node(i); - if (predicate(node)) { - type = 'multiple'; - } - } - return type; + return Commands.isParentOfType( + state, + state.config.schema.nodes.multiple_choice, + ); }; } diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js index 4df5be64a..9053ec2e2 100644 --- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js @@ -4,6 +4,7 @@ import multipleChoiceNode from './schema/multipleChoiceNode'; import multipleChoiceContainerNode from './schema/multipleChoiceContainerNode'; import QuestionComponent from './components/QuestionComponent'; import MultipleChoiceNodeView from './MultipleChoiceNodeView'; +import MultipleChoiceSingleCorrectQuestionService from '../MultipleChoiceSingleCorrectQuestionService/MultipleChoiceSingleCorrectQuestionService'; class MultipleChoiceQuestionService extends Service { register() { @@ -25,6 +26,8 @@ class MultipleChoiceQuestionService extends Service { context: this.app, }); } + + dependencies = [new MultipleChoiceSingleCorrectQuestionService()]; } export default MultipleChoiceQuestionService; diff --git a/wax-prosemirror-services/src/MultipleChoiceSingleCorrectQuestionService/MultipleChoiceSingleCorrectQuestion.js b/wax-prosemirror-services/src/MultipleChoiceSingleCorrectQuestionService/MultipleChoiceSingleCorrectQuestion.js index 509034543..76c4d9eee 100644 --- a/wax-prosemirror-services/src/MultipleChoiceSingleCorrectQuestionService/MultipleChoiceSingleCorrectQuestion.js +++ b/wax-prosemirror-services/src/MultipleChoiceSingleCorrectQuestionService/MultipleChoiceSingleCorrectQuestion.js @@ -63,16 +63,10 @@ class MultipleChoiceSingleCorrectQuestion extends Tools { get active() { return state => { - let type = ''; - const predicate = node => - node.type === state.config.schema.nodes.multiple_choice_single_correct; - for (let i = state.selection.$from.depth; i > 0; i--) { - const node = state.selection.$from.node(i); - if (predicate(node)) { - type = 'multipleSingle'; - } - } - return type; + return Commands.isParentOfType( + state, + state.config.schema.nodes.multiple_choice_single_correct, + ); }; } diff --git a/wax-prosemirror-services/src/WaxToolGroups/MultipleDropDownToolGroupService/MultipleDropDown.js b/wax-prosemirror-services/src/WaxToolGroups/MultipleDropDownToolGroupService/MultipleDropDown.js index 35ef85b2a..b3ced223a 100644 --- a/wax-prosemirror-services/src/WaxToolGroups/MultipleDropDownToolGroupService/MultipleDropDown.js +++ b/wax-prosemirror-services/src/WaxToolGroups/MultipleDropDownToolGroupService/MultipleDropDown.js @@ -68,32 +68,28 @@ class MultipleDropDown extends ToolGroup { label: 'Multiple Choice', value: '0', item: this._tools[0], - type: 'multiple', }, { label: 'Multiple Choice (single correct)', value: '1', item: this._tools[1], - type: 'multipleSingle', - }, - { - label: 'True/False', - value: '2', - item: this._tools[0], - type: 'trueFalse', - }, - { - label: 'True/False (single correct)', - value: '3', - item: this._tools[0], - type: 'trueFalseSingle', }, + // { + // label: 'True/False', + // value: '2', + // item: this._tools[0], + // }, + // { + // label: 'True/False (single correct)', + // value: '3', + // item: this._tools[0], + // }, ]; const isDisabled = this._tools[0].select(state, activeView); let found = ''; dropDownOptions.forEach((option, i) => { - if (option.item.active(main.state) === option.type) { + if (option.item.active(main.state)) { found = option.label; } }); diff --git a/wax-prosemirror-utilities/package.json b/wax-prosemirror-utilities/package.json index d7a7daed6..6931c3ba3 100644 --- a/wax-prosemirror-utilities/package.json +++ b/wax-prosemirror-utilities/package.json @@ -14,6 +14,7 @@ }, "dependencies": { "prosemirror-commands": "1.1.10", + "prosemirror-transform": "1.2.6", "prosemirror-utils": "^0.9.6", "uuid": "^7.0.3" } diff --git a/wax-prosemirror-utilities/src/commands/Commands.js b/wax-prosemirror-utilities/src/commands/Commands.js index 479fc0cac..99c34a84e 100644 --- a/wax-prosemirror-utilities/src/commands/Commands.js +++ b/wax-prosemirror-utilities/src/commands/Commands.js @@ -240,7 +240,7 @@ const createCommentOnFootnote = (state, dispatch, group, viewid) => { const isInTable = state => { const { $head } = state.selection; - for (let d = $head.depth; d > 0; d--) + for (let d = $head.depth; d > 0; d -= 1) if ($head.node(d).type.spec.tableRole === 'row') return true; return false; }; @@ -253,6 +253,18 @@ const simulateKey = (view, keyCode, key) => { return view.someProp('handleKeyDown', f => f(view, event)); }; +const isParentOfType = (state, nodeType) => { + let status = false; + const predicate = node => node.type === nodeType; + for (let i = state.selection.$from.depth; i > 0; i -= 1) { + const node = state.selection.$from.node(i); + if (predicate(node)) { + status = true; + } + } + return status; +}; + export default { isInTable, setBlockType, @@ -265,4 +277,5 @@ export default { markActive, isOnSameTextBlock, simulateKey, + isParentOfType, }; -- GitLab