@pie-element/inline-dropdown 6.8.0-next.5 → 8.0.0-hotfix.0
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 +50 -0
- package/configure/CHANGELOG.md +16 -0
- package/configure/package.json +1 -1
- package/controller/CHANGELOG.md +16 -0
- package/controller/lib/index.js +40 -12
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/package.json +2 -2
- package/LICENSE.md +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,56 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [8.0.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown@6.7.10...@pie-element/inline-dropdown@8.0.0) (2025-10-02)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* publish majors to adopt pie-toolbox split without breaking legacy bundles PD-5242 ([50ede62](https://github.com/pie-framework/pie-elements/commit/50ede624eff05e2bc52fa80e453d561c505ab38d))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Performance Improvements
|
|
15
|
+
|
|
16
|
+
* **multiple-choice:** adopt pie-toolbox split ([b4b8f45](https://github.com/pie-framework/pie-elements/commit/b4b8f45b68b71622b314c3d80fdc180832a640e1))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
### BREAKING CHANGES
|
|
20
|
+
|
|
21
|
+
* **multiple-choice:** publish majors to carry the pie-toolbox split without breaking legacy bundles
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# [7.0.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown@6.7.10...@pie-element/inline-dropdown@7.0.0) (2025-10-01)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
### Features
|
|
31
|
+
|
|
32
|
+
* publish majors to adopt pie-toolbox split without breaking legacy bundles PD-5242 ([50ede62](https://github.com/pie-framework/pie-elements/commit/50ede624eff05e2bc52fa80e453d561c505ab38d))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Performance Improvements
|
|
36
|
+
|
|
37
|
+
* **multiple-choice:** adopt pie-toolbox split ([b4b8f45](https://github.com/pie-framework/pie-elements/commit/b4b8f45b68b71622b314c3d80fdc180832a640e1))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### BREAKING CHANGES
|
|
41
|
+
|
|
42
|
+
* **multiple-choice:** publish majors to carry the pie-toolbox split without breaking legacy bundles
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
## [6.7.10](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown@6.8.0-beta.0...@pie-element/inline-dropdown@6.7.10) (2025-09-26)
|
|
49
|
+
|
|
50
|
+
**Note:** Version bump only for package @pie-element/inline-dropdown
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
6
56
|
# [6.8.0-beta.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown@6.7.9...@pie-element/inline-dropdown@6.8.0-beta.0) (2025-09-25)
|
|
7
57
|
|
|
8
58
|
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,22 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [7.0.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown-configure@6.6.0...@pie-element/inline-dropdown-configure@7.0.1) (2025-10-02)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/inline-dropdown-configure
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [7.0.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown-configure@6.6.0...@pie-element/inline-dropdown-configure@7.0.0) (2025-10-01)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @pie-element/inline-dropdown-configure
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
6
22
|
# [6.6.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown-configure@6.5.9...@pie-element/inline-dropdown-configure@6.6.0) (2025-09-25)
|
|
7
23
|
|
|
8
24
|
|
package/configure/package.json
CHANGED
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,22 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [7.0.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown-controller@6.3.10...@pie-element/inline-dropdown-controller@7.0.1) (2025-10-02)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @pie-element/inline-dropdown-controller
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
# [7.0.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown-controller@6.3.10...@pie-element/inline-dropdown-controller@7.0.0) (2025-10-01)
|
|
15
|
+
|
|
16
|
+
**Note:** Version bump only for package @pie-element/inline-dropdown-controller
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
6
22
|
## [6.3.10](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown-controller@6.3.9...@pie-element/inline-dropdown-controller@6.3.10) (2025-09-25)
|
|
7
23
|
|
|
8
24
|
|
package/controller/lib/index.js
CHANGED
|
@@ -58,7 +58,7 @@ exports.normalize = normalize;
|
|
|
58
58
|
function model(question, session, env, updateSession) {
|
|
59
59
|
return new Promise( /*#__PURE__*/function () {
|
|
60
60
|
var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(resolve) {
|
|
61
|
-
var normalizedQuestion, _ref2, _ref2$value, value, choices, feedback, allCorrectResponses, respAreaLength, correctResponses, _loop, i, _ret, lockChoiceOrder, keys, _i, key, teacherInstructions, rationale, choicesWillNullRationales, out;
|
|
61
|
+
var normalizedQuestion, _ref2, _ref2$value, value, choices, feedback, allCorrectResponses, respAreaLength, correctResponses, _loop, i, _ret, lockChoiceOrder, shuffledValues, keys, us, _i, _session$shuffledValu, key, storedValues, teacherInstructions, rationale, choicesWillNullRationales, out;
|
|
62
62
|
|
|
63
63
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
64
64
|
while (1) {
|
|
@@ -136,32 +136,60 @@ function model(question, session, env, updateSession) {
|
|
|
136
136
|
lockChoiceOrder = (0, _controllerUtils.lockChoices)(normalizedQuestion, session, env);
|
|
137
137
|
|
|
138
138
|
if (lockChoiceOrder) {
|
|
139
|
-
_context.next =
|
|
139
|
+
_context.next = 33;
|
|
140
140
|
break;
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
+
shuffledValues = {};
|
|
143
144
|
keys = Object.keys(choices);
|
|
145
|
+
|
|
146
|
+
us = function us(part) {
|
|
147
|
+
return function (id, element, update) {
|
|
148
|
+
return new Promise(function (resolve) {
|
|
149
|
+
shuffledValues[part] = update.shuffledValues;
|
|
150
|
+
resolve();
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
};
|
|
154
|
+
|
|
144
155
|
_i = 0;
|
|
145
156
|
|
|
146
|
-
case
|
|
157
|
+
case 23:
|
|
147
158
|
if (!(_i < keys.length)) {
|
|
148
|
-
_context.next =
|
|
159
|
+
_context.next = 32;
|
|
149
160
|
break;
|
|
150
161
|
}
|
|
151
162
|
|
|
152
163
|
key = keys[_i];
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
164
|
+
storedValues = session === null || session === void 0 ? void 0 : (_session$shuffledValu = session.shuffledValues) === null || _session$shuffledValu === void 0 ? void 0 : _session$shuffledValu[key];
|
|
165
|
+
_context.next = 28;
|
|
166
|
+
return (0, _controllerUtils.getShuffledChoices)(choices[key], // the shuffledValues structure was updated to an object like { choice_key: [] }
|
|
167
|
+
// and we need to override shuffledValues if it's not an array
|
|
168
|
+
{
|
|
169
|
+
shuffledValues: Array.isArray(storedValues) ? storedValues : []
|
|
170
|
+
}, us(key), 'value');
|
|
171
|
+
|
|
172
|
+
case 28:
|
|
157
173
|
choices[key] = _context.sent;
|
|
158
174
|
|
|
159
|
-
case
|
|
175
|
+
case 29:
|
|
160
176
|
_i++;
|
|
161
|
-
_context.next =
|
|
177
|
+
_context.next = 23;
|
|
162
178
|
break;
|
|
163
179
|
|
|
164
|
-
case
|
|
180
|
+
case 32:
|
|
181
|
+
if (!(0, _isEmpty["default"])(shuffledValues)) {
|
|
182
|
+
if (session && updateSession && typeof updateSession === 'function') {
|
|
183
|
+
updateSession(session.id, session.element, {
|
|
184
|
+
shuffledValues: shuffledValues
|
|
185
|
+
})["catch"](function (e) {
|
|
186
|
+
// eslint-disable-next-line no-console
|
|
187
|
+
console.error('update session failed', e);
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
case 33:
|
|
165
193
|
teacherInstructions = null;
|
|
166
194
|
rationale = null;
|
|
167
195
|
choicesWillNullRationales = (Object.keys(choices) || []).reduce(function (acc, currentValue) {
|
|
@@ -199,7 +227,7 @@ function model(question, session, env, updateSession) {
|
|
|
199
227
|
};
|
|
200
228
|
resolve(out);
|
|
201
229
|
|
|
202
|
-
case
|
|
230
|
+
case 39:
|
|
203
231
|
case "end":
|
|
204
232
|
return _context.stop();
|
|
205
233
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["getFeedback","correct","normalize","question","defaults","model","session","env","updateSession","Promise","resolve","normalizedQuestion","value","choices","obj","area","key","choice","feedback","mode","allCorrectResponses","respAreaLength","Object","keys","length","correctResponses","i","result","answer","correctChoice","isCorrect","lockChoiceOrder","teacherInstructions","rationale","choicesWillNullRationales","reduce","acc","currentValue","map","role","rationaleEnabled","teacherInstructionsEnabled","choiceRationaleEnabled","out","disabled","prompt","promptEnabled","displayType","markup","responseCorrect","getScore","undefined","language","extraCSSRules","config","maxScore","correctCount","total","str","toFixed","parseFloat","outcome","score","empty","partialScoringEnabled","partialScoring","enabled","Math","floor","createCorrectResponseSession","forEach","correctChoices","filter","c","id","getInnerText","html","replaceAll","getContent","replace","validate","maxResponseAreas","maxResponseAreaChoices","errors","field","required","nbOfResponseAreas","match","responseAreasError","choiceKey","responseAreaChoicesError"],"mappings":"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","sourcesContent":["import map from 'lodash/map';\nimport reduce from 'lodash/reduce';\nimport isEmpty from 'lodash/isEmpty';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport defaults from './defaults';\n\nimport { getAllCorrectResponses } from './utils';\n\nconst getFeedback = (correct) => {\n if (correct) {\n return 'correct';\n }\n\n return 'incorrect';\n};\n\nexport const normalize = (question) => ({ ...defaults, ...question });\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async (resolve) => {\n const normalizedQuestion = normalize(question);\n const { value = {} } = session || {};\n let choices = reduce(\n normalizedQuestion.choices,\n (obj, area, key) => {\n obj[key] = map(area, (choice) => choice);\n\n return obj;\n },\n {},\n );\n\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n const allCorrectResponses = getAllCorrectResponses(normalizedQuestion);\n const respAreaLength = Object.keys(allCorrectResponses).length;\n let correctResponses = 0;\n\n for (let i = 0; i < respAreaLength; i++) {\n const result = reduce(\n allCorrectResponses,\n (obj, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n const isCorrect = answer && correctChoice && correctChoice === answer;\n\n obj.feedback[key] = getFeedback(isCorrect);\n\n if (isCorrect) {\n obj.correctResponses += 1;\n }\n\n return obj;\n },\n { correctResponses: 0, feedback: {} },\n );\n\n if (result.correctResponses >= correctResponses) {\n correctResponses = result.correctResponses;\n feedback = result.feedback;\n }\n\n if (result.correctResponses === respAreaLength) {\n break;\n }\n }\n }\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n const keys = Object.keys(choices);\n let i;\n\n for (i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n choices[key] = await getShuffledChoices(choices[key], session, updateSession, 'value');\n }\n }\n\n let teacherInstructions = null;\n let rationale = null;\n\n const choicesWillNullRationales = (Object.keys(choices) || []).reduce((acc, currentValue) => {\n acc[currentValue] = (choices[currentValue] || []).map((choice) => ({\n ...choice,\n rationale: null,\n }));\n\n return acc;\n }, {});\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n\n choices = normalizedQuestion.choiceRationaleEnabled ? normalizedQuestion.choices : choicesWillNullRationales;\n } else {\n rationale = null;\n teacherInstructions = null;\n choices = choicesWillNullRationales;\n }\n\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n displayType: normalizedQuestion.displayType,\n markup: normalizedQuestion.markup,\n choices,\n feedback,\n\n responseCorrect: env.mode === 'evaluate' ? getScore(normalizedQuestion, session) === 1 : undefined,\n rationale,\n teacherInstructions,\n language: normalizedQuestion.language,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n resolve(out);\n });\n}\n\nexport const getScore = (config, session) => {\n const { value = {} } = session || {};\n const maxScore = config && config.choices ? Object.keys(config.choices).length : 0;\n const allCorrectResponses = getAllCorrectResponses(config);\n let correctCount = 0;\n\n for (let i = 0; i < maxScore; i++) {\n const result = reduce(\n allCorrectResponses,\n (total, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n\n if (correctChoice && answer && correctChoice === answer) {\n return total;\n }\n\n return total - 1;\n },\n maxScore,\n );\n\n if (result > correctCount) {\n correctCount = result;\n }\n\n if (result === maxScore) {\n break;\n }\n }\n\n const str = (correctCount / maxScore).toFixed(2);\n\n return parseFloat(str);\n};\n\n/**\n *\n * The score is partial by default for checkbox mode, allOrNothing for radio mode.\n * To disable partial scoring for checkbox mode you either set model.partialScoring = false or env.partialScoring =\n * false. the value in `env` will override the value in `model`.\n * @param {Object} model - the main model\n * @param {boolean} model.partialScoring - is partial scoring enabled (if undefined set to to true)\n * @param {*} session\n * @param {Object} env\n * @param {boolean} env.partialScoring - is partial scoring enabled (if undefined default to true) This overrides\n * `model.partialScoring`.\n */\nexport function outcome(model, session, env = {}) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const score = getScore(model, session);\n\n resolve({\n score: partialScoringEnabled ? score : Math.floor(score),\n empty: false,\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { choices } = question;\n const value = {};\n\n if (choices) {\n Object.keys(choices).forEach((key, i) => {\n const correctChoices = choices[key] && choices[key].filter((c) => c.correct);\n\n value[i] = correctChoices && correctChoices[0].value;\n });\n }\n\n resolve({\n id: '1',\n value,\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { markup, choices } = model;\n const { maxResponseAreas, maxResponseAreaChoices } = config;\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n const nbOfResponseAreas = ((markup || '').match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreasError = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreasError = 'There should be defined at least 1 response area.';\n }\n\n (Object.keys(choices) || []).forEach((choiceKey) => {\n if (choices[choiceKey] && choices[choiceKey].length > maxResponseAreaChoices) {\n errors.responseAreaChoicesError = `No more than ${maxResponseAreaChoices} choices per response area should be defined.`;\n }\n });\n\n return errors;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["getFeedback","correct","normalize","question","defaults","model","session","env","updateSession","Promise","resolve","normalizedQuestion","value","choices","obj","area","key","choice","feedback","mode","allCorrectResponses","respAreaLength","Object","keys","length","correctResponses","i","result","answer","correctChoice","isCorrect","lockChoiceOrder","shuffledValues","us","part","id","element","update","storedValues","Array","isArray","e","console","error","teacherInstructions","rationale","choicesWillNullRationales","reduce","acc","currentValue","map","role","rationaleEnabled","teacherInstructionsEnabled","choiceRationaleEnabled","out","disabled","prompt","promptEnabled","displayType","markup","responseCorrect","getScore","undefined","language","extraCSSRules","config","maxScore","correctCount","total","str","toFixed","parseFloat","outcome","score","empty","partialScoringEnabled","partialScoring","enabled","Math","floor","createCorrectResponseSession","forEach","correctChoices","filter","c","getInnerText","html","replaceAll","getContent","replace","validate","maxResponseAreas","maxResponseAreaChoices","errors","field","required","nbOfResponseAreas","match","responseAreasError","choiceKey","responseAreaChoicesError"],"mappings":"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","sourcesContent":["import map from 'lodash/map';\nimport reduce from 'lodash/reduce';\nimport isEmpty from 'lodash/isEmpty';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport defaults from './defaults';\n\nimport { getAllCorrectResponses } from './utils';\n\nconst getFeedback = (correct) => {\n if (correct) {\n return 'correct';\n }\n\n return 'incorrect';\n};\n\nexport const normalize = (question) => ({ ...defaults, ...question });\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async (resolve) => {\n const normalizedQuestion = normalize(question);\n const { value = {} } = session || {};\n let choices = reduce(\n normalizedQuestion.choices,\n (obj, area, key) => {\n obj[key] = map(area, (choice) => choice);\n\n return obj;\n },\n {},\n );\n\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n const allCorrectResponses = getAllCorrectResponses(normalizedQuestion);\n const respAreaLength = Object.keys(allCorrectResponses).length;\n let correctResponses = 0;\n\n for (let i = 0; i < respAreaLength; i++) {\n const result = reduce(\n allCorrectResponses,\n (obj, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n const isCorrect = answer && correctChoice && correctChoice === answer;\n\n obj.feedback[key] = getFeedback(isCorrect);\n\n if (isCorrect) {\n obj.correctResponses += 1;\n }\n\n return obj;\n },\n { correctResponses: 0, feedback: {} },\n );\n\n if (result.correctResponses >= correctResponses) {\n correctResponses = result.correctResponses;\n feedback = result.feedback;\n }\n\n if (result.correctResponses === respAreaLength) {\n break;\n }\n }\n }\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n const shuffledValues = {};\n const keys = Object.keys(choices);\n\n const us = (part) => (id, element, update) => {\n return new Promise((resolve) => {\n shuffledValues[part] = update.shuffledValues;\n resolve();\n });\n };\n\n let i;\n\n for (i = 0; i < keys.length; i++) {\n const key = keys[i];\n const storedValues = session?.shuffledValues?.[key];\n\n choices[key] = await getShuffledChoices(\n choices[key],\n // the shuffledValues structure was updated to an object like { choice_key: [] }\n // and we need to override shuffledValues if it's not an array\n { shuffledValues: Array.isArray(storedValues) ? storedValues : [] },\n us(key),\n 'value',\n );\n }\n\n if (!isEmpty(shuffledValues)) {\n if (session && updateSession && typeof updateSession === 'function') {\n updateSession(session.id, session.element, {\n shuffledValues,\n }).catch((e) => {\n // eslint-disable-next-line no-console\n console.error('update session failed', e);\n });\n }\n }\n }\n\n let teacherInstructions = null;\n let rationale = null;\n\n const choicesWillNullRationales = (Object.keys(choices) || []).reduce((acc, currentValue) => {\n acc[currentValue] = (choices[currentValue] || []).map((choice) => ({\n ...choice,\n rationale: null,\n }));\n\n return acc;\n }, {});\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n\n choices = normalizedQuestion.choiceRationaleEnabled ? normalizedQuestion.choices : choicesWillNullRationales;\n } else {\n rationale = null;\n teacherInstructions = null;\n choices = choicesWillNullRationales;\n }\n\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n displayType: normalizedQuestion.displayType,\n markup: normalizedQuestion.markup,\n choices,\n feedback,\n\n responseCorrect: env.mode === 'evaluate' ? getScore(normalizedQuestion, session) === 1 : undefined,\n rationale,\n teacherInstructions,\n language: normalizedQuestion.language,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n resolve(out);\n });\n}\n\nexport const getScore = (config, session) => {\n const { value = {} } = session || {};\n const maxScore = config && config.choices ? Object.keys(config.choices).length : 0;\n const allCorrectResponses = getAllCorrectResponses(config);\n let correctCount = 0;\n\n for (let i = 0; i < maxScore; i++) {\n const result = reduce(\n allCorrectResponses,\n (total, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n\n if (correctChoice && answer && correctChoice === answer) {\n return total;\n }\n\n return total - 1;\n },\n maxScore,\n );\n\n if (result > correctCount) {\n correctCount = result;\n }\n\n if (result === maxScore) {\n break;\n }\n }\n\n const str = (correctCount / maxScore).toFixed(2);\n\n return parseFloat(str);\n};\n\n/**\n *\n * The score is partial by default for checkbox mode, allOrNothing for radio mode.\n * To disable partial scoring for checkbox mode you either set model.partialScoring = false or env.partialScoring =\n * false. the value in `env` will override the value in `model`.\n * @param {Object} model - the main model\n * @param {boolean} model.partialScoring - is partial scoring enabled (if undefined set to to true)\n * @param {*} session\n * @param {Object} env\n * @param {boolean} env.partialScoring - is partial scoring enabled (if undefined default to true) This overrides\n * `model.partialScoring`.\n */\nexport function outcome(model, session, env = {}) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const score = getScore(model, session);\n\n resolve({\n score: partialScoringEnabled ? score : Math.floor(score),\n empty: false,\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { choices } = question;\n const value = {};\n\n if (choices) {\n Object.keys(choices).forEach((key, i) => {\n const correctChoices = choices[key] && choices[key].filter((c) => c.correct);\n\n value[i] = correctChoices && correctChoices[0].value;\n });\n }\n\n resolve({\n id: '1',\n value,\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { markup, choices } = model;\n const { maxResponseAreas, maxResponseAreaChoices } = config;\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n const nbOfResponseAreas = ((markup || '').match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreasError = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreasError = 'There should be defined at least 1 response area.';\n }\n\n (Object.keys(choices) || []).forEach((choiceKey) => {\n if (choices[choiceKey] && choices[choiceKey].length > maxResponseAreaChoices) {\n errors.responseAreaChoicesError = `No more than ${maxResponseAreaChoices} choices per response area should be defined.`;\n }\n });\n\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/package.json
CHANGED
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"repository": "pie-framework/pie-elements",
|
|
7
|
-
"version": "
|
|
7
|
+
"version": "8.0.0-hotfix.0",
|
|
8
8
|
"description": "",
|
|
9
9
|
"scripts": {
|
|
10
10
|
"postpublish": "../../scripts/postpublish"
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
},
|
|
25
25
|
"author": "",
|
|
26
26
|
"license": "ISC",
|
|
27
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "0e14ff981bcdc8a89a0e58484026496701bfdbc3",
|
|
28
28
|
"main": "lib/index.js",
|
|
29
29
|
"module": "src/index.js"
|
|
30
30
|
}
|
package/LICENSE.md
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
Copyright 2019 CoreSpring Inc
|
|
2
|
-
|
|
3
|
-
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
|
4
|
-
|
|
5
|
-
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|