Skip to content
Snippets Groups Projects
Commit 27d6cb62 authored by chris's avatar chris
Browse files

true false single

parent 663bf8be
No related branches found
No related tags found
1 merge request!357true false single
Showing
with 103 additions and 7 deletions
import AbstractNodeView from '../../PortalService/AbstractNodeView'; import AbstractNodeView from '../../PortalService/AbstractNodeView';
export default class QuestionNodeView extends AbstractNodeView { export default class QuestionTrueFalseNodeView extends AbstractNodeView {
constructor( constructor(
node, node,
view, view,
......
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);
}
}
...@@ -19,8 +19,9 @@ class TrueFalseSingleCorrectQuestion extends Tools { ...@@ -19,8 +19,9 @@ class TrueFalseSingleCorrectQuestion extends Tools {
helpers.createOptions( helpers.createOptions(
view, view,
context, 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.true_false_single_correct_container,
view.state.config.schema.nodes.question_node_true_false_single,
view.state.config.schema.nodes.true_false_single_correct,
); );
}; };
} }
......
...@@ -2,8 +2,11 @@ import Service from '../../Service'; ...@@ -2,8 +2,11 @@ import Service from '../../Service';
import TrueFalseSingleCorrectQuestion from './TrueFalseSingleCorrectQuestion'; import TrueFalseSingleCorrectQuestion from './TrueFalseSingleCorrectQuestion';
import trueFalseSingleCorrectNode from './schema/trueFalseSingleCorrectNode'; import trueFalseSingleCorrectNode from './schema/trueFalseSingleCorrectNode';
import trueFalseSingleCorrectContainerNode from './schema/trueFalseSingleCorrectContainerNode'; 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 TrueFalseSingleCorrectNodeView from './TrueFalseSingleCorrectNodeView';
import QuestionTrueFalseSingleNodeView from './QuestionTrueFalseSingleNodeView';
import QuestionComponent from '../components/QuestionComponent';
class TrueFalseSingleCorrectQuestionService extends Service { class TrueFalseSingleCorrectQuestionService extends Service {
register() { register() {
...@@ -21,11 +24,21 @@ class TrueFalseSingleCorrectQuestionService extends Service { ...@@ -21,11 +24,21 @@ class TrueFalseSingleCorrectQuestionService extends Service {
true_false_single_correct_container: trueFalseSingleCorrectContainerNode, true_false_single_correct_container: trueFalseSingleCorrectContainerNode,
}); });
createNode({
question_node_true_false_single: questionTrueFalseSingleNode,
});
addPortal({ addPortal({
nodeView: TrueFalseSingleCorrectNodeView, nodeView: QuestionTrueFalseSingleNodeView,
component: QuestionComponent, component: QuestionComponent,
context: this.app, context: this.app,
}); });
addPortal({
nodeView: TrueFalseSingleCorrectNodeView,
component: AnswerComponent,
context: this.app,
});
} }
} }
......
...@@ -82,11 +82,11 @@ const CustomSwitch = ({ node, getPos }) => { ...@@ -82,11 +82,11 @@ const CustomSwitch = ({ node, getPos }) => {
return ( return (
<StyledSwitch <StyledSwitch
checked={checked} checked={checked}
checkedChildren="YES" checkedChildren="True"
label="Correct?" label="True/false?"
labelPosition="left" labelPosition="left"
onChange={handleChange} onChange={handleChange}
unCheckedChildren="NO" unCheckedChildren="False"
/> />
); );
}; };
......
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;
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment