From 1ff362fcc230624cabfd99422a74d1c1da83fd94 Mon Sep 17 00:00:00 2001 From: chris <kokosias@yahoo.gr> Date: Fri, 6 Aug 2021 13:00:16 +0300 Subject: [PATCH] alter-schema --- .../MultipleChoiceQuestion.js | 38 +++++++++---------- .../MultipleChoiceQuestionService.js | 6 +-- .../schema/multipleChoiceNode.js | 28 +------------- 3 files changed, 24 insertions(+), 48 deletions(-) diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestion.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestion.js index 02b0d0d71..6bc570e48 100644 --- a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestion.js +++ b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestion.js @@ -4,6 +4,8 @@ import { injectable } from 'inversify'; import { Tools } from 'wax-prosemirror-services'; import { Commands } from 'wax-prosemirror-utilities'; import { Fragment } from 'prosemirror-model'; +import { findWrapping } from 'prosemirror-transform'; + import { v4 as uuidv4 } from 'uuid'; import helpers from './helpers/helpers'; import ToolBarBtn from './components/ToolBarBtn'; @@ -42,26 +44,24 @@ class MultipleChoiceQuestion extends Tools { const { from, to } = state.selection; const { tr } = state; - state.schema.nodes.question_wrapper.spec.atom = false; + state.doc.nodesBetween(from, to, (node, pos) => { + if (node.type.name === 'question_wrapper') { + createQuestion(state, dispatch, tr, context); + } else { + let { $from, $to } = state.selection; + let range = $from.blockRange($to), + wrapping = + range && + findWrapping( + range, + state.config.schema.nodes.question_wrapper, + {}, + ); + if (!wrapping) return false; + if (dispatch) tr.wrap(range, wrapping).scrollIntoView(); - setTimeout(() => { - state.doc.nodesBetween(from, to, (node, pos) => { - if (node.type.name === 'question_wrapper') { - createQuestion(state, dispatch, tr, context); - } else { - tr.setBlockType( - from, - to, - state.config.schema.nodes.question_wrapper, - { - class: 'question', - }, - ); - if (!tr.steps.length) return false; - createQuestion(state, dispatch, tr, context); - } - }); - state.schema.nodes.question_wrapper.spec.atom = true; + createQuestion(state, dispatch, tr, context); + } }); }; } diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js index 6634fdaca..a7b59b9a2 100644 --- a/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js +++ b/editors/demo/src/HHMI/MultipleChoiceQuestionService/MultipleChoiceQuestionService.js @@ -30,10 +30,10 @@ class MultipleChoiceQuestionService extends Service { }, group: 'block', atom: true, - content: 'inline*', + content: 'block+', parseDOM: [ { - tag: 'p.mutiple-choice', + tag: 'div.mutiple-choice', getAttrs(dom) { return { id: dom.dataset.id, @@ -43,7 +43,7 @@ class MultipleChoiceQuestionService extends Service { }, ], toDOM(node) { - return ['p', node.attrs, 0]; + return ['div', node.attrs, 0]; }, }, }); diff --git a/editors/demo/src/HHMI/MultipleChoiceQuestionService/schema/multipleChoiceNode.js b/editors/demo/src/HHMI/MultipleChoiceQuestionService/schema/multipleChoiceNode.js index 747a9c1d9..61e6edde2 100644 --- a/editors/demo/src/HHMI/MultipleChoiceQuestionService/schema/multipleChoiceNode.js +++ b/editors/demo/src/HHMI/MultipleChoiceQuestionService/schema/multipleChoiceNode.js @@ -4,9 +4,8 @@ const multipleChoiceNode = { correct: { default: false }, feedback: { default: false }, }, - group: 'inline', - content: 'block*', - inline: true, + group: 'block', + content: 'block+', // atom: true, toDOM: node => ['multiple-choice', node.attrs, 0], parseDOM: [ @@ -21,27 +20,4 @@ const multipleChoiceNode = { ], }; -// const multipleChoiceNode = { -// group: 'block multiple', -// content: 'text*', -// atom: true, -// code: true, -// toDOM: () => ['multiple-choice', { class: 'multiple-choice' }, 0], -// parseDOM: [ -// { -// tag: 'multiple-choice', -// }, -// ], -// }; - -// const multipleChoiceNode = { -// content: 'block+', -// group: 'block', -// defining: true, -// // parseDOM: [{ tag: 'multiple-choice' }], -// toDOM() { -// // return ['multiple-choice', 0]; -// }, -// }; - export default multipleChoiceNode; -- GitLab