diff --git a/wax-prosemirror-services/src/MultipleDropDownService/MultipleDropDownService.js b/wax-prosemirror-services/src/MultipleDropDownService/MultipleDropDownService.js index dc8a385334f110c20e8a5cfbdfa2ea9e3c73ea8c..8a7911bdc6a1b51e82c5cc74f994b045148fba14 100644 --- a/wax-prosemirror-services/src/MultipleDropDownService/MultipleDropDownService.js +++ b/wax-prosemirror-services/src/MultipleDropDownService/MultipleDropDownService.js @@ -1,6 +1,8 @@ import Service from '../Service'; import MultipleDropDownQuestion from './MultipleDropDownQuestion'; import MultipleDropDownContainerNodeView from './MultipleDropDownContainerNodeView'; +import multipleDropDownContainerNode from './schema/multipleDropDownContainerNode'; +import multipleDropDownOptionNode from './schema/multipleDropDownOptionNode'; import CreateDropDownService from './CreateDropDownService/CreateDropDownService'; class MultipleDropDownService extends Service { @@ -12,6 +14,14 @@ class MultipleDropDownService extends Service { .to(MultipleDropDownQuestion); const createNode = this.container.get('CreateNode'); const addPortal = this.container.get('AddPortal'); + + createNode({ + multiple_drop_down_container: multipleDropDownContainerNode, + }); + + createNode({ + multiple_drop_down_option: multipleDropDownOptionNode, + }); } dependencies = [new CreateDropDownService()]; diff --git a/wax-prosemirror-services/src/MultipleDropDownService/schema/multipleDropDownContainerNode.js b/wax-prosemirror-services/src/MultipleDropDownService/schema/multipleDropDownContainerNode.js new file mode 100644 index 0000000000000000000000000000000000000000..83884cd92d03f4ce4c124e4395e4ae8ada494e88 --- /dev/null +++ b/wax-prosemirror-services/src/MultipleDropDownService/schema/multipleDropDownContainerNode.js @@ -0,0 +1,29 @@ +const multipleDropDownContainerNode = { + attrs: { + id: { default: '' }, + class: { default: 'multiple-drop-down-container' }, + feedback: { default: '' }, + }, + group: 'block questions', + atom: true, + selectable: false, + draggable: false, + content: 'block*', + parseDOM: [ + { + tag: 'div.multiple-drop-down-container', + getAttrs(dom) { + return { + id: dom.getAttribute('id'), + class: dom.getAttribute('class'), + feedback: dom.getAttribute('feedback'), + }; + }, + }, + ], + toDOM(node) { + return ['div', node.attrs, 0]; + }, +}; + +export default multipleDropDownContainerNode; diff --git a/wax-prosemirror-services/src/MultipleDropDownService/schema/multipleDropDownOptionNode.js b/wax-prosemirror-services/src/MultipleDropDownService/schema/multipleDropDownOptionNode.js new file mode 100644 index 0000000000000000000000000000000000000000..5002ec17d1eafe41871684f6fd6b379dd9d35f51 --- /dev/null +++ b/wax-prosemirror-services/src/MultipleDropDownService/schema/multipleDropDownOptionNode.js @@ -0,0 +1,42 @@ +const multipleDropDownOptionNode = { + attrs: { + class: { default: 'multiple-drop-down-option' }, + id: { default: '' }, + isfirst: { default: false }, + answer: { default: {} }, + options: { default: [] }, + }, + group: 'inline questions', + content: 'text*', + inline: true, + atom: true, + defining: true, + parseDOM: [ + { + tag: 'span.multiple-drop-down-option', + getAttrs(dom) { + return { + id: dom.getAttribute('id'), + class: dom.getAttribute('class'), + isfirst: JSON.parse(dom.getAttribute('isfirst').toLowerCase()), + answer: JSON.parse(dom.getAttribute('answer').toLowerCase()), + }; + }, + }, + ], + toDOM(node) { + return [ + 'span', + { + id: node.attrs.id, + class: node.attrs.class, + isfirst: node.attrs.isfirst, + answer: JSON.stringify(node.attrs.answer), + feedback: node.attrs.feedback, + }, + 0, + ]; + }, +}; + +export default multipleDropDownOptionNode;