@pie-element/match 5.4.1-next.5 → 5.5.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 +17 -0
- package/configure/CHANGELOG.md +11 -0
- package/configure/package.json +5 -5
- package/controller/CHANGELOG.md +11 -0
- package/controller/lib/index.js +1 -3
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/docs/config-schema.json +1 -0
- package/docs/config-schema.json.md +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,23 @@
|
|
|
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
|
+
# [5.5.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match@5.4.0...@pie-element/match@5.5.0) (2023-01-17)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **match:** remove domparser from controller PD-2496 ([290d63b](https://github.com/pie-framework/pie-elements/commit/290d63b81a5eb1be9c512b8a443dc9663a7356ff))
|
|
12
|
+
* **multi-trait-rubric:** fix validation bugs, update documentation. Fixed match docs typo PD-2427 ([26d598e](https://github.com/pie-framework/pie-elements/commit/26d598e7a32d50ed176d566605bb6b4ebdc07a2c))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Features
|
|
16
|
+
|
|
17
|
+
* update pie-libs ([6423903](https://github.com/pie-framework/pie-elements/commit/6423903898b041f56db2111de2e4aac4ee9f1fd3))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
6
23
|
# [5.4.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match@5.3.1...@pie-element/match@5.4.0) (2023-01-05)
|
|
7
24
|
|
|
8
25
|
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
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
|
+
# [5.5.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-configure@5.4.0...@pie-element/match-configure@5.5.0) (2023-01-17)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* update pie-libs ([6423903](https://github.com/pie-framework/pie-elements/commit/6423903898b041f56db2111de2e4aac4ee9f1fd3))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [5.4.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-configure@5.3.1...@pie-element/match-configure@5.4.0) (2023-01-05)
|
|
7
18
|
|
|
8
19
|
|
package/configure/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/match-configure",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.5.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
@@ -10,10 +10,10 @@
|
|
|
10
10
|
"@material-ui/core": "^3.9.2",
|
|
11
11
|
"@material-ui/icons": "^3.0.1",
|
|
12
12
|
"@pie-framework/pie-configure-events": "^1.3.0",
|
|
13
|
-
"@pie-lib/config-ui": "^11.
|
|
14
|
-
"@pie-lib/drag": "^2.0
|
|
15
|
-
"@pie-lib/editable-html": "^9.
|
|
16
|
-
"@pie-lib/scoring-config": "^3.
|
|
13
|
+
"@pie-lib/config-ui": "^11.3.0",
|
|
14
|
+
"@pie-lib/drag": "^2.1.0",
|
|
15
|
+
"@pie-lib/editable-html": "^9.5.0",
|
|
16
|
+
"@pie-lib/scoring-config": "^3.6.0",
|
|
17
17
|
"classnames": "^2.2.5",
|
|
18
18
|
"debug": "^3.1.0",
|
|
19
19
|
"prop-types": "^15.6.2",
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
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
|
+
## [4.6.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@4.6.0...@pie-element/match-controller@4.6.1) (2023-01-17)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **match:** remove domparser from controller PD-2496 ([290d63b](https://github.com/pie-framework/pie-elements/commit/290d63b81a5eb1be9c512b8a443dc9663a7356ff))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [4.6.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/match-controller@4.5.1...@pie-element/match-controller@4.6.0) (2023-01-05)
|
|
7
18
|
|
|
8
19
|
|
package/controller/lib/index.js
CHANGED
|
@@ -328,11 +328,9 @@ var createCorrectResponseSession = function createCorrectResponseSession(questio
|
|
|
328
328
|
};
|
|
329
329
|
|
|
330
330
|
exports.createCorrectResponseSession = createCorrectResponseSession;
|
|
331
|
-
var dp = new DOMParser();
|
|
332
331
|
|
|
333
332
|
var markupToText = function markupToText(s) {
|
|
334
|
-
|
|
335
|
-
return root.body.textContent;
|
|
333
|
+
return s.replace(/(<([^>]+)>)/ig, '');
|
|
336
334
|
};
|
|
337
335
|
|
|
338
336
|
var validate = function validate() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["log","getResponseCorrectness","model","answers","env","isPartialScoring","partialScoring","enabled","rows","checkboxMode","choiceMode","Object","keys","length","totalCorrectAnswers","getTotalCorrectAnswers","getTotalCorrect","correctAnswers","incorrectAnswers","checkboxes","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","forEach","row","answer","id","values","v","i","matchingTable","layout","noOfTotalCorrectAnswers","value","getPartialScore","totalCorrect","total","extraAnswers","score","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","undefined","completed","empty","out","createDefaultModel","defaults","normalize","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","updateSession","normalizedQuestion","correctResponse","correctInfo","lockChoiceOrder","fb","feedback","then","allowFeedback","prompt","config","shuffled","disabled","view","role","teacherInstructions","rationale","assign","createCorrectResponseSession","r","dp","DOMParser","markupToText","s","root","parseFromString","body","textContent","validate","headers","minQuestions","maxQuestions","maxLengthQuestionsHeading","maxAnswers","maxLengthAnswers","maxLengthFirstColumnHeading","rowsErrors","columnsErrors","errors","noOfRowsError","index","title","hasCorrectResponse","identicalAnswer","slice","some","columnsLengthError","heading","h","correctResponseError"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env = {}) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const rows = model.rows;\n const checkboxMode = model.choiceMode === 'checkbox';\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = checkboxMode ? getTotalCorrectAnswers(model) : getTotalCorrect(model);\n let correctAnswers;\n let incorrectAnswers = 0;\n\n if (checkboxMode) {\n const checkboxes = getCheckboxes(rows, answers);\n\n correctAnswers = checkboxes.correctAnswers;\n incorrectAnswers = checkboxes.incorrectAnswers;\n } else {\n correctAnswers = getCorrectRadios(rows, answers);\n }\n\n if (totalCorrectAnswers === correctAnswers && !incorrectAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers = {}) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCheckboxes = (rows, answers) => {\n let correctAnswers = 0;\n let incorrectAnswers = 0;\n\n rows.forEach((row) => {\n const answer = answers[row.id];\n\n if (answer) {\n row.values.forEach((v, i) => {\n if (answer[i] && answer[i] === v) {\n correctAnswers += 1;\n } else if (answer[i] && answer[i] !== v) {\n incorrectAnswers += 1;\n }\n });\n }\n });\n\n return { correctAnswers, incorrectAnswers };\n};\n\nconst getCorrectRadios = (rows, answers) => {\n let correctAnswers = 0;\n\n rows.forEach((row) => {\n if (isEqual(row.values, answers[row.id])) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = (question) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n const matchingTable = checkboxMode ? question.layout - 1 : 1;\n return (question.rows.length || 0) * matchingTable;\n};\n\nconst getTotalCorrectAnswers = (question) => {\n let noOfTotalCorrectAnswers = 0;\n\n question.rows.forEach((row) => {\n row.values.forEach((value) => {\n if (value) {\n noOfTotalCorrectAnswers += 1;\n }\n });\n });\n\n return noOfTotalCorrectAnswers;\n};\n\nconst getPartialScore = (question, answers) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n\n if (checkboxMode) {\n const { correctAnswers, incorrectAnswers } = getCheckboxes(question.rows, answers);\n const totalCorrect = getTotalCorrectAnswers(question);\n\n const total = totalCorrect === 0 ? 1 : totalCorrect;\n\n if (correctAnswers + incorrectAnswers > totalCorrect) {\n const extraAnswers = correctAnswers + incorrectAnswers - totalCorrect;\n const score = parseFloat(((correctAnswers - extraAnswers) / total).toFixed(2));\n\n return score < 0 ? 0 : score;\n } else {\n return parseFloat((correctAnswers / total).toFixed(2));\n }\n } else {\n const correctAnswers = getCorrectRadios(question.rows, answers);\n const totalCorrect = getTotalCorrect(question) === 0 ? 1 : getTotalCorrect(question);\n\n return parseFloat((correctAnswers / totalCorrect).toFixed(2));\n }\n};\n\nconst getOutComeScore = (question, env, answers = {}) => {\n const correctness = getCorrectness(question, env, answers);\n const isPartialScoring = partialScoring.enabled(question, env);\n\n return correctness === 'correct'\n ? 1\n : correctness === 'partial' && isPartialScoring\n ? getPartialScore(question, answers)\n : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const out = {\n score: getOutComeScore(question, env, session.answers),\n };\n\n resolve(out);\n }\n });\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n}\n\nexport const normalize = (question) => ({\n feedbackEnabled: true,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\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 = cloneDeep(normalize(question));\n let correctness, score;\n\n if ((!session || isEmpty(session)) && env.mode === 'evaluate') {\n correctness = 'unanswered';\n score = '0%';\n } else {\n correctness = getCorrectness(normalizedQuestion, env, session && session.answers);\n score = `${getOutComeScore(normalizedQuestion, env, session && session.answers) * 100}%`;\n }\n\n const correctResponse = {};\n const correctInfo = {\n score,\n correctness,\n };\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n normalizedQuestion.rows = await getShuffledChoices(normalizedQuestion.rows, session, updateSession, 'id');\n }\n\n normalizedQuestion.rows.forEach((row) => {\n correctResponse[row.id] = row.values;\n\n if (env.mode !== 'evaluate') {\n delete row.values;\n }\n });\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctInfo.correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const out = {\n allowFeedback: normalizedQuestion.feedbackEnabled,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n config: {\n ...normalizedQuestion,\n shuffled: !normalizedQuestion.lockChoiceOrder,\n },\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n Object.assign(out, {\n correctResponse,\n correctness: correctInfo,\n });\n }\n\n log('out: ', out);\n resolve(out);\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { rows } = question;\n const answers = {};\n\n rows.forEach((r) => {\n answers[r.id] = r.values;\n });\n\n resolve({\n answers,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\nconst dp = new DOMParser();\nconst markupToText = (s) => {\n const root = dp.parseFromString(s, 'text/html');\n return root.body.textContent;\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { rows, choiceMode, headers } = model;\n const {\n minQuestions,\n maxQuestions,\n maxLengthQuestionsHeading,\n maxAnswers,\n maxLengthAnswers,\n maxLengthFirstColumnHeading\n } = config;\n const rowsErrors = {};\n const columnsErrors = {};\n const errors = {};\n\n if (rows.length < minQuestions) {\n errors.noOfRowsError = `There should be at least ${minQuestions} question rows.`;\n } else if (rows.length > maxQuestions) {\n errors.noOfRowsError = `No more than ${maxQuestions} question rows should be defined.`;\n }\n\n (rows || []).forEach((row, index) => {\n const { id, values = [], title } = row;\n let hasCorrectResponse = false;\n\n rowsErrors[id] = '';\n\n if (maxLengthQuestionsHeading && markupToText(title).length > maxLengthQuestionsHeading) {\n rowsErrors[id] += `Questions rows content length should not be more than ${maxLengthQuestionsHeading} characters. `;\n } else if (title === '' || title === '<div></div>') {\n rowsErrors[id] += 'Content should not be empty. ';\n } else {\n const identicalAnswer = rows.slice(index + 1).some((r) => {\n return r.title === title;\n });\n\n if (identicalAnswer) {\n rowsErrors[id] = 'Content should be unique. ';\n }\n }\n\n values.forEach((value) => {\n if (value) {\n hasCorrectResponse = true;\n }\n });\n\n if (!hasCorrectResponse) {\n rowsErrors[id] += 'No correct response defined.';\n }\n });\n\n if (maxAnswers && headers.length - 1 > maxAnswers) {\n errors.columnsLengthError = `There should be maximum ${maxAnswers} answers.`;\n }\n\n if (maxLengthFirstColumnHeading && headers[0].length > maxLengthFirstColumnHeading) {\n columnsErrors[0] = `The first column heading should have the maximum length of ${maxLengthFirstColumnHeading} characters.`;\n }\n\n (headers || []).slice(1).forEach((heading, index) => {\n if (heading === '' || heading === '<div></div>') {\n columnsErrors[index + 1] = 'Content should not be empty.';\n } else if (maxLengthAnswers && heading.length > maxLengthAnswers) {\n columnsErrors[index + 1] = `Content length should be maximum ${maxLengthAnswers} characters.`;\n } else {\n const identicalAnswer = headers.slice(index + 2).some((h) => {\n return h === heading;\n });\n\n if (identicalAnswer) {\n columnsErrors[index + 2] = 'Content should be unique.';\n }\n }\n });\n\n\n if (!isEmpty(rowsErrors)) {\n errors.rowsErrors = rowsErrors;\n errors.correctResponseError =\n choiceMode === 'radio'\n ? 'There should be a correct response defined for every row.'\n : 'There should be at least one correct response defined for every row.';\n }\n\n if (!isEmpty(columnsErrors)) {\n errors.columnsErrors = columnsErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["log","getResponseCorrectness","model","answers","env","isPartialScoring","partialScoring","enabled","rows","checkboxMode","choiceMode","Object","keys","length","totalCorrectAnswers","getTotalCorrectAnswers","getTotalCorrect","correctAnswers","incorrectAnswers","checkboxes","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","forEach","row","answer","id","values","v","i","matchingTable","layout","noOfTotalCorrectAnswers","value","getPartialScore","totalCorrect","total","extraAnswers","score","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","undefined","completed","empty","out","createDefaultModel","defaults","normalize","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","updateSession","normalizedQuestion","correctResponse","correctInfo","lockChoiceOrder","fb","feedback","then","allowFeedback","prompt","config","shuffled","disabled","view","role","teacherInstructions","rationale","assign","createCorrectResponseSession","r","markupToText","s","replace","validate","headers","minQuestions","maxQuestions","maxLengthQuestionsHeading","maxAnswers","maxLengthAnswers","maxLengthFirstColumnHeading","rowsErrors","columnsErrors","errors","noOfRowsError","index","title","hasCorrectResponse","identicalAnswer","slice","some","columnsLengthError","heading","h","correctResponseError"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env = {}) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const rows = model.rows;\n const checkboxMode = model.choiceMode === 'checkbox';\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = checkboxMode ? getTotalCorrectAnswers(model) : getTotalCorrect(model);\n let correctAnswers;\n let incorrectAnswers = 0;\n\n if (checkboxMode) {\n const checkboxes = getCheckboxes(rows, answers);\n\n correctAnswers = checkboxes.correctAnswers;\n incorrectAnswers = checkboxes.incorrectAnswers;\n } else {\n correctAnswers = getCorrectRadios(rows, answers);\n }\n\n if (totalCorrectAnswers === correctAnswers && !incorrectAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers = {}) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCheckboxes = (rows, answers) => {\n let correctAnswers = 0;\n let incorrectAnswers = 0;\n\n rows.forEach((row) => {\n const answer = answers[row.id];\n\n if (answer) {\n row.values.forEach((v, i) => {\n if (answer[i] && answer[i] === v) {\n correctAnswers += 1;\n } else if (answer[i] && answer[i] !== v) {\n incorrectAnswers += 1;\n }\n });\n }\n });\n\n return { correctAnswers, incorrectAnswers };\n};\n\nconst getCorrectRadios = (rows, answers) => {\n let correctAnswers = 0;\n\n rows.forEach((row) => {\n if (isEqual(row.values, answers[row.id])) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = (question) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n const matchingTable = checkboxMode ? question.layout - 1 : 1;\n return (question.rows.length || 0) * matchingTable;\n};\n\nconst getTotalCorrectAnswers = (question) => {\n let noOfTotalCorrectAnswers = 0;\n\n question.rows.forEach((row) => {\n row.values.forEach((value) => {\n if (value) {\n noOfTotalCorrectAnswers += 1;\n }\n });\n });\n\n return noOfTotalCorrectAnswers;\n};\n\nconst getPartialScore = (question, answers) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n\n if (checkboxMode) {\n const { correctAnswers, incorrectAnswers } = getCheckboxes(question.rows, answers);\n const totalCorrect = getTotalCorrectAnswers(question);\n\n const total = totalCorrect === 0 ? 1 : totalCorrect;\n\n if (correctAnswers + incorrectAnswers > totalCorrect) {\n const extraAnswers = correctAnswers + incorrectAnswers - totalCorrect;\n const score = parseFloat(((correctAnswers - extraAnswers) / total).toFixed(2));\n\n return score < 0 ? 0 : score;\n } else {\n return parseFloat((correctAnswers / total).toFixed(2));\n }\n } else {\n const correctAnswers = getCorrectRadios(question.rows, answers);\n const totalCorrect = getTotalCorrect(question) === 0 ? 1 : getTotalCorrect(question);\n\n return parseFloat((correctAnswers / totalCorrect).toFixed(2));\n }\n};\n\nconst getOutComeScore = (question, env, answers = {}) => {\n const correctness = getCorrectness(question, env, answers);\n const isPartialScoring = partialScoring.enabled(question, env);\n\n return correctness === 'correct'\n ? 1\n : correctness === 'partial' && isPartialScoring\n ? getPartialScore(question, answers)\n : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const out = {\n score: getOutComeScore(question, env, session.answers),\n };\n\n resolve(out);\n }\n });\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n}\n\nexport const normalize = (question) => ({\n feedbackEnabled: true,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\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 = cloneDeep(normalize(question));\n let correctness, score;\n\n if ((!session || isEmpty(session)) && env.mode === 'evaluate') {\n correctness = 'unanswered';\n score = '0%';\n } else {\n correctness = getCorrectness(normalizedQuestion, env, session && session.answers);\n score = `${getOutComeScore(normalizedQuestion, env, session && session.answers) * 100}%`;\n }\n\n const correctResponse = {};\n const correctInfo = {\n score,\n correctness,\n };\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n normalizedQuestion.rows = await getShuffledChoices(normalizedQuestion.rows, session, updateSession, 'id');\n }\n\n normalizedQuestion.rows.forEach((row) => {\n correctResponse[row.id] = row.values;\n\n if (env.mode !== 'evaluate') {\n delete row.values;\n }\n });\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctInfo.correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const out = {\n allowFeedback: normalizedQuestion.feedbackEnabled,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n config: {\n ...normalizedQuestion,\n shuffled: !normalizedQuestion.lockChoiceOrder,\n },\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n Object.assign(out, {\n correctResponse,\n correctness: correctInfo,\n });\n }\n\n log('out: ', out);\n resolve(out);\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { rows } = question;\n const answers = {};\n\n rows.forEach((r) => {\n answers[r.id] = r.values;\n });\n\n resolve({\n answers,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\nconst markupToText = (s) => {\n return s.replace(/(<([^>]+)>)/ig, '');\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { rows, choiceMode, headers } = model;\n const {\n minQuestions,\n maxQuestions,\n maxLengthQuestionsHeading,\n maxAnswers,\n maxLengthAnswers,\n maxLengthFirstColumnHeading\n } = config;\n const rowsErrors = {};\n const columnsErrors = {};\n const errors = {};\n\n if (rows.length < minQuestions) {\n errors.noOfRowsError = `There should be at least ${minQuestions} question rows.`;\n } else if (rows.length > maxQuestions) {\n errors.noOfRowsError = `No more than ${maxQuestions} question rows should be defined.`;\n }\n\n (rows || []).forEach((row, index) => {\n const { id, values = [], title } = row;\n let hasCorrectResponse = false;\n\n rowsErrors[id] = '';\n\n if (maxLengthQuestionsHeading && markupToText(title).length > maxLengthQuestionsHeading) {\n rowsErrors[id] += `Questions rows content length should not be more than ${maxLengthQuestionsHeading} characters. `;\n } else if (title === '' || title === '<div></div>') {\n rowsErrors[id] += 'Content should not be empty. ';\n } else {\n const identicalAnswer = rows.slice(index + 1).some((r) => {\n return r.title === title;\n });\n\n if (identicalAnswer) {\n rowsErrors[id] = 'Content should be unique. ';\n }\n }\n\n values.forEach((value) => {\n if (value) {\n hasCorrectResponse = true;\n }\n });\n\n if (!hasCorrectResponse) {\n rowsErrors[id] += 'No correct response defined.';\n }\n });\n\n if (maxAnswers && headers.length - 1 > maxAnswers) {\n errors.columnsLengthError = `There should be maximum ${maxAnswers} answers.`;\n }\n\n if (maxLengthFirstColumnHeading && headers[0].length > maxLengthFirstColumnHeading) {\n columnsErrors[0] = `The first column heading should have the maximum length of ${maxLengthFirstColumnHeading} characters.`;\n }\n\n (headers || []).slice(1).forEach((heading, index) => {\n if (heading === '' || heading === '<div></div>') {\n columnsErrors[index + 1] = 'Content should not be empty.';\n } else if (maxLengthAnswers && heading.length > maxLengthAnswers) {\n columnsErrors[index + 1] = `Content length should be maximum ${maxLengthAnswers} characters.`;\n } else {\n const identicalAnswer = headers.slice(index + 2).some((h) => {\n return h === heading;\n });\n\n if (identicalAnswer) {\n columnsErrors[index + 2] = 'Content should be unique.';\n }\n }\n });\n\n\n if (!isEmpty(rowsErrors)) {\n errors.rowsErrors = rowsErrors;\n errors.correctResponseError =\n choiceMode === 'radio'\n ? 'There should be a correct response defined for every row.'\n : 'There should be at least one correct response defined for every row.';\n }\n\n if (!isEmpty(columnsErrors)) {\n errors.columnsErrors = columnsErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/package.json
CHANGED
package/docs/config-schema.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": "5.
|
|
7
|
+
"version": "5.5.0",
|
|
8
8
|
"main": "lib/index.js",
|
|
9
9
|
"description": "",
|
|
10
10
|
"scripts": {
|
|
@@ -26,6 +26,6 @@
|
|
|
26
26
|
},
|
|
27
27
|
"author": "",
|
|
28
28
|
"license": "ISC",
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "7fcbba0ed99ce1db1e66598ea6865b4a2425d0a4",
|
|
30
30
|
"module": "src/index.js"
|
|
31
31
|
}
|