@pie-element/ebsr 12.0.1-next.0 → 12.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/esm/element.js ADDED
@@ -0,0 +1,163 @@
1
+ import { SessionChangedEvent } from '@pie-framework/pie-player-events';
2
+ import MultipleChoice from '@pie-element/multiple-choice';
3
+ import get from 'lodash/get';
4
+ import debug from 'debug';
5
+
6
+ function _defineProperty(obj, key, value) {
7
+ if (key in obj) {
8
+ Object.defineProperty(obj, key, {
9
+ value: value,
10
+ enumerable: true,
11
+ configurable: true,
12
+ writable: true
13
+ });
14
+ } else {
15
+ obj[key] = value;
16
+ }
17
+
18
+ return obj;
19
+ }
20
+
21
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
22
+
23
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
24
+ var SESSION_CHANGED = SessionChangedEvent.TYPE;
25
+ var MC_TAG_NAME = 'ebsr-multiple-choice';
26
+ var log = debug('pie-elements:ebsr');
27
+
28
+ class EbsrMC extends MultipleChoice {}
29
+
30
+ var defineMultipleChoice = () => {
31
+ if (!customElements.get(MC_TAG_NAME)) {
32
+ customElements.define(MC_TAG_NAME, EbsrMC);
33
+ }
34
+ };
35
+
36
+ defineMultipleChoice();
37
+
38
+ var isNonEmptyArray = a => Array.isArray(a) && a.length > 0;
39
+
40
+ var isSessionComplete = session => {
41
+ var a = get(session, 'value.partA.value');
42
+ var b = get(session, 'value.partB.value');
43
+ return isNonEmptyArray(a) && isNonEmptyArray(b);
44
+ };
45
+ class Ebsr extends HTMLElement {
46
+ constructor() {
47
+ super();
48
+
49
+ _defineProperty(this, "onSessionUpdated", e => {
50
+ if (e.target === this) {
51
+ return;
52
+ }
53
+
54
+ e.preventDefault();
55
+ e.stopImmediatePropagation();
56
+ var id = e.target.getAttribute('id');
57
+
58
+ if (id) {
59
+ var key = "part".concat(id.toUpperCase());
60
+
61
+ if (e.update) {
62
+ this._model[key] = e.update;
63
+ } //TODO: accessing a private property here. The session event should contain the update in future to prevent this.
64
+
65
+
66
+ this.dispatchSessionChanged(e.srcElement._session, key);
67
+ }
68
+ });
69
+
70
+ this._model = {};
71
+ this._session = {};
72
+ }
73
+
74
+ set model(m) {
75
+ this._model = m;
76
+ customElements.whenDefined(MC_TAG_NAME).then(() => {
77
+ this.setPartModel(this.partA, 'partA');
78
+ this.setPartModel(this.partB, 'partB');
79
+ });
80
+ }
81
+
82
+ set session(s) {
83
+ this._session = s;
84
+ customElements.whenDefined(MC_TAG_NAME).then(() => {
85
+ this.setPartSession(this.partA, 'partA');
86
+ this.setPartSession(this.partB, 'partB');
87
+ });
88
+ }
89
+
90
+ get session() {
91
+ return this._session;
92
+ }
93
+
94
+ setPartModel(part, key) {
95
+ if (this._model && this._model[key] && part) {
96
+ var {
97
+ mode
98
+ } = this._model;
99
+ part.model = _objectSpread(_objectSpread({}, this._model[key]), {}, {
100
+ mode,
101
+ keyMode: this._model[key].choicePrefix
102
+ });
103
+ }
104
+ }
105
+
106
+ setPartSession(part, key) {
107
+ if (this._session && this._model && part) {
108
+ var {
109
+ value
110
+ } = this._session;
111
+ part.session = value && value[key] ? value[key] : {
112
+ id: key
113
+ };
114
+ }
115
+ }
116
+
117
+ dispatchSessionChanged(partSession, key) {
118
+ this._session.value = _objectSpread(_objectSpread({}, this._session.value), {}, {
119
+ [key]: partSession
120
+ });
121
+ log('[onSessionChanged] session: ', this._session);
122
+ var complete = isSessionComplete(this._session);
123
+ this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));
124
+ }
125
+
126
+ get partA() {
127
+ return this.querySelector("".concat(MC_TAG_NAME, "#a"));
128
+ }
129
+
130
+ get partB() {
131
+ return this.querySelector("".concat(MC_TAG_NAME, "#b"));
132
+ }
133
+
134
+ connectedCallback() {
135
+ this._render();
136
+
137
+ this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);
138
+ }
139
+
140
+ disconnectedCallback() {
141
+ this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);
142
+ }
143
+
144
+ _render() {
145
+ var _this$_model, _this$_model$extraCSS;
146
+
147
+ this.ariaLabel = 'Two-Part Question';
148
+ this.role = 'region';
149
+ this.innerHTML = "\n <style>\n .srOnly {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n left: -10000px;\n top: auto;\n }\n ".concat((_this$_model = this._model) === null || _this$_model === void 0 ? void 0 : (_this$_model$extraCSS = _this$_model.extraCSSRules) === null || _this$_model$extraCSS === void 0 ? void 0 : _this$_model$extraCSS.rules, "\n </style>\n <h2 class=\"srOnly\">Two-Part Question</h2>\n <").concat(MC_TAG_NAME, " id=\"a\"></").concat(MC_TAG_NAME, ">\n <").concat(MC_TAG_NAME, " id=\"b\"></").concat(MC_TAG_NAME, ">\n "); // when item is re-rendered (due to connectedCallback), if the custom element is already defined,
150
+ // we need to set the model and session, otherwise the setters are not reached again
151
+
152
+ if (customElements.get(MC_TAG_NAME)) {
153
+ this.setPartModel(this.partA, 'partA');
154
+ this.setPartModel(this.partB, 'partB');
155
+ this.setPartSession(this.partA, 'partA');
156
+ this.setPartSession(this.partB, 'partB');
157
+ }
158
+ }
159
+
160
+ }
161
+
162
+ export { Ebsr as default, isSessionComplete };
163
+ //# sourceMappingURL=element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.js","sources":["../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../src/index.js"],"sourcesContent":["export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport MultipleChoice from '@pie-element/multiple-choice';\nimport get from 'lodash/get';\nimport debug from 'debug';\n\nconst SESSION_CHANGED = SessionChangedEvent.TYPE;\nconst MC_TAG_NAME = 'ebsr-multiple-choice';\nconst log = debug('pie-elements:ebsr');\n\nclass EbsrMC extends MultipleChoice {}\n\nconst defineMultipleChoice = () => {\n if (!customElements.get(MC_TAG_NAME)) {\n customElements.define(MC_TAG_NAME, EbsrMC);\n }\n};\n\ndefineMultipleChoice();\n\nconst isNonEmptyArray = (a) => Array.isArray(a) && a.length > 0;\n\nexport const isSessionComplete = (session) => {\n const a = get(session, 'value.partA.value');\n const b = get(session, 'value.partB.value');\n\n return isNonEmptyArray(a) && isNonEmptyArray(b);\n};\n\nexport default class Ebsr extends HTMLElement {\n constructor() {\n super();\n this._model = {};\n this._session = {};\n }\n\n onSessionUpdated = (e) => {\n if (e.target === this) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n\n const id = e.target.getAttribute('id');\n\n if (id) {\n const key = `part${id.toUpperCase()}`;\n\n if (e.update) {\n this._model[key] = e.update;\n }\n //TODO: accessing a private property here. The session event should contain the update in future to prevent this.\n this.dispatchSessionChanged(e.srcElement._session, key);\n }\n };\n\n set model(m) {\n this._model = m;\n\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartModel(this.partA, 'partA');\n this.setPartModel(this.partB, 'partB');\n });\n }\n\n set session(s) {\n this._session = s;\n\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartSession(this.partA, 'partA');\n this.setPartSession(this.partB, 'partB');\n });\n }\n\n get session() {\n return this._session;\n }\n\n setPartModel(part, key) {\n if (this._model && this._model[key] && part) {\n const { mode } = this._model;\n\n part.model = {\n ...this._model[key],\n mode,\n keyMode: this._model[key].choicePrefix,\n };\n }\n }\n\n setPartSession(part, key) {\n if (this._session && this._model && part) {\n const { value } = this._session;\n part.session = value && value[key] ? value[key] : { id: key };\n }\n }\n\n dispatchSessionChanged(partSession, key) {\n this._session.value = {\n ...this._session.value,\n [key]: partSession,\n };\n\n log('[onSessionChanged] session: ', this._session);\n const complete = isSessionComplete(this._session);\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));\n }\n\n get partA() {\n return this.querySelector(`${MC_TAG_NAME}#a`);\n }\n\n get partB() {\n return this.querySelector(`${MC_TAG_NAME}#b`);\n }\n\n connectedCallback() {\n this._render();\n this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);\n }\n\n disconnectedCallback() {\n this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);\n }\n\n _render() {\n this.ariaLabel = 'Two-Part Question';\n this.role = 'region';\n this.innerHTML = `\n <style>\n .srOnly {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n left: -10000px;\n top: auto;\n }\n ${this._model?.extraCSSRules?.rules}\n </style>\n <h2 class=\"srOnly\">Two-Part Question</h2>\n <${MC_TAG_NAME} id=\"a\"></${MC_TAG_NAME}>\n <${MC_TAG_NAME} id=\"b\"></${MC_TAG_NAME}>\n `;\n\n // when item is re-rendered (due to connectedCallback), if the custom element is already defined,\n // we need to set the model and session, otherwise the setters are not reached again\n if (customElements.get(MC_TAG_NAME)) {\n this.setPartModel(this.partA, 'partA');\n this.setPartModel(this.partB, 'partB');\n this.setPartSession(this.partA, 'partA');\n this.setPartSession(this.partB, 'partB');\n }\n }\n}\n"],"names":["SESSION_CHANGED","SessionChangedEvent","TYPE","MC_TAG_NAME","log","debug","EbsrMC","MultipleChoice","defineMultipleChoice","customElements","get","define","isNonEmptyArray","a","Array","isArray","length","isSessionComplete","session","b","Ebsr","HTMLElement","constructor","e","target","preventDefault","stopImmediatePropagation","id","getAttribute","key","toUpperCase","update","_model","dispatchSessionChanged","srcElement","_session","model","m","whenDefined","then","setPartModel","partA","partB","s","setPartSession","part","mode","keyMode","choicePrefix","value","partSession","complete","dispatchEvent","tagName","toLowerCase","querySelector","connectedCallback","_render","addEventListener","onSessionUpdated","disconnectedCallback","removeEventListener","ariaLabel","role","innerHTML","extraCSSRules","rules"],"mappings":"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"}
package/esm/print.js ADDED
@@ -0,0 +1,209 @@
1
+ import cloneDeep from 'lodash/cloneDeep';
2
+ import MultipleChoice from '@pie-element/multiple-choice';
3
+ import debug from 'debug';
4
+ import get from 'lodash/get';
5
+ import { SessionChangedEvent } from '@pie-framework/pie-player-events';
6
+ import Translator from '@pie-lib/translator';
7
+
8
+ function _defineProperty(obj, key, value) {
9
+ if (key in obj) {
10
+ Object.defineProperty(obj, key, {
11
+ value: value,
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true
15
+ });
16
+ } else {
17
+ obj[key] = value;
18
+ }
19
+
20
+ return obj;
21
+ }
22
+
23
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
24
+
25
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
26
+ var MC_TAG_NAME = 'ebsr-multiple-choice';
27
+ var SESSION_CHANGED = SessionChangedEvent.TYPE;
28
+ var {
29
+ translator
30
+ } = Translator;
31
+ var log = debug('pie-element:ebsr:print');
32
+ /**
33
+ * Live in same package as main element - so we can access some of the shared comps!
34
+ *
35
+ * - update pslb to build print if src/print.js is there
36
+ * - update demo el
37
+ * - get configure/controller building
38
+ */
39
+
40
+ var preparePrintModel = (model, opts) => {
41
+ var instr = opts.role === 'instructor';
42
+ model.prompt = model.promptEnabled !== false ? model.prompt : undefined;
43
+ model.teacherInstructions = instr && model.teacherInstructionsEnabled !== false ? model.teacherInstructions : undefined;
44
+ model.showTeacherInstructions = instr;
45
+ model.alwaysShowCorrect = instr;
46
+ model.mode = instr ? 'evaluate' : 'gather';
47
+ model.disabled = true;
48
+ model.animationsDisabled = true;
49
+ model.lockChoiceOrder = true;
50
+ model.choicesLayout = model.choicesLayout || 'vertical';
51
+ var choices = cloneDeep(model.choices);
52
+ model.choices = choices.map(c => {
53
+ c.rationale = instr && model.rationaleEnabled !== false ? c.rationale : undefined;
54
+ c.hideTick = instr;
55
+ c.feedback = undefined;
56
+ return c;
57
+ });
58
+ model.keyMode = model.choicePrefix || 'letters';
59
+ return model;
60
+ };
61
+
62
+ class EbsrMC extends MultipleChoice {}
63
+
64
+ var defineMultipleChoice = () => {
65
+ if (!customElements.get(MC_TAG_NAME)) {
66
+ customElements.define(MC_TAG_NAME, EbsrMC);
67
+ }
68
+ };
69
+
70
+ defineMultipleChoice();
71
+
72
+ var isNonEmptyArray = a => Array.isArray(a) && a.length > 0;
73
+
74
+ var isSessionComplete = session => {
75
+ var a = get(session, 'value.partA.value');
76
+ var b = get(session, 'value.partB.value');
77
+ return isNonEmptyArray(a) && isNonEmptyArray(b);
78
+ };
79
+ class Ebsr extends HTMLElement {
80
+ constructor() {
81
+ super();
82
+
83
+ _defineProperty(this, "onSessionUpdated", e => {
84
+ if (e.target === this) {
85
+ return;
86
+ }
87
+
88
+ e.preventDefault();
89
+ e.stopImmediatePropagation();
90
+ var id = e.target.getAttribute('id');
91
+
92
+ if (id) {
93
+ var key = "part".concat(id.toUpperCase());
94
+
95
+ if (e.update) {
96
+ this._model[key] = e.update;
97
+ } //TODO: accessing a private property here. The session event should contain the update in future to prevent this.
98
+
99
+
100
+ this.dispatchSessionChanged(e.srcElement._session, key);
101
+ }
102
+ });
103
+
104
+ this._model = {};
105
+ this._session = {};
106
+ this._options = null;
107
+ }
108
+
109
+ set model(m) {
110
+ this._model = m;
111
+ customElements.whenDefined(MC_TAG_NAME).then(() => {
112
+ this.setPartModel(this.partA, 'partA');
113
+ this.setPartModel(this.partB, 'partB');
114
+ });
115
+ }
116
+
117
+ set session(s) {
118
+ this._session = s;
119
+ customElements.whenDefined(MC_TAG_NAME).then(() => {
120
+ this.setPartSession(this.partA, 'partA');
121
+ this.setPartSession(this.partB, 'partB');
122
+ });
123
+ }
124
+
125
+ setPartModel(part, key) {
126
+ if (this._model && this._model[key] && part) {
127
+ var labels = {
128
+ 'partA': undefined,
129
+ 'partB': undefined
130
+ };
131
+
132
+ if (this._model.partLabels) {
133
+ var language = this._model.language;
134
+ labels = {
135
+ 'partA': translator.t('ebsr.part', {
136
+ lng: language,
137
+ index: this._model.partLabelType === 'Letters' ? 'A' : '1'
138
+ }),
139
+ 'partB': translator.t('ebsr.part', {
140
+ lng: language,
141
+ index: this._model.partLabelType === 'Letters' ? 'B' : '2'
142
+ })
143
+ };
144
+ }
145
+
146
+ part.model = _objectSpread(_objectSpread({}, preparePrintModel(this._model[key], this._options)), {}, {
147
+ keyMode: this._model[key].choicePrefix,
148
+ partLabel: labels[key]
149
+ });
150
+
151
+ if (!part._session) {
152
+ // for print, "set session" is not called,
153
+ // but ebsr needs sessions in order to render the elements,
154
+ // so we set it here it was not set already
155
+ part.session = {};
156
+ }
157
+ }
158
+ }
159
+
160
+ set options(o) {
161
+ this._options = o;
162
+ }
163
+
164
+ setPartSession(part, key) {
165
+ if (this._session && this._model && part) {
166
+ var {
167
+ value
168
+ } = this._session;
169
+ part.session = value && value[key] ? value[key] : {
170
+ id: key
171
+ };
172
+ }
173
+ }
174
+
175
+ dispatchSessionChanged(partSession, key) {
176
+ this._session.value = _objectSpread(_objectSpread({}, this._session.value), {}, {
177
+ [key]: partSession
178
+ });
179
+ log('[onSessionChanged] session: ', this._session);
180
+ var complete = isSessionComplete(this._session);
181
+ this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));
182
+ }
183
+
184
+ get partA() {
185
+ return this.querySelector("".concat(MC_TAG_NAME, "#a"));
186
+ }
187
+
188
+ get partB() {
189
+ return this.querySelector("".concat(MC_TAG_NAME, "#b"));
190
+ }
191
+
192
+ connectedCallback() {
193
+ this._render();
194
+
195
+ this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);
196
+ }
197
+
198
+ disconnectedCallback() {
199
+ this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);
200
+ }
201
+
202
+ _render() {
203
+ this.innerHTML = "\n <div>\n <".concat(MC_TAG_NAME, " id=\"a\"></").concat(MC_TAG_NAME, ">\n <").concat(MC_TAG_NAME, " id=\"b\"></").concat(MC_TAG_NAME, ">\n </div>\n ");
204
+ }
205
+
206
+ }
207
+
208
+ export { Ebsr as default, isSessionComplete };
209
+ //# sourceMappingURL=print.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print.js","sources":["../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../src/print.js"],"sourcesContent":["export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","import cloneDeep from 'lodash/cloneDeep';\nimport MultipleChoice from '@pie-element/multiple-choice';\nimport debug from 'debug';\nimport get from 'lodash/get';\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nconst MC_TAG_NAME = 'ebsr-multiple-choice';\nconst SESSION_CHANGED = SessionChangedEvent.TYPE;\nimport Translator from '@pie-lib/translator';\n\nconst { translator } = Translator;\n\nconst log = debug('pie-element:ebsr:print');\n\n/**\n * Live in same package as main element - so we can access some of the shared comps!\n *\n * - update pslb to build print if src/print.js is there\n * - update demo el\n * - get configure/controller building\n */\n\nconst preparePrintModel = (model, opts) => {\n const instr = opts.role === 'instructor';\n\n model.prompt = model.promptEnabled !== false ? model.prompt : undefined;\n model.teacherInstructions =\n instr && model.teacherInstructionsEnabled !== false ? model.teacherInstructions : undefined;\n model.showTeacherInstructions = instr;\n model.alwaysShowCorrect = instr;\n model.mode = instr ? 'evaluate' : 'gather';\n\n model.disabled = true;\n model.animationsDisabled = true;\n model.lockChoiceOrder = true;\n model.choicesLayout = model.choicesLayout || 'vertical';\n\n const choices = cloneDeep(model.choices);\n\n model.choices = choices.map((c) => {\n c.rationale = instr && model.rationaleEnabled !== false ? c.rationale : undefined;\n c.hideTick = instr;\n c.feedback = undefined;\n return c;\n });\n\n model.keyMode = model.choicePrefix || 'letters';\n\n return model;\n};\n\nclass EbsrMC extends MultipleChoice {}\n\nconst defineMultipleChoice = () => {\n if (!customElements.get(MC_TAG_NAME)) {\n customElements.define(MC_TAG_NAME, EbsrMC);\n }\n};\n\ndefineMultipleChoice();\n\nconst isNonEmptyArray = (a) => Array.isArray(a) && a.length > 0;\n\nexport const isSessionComplete = (session) => {\n const a = get(session, 'value.partA.value');\n const b = get(session, 'value.partB.value');\n\n return isNonEmptyArray(a) && isNonEmptyArray(b);\n};\n\nexport default class Ebsr extends HTMLElement {\n constructor() {\n super();\n this._model = {};\n this._session = {};\n this._options = null;\n }\n\n onSessionUpdated = (e) => {\n if (e.target === this) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n\n const id = e.target.getAttribute('id');\n\n if (id) {\n const key = `part${id.toUpperCase()}`;\n\n if (e.update) {\n this._model[key] = e.update;\n }\n //TODO: accessing a private property here. The session event should contain the update in future to prevent this.\n this.dispatchSessionChanged(e.srcElement._session, key);\n }\n };\n\n set model(m) {\n this._model = m;\n\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartModel(this.partA, 'partA');\n this.setPartModel(this.partB, 'partB');\n });\n }\n\n set session(s) {\n this._session = s;\n\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartSession(this.partA, 'partA');\n this.setPartSession(this.partB, 'partB');\n });\n }\n\n setPartModel(part, key) {\n if (this._model && this._model[key] && part) {\n let labels = {\n 'partA': undefined,\n 'partB': undefined\n };\n\n if (this._model.partLabels) {\n const language = this._model.language;\n\n labels = {\n 'partA': translator.t('ebsr.part', {\n lng: language,\n index: this._model.partLabelType === 'Letters' ? 'A' : '1'\n }),\n 'partB': translator.t('ebsr.part', {\n lng: language,\n index: this._model.partLabelType === 'Letters' ? 'B' : '2'\n })\n };\n }\n\n part.model = {\n ...preparePrintModel(this._model[key], this._options),\n keyMode: this._model[key].choicePrefix,\n partLabel: labels[key]\n };\n\n if (!part._session) {\n // for print, \"set session\" is not called,\n // but ebsr needs sessions in order to render the elements,\n // so we set it here it was not set already\n part.session = {};\n }\n }\n }\n\n set options(o) {\n this._options = o;\n }\n\n setPartSession(part, key) {\n if (this._session && this._model && part) {\n const { value } = this._session;\n part.session = value && value[key] ? value[key] : { id: key };\n }\n }\n\n dispatchSessionChanged(partSession, key) {\n this._session.value = {\n ...this._session.value,\n [key]: partSession,\n };\n\n log('[onSessionChanged] session: ', this._session);\n const complete = isSessionComplete(this._session);\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));\n }\n\n get partA() {\n return this.querySelector(`${MC_TAG_NAME}#a`);\n }\n\n get partB() {\n return this.querySelector(`${MC_TAG_NAME}#b`);\n }\n\n connectedCallback() {\n this._render();\n this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);\n }\n\n disconnectedCallback() {\n this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);\n }\n\n _render() {\n this.innerHTML = `\n <div>\n <${MC_TAG_NAME} id=\"a\"></${MC_TAG_NAME}>\n <${MC_TAG_NAME} id=\"b\"></${MC_TAG_NAME}>\n </div>\n `;\n }\n}\n"],"names":["MC_TAG_NAME","SESSION_CHANGED","SessionChangedEvent","TYPE","translator","Translator","log","debug","preparePrintModel","model","opts","instr","role","prompt","promptEnabled","undefined","teacherInstructions","teacherInstructionsEnabled","showTeacherInstructions","alwaysShowCorrect","mode","disabled","animationsDisabled","lockChoiceOrder","choicesLayout","choices","cloneDeep","map","c","rationale","rationaleEnabled","hideTick","feedback","keyMode","choicePrefix","EbsrMC","MultipleChoice","defineMultipleChoice","customElements","get","define","isNonEmptyArray","a","Array","isArray","length","isSessionComplete","session","b","Ebsr","HTMLElement","constructor","e","target","preventDefault","stopImmediatePropagation","id","getAttribute","key","toUpperCase","update","_model","dispatchSessionChanged","srcElement","_session","_options","m","whenDefined","then","setPartModel","partA","partB","s","setPartSession","part","labels","partLabels","language","t","lng","index","partLabelType","partLabel","options","o","value","partSession","complete","dispatchEvent","tagName","toLowerCase","querySelector","connectedCallback","_render","addEventListener","onSessionUpdated","disconnectedCallback","removeEventListener","innerHTML"],"mappings":"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"}