@pie-element/select-text 7.12.3-next.9 → 7.13.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 +21 -0
- package/configure/CHANGELOG.md +13 -0
- package/configure/package.json +5 -5
- package/controller/CHANGELOG.md +18 -0
- package/controller/lib/index.js +15 -4
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +2 -2
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,27 @@
|
|
|
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.13.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text@7.12.2...@pie-element/select-text@7.13.0) (2023-08-15)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* update pie-libs PD-3049, PD-2916, PD-2059 ([0e800b5](https://github.com/pie-framework/pie-elements/commit/0e800b54b852304d222a292400362e0870f0cc9a))
|
|
12
|
+
* updated pie-lib to fix PD-2802 ([eab79f7](https://github.com/pie-framework/pie-elements/commit/eab79f70ad4488207a5b9b401679eb096feba247))
|
|
13
|
+
* updated pie-lib to fix PD-2802, PD-3050, PD-3051 ([34b4dd7](https://github.com/pie-framework/pie-elements/commit/34b4dd7ba18f4c18589975921cc9d127926f8294))
|
|
14
|
+
* updated pie-libs Pd-1163 ([300c1db](https://github.com/pie-framework/pie-elements/commit/300c1db1658ce85ca58f3cc2981b604aefbf9f01))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* **select-text:** design updates in Evaluate ([b7ed769](https://github.com/pie-framework/pie-elements/commit/b7ed769ac7dcc494204094b47c76d5ad46eec35f))
|
|
20
|
+
* **select-text:** PD-1163 - add santity check for tokens in missing answers method ([eb60f30](https://github.com/pie-framework/pie-elements/commit/eb60f3078844ef2347bf193228f164abe9e85ec8))
|
|
21
|
+
* **select-text:** PD-1163 select comments when necesarry ([d99fb2f](https://github.com/pie-framework/pie-elements/commit/d99fb2f9cffec2923166128009d0f6452a4d7b43))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
6
27
|
## [7.12.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text@7.12.1...@pie-element/select-text@7.12.2) (2023-07-24)
|
|
7
28
|
|
|
8
29
|
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,19 @@
|
|
|
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.9.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-configure@6.9.2...@pie-element/select-text-configure@6.9.3) (2023-08-15)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* update pie-libs PD-3049, PD-2916, PD-2059 ([0e800b5](https://github.com/pie-framework/pie-elements/commit/0e800b54b852304d222a292400362e0870f0cc9a))
|
|
12
|
+
* updated pie-lib to fix PD-2802, PD-3050, PD-3051 ([34b4dd7](https://github.com/pie-framework/pie-elements/commit/34b4dd7ba18f4c18589975921cc9d127926f8294))
|
|
13
|
+
* updated pie-libs Pd-1163 ([300c1db](https://github.com/pie-framework/pie-elements/commit/300c1db1658ce85ca58f3cc2981b604aefbf9f01))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
6
19
|
## [6.9.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-configure@6.9.1...@pie-element/select-text-configure@6.9.2) (2023-07-24)
|
|
7
20
|
|
|
8
21
|
|
package/configure/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/select-text-configure",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "6.9.
|
|
4
|
+
"version": "6.9.3",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@material-ui/core": "^3.9.2",
|
|
10
10
|
"@pie-framework/pie-configure-events": "^1.3.0",
|
|
11
|
-
"@pie-lib/config-ui": "^11.
|
|
12
|
-
"@pie-lib/editable-html": "^9.7.
|
|
13
|
-
"@pie-lib/scoring-config": "^3.6.
|
|
14
|
-
"@pie-lib/text-select": "^1.
|
|
11
|
+
"@pie-lib/config-ui": "^11.9.2",
|
|
12
|
+
"@pie-lib/editable-html": "^9.7.6",
|
|
13
|
+
"@pie-lib/scoring-config": "^3.6.43",
|
|
14
|
+
"@pie-lib/text-select": "^1.10.0",
|
|
15
15
|
"debug": "^3.1.0",
|
|
16
16
|
"lodash": "^4.17.15",
|
|
17
17
|
"prop-types": "^15.6.2",
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,24 @@
|
|
|
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.7.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-controller@4.6.10...@pie-element/select-text-controller@4.7.0) (2023-08-15)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* updated pie-libs Pd-1163 ([300c1db](https://github.com/pie-framework/pie-elements/commit/300c1db1658ce85ca58f3cc2981b604aefbf9f01))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* **select-text:** design updates in Evaluate ([b7ed769](https://github.com/pie-framework/pie-elements/commit/b7ed769ac7dcc494204094b47c76d5ad46eec35f))
|
|
17
|
+
* **select-text:** PD-1163 - add santity check for tokens in missing answers method ([eb60f30](https://github.com/pie-framework/pie-elements/commit/eb60f3078844ef2347bf193228f164abe9e85ec8))
|
|
18
|
+
* **select-text:** PD-1163 select comments when necesarry ([d99fb2f](https://github.com/pie-framework/pie-elements/commit/d99fb2f9cffec2923166128009d0f6452a4d7b43))
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
6
24
|
## [4.6.10](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-controller@4.6.9...@pie-element/select-text-controller@4.6.10) (2023-07-24)
|
|
7
25
|
|
|
8
26
|
|
package/controller/lib/index.js
CHANGED
|
@@ -27,13 +27,24 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
|
27
27
|
|
|
28
28
|
var log = (0, _debug["default"])('@pie-element:select-text:controller');
|
|
29
29
|
|
|
30
|
-
var
|
|
30
|
+
var isAnswerSelected = function isAnswerSelected(token, selectedToken) {
|
|
31
|
+
return token && selectedToken && token.correct === true && !(token.start === selectedToken.start && token.end === selectedToken.end || token.start === selectedToken.oldStart && token.end === selectedToken.oldEnd);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
var buildTokens = function buildTokens(tokens, selectedTokens, evaluateMode) {
|
|
31
35
|
tokens = tokens || [];
|
|
36
|
+
selectedTokens = selectedTokens || [];
|
|
32
37
|
return tokens.map(function (t) {
|
|
38
|
+
// map the correct answer that are missing from session
|
|
39
|
+
var isNotSelected = selectedTokens.findIndex(function (selectedToken) {
|
|
40
|
+
return isAnswerSelected(t, selectedToken);
|
|
41
|
+
}) === -1;
|
|
33
42
|
return Object.assign({}, t, evaluateMode ? {
|
|
34
|
-
correct: !!t.correct
|
|
43
|
+
correct: !!t.correct,
|
|
44
|
+
isMissing: !isNotSelected
|
|
35
45
|
} : {
|
|
36
|
-
correct: undefined
|
|
46
|
+
correct: undefined,
|
|
47
|
+
isMissing: undefined
|
|
37
48
|
});
|
|
38
49
|
});
|
|
39
50
|
};
|
|
@@ -166,7 +177,7 @@ var model = function model(question, session, env) {
|
|
|
166
177
|
return new Promise(function (resolve) {
|
|
167
178
|
log('[model]', 'normalizedQuestion: ', normalizedQuestion);
|
|
168
179
|
log('[model]', 'session: ', session);
|
|
169
|
-
var tokens = buildTokens(normalizedQuestion.tokens, env.mode === 'evaluate');
|
|
180
|
+
var tokens = buildTokens(normalizedQuestion.tokens, session.selectedTokens, env.mode === 'evaluate');
|
|
170
181
|
log('tokens:', tokens);
|
|
171
182
|
var correctness = env.mode === 'evaluate' ? getCorrectness(normalizedQuestion.tokens, session.selectedTokens) : undefined;
|
|
172
183
|
var fb = env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled ? (0, _feedback.getFeedbackForCorrectness)(correctness, normalizedQuestion.feedback) : Promise.resolve(undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["log","buildTokens","tokens","evaluateMode","map","t","Object","assign","correct","undefined","getCorrectness","selected","filter","length","correctSelected","getCorrectSelected","s","index","findIndex","c","start","end","oldStart","oldEnd","getCorrectCount","getPartialScore","question","session","totalCorrect","correctCount","selectedTokens","correctTokens","extraSelected","incorrectCount","count","positiveCount","parseFloat","toFixed","outcome","env","Promise","resolve","score","empty","normalizeSession","mode","completed","enabled","partialScoring","createDefaultModel","model","defaults","normalize","feedbackEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","selectedToken","normalizedQuestion","correctness","fb","feedback","then","out","highlightChoices","prompt","text","disabled","maxSelections","incorrect","role","rationale","teacherInstructions","createCorrectResponseSession","id","validate","config","minTokens","maxTokens","errors","nbOfTokens","nbOfSelections","reduce","acc","token","tokensError","selectionsError"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { partialScoring } from '@pie-lib/controller-utils';\nimport defaults from './defaults';\n\nconst log = debug('@pie-element:select-text:controller');\n\nconst buildTokens = (tokens, evaluateMode) => {\n tokens = tokens || [];\n\n return tokens.map((t) => Object.assign({}, t, evaluateMode ? { correct: !!t.correct } : { correct: undefined }));\n};\n\nexport const getCorrectness = (tokens, selected) => {\n const correct = tokens.filter((t) => t.correct === true);\n\n if (correct.length === 0) {\n return 'unknown';\n }\n\n const correctSelected = getCorrectSelected(tokens, selected);\n\n if (correctSelected.length === selected.length) {\n if (correctSelected.length === correct.length) {\n return 'correct';\n } else if (correctSelected.length > 0) {\n return 'partially-correct';\n }\n }\n\n if (correctSelected.length > 0) {\n return 'partially-correct';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectSelected = (tokens, selected) => {\n return (selected || []).filter((s) => {\n const index = tokens.findIndex((c) => {\n return (\n c.correct &&\n ((c.start === s.start && c.end === s.end) ||\n // this case is used for the cases when the token's start & end were recalculated\n (c.start === s.oldStart && c.end === s.oldEnd))\n );\n });\n return index !== -1;\n });\n};\n\nconst getCorrectCount = (tokens, selected) => getCorrectSelected(tokens, selected).length;\n\nexport const getPartialScore = (question, session, totalCorrect) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n const correctCount = getCorrectCount(question.tokens, session.selectedTokens);\n const correctTokens = (question.tokens || []).filter((t) => t.correct === true);\n const extraSelected = session.selectedTokens ? session.selectedTokens.length > correctTokens.length : 0;\n const incorrectCount = extraSelected ? session.selectedTokens && session.selectedTokens.length - correctCount : 0;\n const count = correctCount - incorrectCount;\n const positiveCount = count < 0 ? 0 : count;\n\n return totalCorrect.length ? parseFloat((positiveCount / totalCorrect.length).toFixed(2)) : 0;\n};\n\nexport const outcome = (question, session, env) =>\n new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n const enabled = partialScoring.enabled(question, env, true);\n const totalCorrect = question.tokens.filter((t) => t.correct);\n const score = getPartialScore(question, session, totalCorrect);\n resolve({\n score: enabled ? score : score === 1 ? 1 : 0,\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 normalizeSession = (s) => ({\n selectedTokens: [],\n ...s,\n});\n\nexport const normalize = (question) => ({\n feedbackEnabled: false,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\nexport const model = (question, session, env) => {\n session = session || { selectedToken: [] };\n session.selectedTokens = session.selectedTokens || [];\n const normalizedQuestion = normalize(question);\n\n return new Promise((resolve) => {\n log('[model]', 'normalizedQuestion: ', normalizedQuestion);\n log('[model]', 'session: ', session);\n const tokens = buildTokens(normalizedQuestion.tokens, env.mode === 'evaluate');\n log('tokens:', tokens);\n const correctness =\n env.mode === 'evaluate' ? getCorrectness(normalizedQuestion.tokens, session.selectedTokens) : undefined;\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const out = {\n tokens,\n highlightChoices: normalizedQuestion.highlightChoices,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n text: normalizedQuestion.text,\n disabled: env.mode !== 'gather',\n maxSelections: normalizedQuestion.maxSelections,\n correctness,\n feedback,\n incorrect: env.mode === 'evaluate' ? correctness !== 'correct' : 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};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { tokens } = question;\n const selectedTokens = tokens.filter((t) => t.correct);\n\n resolve({\n id: '1',\n selectedTokens,\n });\n } else {\n resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { tokens } = model;\n const { minTokens = 2, maxTokens, maxSelections } = config;\n const errors = {};\n const nbOfTokens = (tokens || []).length;\n\n const nbOfSelections = (tokens || []).reduce((acc, token) => (token.correct ? acc + 1 : acc), 0);\n\n if (nbOfTokens < minTokens) {\n errors.tokensError = `There should be at least ${minTokens} tokens defined.`;\n } else if (nbOfTokens > maxTokens) {\n errors.tokensError = `No more than ${maxTokens} tokens should be defined.`;\n }\n\n if (nbOfSelections < 1) {\n errors.selectionsError = 'There should be at least 1 token selected.';\n } else if (nbOfSelections > maxSelections) {\n errors.selectionsError = `No more than ${maxSelections} tokens should be selected.`;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["log","isAnswerSelected","token","selectedToken","correct","start","end","oldStart","oldEnd","buildTokens","tokens","selectedTokens","evaluateMode","map","t","isNotSelected","findIndex","Object","assign","isMissing","undefined","getCorrectness","selected","filter","length","correctSelected","getCorrectSelected","s","index","c","getCorrectCount","getPartialScore","question","session","totalCorrect","correctCount","correctTokens","extraSelected","incorrectCount","count","positiveCount","parseFloat","toFixed","outcome","env","Promise","resolve","score","empty","normalizeSession","mode","completed","enabled","partialScoring","createDefaultModel","model","defaults","normalize","feedbackEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","normalizedQuestion","correctness","fb","feedback","then","out","highlightChoices","prompt","text","disabled","maxSelections","incorrect","role","rationale","teacherInstructions","createCorrectResponseSession","id","validate","config","minTokens","maxTokens","errors","nbOfTokens","nbOfSelections","reduce","acc","tokensError","selectionsError"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { partialScoring } from '@pie-lib/controller-utils';\nimport defaults from './defaults';\n\nconst log = debug('@pie-element:select-text:controller');\n\nconst isAnswerSelected = (token, selectedToken) => token && selectedToken && token.correct === true &&\n !(\n (token.start === selectedToken.start && token.end === selectedToken.end) ||\n (token.start === selectedToken.oldStart && token.end === selectedToken.oldEnd)\n );\n\nconst buildTokens = (tokens, selectedTokens, evaluateMode) => {\n tokens = tokens || [];\n selectedTokens = selectedTokens || [];\n\n return tokens.map((t) => {\n // map the correct answer that are missing from session\n const isNotSelected = selectedTokens.findIndex((selectedToken) => isAnswerSelected(t, selectedToken)) === -1;\n return Object.assign(\n {},\n t,\n evaluateMode ? { correct: !!t.correct, isMissing: !isNotSelected } : { correct: undefined, isMissing: undefined },\n );\n });\n};\n\nexport const getCorrectness = (tokens, selected) => {\n const correct = tokens.filter((t) => t.correct === true);\n\n if (correct.length === 0) {\n return 'unknown';\n }\n\n const correctSelected = getCorrectSelected(tokens, selected);\n\n if (correctSelected.length === selected.length) {\n if (correctSelected.length === correct.length) {\n return 'correct';\n } else if (correctSelected.length > 0) {\n return 'partially-correct';\n }\n }\n\n if (correctSelected.length > 0) {\n return 'partially-correct';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectSelected = (tokens, selected) => {\n return (selected || []).filter((s) => {\n const index = tokens.findIndex((c) => {\n return (\n c.correct &&\n ((c.start === s.start && c.end === s.end) ||\n // this case is used for the cases when the token's start & end were recalculated\n (c.start === s.oldStart && c.end === s.oldEnd))\n );\n });\n return index !== -1;\n });\n};\n\nconst getCorrectCount = (tokens, selected) => getCorrectSelected(tokens, selected).length;\n\nexport const getPartialScore = (question, session, totalCorrect) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n const correctCount = getCorrectCount(question.tokens, session.selectedTokens);\n const correctTokens = (question.tokens || []).filter((t) => t.correct === true);\n const extraSelected = session.selectedTokens ? session.selectedTokens.length > correctTokens.length : 0;\n const incorrectCount = extraSelected ? session.selectedTokens && session.selectedTokens.length - correctCount : 0;\n const count = correctCount - incorrectCount;\n const positiveCount = count < 0 ? 0 : count;\n\n return totalCorrect.length ? parseFloat((positiveCount / totalCorrect.length).toFixed(2)) : 0;\n};\n\nexport const outcome = (question, session, env) =>\n new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n const enabled = partialScoring.enabled(question, env, true);\n const totalCorrect = question.tokens.filter((t) => t.correct);\n const score = getPartialScore(question, session, totalCorrect);\n resolve({\n score: enabled ? score : score === 1 ? 1 : 0,\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 normalizeSession = (s) => ({\n selectedTokens: [],\n ...s,\n});\n\nexport const normalize = (question) => ({\n feedbackEnabled: false,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\nexport const model = (question, session, env) => {\n session = session || { selectedToken: [] };\n session.selectedTokens = session.selectedTokens || [];\n const normalizedQuestion = normalize(question);\n\n return new Promise((resolve) => {\n log('[model]', 'normalizedQuestion: ', normalizedQuestion);\n log('[model]', 'session: ', session);\n const tokens = buildTokens(normalizedQuestion.tokens, session.selectedTokens, env.mode === 'evaluate');\n log('tokens:', tokens);\n const correctness =\n env.mode === 'evaluate' ? getCorrectness(normalizedQuestion.tokens, session.selectedTokens) : undefined;\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const out = {\n tokens,\n highlightChoices: normalizedQuestion.highlightChoices,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n text: normalizedQuestion.text,\n disabled: env.mode !== 'gather',\n maxSelections: normalizedQuestion.maxSelections,\n correctness,\n feedback,\n incorrect: env.mode === 'evaluate' ? correctness !== 'correct' : 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};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { tokens } = question;\n const selectedTokens = tokens.filter((t) => t.correct);\n\n resolve({\n id: '1',\n selectedTokens,\n });\n } else {\n resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { tokens } = model;\n const { minTokens = 2, maxTokens, maxSelections } = config;\n const errors = {};\n const nbOfTokens = (tokens || []).length;\n\n const nbOfSelections = (tokens || []).reduce((acc, token) => (token.correct ? acc + 1 : acc), 0);\n\n if (nbOfTokens < minTokens) {\n errors.tokensError = `There should be at least ${minTokens} tokens defined.`;\n } else if (nbOfTokens > maxTokens) {\n errors.tokensError = `No more than ${maxTokens} tokens should be defined.`;\n }\n\n if (nbOfSelections < 1) {\n errors.selectionsError = 'There should be at least 1 token selected.';\n } else if (nbOfSelections > maxSelections) {\n errors.selectionsError = `No more than ${maxSelections} tokens should be selected.`;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/select-text-controller",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.7.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@pie-lib/controller-utils": "^0.2.44",
|
|
10
10
|
"@pie-lib/feedback": "^0.4.43",
|
|
11
|
-
"@pie-lib/text-select": "^1.
|
|
11
|
+
"@pie-lib/text-select": "^1.10.0",
|
|
12
12
|
"debug": "^3.1.0",
|
|
13
13
|
"lodash": "^4.17.15"
|
|
14
14
|
},
|
package/package.json
CHANGED
|
@@ -4,22 +4,22 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"repository": "pie-framework/pie-elements",
|
|
7
|
-
"version": "7.
|
|
7
|
+
"version": "7.13.0",
|
|
8
8
|
"description": "",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@material-ui/core": "^3.9.2",
|
|
11
11
|
"@pie-framework/pie-player-events": "^0.1.0",
|
|
12
|
-
"@pie-lib/correct-answer-toggle": "^2.
|
|
12
|
+
"@pie-lib/correct-answer-toggle": "^2.5.1",
|
|
13
13
|
"@pie-lib/math-rendering": "^2.5.17",
|
|
14
|
-
"@pie-lib/render-ui": "^4.
|
|
15
|
-
"@pie-lib/text-select": "^1.
|
|
14
|
+
"@pie-lib/render-ui": "^4.15.0",
|
|
15
|
+
"@pie-lib/text-select": "^1.10.0",
|
|
16
16
|
"prop-types": "^15.6.1",
|
|
17
17
|
"react": "^16.8.1",
|
|
18
18
|
"react-dom": "^16.8.1"
|
|
19
19
|
},
|
|
20
20
|
"author": "",
|
|
21
21
|
"license": "ISC",
|
|
22
|
-
"gitHead": "
|
|
22
|
+
"gitHead": "14de4db4499935eaf177fd2958d00f72117e7232",
|
|
23
23
|
"scripts": {
|
|
24
24
|
"postpublish": "../../scripts/postpublish"
|
|
25
25
|
},
|