From 27d6cb62f3167f6febf1a53ea7bef64d2de1534c Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Sat, 18 Dec 2021 15:39:25 +0200 Subject: [PATCH] true false single --- .../QuestionTrueFalseNodeView.js | 2 +- .../QuestionTrueFalseSingleNodeView.js | 55 +++++++++++++++++++ .../TrueFalseSingleCorrectQuestion.js | 3 +- .../TrueFalseSingleCorrectQuestionService.js | 17 +++++- ...uestionComponent.js => AnswerComponent.js} | 0 .../components/SwitchComponent.js | 6 +- .../schema/questionTrueFalseSingleNode.js | 27 +++++++++ 7 files changed, 103 insertions(+), 7 deletions(-) create mode 100644 wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/QuestionTrueFalseSingleNodeView.js rename wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/{QuestionComponent.js => AnswerComponent.js} (100%) create mode 100644 wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/schema/questionTrueFalseSingleNode.js diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/QuestionTrueFalseNodeView.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/QuestionTrueFalseNodeView.js index 55c935358..f373d41b5 100644 --- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/QuestionTrueFalseNodeView.js +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseQuestionService/QuestionTrueFalseNodeView.js @@ -1,6 +1,6 @@ import AbstractNodeView from '../../PortalService/AbstractNodeView'; -export default class QuestionNodeView extends AbstractNodeView { +export default class QuestionTrueFalseNodeView extends AbstractNodeView { constructor( node, view, diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/QuestionTrueFalseSingleNodeView.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/QuestionTrueFalseSingleNodeView.js new file mode 100644 index 000000000..9496fe060 --- /dev/null +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/QuestionTrueFalseSingleNodeView.js @@ -0,0 +1,55 @@ +import AbstractNodeView from '../../PortalService/AbstractNodeView'; + +export default class QuestionTrueFalseSingleNodeView extends AbstractNodeView { + constructor( + node, + view, + getPos, + decorations, + createPortal, + Component, + context, + ) { + super(node, view, getPos, decorations, createPortal, Component, context); + + this.node = node; + this.outerView = view; + this.getPos = getPos; + this.context = context; + } + + static name() { + return 'question_node_true_false_single'; + } + + update(node) { + this.node = node; + if (this.context.view[node.attrs.id]) { + const { state } = this.context.view[node.attrs.id]; + const start = node.content.findDiffStart(state.doc.content); + if (start != null) { + let { a: endA, b: endB } = node.content.findDiffEnd(state.doc.content); + const overlap = start - Math.min(endA, endB); + if (overlap > 0) { + endA += overlap; + endB += overlap; + } + this.context.view[node.attrs.id].dispatch( + state.tr + .replace(start, endB, node.slice(start, endA)) + .setMeta('fromOutside', true), + ); + } + } + + return true; + } + + stopEvent(event) { + if (event.target.type === 'text') { + return true; + } + const innerView = this.context.view[this.node.attrs.id]; + return innerView && innerView.dom.contains(event.target); + } +} diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/TrueFalseSingleCorrectQuestion.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/TrueFalseSingleCorrectQuestion.js index 0098426d8..218758c7a 100644 --- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/TrueFalseSingleCorrectQuestion.js +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/TrueFalseSingleCorrectQuestion.js @@ -19,8 +19,9 @@ class TrueFalseSingleCorrectQuestion extends Tools { helpers.createOptions( view, context, - view.state.config.schema.nodes.true_false_single_correct, view.state.config.schema.nodes.true_false_single_correct_container, + view.state.config.schema.nodes.question_node_true_false_single, + view.state.config.schema.nodes.true_false_single_correct, ); }; } diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/TrueFalseSingleCorrectQuestionService.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/TrueFalseSingleCorrectQuestionService.js index f90d3bb2b..27d171056 100644 --- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/TrueFalseSingleCorrectQuestionService.js +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/TrueFalseSingleCorrectQuestionService.js @@ -2,8 +2,11 @@ import Service from '../../Service'; import TrueFalseSingleCorrectQuestion from './TrueFalseSingleCorrectQuestion'; import trueFalseSingleCorrectNode from './schema/trueFalseSingleCorrectNode'; import trueFalseSingleCorrectContainerNode from './schema/trueFalseSingleCorrectContainerNode'; -import QuestionComponent from './components/QuestionComponent'; +import questionTrueFalseSingleNode from './schema/questionTrueFalseSingleNode'; +import AnswerComponent from './components/AnswerComponent'; import TrueFalseSingleCorrectNodeView from './TrueFalseSingleCorrectNodeView'; +import QuestionTrueFalseSingleNodeView from './QuestionTrueFalseSingleNodeView'; +import QuestionComponent from '../components/QuestionComponent'; class TrueFalseSingleCorrectQuestionService extends Service { register() { @@ -21,11 +24,21 @@ class TrueFalseSingleCorrectQuestionService extends Service { true_false_single_correct_container: trueFalseSingleCorrectContainerNode, }); + createNode({ + question_node_true_false_single: questionTrueFalseSingleNode, + }); + addPortal({ - nodeView: TrueFalseSingleCorrectNodeView, + nodeView: QuestionTrueFalseSingleNodeView, component: QuestionComponent, context: this.app, }); + + addPortal({ + nodeView: TrueFalseSingleCorrectNodeView, + component: AnswerComponent, + context: this.app, + }); } } diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/QuestionComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/AnswerComponent.js similarity index 100% rename from wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/QuestionComponent.js rename to wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/AnswerComponent.js diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/SwitchComponent.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/SwitchComponent.js index 434a544c5..60944f668 100644 --- a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/SwitchComponent.js +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/components/SwitchComponent.js @@ -82,11 +82,11 @@ const CustomSwitch = ({ node, getPos }) => { return ( <StyledSwitch checked={checked} - checkedChildren="YES" - label="Correct?" + checkedChildren="True" + label="True/false?" labelPosition="left" onChange={handleChange} - unCheckedChildren="NO" + unCheckedChildren="False" /> ); }; diff --git a/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/schema/questionTrueFalseSingleNode.js b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/schema/questionTrueFalseSingleNode.js new file mode 100644 index 000000000..a75a918c7 --- /dev/null +++ b/wax-prosemirror-services/src/MultipleChoiceQuestionService/TrueFalseSingleCorrectQuestionService/schema/questionTrueFalseSingleNode.js @@ -0,0 +1,27 @@ +import { v4 as uuidv4 } from 'uuid'; + +const questionTrueFalseNode = { + attrs: { + class: { default: 'true-false-question-single' }, + id: { default: uuidv4() }, + }, + group: 'block questions', + content: 'block*', + defining: true, + + // atom: true, + parseDOM: [ + { + tag: 'div.true-false-question-single', + getAttrs(dom) { + return { + id: dom.getAttribute('id'), + class: dom.getAttribute('class'), + }; + }, + }, + ], + toDOM: node => ['div', node.attrs, 0], +}; + +export default questionTrueFalseNode; -- GitLab