@pie-element/drag-in-the-blank 6.11.3-next.6 → 6.11.3
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 +12 -0
- package/controller/CHANGELOG.md +12 -0
- package/controller/lib/index.js +2 -2
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
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
|
+
## [6.11.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@6.11.2...@pie-element/drag-in-the-blank@6.11.3) (2025-07-03)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **drag-in-the-blank:** add missing spaces PD-5025 ([1817673](https://github.com/pie-framework/pie-elements/commit/1817673c7761c216286aeb7dc6c0644d942158ff))
|
|
12
|
+
* **image-cloze-association:** get rid of correctResponse from model in view mode and instructor PD-5025 ([74555ee](https://github.com/pie-framework/pie-elements/commit/74555ee4b4d1f248cba191c1949c28f6f183d63d))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
6
18
|
## [6.11.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@6.11.1...@pie-element/drag-in-the-blank@6.11.2) (2025-06-27)
|
|
7
19
|
|
|
8
20
|
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
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
|
+
## [6.2.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-controller@6.2.2...@pie-element/drag-in-the-blank-controller@6.2.3) (2025-07-03)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **drag-in-the-blank:** add missing spaces PD-5025 ([1817673](https://github.com/pie-framework/pie-elements/commit/1817673c7761c216286aeb7dc6c0644d942158ff))
|
|
12
|
+
* **image-cloze-association:** get rid of correctResponse from model in view mode and instructor PD-5025 ([74555ee](https://github.com/pie-framework/pie-elements/commit/74555ee4b4d1f248cba191c1949c28f6f183d63d))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
6
18
|
## [6.2.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-controller@6.2.1...@pie-element/drag-in-the-blank-controller@6.2.2) (2025-06-27)
|
|
7
19
|
|
|
8
20
|
|
package/controller/lib/index.js
CHANGED
|
@@ -109,14 +109,14 @@ function model(question, session, env, updateSession) {
|
|
|
109
109
|
choices = _context.sent;
|
|
110
110
|
|
|
111
111
|
case 9:
|
|
112
|
-
shouldIncludeCorrectResponse = env.mode === 'evaluate'
|
|
112
|
+
shouldIncludeCorrectResponse = env.mode === 'evaluate';
|
|
113
113
|
out = _objectSpread(_objectSpread({}, normalizedQuestion), {}, {
|
|
114
114
|
prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,
|
|
115
115
|
choices: choices,
|
|
116
116
|
feedback: feedback,
|
|
117
117
|
mode: env.mode,
|
|
118
118
|
disabled: env.mode !== 'gather',
|
|
119
|
-
responseCorrect:
|
|
119
|
+
responseCorrect: shouldIncludeCorrectResponse ? getScore(normalizedQuestion, session) === 1 : undefined,
|
|
120
120
|
correctResponse: shouldIncludeCorrectResponse ? normalizedQuestion.correctResponse : undefined
|
|
121
121
|
});
|
|
122
122
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["normalize","question","defaults","model","session","env","updateSession","Promise","resolve","normalizedQuestion","feedback","mode","responses","allCorrectResponses","possibleResponses","numberOfPossibleResponses","correctResponses","undefined","value","i","result","Object","keys","reduce","obj","key","choices","answer","filter","choice","lockChoiceOrder","shouldIncludeCorrectResponse","role","out","prompt","promptEnabled","disabled","responseCorrect","getScore","correctResponse","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","config","maxScore","length","correctCount","total","str","toFixed","parseFloat","outcome","partialScoringEnabled","partialScoring","enabled","score","empty","createCorrectResponseSession","id","getInnerText","html","replaceAll","getContent","replace","validate","markup","minChoices","maxChoices","maxResponseAreas","errors","forEach","field","required","nbOfResponseAreas","match","nbOfChoices","emptyResponseAreas","values","response","correctResponseError","responseAreasError","choicesError"],"mappings":"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","sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { getAllCorrectResponses, choiceIsEmpty } from './utils';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\nimport defaults from './defaults';\n\nexport const normalize = (question) => ({\n ...defaults,\n ...question,\n});\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 let feedback = {};\n\n if (env.mode === 'evaluate') {\n const responses = getAllCorrectResponses(normalizedQuestion) || {};\n const allCorrectResponses = responses.possibleResponses;\n const numberOfPossibleResponses = responses.numberOfPossibleResponses || 0;\n let correctResponses = undefined;\n const { value } = session || {};\n\n for (let i = 0; i < numberOfPossibleResponses; i++) {\n const result = Object.keys(allCorrectResponses).reduce(\n (obj, key) => {\n const choices = allCorrectResponses[key];\n const answer = (value && value[key]) || '';\n\n obj.feedback[key] = choices[i] === answer;\n\n if (obj.feedback[key]) {\n obj.correctResponses += 1;\n }\n\n return obj;\n },\n { correctResponses: 0, feedback: {} },\n );\n\n if (correctResponses === undefined || result.correctResponses > correctResponses) {\n correctResponses = result.correctResponses;\n feedback = result.feedback;\n }\n }\n }\n\n let choices = normalizedQuestion.choices && normalizedQuestion.choices.filter((choice) => !choiceIsEmpty(choice));\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'id');\n }\n\n const shouldIncludeCorrectResponse = env.mode === 'evaluate' || (env.role === 'instructor' && env.mode === 'view');\n\n const out = {\n ...normalizedQuestion,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n choices,\n feedback,\n mode: env.mode,\n disabled: env.mode !== 'gather',\n responseCorrect: env.mode === 'evaluate' ? getScore(normalizedQuestion, session) === 1 : undefined,\n correctResponse: shouldIncludeCorrectResponse ? normalizedQuestion.correctResponse : undefined,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n}\n\nexport const getScore = (config, session) => {\n const responses = getAllCorrectResponses(config);\n const allCorrectResponses = responses.possibleResponses;\n const maxScore = Object.keys(config.correctResponse).length;\n const numberOfPossibleResponses = responses.numberOfPossibleResponses || 0;\n let correctCount = 0;\n const { value } = session || {};\n\n for (let i = 0; i < numberOfPossibleResponses; i++) {\n const result = Object.keys(allCorrectResponses).reduce(\n (total, key) => {\n const choices = allCorrectResponses[key];\n const answer = (value && value[key]) || '';\n\n if (choices[i] === 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 = maxScore ? (correctCount / maxScore).toFixed(2) : 0;\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 const partialScoringEnabled = partialScoring.enabled(model, env);\n const score = getScore(model, session);\n\n resolve({\n score: partialScoringEnabled ? score : score === 1 ? 1 : 0,\n empty: !session || isEmpty(session),\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n resolve({\n value: question.correctResponse,\n id: '1',\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 { choices, correctResponse, markup } = model;\n const { minChoices = 2, maxChoices, maxResponseAreas } = 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 const nbOfChoices = (choices || []).length;\n const emptyResponseAreas = Object.values(correctResponse)?.filter((response) => !response);\n\n if (emptyResponseAreas.length) {\n errors.correctResponseError = 'There should be a choice defined for each response area.';\n }\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 at least 1 response area defined.';\n }\n\n if (nbOfChoices < minChoices) {\n errors.choicesError = `There should be at least ${minChoices} tokens defined.`;\n } else if (nbOfChoices > maxChoices) {\n errors.choicesError = `No more than ${maxChoices} tokens should be defined.`;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["normalize","question","defaults","model","session","env","updateSession","Promise","resolve","normalizedQuestion","feedback","mode","responses","allCorrectResponses","possibleResponses","numberOfPossibleResponses","correctResponses","undefined","value","i","result","Object","keys","reduce","obj","key","choices","answer","filter","choice","lockChoiceOrder","shouldIncludeCorrectResponse","out","prompt","promptEnabled","disabled","responseCorrect","getScore","correctResponse","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","config","maxScore","length","correctCount","total","str","toFixed","parseFloat","outcome","partialScoringEnabled","partialScoring","enabled","score","empty","createCorrectResponseSession","id","getInnerText","html","replaceAll","getContent","replace","validate","markup","minChoices","maxChoices","maxResponseAreas","errors","forEach","field","required","nbOfResponseAreas","match","nbOfChoices","emptyResponseAreas","values","response","correctResponseError","responseAreasError","choicesError"],"mappings":"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","sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { getAllCorrectResponses, choiceIsEmpty } from './utils';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\nimport defaults from './defaults';\n\nexport const normalize = (question) => ({\n ...defaults,\n ...question,\n});\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 let feedback = {};\n\n if (env.mode === 'evaluate') {\n const responses = getAllCorrectResponses(normalizedQuestion) || {};\n const allCorrectResponses = responses.possibleResponses;\n const numberOfPossibleResponses = responses.numberOfPossibleResponses || 0;\n let correctResponses = undefined;\n const { value } = session || {};\n\n for (let i = 0; i < numberOfPossibleResponses; i++) {\n const result = Object.keys(allCorrectResponses).reduce(\n (obj, key) => {\n const choices = allCorrectResponses[key];\n const answer = (value && value[key]) || '';\n\n obj.feedback[key] = choices[i] === answer;\n\n if (obj.feedback[key]) {\n obj.correctResponses += 1;\n }\n\n return obj;\n },\n { correctResponses: 0, feedback: {} },\n );\n\n if (correctResponses === undefined || result.correctResponses > correctResponses) {\n correctResponses = result.correctResponses;\n feedback = result.feedback;\n }\n }\n }\n\n let choices = normalizedQuestion.choices && normalizedQuestion.choices.filter((choice) => !choiceIsEmpty(choice));\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'id');\n }\n\n const shouldIncludeCorrectResponse = env.mode === 'evaluate';\n\n const out = {\n ...normalizedQuestion,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n choices,\n feedback,\n mode: env.mode,\n disabled: env.mode !== 'gather',\n responseCorrect: shouldIncludeCorrectResponse ? getScore(normalizedQuestion, session) === 1 : undefined,\n correctResponse: shouldIncludeCorrectResponse ? normalizedQuestion.correctResponse : undefined,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n}\n\nexport const getScore = (config, session) => {\n const responses = getAllCorrectResponses(config);\n const allCorrectResponses = responses.possibleResponses;\n const maxScore = Object.keys(config.correctResponse).length;\n const numberOfPossibleResponses = responses.numberOfPossibleResponses || 0;\n let correctCount = 0;\n const { value } = session || {};\n\n for (let i = 0; i < numberOfPossibleResponses; i++) {\n const result = Object.keys(allCorrectResponses).reduce(\n (total, key) => {\n const choices = allCorrectResponses[key];\n const answer = (value && value[key]) || '';\n\n if (choices[i] === 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 = maxScore ? (correctCount / maxScore).toFixed(2) : 0;\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 const partialScoringEnabled = partialScoring.enabled(model, env);\n const score = getScore(model, session);\n\n resolve({\n score: partialScoringEnabled ? score : score === 1 ? 1 : 0,\n empty: !session || isEmpty(session),\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n resolve({\n value: question.correctResponse,\n id: '1',\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 { choices, correctResponse, markup } = model;\n const { minChoices = 2, maxChoices, maxResponseAreas } = 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 const nbOfChoices = (choices || []).length;\n const emptyResponseAreas = Object.values(correctResponse)?.filter((response) => !response);\n\n if (emptyResponseAreas.length) {\n errors.correctResponseError = 'There should be a choice defined for each response area.';\n }\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 at least 1 response area defined.';\n }\n\n if (nbOfChoices < minChoices) {\n errors.choicesError = `There should be at least ${minChoices} tokens defined.`;\n } else if (nbOfChoices > maxChoices) {\n errors.choicesError = `No more than ${maxChoices} tokens should be defined.`;\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": "6.11.3
|
|
7
|
+
"version": "6.11.3",
|
|
8
8
|
"description": "",
|
|
9
9
|
"scripts": {
|
|
10
10
|
"postpublish": "../../scripts/postpublish"
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"author": "",
|
|
23
23
|
"license": "ISC",
|
|
24
|
-
"gitHead": "
|
|
24
|
+
"gitHead": "d90c0a189c36437eef653269378872482984a1fa",
|
|
25
25
|
"main": "lib/index.js",
|
|
26
26
|
"module": "src/index.js"
|
|
27
27
|
}
|