diff --git a/editors/demo/src/HHMI/config/config.js b/editors/demo/src/HHMI/config/config.js index 5e2ace8e24fd838650c7b01c853b293ee276cb61..13c0157864a5c3ffdc1800f7e6822cecfb8e3857 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 754bc979a7451f5e808b9ec4bd11a253b174a8e3..df0d5eaaff7f8d4105cfbe37b38aaffbb2c86819 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 4df5be64aec344cd2f9d908946b21811bf7282cf..9053ec2e234ff780819197885ed05f490d81f4c4 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 50903454355eb11149ae9c273471e756df97ad2b..76c4d9eee229010a015aff12a9c4cabba4f3eba7 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 35ef85b2aef1785ca8b12175dff4736b5cab5a42..b3ced223a92876278cf0a0b134560291d65d685c 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 d7a7daed6cd16560e90d40a453572673afdc58d5..6931c3ba3d8139c7d9dceead2accdc4cd8139bf9 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 479fc0cacb6f5346b16643693a918e11dcd4fbba..99c34a84eb224e16eb38666c2cecb4321974da10 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, };