@pie-element/ebsr 8.2.5 → 8.2.6-next.56
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/CHANGELOG.md +0 -11
- package/configure/CHANGELOG.md +0 -11
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/main.js.map +1 -1
- package/configure/package.json +2 -2
- package/configure/src/__tests__/index.test.js +162 -211
- package/configure/src/defaults.js +24 -24
- package/configure/src/index.js +7 -7
- package/configure/src/main.jsx +57 -85
- package/controller/CHANGELOG.md +0 -16
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +2 -2
- package/controller/src/__tests__/index.test.js +113 -141
- package/controller/src/__tests__/utils.test.js +6 -9
- package/controller/src/defaults.js +1 -1
- package/controller/src/index.js +42 -64
- package/controller/src/utils.js +6 -4
- package/docs/config-schema.json.md +1 -1
- package/docs/demo/config.js +2 -2
- package/docs/demo/generate.js +3 -3
- package/docs/pie-schema.json.md +1 -1
- package/lib/index.js.map +1 -1
- package/lib/print.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/index.test.js +2 -7
- package/src/index.js +1 -3
- package/src/print.js +4 -6
package/controller/src/index.js
CHANGED
|
@@ -4,16 +4,13 @@ import { isResponseCorrect } from './utils';
|
|
|
4
4
|
import get from 'lodash/get';
|
|
5
5
|
import isEmpty from 'lodash/isEmpty';
|
|
6
6
|
|
|
7
|
-
const prepareChoice = (model, env, defaultFeedback) => choice => {
|
|
7
|
+
const prepareChoice = (model, env, defaultFeedback) => (choice) => {
|
|
8
8
|
const out = {
|
|
9
9
|
label: choice.label,
|
|
10
|
-
value: choice.value
|
|
10
|
+
value: choice.value,
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
if (
|
|
14
|
-
env.role === 'instructor' &&
|
|
15
|
-
(env.mode === 'view' || env.mode === 'evaluate')
|
|
16
|
-
) {
|
|
13
|
+
if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
|
|
17
14
|
out.rationale = model.rationaleEnabled ? choice.rationale : null;
|
|
18
15
|
} else {
|
|
19
16
|
out.rationale = null;
|
|
@@ -37,26 +34,18 @@ const prepareChoice = (model, env, defaultFeedback) => choice => {
|
|
|
37
34
|
};
|
|
38
35
|
|
|
39
36
|
const parsePart = (part, key, session, env) => {
|
|
40
|
-
const defaultFeedback = Object.assign(
|
|
41
|
-
{ correct: 'Correct', incorrect: 'Incorrect' },
|
|
42
|
-
part.defaultFeedback
|
|
43
|
-
);
|
|
37
|
+
const defaultFeedback = Object.assign({ correct: 'Correct', incorrect: 'Incorrect' }, part.defaultFeedback);
|
|
44
38
|
|
|
45
|
-
let choices = part.choices
|
|
46
|
-
? part.choices.map(prepareChoice(part, env, defaultFeedback))
|
|
47
|
-
: [];
|
|
39
|
+
let choices = part.choices ? part.choices.map(prepareChoice(part, env, defaultFeedback)) : [];
|
|
48
40
|
|
|
49
41
|
return {
|
|
50
42
|
...part,
|
|
51
43
|
choices,
|
|
52
44
|
disabled: env.mode !== 'gather',
|
|
53
45
|
complete: {
|
|
54
|
-
min: part.choices.filter(c => c.correct).length
|
|
46
|
+
min: part.choices.filter((c) => c.correct).length,
|
|
55
47
|
},
|
|
56
|
-
responseCorrect:
|
|
57
|
-
env.mode === 'evaluate'
|
|
58
|
-
? isResponseCorrect(part, key, session)
|
|
59
|
-
: undefined
|
|
48
|
+
responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(part, key, session) : undefined,
|
|
60
49
|
};
|
|
61
50
|
};
|
|
62
51
|
|
|
@@ -73,7 +62,7 @@ export const normalize = ({ partA = {}, partB = {}, ...question }) => ({
|
|
|
73
62
|
studentInstructionsEnabled: true,
|
|
74
63
|
gridColumns: '2',
|
|
75
64
|
...partA,
|
|
76
|
-
choicesLayout: partA.choicesLayout || (partA.verticalMode === false && 'horizontal') || 'vertical'
|
|
65
|
+
choicesLayout: partA.choicesLayout || (partA.verticalMode === false && 'horizontal') || 'vertical',
|
|
77
66
|
},
|
|
78
67
|
partB: {
|
|
79
68
|
...defaults.partB,
|
|
@@ -84,8 +73,8 @@ export const normalize = ({ partA = {}, partB = {}, ...question }) => ({
|
|
|
84
73
|
studentInstructionsEnabled: true,
|
|
85
74
|
gridColumns: '2',
|
|
86
75
|
...partB,
|
|
87
|
-
choicesLayout: partB.choicesLayout || (partB.verticalMode === false && 'horizontal') || 'vertical'
|
|
88
|
-
}
|
|
76
|
+
choicesLayout: partB.choicesLayout || (partB.verticalMode === false && 'horizontal') || 'vertical',
|
|
77
|
+
},
|
|
89
78
|
});
|
|
90
79
|
|
|
91
80
|
/**
|
|
@@ -102,8 +91,8 @@ export async function model(question, session, env, updateSession) {
|
|
|
102
91
|
|
|
103
92
|
const shuffledValues = {};
|
|
104
93
|
|
|
105
|
-
const us = part => (id, element, update) =>
|
|
106
|
-
new Promise(resolve => {
|
|
94
|
+
const us = (part) => (id, element, update) =>
|
|
95
|
+
new Promise((resolve) => {
|
|
107
96
|
shuffledValues[part] = update.shuffledValues;
|
|
108
97
|
resolve();
|
|
109
98
|
});
|
|
@@ -119,7 +108,7 @@ export async function model(question, session, env, updateSession) {
|
|
|
119
108
|
partAChoices,
|
|
120
109
|
{ shuffledValues: (session.shuffledValues || {}).partA },
|
|
121
110
|
us('partA'),
|
|
122
|
-
'value'
|
|
111
|
+
'value',
|
|
123
112
|
);
|
|
124
113
|
}
|
|
125
114
|
|
|
@@ -131,40 +120,33 @@ export async function model(question, session, env, updateSession) {
|
|
|
131
120
|
partBChoices,
|
|
132
121
|
{ shuffledValues: (session.shuffledValues || {}).partB },
|
|
133
122
|
us('partB'),
|
|
134
|
-
'value'
|
|
123
|
+
'value',
|
|
135
124
|
);
|
|
136
125
|
}
|
|
137
126
|
|
|
138
127
|
if (!isEmpty(shuffledValues)) {
|
|
139
128
|
if (updateSession && typeof updateSession === 'function') {
|
|
140
129
|
updateSession(session.id, session.element, {
|
|
141
|
-
shuffledValues
|
|
142
|
-
}).catch(e => {
|
|
130
|
+
shuffledValues,
|
|
131
|
+
}).catch((e) => {
|
|
143
132
|
console.error('update session failed', e);
|
|
144
133
|
});
|
|
145
134
|
}
|
|
146
135
|
}
|
|
147
136
|
|
|
148
137
|
if (normalizedQuestion.partLabels) {
|
|
149
|
-
partA.partLabel =
|
|
150
|
-
|
|
151
|
-
partB.partLabel =
|
|
152
|
-
normalizedQuestion.partLabelType === 'Letters' ? 'Part B' : 'Part 2';
|
|
138
|
+
partA.partLabel = normalizedQuestion.partLabelType === 'Letters' ? 'Part A' : 'Part 1';
|
|
139
|
+
partB.partLabel = normalizedQuestion.partLabelType === 'Letters' ? 'Part B' : 'Part 2';
|
|
153
140
|
} else {
|
|
154
141
|
partA.partLabel = undefined;
|
|
155
142
|
partB.partLabel = undefined;
|
|
156
143
|
}
|
|
157
144
|
|
|
158
|
-
if (
|
|
159
|
-
|
|
160
|
-
(env.mode === 'view' || env.mode === 'evaluate')
|
|
161
|
-
) {
|
|
162
|
-
partA.teacherInstructions = normalizedQuestion.partA
|
|
163
|
-
.teacherInstructionsEnabled
|
|
145
|
+
if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
|
|
146
|
+
partA.teacherInstructions = normalizedQuestion.partA.teacherInstructionsEnabled
|
|
164
147
|
? normalizedQuestion.partA.teacherInstructions
|
|
165
148
|
: null;
|
|
166
|
-
partB.teacherInstructions = normalizedQuestion.partB
|
|
167
|
-
.teacherInstructionsEnabled
|
|
149
|
+
partB.teacherInstructions = normalizedQuestion.partB.teacherInstructionsEnabled
|
|
168
150
|
? normalizedQuestion.partB.teacherInstructions
|
|
169
151
|
: null;
|
|
170
152
|
} else {
|
|
@@ -172,41 +154,37 @@ export async function model(question, session, env, updateSession) {
|
|
|
172
154
|
partB.teacherInstructions = null;
|
|
173
155
|
}
|
|
174
156
|
|
|
175
|
-
partA.prompt = normalizedQuestion.partA.promptEnabled
|
|
176
|
-
|
|
177
|
-
: null;
|
|
178
|
-
partB.prompt = normalizedQuestion.partB.promptEnabled
|
|
179
|
-
? normalizedQuestion.partB.prompt
|
|
180
|
-
: null;
|
|
157
|
+
partA.prompt = normalizedQuestion.partA.promptEnabled ? normalizedQuestion.partA.prompt : null;
|
|
158
|
+
partB.prompt = normalizedQuestion.partB.promptEnabled ? normalizedQuestion.partB.prompt : null;
|
|
181
159
|
|
|
182
|
-
return new Promise(resolve => {
|
|
160
|
+
return new Promise((resolve) => {
|
|
183
161
|
resolve({
|
|
184
162
|
disabled: env.mode !== 'gather',
|
|
185
163
|
mode: env.mode,
|
|
186
164
|
partA,
|
|
187
|
-
partB
|
|
165
|
+
partB,
|
|
188
166
|
});
|
|
189
167
|
});
|
|
190
168
|
}
|
|
191
169
|
|
|
192
170
|
export const createDefaultModel = (model = {}) =>
|
|
193
|
-
new Promise(resolve => {
|
|
171
|
+
new Promise((resolve) => {
|
|
194
172
|
resolve({
|
|
195
173
|
...defaults,
|
|
196
|
-
...model
|
|
174
|
+
...model,
|
|
197
175
|
});
|
|
198
176
|
});
|
|
199
177
|
|
|
200
|
-
const isCorrect = c => c.correct === true;
|
|
178
|
+
const isCorrect = (c) => c.correct === true;
|
|
201
179
|
|
|
202
180
|
const getScore = (config, sessionPart, key, partialScoringEnabled) => {
|
|
203
181
|
const { choices = [] } = (config && config[key]) || {};
|
|
204
182
|
const maxScore = choices.length;
|
|
205
183
|
const { value: sessionPartValue } = sessionPart || {};
|
|
206
184
|
|
|
207
|
-
const chosen = c => !!(sessionPartValue || []).find(v => v === c.value);
|
|
208
|
-
const correctAndNotChosen = c => isCorrect(c) && !chosen(c);
|
|
209
|
-
const incorrectAndChosen = c => !isCorrect(c) && chosen(c);
|
|
185
|
+
const chosen = (c) => !!(sessionPartValue || []).find((v) => v === c.value);
|
|
186
|
+
const correctAndNotChosen = (c) => isCorrect(c) && !chosen(c);
|
|
187
|
+
const incorrectAndChosen = (c) => !isCorrect(c) && chosen(c);
|
|
210
188
|
const correctChoices = choices.reduce((total, choice) => {
|
|
211
189
|
if (correctAndNotChosen(choice) || incorrectAndChosen(choice)) {
|
|
212
190
|
return total - 1;
|
|
@@ -224,7 +202,7 @@ const getScore = (config, sessionPart, key, partialScoringEnabled) => {
|
|
|
224
202
|
};
|
|
225
203
|
|
|
226
204
|
export function outcome(config, session, env) {
|
|
227
|
-
return new Promise(resolve => {
|
|
205
|
+
return new Promise((resolve) => {
|
|
228
206
|
const { value } = session || {};
|
|
229
207
|
|
|
230
208
|
if (!session || !value) {
|
|
@@ -242,7 +220,7 @@ export function outcome(config, session, env) {
|
|
|
242
220
|
if (!partialScoringEnabled) {
|
|
243
221
|
// The EBSR item is worth 1 point
|
|
244
222
|
// That point is awarded if and only if both parts are fully correct, otherwise no points are awarded
|
|
245
|
-
resolve({ score:
|
|
223
|
+
resolve({ score: scoreA === 1 && scoreB === 1 ? 1 : 0, scoreA, scoreB, max: 1 });
|
|
246
224
|
} else {
|
|
247
225
|
// The EBSR item is worth 2 points
|
|
248
226
|
if (scoreA === 1) {
|
|
@@ -262,10 +240,10 @@ export function outcome(config, session, env) {
|
|
|
262
240
|
});
|
|
263
241
|
}
|
|
264
242
|
|
|
265
|
-
const returnPartCorrect = choices => {
|
|
243
|
+
const returnPartCorrect = (choices) => {
|
|
266
244
|
let answers = [];
|
|
267
245
|
|
|
268
|
-
choices.forEach(i => {
|
|
246
|
+
choices.forEach((i) => {
|
|
269
247
|
const { correct, value } = i;
|
|
270
248
|
if (correct) {
|
|
271
249
|
answers.push(value);
|
|
@@ -275,7 +253,7 @@ const returnPartCorrect = choices => {
|
|
|
275
253
|
};
|
|
276
254
|
|
|
277
255
|
export const createCorrectResponseSession = (question, env) => {
|
|
278
|
-
return new Promise(resolve => {
|
|
256
|
+
return new Promise((resolve) => {
|
|
279
257
|
if (env.mode !== 'evaluate' && env.role === 'instructor') {
|
|
280
258
|
const { partA, partB } = question;
|
|
281
259
|
|
|
@@ -286,14 +264,14 @@ export const createCorrectResponseSession = (question, env) => {
|
|
|
286
264
|
value: {
|
|
287
265
|
partA: {
|
|
288
266
|
id: 'partA',
|
|
289
|
-
value: partACorrect
|
|
267
|
+
value: partACorrect,
|
|
290
268
|
},
|
|
291
269
|
partB: {
|
|
292
270
|
id: 'partB',
|
|
293
|
-
value: partBCorrect
|
|
294
|
-
}
|
|
271
|
+
value: partBCorrect,
|
|
272
|
+
},
|
|
295
273
|
},
|
|
296
|
-
id: '1'
|
|
274
|
+
id: '1',
|
|
297
275
|
});
|
|
298
276
|
} else {
|
|
299
277
|
resolve(null);
|
|
@@ -304,7 +282,7 @@ export const createCorrectResponseSession = (question, env) => {
|
|
|
304
282
|
const validatePart = (model = {}, config = {}) => {
|
|
305
283
|
const { choices } = model;
|
|
306
284
|
const { minAnswerChoices = 2, maxAnswerChoices } = config;
|
|
307
|
-
const reversedChoices = [...choices || []].reverse();
|
|
285
|
+
const reversedChoices = [...(choices || [])].reverse();
|
|
308
286
|
const choicesErrors = {};
|
|
309
287
|
let hasCorrectResponse = false;
|
|
310
288
|
|
|
@@ -318,7 +296,7 @@ const validatePart = (model = {}, config = {}) => {
|
|
|
318
296
|
if (label === '' || label === '<div></div>') {
|
|
319
297
|
choicesErrors[value] = 'Content should not be empty.';
|
|
320
298
|
} else {
|
|
321
|
-
const identicalAnswer = reversedChoices.slice(index + 1).some(c => c.label === label);
|
|
299
|
+
const identicalAnswer = reversedChoices.slice(index + 1).some((c) => c.label === label);
|
|
322
300
|
|
|
323
301
|
if (identicalAnswer) {
|
|
324
302
|
choicesErrors[value] = 'Content should be unique.';
|
package/controller/src/utils.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import isEqual from 'lodash/isEqual';
|
|
2
2
|
|
|
3
|
-
export const getCorrectResponse = (choices) =>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
export const getCorrectResponse = (choices) =>
|
|
4
|
+
choices &&
|
|
5
|
+
choices
|
|
6
|
+
.filter((c) => c.correct)
|
|
7
|
+
.map((c) => c.value)
|
|
8
|
+
.sort();
|
|
7
9
|
|
|
8
10
|
export const isResponseCorrect = (question, key, session) => {
|
|
9
11
|
let correctResponse = getCorrectResponse(question.choices);
|
package/docs/demo/config.js
CHANGED
|
@@ -2,7 +2,7 @@ const { model } = require('./generate');
|
|
|
2
2
|
|
|
3
3
|
module.exports = {
|
|
4
4
|
elements: {
|
|
5
|
-
'ebsr-element': '../..'
|
|
5
|
+
'ebsr-element': '../..',
|
|
6
6
|
},
|
|
7
|
-
models: [model('1', 'ebsr-element')/*, model('2', 'ebsr-element')*/]
|
|
7
|
+
models: [model('1', 'ebsr-element') /*, model('2', 'ebsr-element')*/],
|
|
8
8
|
};
|
package/docs/demo/generate.js
CHANGED
|
@@ -21,7 +21,7 @@ exports.model = (id, element) => ({
|
|
|
21
21
|
choicePrefix: 'numbers',
|
|
22
22
|
partialScoring: false,
|
|
23
23
|
prompt: 'What color is the sky?',
|
|
24
|
-
promptEnabled: true
|
|
24
|
+
promptEnabled: true,
|
|
25
25
|
},
|
|
26
26
|
partB: {
|
|
27
27
|
choiceMode: 'radio',
|
|
@@ -47,6 +47,6 @@ exports.model = (id, element) => ({
|
|
|
47
47
|
choicePrefix: 'numbers',
|
|
48
48
|
partialScoring: false,
|
|
49
49
|
prompt: 'What color do you get when you mix Red with your answer in Part 1?',
|
|
50
|
-
promptEnabled: true
|
|
51
|
-
}
|
|
50
|
+
promptEnabled: true,
|
|
51
|
+
},
|
|
52
52
|
});
|
package/docs/pie-schema.json.md
CHANGED
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["SESSION_CHANGED","SessionChangedEvent","TYPE","MC_TAG_NAME","log","EbsrMC","MultipleChoice","defineMultipleChoice","customElements","get","define","isNonEmptyArray","a","Array","isArray","length","isSessionComplete","session","b","Ebsr","e","target","preventDefault","stopImmediatePropagation","id","getAttribute","key","toUpperCase","update","_model","dispatchSessionChanged","srcElement","_session","m","whenDefined","then","setPartModel","partA","partB","s","setPartSession","part","mode","model","keyMode","choicePrefix","value","partSession","complete","dispatchEvent","tagName","toLowerCase","querySelector","_render","addEventListener","onSessionUpdated","removeEventListener","innerHTML","HTMLElement"],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["SESSION_CHANGED","SessionChangedEvent","TYPE","MC_TAG_NAME","log","EbsrMC","MultipleChoice","defineMultipleChoice","customElements","get","define","isNonEmptyArray","a","Array","isArray","length","isSessionComplete","session","b","Ebsr","e","target","preventDefault","stopImmediatePropagation","id","getAttribute","key","toUpperCase","update","_model","dispatchSessionChanged","srcElement","_session","m","whenDefined","then","setPartModel","partA","partB","s","setPartSession","part","mode","model","keyMode","choicePrefix","value","partSession","complete","dispatchEvent","tagName","toLowerCase","querySelector","_render","addEventListener","onSessionUpdated","removeEventListener","innerHTML","HTMLElement"],"mappings":"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","sourcesContent":["import { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport MultipleChoice from '@pie-element/multiple-choice';\nimport get from 'lodash/get';\nimport debug from 'debug';\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.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"],"file":"index.js"}
|
package/lib/print.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/print.js"],"names":["MC_TAG_NAME","SESSION_CHANGED","SessionChangedEvent","TYPE","log","preparePrintModel","model","opts","instr","role","prompt","promptEnabled","undefined","teacherInstructions","teacherInstructionsEnabled","showTeacherInstructions","alwaysShowCorrect","mode","disabled","animationsDisabled","lockChoiceOrder","choicesLayout","choices","map","c","rationale","rationaleEnabled","hideTick","feedback","keyMode","choicePrefix","EbsrMC","MultipleChoice","defineMultipleChoice","customElements","get","define","isNonEmptyArray","a","Array","isArray","length","isSessionComplete","session","b","Ebsr","e","target","preventDefault","stopImmediatePropagation","id","getAttribute","key","toUpperCase","update","_model","dispatchSessionChanged","srcElement","_session","_options","m","whenDefined","then","setPartModel","partA","partB","s","setPartSession","part","o","value","partSession","complete","dispatchEvent","tagName","toLowerCase","querySelector","_render","addEventListener","onSessionUpdated","removeEventListener","innerHTML","HTMLElement"],"mappings":"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","sourcesContent":["import React from 'react';\nimport cloneDeep from 'lodash/cloneDeep';\nimport MultipleChoice from '@pie-element/multiple-choice';\nimport debug from 'debug';\nimport get from 'lodash/get';\n\nimport {SessionChangedEvent} from '@pie-framework/pie-player-events';\nconst MC_TAG_NAME = 'ebsr-multiple-choice';\nconst SESSION_CHANGED = SessionChangedEvent.TYPE;\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 = 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\n part.model = {\n ...preparePrintModel(this._model[key], this._options),\n keyMode: this._model[key].choicePrefix,\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(\n new SessionChangedEvent(this.tagName.toLowerCase(), complete)\n );\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"],"file":"print.js"}
|
|
1
|
+
{"version":3,"sources":["../src/print.js"],"names":["MC_TAG_NAME","SESSION_CHANGED","SessionChangedEvent","TYPE","log","preparePrintModel","model","opts","instr","role","prompt","promptEnabled","undefined","teacherInstructions","teacherInstructionsEnabled","showTeacherInstructions","alwaysShowCorrect","mode","disabled","animationsDisabled","lockChoiceOrder","choicesLayout","choices","map","c","rationale","rationaleEnabled","hideTick","feedback","keyMode","choicePrefix","EbsrMC","MultipleChoice","defineMultipleChoice","customElements","get","define","isNonEmptyArray","a","Array","isArray","length","isSessionComplete","session","b","Ebsr","e","target","preventDefault","stopImmediatePropagation","id","getAttribute","key","toUpperCase","update","_model","dispatchSessionChanged","srcElement","_session","_options","m","whenDefined","then","setPartModel","partA","partB","s","setPartSession","part","o","value","partSession","complete","dispatchEvent","tagName","toLowerCase","querySelector","_render","addEventListener","onSessionUpdated","removeEventListener","innerHTML","HTMLElement"],"mappings":"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","sourcesContent":["import React from 'react';\nimport cloneDeep from 'lodash/cloneDeep';\nimport MultipleChoice from '@pie-element/multiple-choice';\nimport debug from 'debug';\nimport get from 'lodash/get';\n\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nconst MC_TAG_NAME = 'ebsr-multiple-choice';\nconst SESSION_CHANGED = SessionChangedEvent.TYPE;\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 part.model = {\n ...preparePrintModel(this._model[key], this._options),\n keyMode: this._model[key].choicePrefix,\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"],"file":"print.js"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/ebsr",
|
|
3
|
-
"version": "8.2.
|
|
3
|
+
"version": "8.2.6-next.56+48e6d110f",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": "pie-framework/pie-elements",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@pie-element/multiple-choice": "^7.3.
|
|
10
|
+
"@pie-element/multiple-choice": "^7.3.3-next.62+48e6d110f",
|
|
11
11
|
"@pie-framework/pie-player-events": "^0.1.0",
|
|
12
12
|
"classnames": "^2.2.5",
|
|
13
13
|
"debug": "^4.1.1",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"author": "pie framework developers",
|
|
17
17
|
"license": "ISC",
|
|
18
|
-
"gitHead": "
|
|
18
|
+
"gitHead": "48e6d110f19f69ca71fd486d88c3e88ad10db70b",
|
|
19
19
|
"scripts": {
|
|
20
20
|
"postpublish": "../../scripts/postpublish"
|
|
21
21
|
},
|
|
@@ -75,9 +75,7 @@ describe('ebsr', () => {
|
|
|
75
75
|
const session = { id: key, value };
|
|
76
76
|
el.dispatchSessionChanged(session, key);
|
|
77
77
|
|
|
78
|
-
expect(el.dispatchEvent).toBeCalledWith(
|
|
79
|
-
new SessionChangedEvent('ebsr-element', false)
|
|
80
|
-
);
|
|
78
|
+
expect(el.dispatchEvent).toBeCalledWith(new SessionChangedEvent('ebsr-element', false));
|
|
81
79
|
expect(el._session.value[key]).toEqual(session);
|
|
82
80
|
});
|
|
83
81
|
};
|
|
@@ -114,8 +112,5 @@ describe('isSessionComplete', () => {
|
|
|
114
112
|
};
|
|
115
113
|
|
|
116
114
|
assertComplete({}, false);
|
|
117
|
-
assertComplete(
|
|
118
|
-
{ value: { partA: { value: [1] }, partB: { value: [2] } } },
|
|
119
|
-
true
|
|
120
|
-
);
|
|
115
|
+
assertComplete({ value: { partA: { value: [1] }, partB: { value: [2] } } }, true);
|
|
121
116
|
});
|
package/src/index.js
CHANGED
|
@@ -102,9 +102,7 @@ export default class Ebsr extends HTMLElement {
|
|
|
102
102
|
|
|
103
103
|
log('[onSessionChanged] session: ', this._session);
|
|
104
104
|
const complete = isSessionComplete(this._session);
|
|
105
|
-
this.dispatchEvent(
|
|
106
|
-
new SessionChangedEvent(this.tagName.toLowerCase(), complete)
|
|
107
|
-
);
|
|
105
|
+
this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));
|
|
108
106
|
}
|
|
109
107
|
|
|
110
108
|
get partA() {
|
package/src/print.js
CHANGED
|
@@ -4,7 +4,7 @@ import MultipleChoice from '@pie-element/multiple-choice';
|
|
|
4
4
|
import debug from 'debug';
|
|
5
5
|
import get from 'lodash/get';
|
|
6
6
|
|
|
7
|
-
import {SessionChangedEvent} from '@pie-framework/pie-player-events';
|
|
7
|
+
import { SessionChangedEvent } from '@pie-framework/pie-player-events';
|
|
8
8
|
const MC_TAG_NAME = 'ebsr-multiple-choice';
|
|
9
9
|
const SESSION_CHANGED = SessionChangedEvent.TYPE;
|
|
10
10
|
|
|
@@ -22,7 +22,8 @@ const preparePrintModel = (model, opts) => {
|
|
|
22
22
|
const instr = opts.role === 'instructor';
|
|
23
23
|
|
|
24
24
|
model.prompt = model.promptEnabled !== false ? model.prompt : undefined;
|
|
25
|
-
model.teacherInstructions =
|
|
25
|
+
model.teacherInstructions =
|
|
26
|
+
instr && model.teacherInstructionsEnabled !== false ? model.teacherInstructions : undefined;
|
|
26
27
|
model.showTeacherInstructions = instr;
|
|
27
28
|
model.alwaysShowCorrect = instr;
|
|
28
29
|
model.mode = instr ? 'evaluate' : 'gather';
|
|
@@ -114,7 +115,6 @@ export default class Ebsr extends HTMLElement {
|
|
|
114
115
|
|
|
115
116
|
setPartModel(part, key) {
|
|
116
117
|
if (this._model && this._model[key] && part) {
|
|
117
|
-
|
|
118
118
|
part.model = {
|
|
119
119
|
...preparePrintModel(this._model[key], this._options),
|
|
120
120
|
keyMode: this._model[key].choicePrefix,
|
|
@@ -148,9 +148,7 @@ export default class Ebsr extends HTMLElement {
|
|
|
148
148
|
|
|
149
149
|
log('[onSessionChanged] session: ', this._session);
|
|
150
150
|
const complete = isSessionComplete(this._session);
|
|
151
|
-
this.dispatchEvent(
|
|
152
|
-
new SessionChangedEvent(this.tagName.toLowerCase(), complete)
|
|
153
|
-
);
|
|
151
|
+
this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));
|
|
154
152
|
}
|
|
155
153
|
|
|
156
154
|
get partA() {
|