Skip to content
Snippets Groups Projects
Commit 0fa350aa authored by chris's avatar chris
Browse files

create question/answer component

parent 6d168500
No related branches found
No related tags found
1 merge request!359new node structure
...@@ -19,7 +19,7 @@ export default class EssayAnswerNodeView extends AbstractNodeView { ...@@ -19,7 +19,7 @@ export default class EssayAnswerNodeView extends AbstractNodeView {
} }
static name() { static name() {
return 'essay'; return 'essay_answer';
} }
update(node) { update(node) {
......
...@@ -3,6 +3,9 @@ import { isEmpty } from 'lodash'; ...@@ -3,6 +3,9 @@ import { isEmpty } from 'lodash';
import { injectable } from 'inversify'; import { injectable } from 'inversify';
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
import { Commands } from 'wax-prosemirror-utilities'; import { Commands } from 'wax-prosemirror-utilities';
import { Fragment } from 'prosemirror-model';
import { TextSelection } from 'prosemirror-state';
import { findWrapping } from 'prosemirror-transform';
import ToolBarBtn from './components/ToolBarBtn'; import ToolBarBtn from './components/ToolBarBtn';
import Tools from '../lib/Tools'; import Tools from '../lib/Tools';
...@@ -20,6 +23,34 @@ const checkifEmpty = view => { ...@@ -20,6 +23,34 @@ const checkifEmpty = view => {
} }
}; };
const createEmptyParagraph = (context, newAnswerId) => {
if (context.view[newAnswerId]) {
context.view[newAnswerId].dispatch(
context.view[newAnswerId].state.tr.setSelection(
TextSelection.between(
context.view[newAnswerId].state.selection.$anchor,
context.view[newAnswerId].state.selection.$head,
),
),
);
if (context.view[newAnswerId].dispatch) {
const type = context.view.main.state.schema.nodes.paragraph;
context.view[newAnswerId].dispatch(
context.view[newAnswerId].state.tr.insert(0, type.create()),
);
}
context.view[newAnswerId].dispatch(
context.view[newAnswerId].state.tr.setSelection(
TextSelection.between(
context.view[newAnswerId].state.selection.$anchor,
context.view[newAnswerId].state.selection.$head,
),
),
);
context.view[newAnswerId].focus();
}
};
@injectable() @injectable()
class EssayQuestion extends Tools { class EssayQuestion extends Tools {
title = 'Add Essay Question'; title = 'Add Essay Question';
...@@ -28,9 +59,47 @@ class EssayQuestion extends Tools { ...@@ -28,9 +59,47 @@ class EssayQuestion extends Tools {
label = 'Essay'; label = 'Essay';
get run() { get run() {
return (main, dispatch) => { return (main, context) => {
checkifEmpty(main); checkifEmpty(main);
//const { state, dispatch } = main; const { state, dispatch } = main;
/* Create Wrapping */
const { $from, $to } = state.selection;
const range = $from.blockRange($to);
const { tr } = main.state;
const wrapping =
range &&
findWrapping(range, main.state.config.schema.nodes.essay_container, {
id: uuidv4(),
});
if (!wrapping) return false;
tr.wrap(range, wrapping);
// const map = tr.mapping.maps[0];
// let newPos = 0;
// map.forEach((_from, _to, _newFrom, newTo) => {
// newPos = newTo;
// });
tr.setSelection(TextSelection.create(tr.doc, range.$to.pos));
const essayQuestion = main.state.config.schema.nodes.essay_question.create(
{ id: uuidv4() },
Fragment.empty,
);
const essayAnswer = main.state.config.schema.nodes.essay_answer.create(
{ id: uuidv4() },
Fragment.empty,
);
tr.replaceSelectionWith(essayQuestion);
tr.replaceSelectionWith(essayAnswer);
dispatch(tr);
// setTimeout(() => {
// createEmptyParagraph(context, essayQuestion.attrs.id);
// createEmptyParagraph(context, essayAnswer.attrs.id);
// }, 50);
}; };
} }
......
...@@ -19,7 +19,7 @@ export default class EssayQuestionNodeView extends AbstractNodeView { ...@@ -19,7 +19,7 @@ export default class EssayQuestionNodeView extends AbstractNodeView {
} }
static name() { static name() {
return 'essay'; return 'essay_question';
} }
update(node) { update(node) {
......
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