@pie-element/math-templated 3.6.7-next.8 → 3.6.8-next.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 +16 -0
- package/configure/CHANGELOG.md +14 -0
- package/configure/package.json +2 -2
- package/controller/CHANGELOG.md +15 -0
- package/controller/lib/index.js +1 -1
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +2 -2
- package/lib/main.js +5 -2
- package/lib/main.js.map +1 -1
- package/module/configure.js +27 -25
- package/module/controller.js +1 -1
- package/module/element.js +38327 -38245
- package/module/index.html +1 -1
- package/module/manifest.json +3 -3
- package/module/print.html +1 -1
- package/module/print.js +38327 -38245
- package/package.json +3 -3
package/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
|
+
## [3.6.7](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated@3.6.6...@pie-element/math-templated@3.6.7) (2025-06-05)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* update pie-lib/pie-toolbox PD-4888, PD-3542, PD-4873, PD-4679 ([9c3bdef](https://github.com/pie-framework/pie-elements/commit/9c3bdef1b68f128ecc6338ef74f25fb74c482aa6))
|
|
12
|
+
* **math-inline, math-templated.number-line:** extend if fields also contai nmedia PD-3756 ([5340866](https://github.com/pie-framework/pie-elements/commit/53408664e7c25841253f47bfe36f836732fb4de7))
|
|
13
|
+
* add validation for audio content PD-4123 ([f0ce3f1](https://github.com/pie-framework/pie-elements/commit/f0ce3f19a12fd4cfe2d2159ca4af801d866dc8a9))
|
|
14
|
+
* update pie-lib pie-toolbox PD-3756 and revert changes for PD-4810 ([1e3030b](https://github.com/pie-framework/pie-elements/commit/1e3030bfdb13d0cce7b54ce0e9a109446c5ec2a2))
|
|
15
|
+
* update pie-lib-pie-toolbox PD-4810 ([6c81afc](https://github.com/pie-framework/pie-elements/commit/6c81afc6a8ad41e001bafb0bd1563164e9f32a10))
|
|
16
|
+
* update pie-lib-pie-toolbox PD-4810 ([0f9dd82](https://github.com/pie-framework/pie-elements/commit/0f9dd827c474e87770fd3bd146d870dd77d296df))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
6
22
|
## [3.6.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated@3.6.5...@pie-element/math-templated@3.6.6) (2025-05-22)
|
|
7
23
|
|
|
8
24
|
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,20 @@
|
|
|
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
|
+
## [2.5.7](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated-configure@2.5.6...@pie-element/math-templated-configure@2.5.7) (2025-06-05)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* update pie-lib pie-toolbox PD-3756 and revert changes for PD-4810 ([1e3030b](https://github.com/pie-framework/pie-elements/commit/1e3030bfdb13d0cce7b54ce0e9a109446c5ec2a2))
|
|
12
|
+
* update pie-lib-pie-toolbox PD-4810 ([6c81afc](https://github.com/pie-framework/pie-elements/commit/6c81afc6a8ad41e001bafb0bd1563164e9f32a10))
|
|
13
|
+
* update pie-lib-pie-toolbox PD-4810 ([0f9dd82](https://github.com/pie-framework/pie-elements/commit/0f9dd827c474e87770fd3bd146d870dd77d296df))
|
|
14
|
+
* update pie-lib/pie-toolbox PD-4888, PD-3542, PD-4873, PD-4679 ([9c3bdef](https://github.com/pie-framework/pie-elements/commit/9c3bdef1b68f128ecc6338ef74f25fb74c482aa6))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
6
20
|
## [2.5.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated-configure@2.5.5...@pie-element/math-templated-configure@2.5.6) (2025-05-22)
|
|
7
21
|
|
|
8
22
|
|
package/configure/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/math-templated-configure",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "2.5.
|
|
4
|
+
"version": "2.5.7",
|
|
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/pie-toolbox": "2.17.
|
|
11
|
+
"@pie-lib/pie-toolbox": "2.17.6",
|
|
12
12
|
"debug": "^3.1.0",
|
|
13
13
|
"lodash": "^4.17.15",
|
|
14
14
|
"prop-types": "^15.6.2",
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,21 @@
|
|
|
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
|
+
## [3.2.7](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated-controller@3.2.6...@pie-element/math-templated-controller@3.2.7) (2025-06-05)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* add validation for audio content PD-4123 ([f0ce3f1](https://github.com/pie-framework/pie-elements/commit/f0ce3f19a12fd4cfe2d2159ca4af801d866dc8a9))
|
|
12
|
+
* update pie-lib pie-toolbox PD-3756 and revert changes for PD-4810 ([1e3030b](https://github.com/pie-framework/pie-elements/commit/1e3030bfdb13d0cce7b54ce0e9a109446c5ec2a2))
|
|
13
|
+
* update pie-lib-pie-toolbox PD-4810 ([6c81afc](https://github.com/pie-framework/pie-elements/commit/6c81afc6a8ad41e001bafb0bd1563164e9f32a10))
|
|
14
|
+
* update pie-lib-pie-toolbox PD-4810 ([0f9dd82](https://github.com/pie-framework/pie-elements/commit/0f9dd827c474e87770fd3bd146d870dd77d296df))
|
|
15
|
+
* update pie-lib/pie-toolbox PD-4888, PD-3542, PD-4873, PD-4679 ([9c3bdef](https://github.com/pie-framework/pie-elements/commit/9c3bdef1b68f128ecc6338ef74f25fb74c482aa6))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
6
21
|
## [3.2.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/math-templated-controller@3.2.5...@pie-element/math-templated-controller@3.2.6) (2025-05-22)
|
|
7
22
|
|
|
8
23
|
|
package/controller/lib/index.js
CHANGED
|
@@ -49,7 +49,7 @@ var getFeedback = function getFeedback(value) {
|
|
|
49
49
|
};
|
|
50
50
|
|
|
51
51
|
var getContent = function getContent(html) {
|
|
52
|
-
return (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');
|
|
52
|
+
return (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');
|
|
53
53
|
};
|
|
54
54
|
|
|
55
55
|
var getIsAnswerCorrect = function getIsAnswerCorrect(correctResponse, answerItem) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["translator","Translator","log","getFeedback","value","getContent","html","replace","getIsAnswerCorrect","correctResponse","answerItem","answerCorrect","opts","mode","validation","defaults","validationDefault","literal","allowTrailingZeros","ignoreOrder","acceptedValues","answer","Object","values","alternates","mv","latexEqual","e","getResponseCorrectness","question","sessionResponse","correctResponses","responses","correctness","score","correct","correctAnswers","correctResponsesCount","keys","length","forEach","responseId","fullyCorrect","toFixed","getCorrectness","env","session","answers","getPartialScore","outcome","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","normalizeSession","undefined","completed","createDefaultModel","model","allowTrailingZerosDefault","ignoreOrderDefault","updatedResponses","reduce","acc","s","getTextFromHTML","prepareVal","trim","normalizedQuestion","language","note","showNote","t","lng","out","prompt","promptEnabled","markup","equationEditor","customKeys","disabled","view","extraCSSRules","feedback","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","createCorrectResponseSession","id","validate","config","maxResponseAreas","responsesErrors","errors","field","required","entries","index","key","response","reversedAlternates","reverse","alternatesErrors","responseError","identicalAnswer","slice","some","val","nbOfResponseAreas","match","responseAreas"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport Translator from '@pie-lib/pie-toolbox/translator';\nimport * as mv from '@pie-framework/math-validation';\n\nimport defaults from './defaults';\nimport { partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\n\nconst { translator } = Translator;\nconst log = debug('@pie-element:math-templated:controller');\n\nconst getFeedback = value => value ? 'correct' : 'incorrect';\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');\n\nconst getIsAnswerCorrect = (correctResponse, answerItem) => {\n let answerCorrect = false;\n\n const opts = {\n mode: correctResponse.validation || defaults.validationDefault,\n ...(correctResponse.validation === 'literal' && {\n literal: {\n allowTrailingZeros: correctResponse.allowTrailingZeros || false,\n ignoreOrder: correctResponse.ignoreOrder || false,\n }\n })\n };\n\n if (!answerCorrect) {\n const acceptedValues = [\n correctResponse.answer,\n ...Object.values(correctResponse.alternates || {})\n ];\n\n try {\n for (const value of acceptedValues) {\n answerCorrect = mv.latexEqual(answerItem.value, value, opts);\n if (answerCorrect) break;\n }\n } catch (e) {\n log('Parse failure when evaluating math', e, correctResponse, answerItem);\n answerCorrect = false;\n }\n }\n\n return answerCorrect;\n};\n\nconst getResponseCorrectness = (question, sessionResponse) => {\n const correctResponses = question.responses;\n\n if (!sessionResponse) {\n return {\n correctness: 'unanswered',\n score: 0,\n correct: false,\n };\n } else {\n let correctAnswers = 0;\n let score = 0;\n const correctResponsesCount = Object.keys(correctResponses || {}).length;\n\n Object.keys(correctResponses).forEach((responseId) => {\n const answerItem = sessionResponse['r' + responseId];\n const correctResponse = correctResponses[responseId] || {};\n\n const answerCorrect = getIsAnswerCorrect(correctResponse, answerItem);\n if (answerCorrect) {\n correctAnswers++;\n }\n });\n\n const fullyCorrect = correctAnswers === correctResponsesCount;\n\n // partial credit scoring: each correct answer is worth 1 / total answers point\n // dichotomous scoring: for credit to be awarded, a correct answer must be entered for every response area\n score = (correctAnswers / Object.keys(correctResponses).length).toFixed(2);\n\n return {\n correctness: getFeedback(fullyCorrect),\n score: correctAnswers > 0 ? score : 0,\n correct: fullyCorrect\n };\n }\n};\n\nexport const getCorrectness = (question, env, session) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(\n question,\n session && session.answers\n );\n }\n};\n\nexport const getPartialScore = (question, session) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n return 1;\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 const partialScoringEnabled = partialScoring.enabled(question, env);\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n const correctness = getCorrectness(question, env, session, true);\n const score = correctness.score;\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n\nexport const createDefaultModel = (model = {}) => {\n const { validationDefault, allowTrailingZerosDefault, ignoreOrderDefault, responses = {} } = model;\n\n const updatedResponses = Object.keys(responses).reduce((acc, responseId) => {\n const correctResponse = responses[responseId];\n\n acc[responseId] = {\n ...correctResponse,\n validation: correctResponse.validation || validationDefault,\n allowTrailingZeros: correctResponse.allowTrailingZeros || allowTrailingZerosDefault,\n ignoreOrder: correctResponse.ignoreOrder || ignoreOrderDefault,\n };\n\n return acc;\n }, {});\n\n return {\n ...defaults.model,\n ...model,\n responses: updatedResponses\n };\n};\n\nexport const normalizeSession = (s) => ({ ...s });\n\nconst getTextFromHTML = html => (html || '').replace(/<\\/?[^>]+(>|$)/g, '');\n\nexport const prepareVal = html => getTextFromHTML(html).trim();\n\nexport const model = (question, session, env) => {\n return new Promise((resolve) => {\n session = session || {};\n const normalizedQuestion = createDefaultModel(question);\n const correctness = getCorrectness(normalizedQuestion, env, session);\n const { responses, language } = normalizedQuestion;\n let { note } = normalizedQuestion;\n let showNote = false;\n\n // check if there is at least one alternate response or if the validation for at least one response is not literal\n Object.keys(responses).forEach((responseId) => {\n const correctResponse = responses[responseId] || {};\n if (correctResponse.alternates && Object.keys(correctResponse.alternates).length > 0) {\n showNote = true;\n } else if (correctResponse.validation !== 'literal') {\n showNote = true;\n }\n });\n\n if (!note) {\n note = translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });\n }\n\n const out = {\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n markup: normalizedQuestion.markup,\n responses: env.mode === 'gather' ? null : normalizedQuestion.responses,\n language: normalizedQuestion.language,\n equationEditor: normalizedQuestion.equationEditor,\n customKeys: normalizedQuestion.customKeys,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n correctness,\n env,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n const { answers = {} } = session || {};\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n Object.keys(responses).forEach((responseId) => {\n const answerItem = answers['r' + responseId];\n const correctResponse = responses[responseId];\n feedback[responseId] = getIsAnswerCorrect(correctResponse, answerItem);\n });\n }\n\n if (env.mode === 'evaluate') {\n out.correctResponse = {};\n out.showNote = showNote;\n out.note = note;\n out.feedback = feedback;\n } else {\n out.responses = {};\n out.showNote = false;\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 log('out: ', out);\n resolve(out);\n });\n};\n\nexport const createCorrectResponseSession = (question, env) =>\n new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const correctResponse = Object.keys(question.responses).reduce((acc, responseId) => {\n acc['r' + responseId] = { value: question.responses[responseId].answer };\n return acc;\n }, {});\n\n resolve({ id: '1', answers: correctResponse });\n } else {\n resolve(null);\n }\n });\n\nexport const validate = (model = {}, config = {}) => {\n const { responses, markup } = model;\n const { maxResponseAreas } = config;\n const responsesErrors = {};\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 Object.entries(responses || {}).forEach(([key, response], index) => {\n const { answer } = response;\n const reversedAlternates = [...Object.entries(response.alternates || {})].reverse();\n const alternatesErrors = {};\n const responseError = {};\n\n if (answer === '') {\n responseError.answer = 'Content should not be empty.';\n }\n\n reversedAlternates.forEach(([key, value], index) => {\n if (value === '') {\n alternatesErrors[key] = 'Content should not be empty.';\n } else {\n const identicalAnswer =\n answer === value || reversedAlternates.slice(index + 1).some(([, val]) => val === value);\n\n if (identicalAnswer) {\n alternatesErrors[key] = 'Content should be unique.';\n }\n }\n });\n\n if (!isEmpty(responseError) || !isEmpty(alternatesErrors)) {\n responsesErrors[index] = { ...responseError, ...alternatesErrors };\n }\n });\n\n const nbOfResponseAreas = (markup.match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreas = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreas = 'There should be at least 1 response area defined.';\n }\n\n if (!isEmpty(responsesErrors)) {\n errors.responses = responsesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["translator","Translator","log","getFeedback","value","getContent","html","replace","getIsAnswerCorrect","correctResponse","answerItem","answerCorrect","opts","mode","validation","defaults","validationDefault","literal","allowTrailingZeros","ignoreOrder","acceptedValues","answer","Object","values","alternates","mv","latexEqual","e","getResponseCorrectness","question","sessionResponse","correctResponses","responses","correctness","score","correct","correctAnswers","correctResponsesCount","keys","length","forEach","responseId","fullyCorrect","toFixed","getCorrectness","env","session","answers","getPartialScore","outcome","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","normalizeSession","undefined","completed","createDefaultModel","model","allowTrailingZerosDefault","ignoreOrderDefault","updatedResponses","reduce","acc","s","getTextFromHTML","prepareVal","trim","normalizedQuestion","language","note","showNote","t","lng","out","prompt","promptEnabled","markup","equationEditor","customKeys","disabled","view","extraCSSRules","feedback","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","createCorrectResponseSession","id","validate","config","maxResponseAreas","responsesErrors","errors","field","required","entries","index","key","response","reversedAlternates","reverse","alternatesErrors","responseError","identicalAnswer","slice","some","val","nbOfResponseAreas","match","responseAreas"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport Translator from '@pie-lib/pie-toolbox/translator';\nimport * as mv from '@pie-framework/math-validation';\n\nimport defaults from './defaults';\nimport { partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\n\nconst { translator } = Translator;\nconst log = debug('@pie-element:math-templated:controller');\n\nconst getFeedback = value => value ? 'correct' : 'incorrect';\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nconst getIsAnswerCorrect = (correctResponse, answerItem) => {\n let answerCorrect = false;\n\n const opts = {\n mode: correctResponse.validation || defaults.validationDefault,\n ...(correctResponse.validation === 'literal' && {\n literal: {\n allowTrailingZeros: correctResponse.allowTrailingZeros || false,\n ignoreOrder: correctResponse.ignoreOrder || false,\n }\n })\n };\n\n if (!answerCorrect) {\n const acceptedValues = [\n correctResponse.answer,\n ...Object.values(correctResponse.alternates || {})\n ];\n\n try {\n for (const value of acceptedValues) {\n answerCorrect = mv.latexEqual(answerItem.value, value, opts);\n if (answerCorrect) break;\n }\n } catch (e) {\n log('Parse failure when evaluating math', e, correctResponse, answerItem);\n answerCorrect = false;\n }\n }\n\n return answerCorrect;\n};\n\nconst getResponseCorrectness = (question, sessionResponse) => {\n const correctResponses = question.responses;\n\n if (!sessionResponse) {\n return {\n correctness: 'unanswered',\n score: 0,\n correct: false,\n };\n } else {\n let correctAnswers = 0;\n let score = 0;\n const correctResponsesCount = Object.keys(correctResponses || {}).length;\n\n Object.keys(correctResponses).forEach((responseId) => {\n const answerItem = sessionResponse['r' + responseId];\n const correctResponse = correctResponses[responseId] || {};\n\n const answerCorrect = getIsAnswerCorrect(correctResponse, answerItem);\n if (answerCorrect) {\n correctAnswers++;\n }\n });\n\n const fullyCorrect = correctAnswers === correctResponsesCount;\n\n // partial credit scoring: each correct answer is worth 1 / total answers point\n // dichotomous scoring: for credit to be awarded, a correct answer must be entered for every response area\n score = (correctAnswers / Object.keys(correctResponses).length).toFixed(2);\n\n return {\n correctness: getFeedback(fullyCorrect),\n score: correctAnswers > 0 ? score : 0,\n correct: fullyCorrect\n };\n }\n};\n\nexport const getCorrectness = (question, env, session) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(\n question,\n session && session.answers\n );\n }\n};\n\nexport const getPartialScore = (question, session) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n return 1;\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 const partialScoringEnabled = partialScoring.enabled(question, env);\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n const correctness = getCorrectness(question, env, session, true);\n const score = correctness.score;\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n\nexport const createDefaultModel = (model = {}) => {\n const { validationDefault, allowTrailingZerosDefault, ignoreOrderDefault, responses = {} } = model;\n\n const updatedResponses = Object.keys(responses).reduce((acc, responseId) => {\n const correctResponse = responses[responseId];\n\n acc[responseId] = {\n ...correctResponse,\n validation: correctResponse.validation || validationDefault,\n allowTrailingZeros: correctResponse.allowTrailingZeros || allowTrailingZerosDefault,\n ignoreOrder: correctResponse.ignoreOrder || ignoreOrderDefault,\n };\n\n return acc;\n }, {});\n\n return {\n ...defaults.model,\n ...model,\n responses: updatedResponses\n };\n};\n\nexport const normalizeSession = (s) => ({ ...s });\n\nconst getTextFromHTML = html => (html || '').replace(/<\\/?[^>]+(>|$)/g, '');\n\nexport const prepareVal = html => getTextFromHTML(html).trim();\n\nexport const model = (question, session, env) => {\n return new Promise((resolve) => {\n session = session || {};\n const normalizedQuestion = createDefaultModel(question);\n const correctness = getCorrectness(normalizedQuestion, env, session);\n const { responses, language } = normalizedQuestion;\n let { note } = normalizedQuestion;\n let showNote = false;\n\n // check if there is at least one alternate response or if the validation for at least one response is not literal\n Object.keys(responses).forEach((responseId) => {\n const correctResponse = responses[responseId] || {};\n if (correctResponse.alternates && Object.keys(correctResponse.alternates).length > 0) {\n showNote = true;\n } else if (correctResponse.validation !== 'literal') {\n showNote = true;\n }\n });\n\n if (!note) {\n note = translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });\n }\n\n const out = {\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n markup: normalizedQuestion.markup,\n responses: env.mode === 'gather' ? null : normalizedQuestion.responses,\n language: normalizedQuestion.language,\n equationEditor: normalizedQuestion.equationEditor,\n customKeys: normalizedQuestion.customKeys,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n correctness,\n env,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n const { answers = {} } = session || {};\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n Object.keys(responses).forEach((responseId) => {\n const answerItem = answers['r' + responseId];\n const correctResponse = responses[responseId];\n feedback[responseId] = getIsAnswerCorrect(correctResponse, answerItem);\n });\n }\n\n if (env.mode === 'evaluate') {\n out.correctResponse = {};\n out.showNote = showNote;\n out.note = note;\n out.feedback = feedback;\n } else {\n out.responses = {};\n out.showNote = false;\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 log('out: ', out);\n resolve(out);\n });\n};\n\nexport const createCorrectResponseSession = (question, env) =>\n new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const correctResponse = Object.keys(question.responses).reduce((acc, responseId) => {\n acc['r' + responseId] = { value: question.responses[responseId].answer };\n return acc;\n }, {});\n\n resolve({ id: '1', answers: correctResponse });\n } else {\n resolve(null);\n }\n });\n\nexport const validate = (model = {}, config = {}) => {\n const { responses, markup } = model;\n const { maxResponseAreas } = config;\n const responsesErrors = {};\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 Object.entries(responses || {}).forEach(([key, response], index) => {\n const { answer } = response;\n const reversedAlternates = [...Object.entries(response.alternates || {})].reverse();\n const alternatesErrors = {};\n const responseError = {};\n\n if (answer === '') {\n responseError.answer = 'Content should not be empty.';\n }\n\n reversedAlternates.forEach(([key, value], index) => {\n if (value === '') {\n alternatesErrors[key] = 'Content should not be empty.';\n } else {\n const identicalAnswer =\n answer === value || reversedAlternates.slice(index + 1).some(([, val]) => val === value);\n\n if (identicalAnswer) {\n alternatesErrors[key] = 'Content should be unique.';\n }\n }\n });\n\n if (!isEmpty(responseError) || !isEmpty(alternatesErrors)) {\n responsesErrors[index] = { ...responseError, ...alternatesErrors };\n }\n });\n\n const nbOfResponseAreas = (markup.match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreas = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreas = 'There should be at least 1 response area defined.';\n }\n\n if (!isEmpty(responsesErrors)) {\n errors.responses = responsesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/math-templated-controller",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "3.2.
|
|
4
|
+
"version": "3.2.7",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@pie-framework/math-validation": "^1.2.3",
|
|
10
|
-
"@pie-lib/pie-toolbox": "2.17.
|
|
10
|
+
"@pie-lib/pie-toolbox": "2.17.6",
|
|
11
11
|
"debug": "^3.1.0",
|
|
12
12
|
"lodash": "^4.17.15"
|
|
13
13
|
},
|
package/lib/main.js
CHANGED
|
@@ -321,12 +321,14 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
321
321
|
teacherInstructions = _ref3.teacherInstructions,
|
|
322
322
|
animationsDisabled = _ref3.animationsDisabled;
|
|
323
323
|
|
|
324
|
+
var showTeacherInstructions = teacherInstructions && ((0, _renderUi.hasText)(teacherInstructions) || (0, _renderUi.hasMedia)(teacherInstructions));
|
|
325
|
+
|
|
324
326
|
var teacherInstructionsDiv = /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
|
|
325
327
|
defaultClassName: "teacher-instructions",
|
|
326
328
|
prompt: teacherInstructions
|
|
327
329
|
});
|
|
328
330
|
|
|
329
|
-
return
|
|
331
|
+
return showTeacherInstructions && /*#__PURE__*/_react["default"].createElement("div", {
|
|
330
332
|
className: classes.collapsible
|
|
331
333
|
}, !animationsDisabled ? /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
|
|
332
334
|
labels: {
|
|
@@ -348,7 +350,8 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
348
350
|
prompt: rationale
|
|
349
351
|
});
|
|
350
352
|
|
|
351
|
-
|
|
353
|
+
var showRationale = rationale && ((0, _renderUi.hasText)(rationale) || (0, _renderUi.hasMedia)(rationale));
|
|
354
|
+
return showRationale && /*#__PURE__*/_react["default"].createElement("div", {
|
|
352
355
|
className: classes.collapsible
|
|
353
356
|
}, !animationsDisabled ? /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
|
|
354
357
|
labels: {
|
package/lib/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/main.jsx"],"names":["registered","REGEX","DEFAULT_KEYPAD_VARIANT","IS_SAFARI","test","navigator","userAgent","generateAdditionalKeys","keyData","map","key","name","latex","write","label","getKeyPadWidth","additionalKeys","equationEditor","Math","floor","length","splitByParts","text","parts","split","filter","part","prepareForStatic","model","state","responses","disabled","markup","printMode","alwaysShowCorrect","showCorrect","Object","keys","reduce","acc","responseKey","answer","splitted","match","Main","getResponseKey","session","answers","blankSpace","repeat","value","props","classes","root","forEach","answerId","el","querySelector","indexEl","MQ","MathQuill","getInterface","textContent","view","parentElement","classList","remove","correct","incorrect","StaticMath","id","setState","activeAnswerBlock","data","type","input","c","toNodeData","clear","Array","isArray","vv","cmd","keystroke","focus","onSessionChange","show","handleAnswerBlockDomUpdate","subfieldValue","callOnSessionChange","changeField","fields","find","k","tf","e","relatedTarget","currentTarget","getParentWithRoleTooltip","element","depth","parent","offsetParent","getAttribute","getDeepChildDataKeypad","child","children","attributes","parentWithTooltipRole","childWithDataKeypad","teacherInstructions","animationsDisabled","teacherInstructionsDiv","collapsible","hidden","visible","rationale","rationaleDiv","correctness","customKeys","feedback","env","mode","emptyResponse","statics","studentPrintMode","inputAndKeypadContainer","responseIsCorrect","MQStatic","mqStatic","subFieldChanged","getFieldName","setInput","onSubFieldFocus","onBlur","expression","showCorrectness","correctAnswerShown","ref","setTooltipRef","tooltip","keypadTooltip","popper","keypadTooltipPopper","responseContainer","width","onClick","printContainer","sessionAnswers","replace","response","sessionAnswerForResponse","window","registerEmbed","htmlString","blockContainer","blockResponse","blockMath","nextProps","nextModel","nextMarkup","nextEnv","nextAlwaysShowCorrect","isEvaluateMode","prevState","matches","nextMatches","newAnswers","nextMatch","nextState","sameModel","sameState","setTimeout","div","document","firstChild","setAttribute","prompt","role","extraCSSRules","language","showNote","note","showCorrectAnswerToggle","displayNote","mainContainer","r","domNode","ReactDOM","findDOMNode","main","srOnly","toggle","toggleShowCorrect","renderTeacherInstructions","promptContainer","renderPlayerContent","__html","renderRationale","React","Component","replaceAll","PropTypes","object","isRequired","func","styles","theme","color","backgroundColor","background","display","primaryLight","padding","spacing","unit","border","secondary","fontSize","tooltipPopper","opacity","marginTop","paddingTop","marginBottom","position","title","zIndex","minWidth","maxWidth","top","borderColor","alignItems","flexWrap","lineHeight","left","right","borderTop","letterSpacing","margin","flex","palette","grey","justifyContent","borderRight","pointerEvents","height","overflow"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport cx from 'classnames';\nimport isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport { withStyles } from '@material-ui/core/styles';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { mq, HorizontalKeypad, updateSpans } from '@pie-lib/pie-toolbox/math-input';\nimport { color, Collapsible, Readable, hasText, PreviewPrompt, UiLayout } from '@pie-lib/pie-toolbox/render-ui';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\nimport MathQuill from '@pie-framework/mathquill';\nimport { Customizable } from '@pie-lib/pie-toolbox/mask-markup';\nimport { CorrectAnswerToggle } from '@pie-lib/pie-toolbox/correct-answer-toggle';\nimport ReactDOM from 'react-dom';\n\nlet registered = false;\n\n// Define a regex pattern to match {{number}}\nconst REGEX = /(\\{\\{\\d+\\}\\})/gm;\nconst DEFAULT_KEYPAD_VARIANT = 6;\n\n// !!! If you're using Chrome but have selected the \"iPad\" device in Chrome Developer Tools, the navigator.userAgent string may still report as\n// Safari because Chrome on iOS actually uses the Safari rendering engine under the hood due to Apple's restrictions on third-party browser engines.\n// When you select the \"iPad\" device in Chrome Developer Tools, you're essentially emulating the behavior of Safari on an iPad, including the user agent string.\n// Therefore, even though you're using Chrome, the user agent string will resemble that of Safari on an iPad.\n// Since the regular expression /^((?!chrome|android).)*safari/i checks for the presence of \"safari\" in the user agent string while excluding \"chrome\" and \"android\",\n// it will return true in this case because \"safari\" is present in the user agent string emulated by Chrome when in iPad mode.\nconst IS_SAFARI = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n}\n\nfunction getKeyPadWidth(additionalKeys = [], equationEditor) {\n return Math.floor(additionalKeys.length / 5) * 30 + (equationEditor === 'miscellaneous' ? 600 : 500);\n}\n\nfunction splitByParts(text) {\n // Use the regex pattern to split the text\n const parts = text.split(REGEX);\n // Filter out empty strings that might result from splitting\n return parts.filter(part => part);\n}\n\nfunction prepareForStatic(model, state) {\n const { responses, disabled, markup, printMode, alwaysShowCorrect } = model || {};\n\n if (markup) {\n if (state.showCorrect) {\n return Object.keys(responses || {}).reduce((acc, responseKey) => {\n acc[responseKey] = responses?.[responseKey]?.answer;\n\n return acc;\n }, {});\n }\n\n const splitted = splitByParts(markup);\n\n\n return splitted.reduce((acc, split) => {\n if (split.match(REGEX)) {\n const responseKey = Main.getResponseKey(split);\n const answer = state.session.answers[`r${responseKey}`];\n\n if (printMode && !alwaysShowCorrect) {\n const blankSpace = '\\\\ \\\\ '.repeat(30) + '\\\\embed{newLine}[] ';\n\n return {\n ...acc,\n [responseKey]: `\\\\MathQuillMathField[r${responseKey}]{${blankSpace.repeat(3)}}`\n };\n }\n\n if (disabled) {\n return {\n ...acc,\n [responseKey]: `\\\\embed{answerBlock}[r${responseKey}]`\n };\n }\n\n return {\n ...acc,\n [responseKey]: `\\\\MathQuillMathField[r${responseKey}]{${(answer && answer.value) || ''}}`\n };\n\n }\n\n return acc;\n }, {});\n }\n}\n\nexport class Main extends React.Component {\n // removes {{ and }} and returns only key response. Eg: {{0}} => 0\n static getResponseKey = response => (response || '').replaceAll('{{', '').replaceAll('}}', '');\n\n static propTypes = {\n classes: PropTypes.object,\n session: PropTypes.object.isRequired,\n onSessionChange: PropTypes.func,\n model: PropTypes.object.isRequired,\n };\n\n constructor(props) {\n super(props);\n\n const answers = {};\n const { model, session } = props || {};\n const { markup, alwaysShowCorrect } = model || {};\n const { answers: sessionAnswers } = session || {};\n\n if (markup) {\n // build out local state model using responses declared in markup\n (markup || '').replace(REGEX, (response) => {\n const responseKey = Main.getResponseKey(response);\n const sessionAnswerForResponse = sessionAnswers && sessionAnswers[`r${responseKey}`];\n\n answers[`r${responseKey}`] = { value: (sessionAnswerForResponse?.value) || '' };\n });\n }\n\n this.state = {\n session: { ...props.session, answers },\n activeAnswerBlock: '',\n showCorrect: alwaysShowCorrect || false,\n };\n }\n\n UNSAFE_componentWillMount() {\n const { classes } = this.props;\n\n if (typeof window !== 'undefined') {\n let MQ = MathQuill.getInterface(2);\n\n if (!registered) {\n MQ.registerEmbed('answerBlock', (data) => ({\n htmlString: `<div class=\"${classes.blockContainer}\">\n <div class=\"${classes.blockResponse}\" id=\"${data}Index\">R</div>\n <div class=\"${classes.blockMath}\">\n <span id=\"${data}\"></span>\n </div>\n </div>`,\n text: () => 'text',\n latex: () => `\\\\embed{answerBlock}[${data}]`,\n }));\n\n registered = true;\n }\n }\n }\n\n handleAnswerBlockDomUpdate = () => {\n const { model, classes } = this.props;\n const { session, showCorrect } = this.state;\n const answers = session.answers;\n\n if (this.root && model.disabled && !showCorrect) {\n Object.keys(answers).forEach((answerId) => {\n const el = this.root.querySelector(`#${answerId}`);\n const indexEl = this.root.querySelector(`#${answerId}Index`);\n\n if (el) {\n let MQ = MathQuill.getInterface(2);\n const answer = answers[answerId];\n\n el.textContent = (answer && answer.value) || '';\n\n if (model.view) {\n el.parentElement.parentElement.classList.remove(classes.correct);\n el.parentElement.parentElement.classList.remove(classes.incorrect);\n }\n\n MQ.StaticMath(el);\n\n indexEl.textContent = 'R';\n }\n });\n }\n\n renderMath(this.root);\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { model } = this.props;\n const { model: nextModel = {} } = nextProps || {};\n const { markup = '', env = {} } = model || {};\n const { markup: nextMarkup = '', env: nextEnv = {}, alwaysShowCorrect: nextAlwaysShowCorrect = false } = nextModel;\n\n const isEvaluateMode = (env) => env && env.mode === 'evaluate';\n\n if (!isEvaluateMode(env) || !isEvaluateMode(nextEnv)) {\n this.setState((prevState) => ({ ...prevState.session, showCorrect: false }));\n }\n\n if (nextAlwaysShowCorrect) {\n this.setState({ showCorrect: true });\n }\n\n const matches = markup.match(REGEX);\n const nextMatches = nextMarkup.match(REGEX);\n\n // If markup changed, and we no longer have the same response area, the session needs to be updated\n if (!isEqual(matches, nextMatches)) {\n const newAnswers = {};\n const answers = this.state.session.answers;\n\n (nextMatches || []).forEach(nextMatch => {\n const responseKey = Main.getResponseKey(nextMatch);\n const sessionAnswerForResponse = answers && answers[`r${responseKey}`];\n\n // build out local state model using responses declared in markup\n newAnswers[`r${responseKey}`] = { value: (sessionAnswerForResponse?.value) || '' };\n\n });\n\n this.setState(\n (state) => ({\n session: {\n ...state.session,\n answers: newAnswers,\n },\n }),\n () => {\n this.props.onSessionChange(this.state.session);\n this.handleAnswerBlockDomUpdate();\n },\n );\n }\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n const sameModel = isEqual(this.props.model, nextProps.model);\n const sameState = isEqual(this.state, nextState);\n\n return !sameModel || !sameState;\n }\n\n componentDidMount() {\n this.handleAnswerBlockDomUpdate();\n setTimeout(() => renderMath(this.root), 100);\n }\n\n componentDidUpdate() {\n this.handleAnswerBlockDomUpdate();\n }\n\n onSubFieldFocus = (id) => {\n this.setState({ activeAnswerBlock: id });\n };\n\n toNodeData = (data) => {\n if (!data) {\n return;\n }\n\n const { type, value } = data;\n\n if (type === 'command' || type === 'cursor') return data;\n\n if (type === 'answer') return { type: 'answer', ...data };\n\n if (value === 'clear') return { type: 'clear' };\n\n return { type: 'write', value };\n };\n\n setInput = (input) => {\n this.input = input;\n };\n\n onClick = (data) => {\n const c = this.toNodeData(data);\n\n if (c.type === 'clear') {\n this.input.clear();\n } else if (c.type === 'command') {\n if (Array.isArray(c.value)) {\n c.value.forEach((vv) => {\n this.input.cmd(vv);\n });\n } else {\n this.input.cmd(c.value);\n }\n } else if (c.type === 'cursor') {\n this.input.keystroke(c.value);\n } else {\n this.input.write(c.value);\n }\n\n this.input.focus();\n };\n\n callOnSessionChange = () => {\n const { onSessionChange } = this.props;\n\n if (onSessionChange) {\n onSessionChange(this.state.session);\n }\n };\n\n toggleShowCorrect = (show) => {\n this.setState({ showCorrect: show }, this.handleAnswerBlockDomUpdate);\n };\n\n subFieldChanged = (name, subfieldValue) => {\n updateSpans();\n\n if (name) {\n this.setState(\n (state) => ({\n session: {\n ...state.session,\n answers: {\n ...state.session.answers,\n [name]: { value: subfieldValue },\n },\n },\n }),\n this.callOnSessionChange,\n );\n }\n };\n\n getFieldName = (changeField, fields) => {\n const { answers } = this.state.session;\n\n if (Object.keys(answers || {}).length) {\n const keys = Object.keys(answers);\n\n return keys.find((k) => {\n const tf = fields[k];\n\n return tf && tf.id == changeField.id;\n });\n }\n };\n\n onBlur = (e) => {\n const { relatedTarget, currentTarget } = e || {};\n\n function getParentWithRoleTooltip(element, depth = 0) {\n // only run this max 16 times\n if (!element || depth >= 16) return null;\n\n const parent = element.offsetParent;\n\n if (!parent) return null;\n\n if (parent.getAttribute('role') === 'tooltip') {\n return parent;\n }\n\n return getParentWithRoleTooltip(parent, depth + 1);\n }\n\n function getDeepChildDataKeypad(element, depth = 0) {\n // only run this max 4 times\n if (!element || depth >= 4) return null;\n\n const child = element?.children?.[0];\n\n if (!child) return null;\n\n if (child.attributes && child.attributes['data-keypad']) {\n return child;\n }\n\n return getDeepChildDataKeypad(child, depth + 1);\n }\n\n const parentWithTooltipRole = getParentWithRoleTooltip(relatedTarget);\n const childWithDataKeypad = parentWithTooltipRole ? getDeepChildDataKeypad(parentWithTooltipRole) : null;\n\n if (!relatedTarget || !currentTarget || !childWithDataKeypad?.attributes['data-keypad']) {\n this.setState({ activeAnswerBlock: '' });\n }\n };\n\n // function for tooltip\n setTooltipRef(ref) {\n // Safari Hack: https://stackoverflow.com/a/42764495/5757635\n setTimeout(() => {\n if (ref && IS_SAFARI) {\n const div = document.querySelector('[role=\\'tooltip\\']');\n\n if (div) {\n const el = div.firstChild;\n el.setAttribute('tabindex', '-1');\n }\n }\n }, 1);\n }\n\n renderTeacherInstructions = () => {\n const { model, classes } = this.props;\n const { teacherInstructions, animationsDisabled } = model || {};\n\n const teacherInstructionsDiv = (\n <PreviewPrompt defaultClassName=\"teacher-instructions\" prompt={teacherInstructions}/>\n );\n\n return teacherInstructions && hasText(teacherInstructions) && (\n <div className={classes.collapsible}>\n {!animationsDisabled ? (\n <Collapsible labels={{ hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions' }}>\n {teacherInstructionsDiv}\n </Collapsible>\n ) : (\n teacherInstructionsDiv\n )}\n </div>\n );\n };\n\n renderRationale = () => {\n const { model, classes } = this.props;\n const { rationale, animationsDisabled } = model || {};\n const rationaleDiv = <PreviewPrompt prompt={rationale}/>;\n\n return rationale && hasText(rationale) && (\n <div className={classes.collapsible}>\n {!animationsDisabled ? (\n <Collapsible\n labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }}>{rationaleDiv}</Collapsible>\n ) : (\n rationaleDiv\n )}\n </div>\n );\n }\n\n renderPlayerContent = () => {\n const { model, classes } = this.props;\n const { activeAnswerBlock, showCorrect, session } = this.state;\n const {\n correctness,\n disabled,\n view,\n responses,\n equationEditor,\n customKeys,\n feedback,\n env: { mode } = {},\n printMode,\n alwaysShowCorrect,\n } = model || {};\n\n const emptyResponse = isEmpty(responses);\n const additionalKeys = generateAdditionalKeys(customKeys);\n const statics = prepareForStatic(model, this.state) || '';\n const studentPrintMode = printMode && !alwaysShowCorrect;\n\n return (<div className={classes.inputAndKeypadContainer}>\n <Customizable\n disabled={disabled}\n markup={model.markup}\n // TODO remove the need of value?\n value={{}}\n customMarkMarkupComponent={(id) => {\n const responseIsCorrect = mode === 'evaluate' && feedback && feedback[id];\n\n const MQStatic = <mq.Static\n className={classes.static}\n ref={(mqStatic) => {\n this.mqStatic = mqStatic || this.mqStatic;\n }}\n latex={statics[id]}\n onSubFieldChange={this.subFieldChanged}\n getFieldName={this.getFieldName}\n setInput={this.setInput}\n onSubFieldFocus={this.onSubFieldFocus}\n onBlur={this.onBlur}\n />;\n\n return (\n <div\n className={cx(classes.expression, {\n [classes.incorrect]: !emptyResponse && !responseIsCorrect && !showCorrect,\n [classes.correct]: !emptyResponse && (responseIsCorrect || showCorrect),\n [classes.showCorrectness]: !emptyResponse && disabled && correctness && !view,\n [classes.correctAnswerShown]: showCorrect,\n })}\n >\n <Tooltip\n ref={(ref) => this.setTooltipRef(ref)}\n enterTouchDelay={0}\n interactive\n open={activeAnswerBlock === `r${id}`}\n classes={{ tooltip: classes.keypadTooltip, popper: classes.keypadTooltipPopper }}\n title={Object.keys(session.answers).map(\n (answerId) =>\n (answerId === activeAnswerBlock && !(showCorrect || disabled) && (\n <div\n data-keypad={true}\n key={answerId}\n className={classes.responseContainer}\n style={{ width: getKeyPadWidth(additionalKeys, equationEditor) }}\n >\n <HorizontalKeypad\n additionalKeys={additionalKeys}\n mode={equationEditor || DEFAULT_KEYPAD_VARIANT}\n onClick={this.onClick}\n />\n </div>\n )) ||\n null,\n )}\n >\n {studentPrintMode\n ? (<div className={classes.printContainer}>\n {MQStatic}\n </div>)\n : MQStatic}\n </Tooltip>\n </div>\n )\n }}\n />\n </div>);\n }\n\n render() {\n const { model, classes } = this.props;\n const { showCorrect } = this.state;\n const {\n prompt,\n env: { mode, role } = {},\n extraCSSRules,\n correctness,\n responses,\n language,\n showNote,\n note,\n } = model || {};\n const emptyResponse = isEmpty(responses);\n const showCorrectAnswerToggle = !emptyResponse && correctness && correctness.correctness !== 'correct';\n const displayNote = (showCorrect || (mode === 'view' && role === 'instructor')) && showNote && note;\n\n return (\n <UiLayout extraCSSRules={extraCSSRules} className={classes.mainContainer} ref={(r) => {\n // eslint-disable-next-line react/no-find-dom-node\n const domNode = ReactDOM.findDOMNode(r);\n\n this.root = domNode || this.root;\n }}>\n <div className={classes.main}>\n {/* what is srOnly ? */}\n {mode === 'gather' && <h2 className={classes.srOnly}>Math Equation Response Question</h2>}\n\n <div className={classes.main}>\n {showCorrectAnswerToggle && (\n <CorrectAnswerToggle\n language={language}\n className={classes.toggle}\n show\n toggled={showCorrect}\n onToggle={this.toggleShowCorrect}\n />\n )}\n </div>\n\n {this.renderTeacherInstructions()}\n\n {prompt && (\n <div className={classes.promptContainer}>\n <PreviewPrompt prompt={prompt}/>\n </div>\n )}\n\n <Readable false>\n {this.renderPlayerContent()}\n </Readable>\n\n {displayNote && (\n <div\n className={cx(classes.note, 'note')}\n dangerouslySetInnerHTML={{ __html: note }}\n />\n )}\n\n {this.renderRationale()}\n </div>\n </UiLayout>\n );\n }\n}\n\nconst styles = (theme) => ({\n mainContainer: {\n color: color.text(),\n backgroundColor: color.background(),\n display: 'inline-block',\n },\n tooltip: {\n background: `${color.primaryLight()} !important`,\n color: color.text(),\n padding: theme.spacing.unit * 2,\n border: `1px solid ${color.secondary()}`,\n fontSize: '16px',\n '& :not(.MathJax) > table tr': {\n '&:nth-child(2n)': {\n backgroundColor: 'unset !important',\n },\n },\n },\n tooltipPopper: {\n opacity: 1,\n },\n keypadTooltip: {\n fontSize: 'initial',\n background: 'transparent',\n width: '600px',\n marginTop: 0,\n paddingTop: 0,\n },\n keypadTooltipPopper: {\n background: 'transparent',\n width: '650px',\n opacity: 1,\n },\n promptContainer: {\n marginBottom: theme.spacing.unit * 2,\n },\n main: {\n width: '100%',\n position: 'relative',\n backgroundColor: color.background(),\n color: color.text(),\n },\n title: {\n fontSize: '1.1rem',\n display: 'block',\n marginTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit,\n },\n collapsible: {\n marginBottom: theme.spacing.unit * 2,\n },\n responseContainer: {\n zIndex: 10,\n minWidth: '400px',\n marginTop: theme.spacing.unit * 2,\n },\n expression: {\n maxWidth: 'fit-content',\n '& > .mq-math-mode': {\n '& > .mq-root-block': {\n '& > .mq-editable-field': {\n minWidth: '10px',\n padding: theme.spacing.unit / 4,\n },\n },\n '& sup': {\n top: 0,\n },\n },\n },\n static: {\n '& > .mq-root-block': {\n '& > .mq-editable-field': {\n borderColor: color.text(),\n },\n },\n },\n inputAndKeypadContainer: {\n position: 'relative',\n '& > div > div': {\n display: 'flex',\n alignItems: 'baseline',\n flexWrap: 'wrap'\n },\n '& .mq-overarrow-inner': {\n border: 'none !important',\n padding: '0 !important',\n },\n '& .mq-overarrow-inner-right': {\n display: 'none !important',\n },\n '& .mq-overarrow-inner-left': {\n display: 'none !important',\n },\n '& .mq-overarrow.mq-arrow-both': {\n minWidth: '1.23em',\n '& *': {\n lineHeight: '1 !important',\n },\n '&:before': {\n top: '-0.4em',\n left: '-1px',\n },\n '&:after': {\n top: '-2.4em',\n right: '-1px',\n },\n '&.mq-empty:after': {\n top: '-0.45em',\n },\n },\n '& .mq-overarrow.mq-arrow-right': {\n '&:before': {\n top: '-0.4em',\n right: '-1px',\n },\n },\n '& .mq-longdiv-inner': {\n borderTop: '1px solid !important',\n paddingTop: '1.5px !important',\n },\n '& .mq-parallelogram': {\n lineHeight: 0.85,\n },\n },\n showCorrectness: {\n border: '2px solid',\n },\n correctAnswerShown: {\n padding: theme.spacing.unit,\n letterSpacing: '0.5px',\n },\n correct: {\n borderColor: `${color.correct()} !important`,\n },\n incorrect: {\n borderColor: `${color.incorrect()} !important`,\n },\n blockContainer: {\n margin: `${theme.spacing.unit}px !important`,\n display: 'inline-flex',\n border: '2px solid grey !important',\n },\n blockResponse: {\n flex: 2,\n color: 'grey',\n background: theme.palette.grey['A100'],\n fontSize: '0.8rem !important',\n padding: `${theme.spacing.unit / 2}px !important`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRight: `2px solid ${color.disabled()} !important`,\n },\n toggle: {\n color: color.text(),\n marginBottom: theme.spacing.unit * 2,\n },\n blockMath: {\n color: color.text(),\n backgroundColor: color.background(),\n padding: `${theme.spacing.unit / 2}px !important`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flex: 8,\n '& > .mq-math-mode': {\n '& > .mq-hasCursor': {\n '& > .mq-cursor': {\n display: 'none',\n },\n },\n },\n },\n printContainer: {\n marginBottom: theme.spacing.unit,\n pointerEvents: 'none',\n },\n srOnly: {\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n },\n note: {\n marginBottom: theme.spacing.unit * 2,\n },\n});\n\nexport default withStyles(styles)(Main);\n"],"file":"main.js"}
|
|
1
|
+
{"version":3,"sources":["../src/main.jsx"],"names":["registered","REGEX","DEFAULT_KEYPAD_VARIANT","IS_SAFARI","test","navigator","userAgent","generateAdditionalKeys","keyData","map","key","name","latex","write","label","getKeyPadWidth","additionalKeys","equationEditor","Math","floor","length","splitByParts","text","parts","split","filter","part","prepareForStatic","model","state","responses","disabled","markup","printMode","alwaysShowCorrect","showCorrect","Object","keys","reduce","acc","responseKey","answer","splitted","match","Main","getResponseKey","session","answers","blankSpace","repeat","value","props","classes","root","forEach","answerId","el","querySelector","indexEl","MQ","MathQuill","getInterface","textContent","view","parentElement","classList","remove","correct","incorrect","StaticMath","id","setState","activeAnswerBlock","data","type","input","c","toNodeData","clear","Array","isArray","vv","cmd","keystroke","focus","onSessionChange","show","handleAnswerBlockDomUpdate","subfieldValue","callOnSessionChange","changeField","fields","find","k","tf","e","relatedTarget","currentTarget","getParentWithRoleTooltip","element","depth","parent","offsetParent","getAttribute","getDeepChildDataKeypad","child","children","attributes","parentWithTooltipRole","childWithDataKeypad","teacherInstructions","animationsDisabled","showTeacherInstructions","teacherInstructionsDiv","collapsible","hidden","visible","rationale","rationaleDiv","showRationale","correctness","customKeys","feedback","env","mode","emptyResponse","statics","studentPrintMode","inputAndKeypadContainer","responseIsCorrect","MQStatic","mqStatic","subFieldChanged","getFieldName","setInput","onSubFieldFocus","onBlur","expression","showCorrectness","correctAnswerShown","ref","setTooltipRef","tooltip","keypadTooltip","popper","keypadTooltipPopper","responseContainer","width","onClick","printContainer","sessionAnswers","replace","response","sessionAnswerForResponse","window","registerEmbed","htmlString","blockContainer","blockResponse","blockMath","nextProps","nextModel","nextMarkup","nextEnv","nextAlwaysShowCorrect","isEvaluateMode","prevState","matches","nextMatches","newAnswers","nextMatch","nextState","sameModel","sameState","setTimeout","div","document","firstChild","setAttribute","prompt","role","extraCSSRules","language","showNote","note","showCorrectAnswerToggle","displayNote","mainContainer","r","domNode","ReactDOM","findDOMNode","main","srOnly","toggle","toggleShowCorrect","renderTeacherInstructions","promptContainer","renderPlayerContent","__html","renderRationale","React","Component","replaceAll","PropTypes","object","isRequired","func","styles","theme","color","backgroundColor","background","display","primaryLight","padding","spacing","unit","border","secondary","fontSize","tooltipPopper","opacity","marginTop","paddingTop","marginBottom","position","title","zIndex","minWidth","maxWidth","top","borderColor","alignItems","flexWrap","lineHeight","left","right","borderTop","letterSpacing","margin","flex","palette","grey","justifyContent","borderRight","pointerEvents","height","overflow"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport cx from 'classnames';\nimport isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport { withStyles } from '@material-ui/core/styles';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { mq, HorizontalKeypad, updateSpans } from '@pie-lib/pie-toolbox/math-input';\nimport {color, Collapsible, Readable, hasText, hasMedia, PreviewPrompt, UiLayout} from '@pie-lib/pie-toolbox/render-ui';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\nimport MathQuill from '@pie-framework/mathquill';\nimport { Customizable } from '@pie-lib/pie-toolbox/mask-markup';\nimport { CorrectAnswerToggle } from '@pie-lib/pie-toolbox/correct-answer-toggle';\nimport ReactDOM from 'react-dom';\n\nlet registered = false;\n\n// Define a regex pattern to match {{number}}\nconst REGEX = /(\\{\\{\\d+\\}\\})/gm;\nconst DEFAULT_KEYPAD_VARIANT = 6;\n\n// !!! If you're using Chrome but have selected the \"iPad\" device in Chrome Developer Tools, the navigator.userAgent string may still report as\n// Safari because Chrome on iOS actually uses the Safari rendering engine under the hood due to Apple's restrictions on third-party browser engines.\n// When you select the \"iPad\" device in Chrome Developer Tools, you're essentially emulating the behavior of Safari on an iPad, including the user agent string.\n// Therefore, even though you're using Chrome, the user agent string will resemble that of Safari on an iPad.\n// Since the regular expression /^((?!chrome|android).)*safari/i checks for the presence of \"safari\" in the user agent string while excluding \"chrome\" and \"android\",\n// it will return true in this case because \"safari\" is present in the user agent string emulated by Chrome when in iPad mode.\nconst IS_SAFARI = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n}\n\nfunction getKeyPadWidth(additionalKeys = [], equationEditor) {\n return Math.floor(additionalKeys.length / 5) * 30 + (equationEditor === 'miscellaneous' ? 600 : 500);\n}\n\nfunction splitByParts(text) {\n // Use the regex pattern to split the text\n const parts = text.split(REGEX);\n // Filter out empty strings that might result from splitting\n return parts.filter(part => part);\n}\n\nfunction prepareForStatic(model, state) {\n const { responses, disabled, markup, printMode, alwaysShowCorrect } = model || {};\n\n if (markup) {\n if (state.showCorrect) {\n return Object.keys(responses || {}).reduce((acc, responseKey) => {\n acc[responseKey] = responses?.[responseKey]?.answer;\n\n return acc;\n }, {});\n }\n\n const splitted = splitByParts(markup);\n\n\n return splitted.reduce((acc, split) => {\n if (split.match(REGEX)) {\n const responseKey = Main.getResponseKey(split);\n const answer = state.session.answers[`r${responseKey}`];\n\n if (printMode && !alwaysShowCorrect) {\n const blankSpace = '\\\\ \\\\ '.repeat(30) + '\\\\embed{newLine}[] ';\n\n return {\n ...acc,\n [responseKey]: `\\\\MathQuillMathField[r${responseKey}]{${blankSpace.repeat(3)}}`\n };\n }\n\n if (disabled) {\n return {\n ...acc,\n [responseKey]: `\\\\embed{answerBlock}[r${responseKey}]`\n };\n }\n\n return {\n ...acc,\n [responseKey]: `\\\\MathQuillMathField[r${responseKey}]{${(answer && answer.value) || ''}}`\n };\n\n }\n\n return acc;\n }, {});\n }\n}\n\nexport class Main extends React.Component {\n // removes {{ and }} and returns only key response. Eg: {{0}} => 0\n static getResponseKey = response => (response || '').replaceAll('{{', '').replaceAll('}}', '');\n\n static propTypes = {\n classes: PropTypes.object,\n session: PropTypes.object.isRequired,\n onSessionChange: PropTypes.func,\n model: PropTypes.object.isRequired,\n };\n\n constructor(props) {\n super(props);\n\n const answers = {};\n const { model, session } = props || {};\n const { markup, alwaysShowCorrect } = model || {};\n const { answers: sessionAnswers } = session || {};\n\n if (markup) {\n // build out local state model using responses declared in markup\n (markup || '').replace(REGEX, (response) => {\n const responseKey = Main.getResponseKey(response);\n const sessionAnswerForResponse = sessionAnswers && sessionAnswers[`r${responseKey}`];\n\n answers[`r${responseKey}`] = { value: (sessionAnswerForResponse?.value) || '' };\n });\n }\n\n this.state = {\n session: { ...props.session, answers },\n activeAnswerBlock: '',\n showCorrect: alwaysShowCorrect || false,\n };\n }\n\n UNSAFE_componentWillMount() {\n const { classes } = this.props;\n\n if (typeof window !== 'undefined') {\n let MQ = MathQuill.getInterface(2);\n\n if (!registered) {\n MQ.registerEmbed('answerBlock', (data) => ({\n htmlString: `<div class=\"${classes.blockContainer}\">\n <div class=\"${classes.blockResponse}\" id=\"${data}Index\">R</div>\n <div class=\"${classes.blockMath}\">\n <span id=\"${data}\"></span>\n </div>\n </div>`,\n text: () => 'text',\n latex: () => `\\\\embed{answerBlock}[${data}]`,\n }));\n\n registered = true;\n }\n }\n }\n\n handleAnswerBlockDomUpdate = () => {\n const { model, classes } = this.props;\n const { session, showCorrect } = this.state;\n const answers = session.answers;\n\n if (this.root && model.disabled && !showCorrect) {\n Object.keys(answers).forEach((answerId) => {\n const el = this.root.querySelector(`#${answerId}`);\n const indexEl = this.root.querySelector(`#${answerId}Index`);\n\n if (el) {\n let MQ = MathQuill.getInterface(2);\n const answer = answers[answerId];\n\n el.textContent = (answer && answer.value) || '';\n\n if (model.view) {\n el.parentElement.parentElement.classList.remove(classes.correct);\n el.parentElement.parentElement.classList.remove(classes.incorrect);\n }\n\n MQ.StaticMath(el);\n\n indexEl.textContent = 'R';\n }\n });\n }\n\n renderMath(this.root);\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { model } = this.props;\n const { model: nextModel = {} } = nextProps || {};\n const { markup = '', env = {} } = model || {};\n const { markup: nextMarkup = '', env: nextEnv = {}, alwaysShowCorrect: nextAlwaysShowCorrect = false } = nextModel;\n\n const isEvaluateMode = (env) => env && env.mode === 'evaluate';\n\n if (!isEvaluateMode(env) || !isEvaluateMode(nextEnv)) {\n this.setState((prevState) => ({ ...prevState.session, showCorrect: false }));\n }\n\n if (nextAlwaysShowCorrect) {\n this.setState({ showCorrect: true });\n }\n\n const matches = markup.match(REGEX);\n const nextMatches = nextMarkup.match(REGEX);\n\n // If markup changed, and we no longer have the same response area, the session needs to be updated\n if (!isEqual(matches, nextMatches)) {\n const newAnswers = {};\n const answers = this.state.session.answers;\n\n (nextMatches || []).forEach(nextMatch => {\n const responseKey = Main.getResponseKey(nextMatch);\n const sessionAnswerForResponse = answers && answers[`r${responseKey}`];\n\n // build out local state model using responses declared in markup\n newAnswers[`r${responseKey}`] = { value: (sessionAnswerForResponse?.value) || '' };\n\n });\n\n this.setState(\n (state) => ({\n session: {\n ...state.session,\n answers: newAnswers,\n },\n }),\n () => {\n this.props.onSessionChange(this.state.session);\n this.handleAnswerBlockDomUpdate();\n },\n );\n }\n }\n\n shouldComponentUpdate(nextProps, nextState) {\n const sameModel = isEqual(this.props.model, nextProps.model);\n const sameState = isEqual(this.state, nextState);\n\n return !sameModel || !sameState;\n }\n\n componentDidMount() {\n this.handleAnswerBlockDomUpdate();\n setTimeout(() => renderMath(this.root), 100);\n }\n\n componentDidUpdate() {\n this.handleAnswerBlockDomUpdate();\n }\n\n onSubFieldFocus = (id) => {\n this.setState({ activeAnswerBlock: id });\n };\n\n toNodeData = (data) => {\n if (!data) {\n return;\n }\n\n const { type, value } = data;\n\n if (type === 'command' || type === 'cursor') return data;\n\n if (type === 'answer') return { type: 'answer', ...data };\n\n if (value === 'clear') return { type: 'clear' };\n\n return { type: 'write', value };\n };\n\n setInput = (input) => {\n this.input = input;\n };\n\n onClick = (data) => {\n const c = this.toNodeData(data);\n\n if (c.type === 'clear') {\n this.input.clear();\n } else if (c.type === 'command') {\n if (Array.isArray(c.value)) {\n c.value.forEach((vv) => {\n this.input.cmd(vv);\n });\n } else {\n this.input.cmd(c.value);\n }\n } else if (c.type === 'cursor') {\n this.input.keystroke(c.value);\n } else {\n this.input.write(c.value);\n }\n\n this.input.focus();\n };\n\n callOnSessionChange = () => {\n const { onSessionChange } = this.props;\n\n if (onSessionChange) {\n onSessionChange(this.state.session);\n }\n };\n\n toggleShowCorrect = (show) => {\n this.setState({ showCorrect: show }, this.handleAnswerBlockDomUpdate);\n };\n\n subFieldChanged = (name, subfieldValue) => {\n updateSpans();\n\n if (name) {\n this.setState(\n (state) => ({\n session: {\n ...state.session,\n answers: {\n ...state.session.answers,\n [name]: { value: subfieldValue },\n },\n },\n }),\n this.callOnSessionChange,\n );\n }\n };\n\n getFieldName = (changeField, fields) => {\n const { answers } = this.state.session;\n\n if (Object.keys(answers || {}).length) {\n const keys = Object.keys(answers);\n\n return keys.find((k) => {\n const tf = fields[k];\n\n return tf && tf.id == changeField.id;\n });\n }\n };\n\n onBlur = (e) => {\n const { relatedTarget, currentTarget } = e || {};\n\n function getParentWithRoleTooltip(element, depth = 0) {\n // only run this max 16 times\n if (!element || depth >= 16) return null;\n\n const parent = element.offsetParent;\n\n if (!parent) return null;\n\n if (parent.getAttribute('role') === 'tooltip') {\n return parent;\n }\n\n return getParentWithRoleTooltip(parent, depth + 1);\n }\n\n function getDeepChildDataKeypad(element, depth = 0) {\n // only run this max 4 times\n if (!element || depth >= 4) return null;\n\n const child = element?.children?.[0];\n\n if (!child) return null;\n\n if (child.attributes && child.attributes['data-keypad']) {\n return child;\n }\n\n return getDeepChildDataKeypad(child, depth + 1);\n }\n\n const parentWithTooltipRole = getParentWithRoleTooltip(relatedTarget);\n const childWithDataKeypad = parentWithTooltipRole ? getDeepChildDataKeypad(parentWithTooltipRole) : null;\n\n if (!relatedTarget || !currentTarget || !childWithDataKeypad?.attributes['data-keypad']) {\n this.setState({ activeAnswerBlock: '' });\n }\n };\n\n // function for tooltip\n setTooltipRef(ref) {\n // Safari Hack: https://stackoverflow.com/a/42764495/5757635\n setTimeout(() => {\n if (ref && IS_SAFARI) {\n const div = document.querySelector('[role=\\'tooltip\\']');\n\n if (div) {\n const el = div.firstChild;\n el.setAttribute('tabindex', '-1');\n }\n }\n }, 1);\n }\n\n renderTeacherInstructions = () => {\n const { model, classes } = this.props;\n const { teacherInstructions, animationsDisabled } = model || {};\n const showTeacherInstructions = teacherInstructions && (hasText(teacherInstructions) || hasMedia(teacherInstructions));\n\n const teacherInstructionsDiv = (\n <PreviewPrompt defaultClassName=\"teacher-instructions\" prompt={teacherInstructions}/>\n );\n\n return showTeacherInstructions && (\n <div className={classes.collapsible}>\n {!animationsDisabled ? (\n <Collapsible labels={{ hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions' }}>\n {teacherInstructionsDiv}\n </Collapsible>\n ) : (\n teacherInstructionsDiv\n )}\n </div>\n );\n };\n\n renderRationale = () => {\n const { model, classes } = this.props;\n const { rationale, animationsDisabled } = model || {};\n const rationaleDiv = <PreviewPrompt prompt={rationale}/>;\n const showRationale = rationale && (hasText(rationale) || hasMedia(rationale));\n\n return showRationale && (\n <div className={classes.collapsible}>\n {!animationsDisabled ? (\n <Collapsible\n labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }}>{rationaleDiv}</Collapsible>\n ) : (\n rationaleDiv\n )}\n </div>\n );\n }\n\n renderPlayerContent = () => {\n const { model, classes } = this.props;\n const { activeAnswerBlock, showCorrect, session } = this.state;\n const {\n correctness,\n disabled,\n view,\n responses,\n equationEditor,\n customKeys,\n feedback,\n env: { mode } = {},\n printMode,\n alwaysShowCorrect,\n } = model || {};\n\n const emptyResponse = isEmpty(responses);\n const additionalKeys = generateAdditionalKeys(customKeys);\n const statics = prepareForStatic(model, this.state) || '';\n const studentPrintMode = printMode && !alwaysShowCorrect;\n\n return (<div className={classes.inputAndKeypadContainer}>\n <Customizable\n disabled={disabled}\n markup={model.markup}\n // TODO remove the need of value?\n value={{}}\n customMarkMarkupComponent={(id) => {\n const responseIsCorrect = mode === 'evaluate' && feedback && feedback[id];\n\n const MQStatic = <mq.Static\n className={classes.static}\n ref={(mqStatic) => {\n this.mqStatic = mqStatic || this.mqStatic;\n }}\n latex={statics[id]}\n onSubFieldChange={this.subFieldChanged}\n getFieldName={this.getFieldName}\n setInput={this.setInput}\n onSubFieldFocus={this.onSubFieldFocus}\n onBlur={this.onBlur}\n />;\n\n return (\n <div\n className={cx(classes.expression, {\n [classes.incorrect]: !emptyResponse && !responseIsCorrect && !showCorrect,\n [classes.correct]: !emptyResponse && (responseIsCorrect || showCorrect),\n [classes.showCorrectness]: !emptyResponse && disabled && correctness && !view,\n [classes.correctAnswerShown]: showCorrect,\n })}\n >\n <Tooltip\n ref={(ref) => this.setTooltipRef(ref)}\n enterTouchDelay={0}\n interactive\n open={activeAnswerBlock === `r${id}`}\n classes={{ tooltip: classes.keypadTooltip, popper: classes.keypadTooltipPopper }}\n title={Object.keys(session.answers).map(\n (answerId) =>\n (answerId === activeAnswerBlock && !(showCorrect || disabled) && (\n <div\n data-keypad={true}\n key={answerId}\n className={classes.responseContainer}\n style={{ width: getKeyPadWidth(additionalKeys, equationEditor) }}\n >\n <HorizontalKeypad\n additionalKeys={additionalKeys}\n mode={equationEditor || DEFAULT_KEYPAD_VARIANT}\n onClick={this.onClick}\n />\n </div>\n )) ||\n null,\n )}\n >\n {studentPrintMode\n ? (<div className={classes.printContainer}>\n {MQStatic}\n </div>)\n : MQStatic}\n </Tooltip>\n </div>\n )\n }}\n />\n </div>);\n }\n\n render() {\n const { model, classes } = this.props;\n const { showCorrect } = this.state;\n const {\n prompt,\n env: { mode, role } = {},\n extraCSSRules,\n correctness,\n responses,\n language,\n showNote,\n note,\n } = model || {};\n const emptyResponse = isEmpty(responses);\n const showCorrectAnswerToggle = !emptyResponse && correctness && correctness.correctness !== 'correct';\n const displayNote = (showCorrect || (mode === 'view' && role === 'instructor')) && showNote && note;\n\n return (\n <UiLayout extraCSSRules={extraCSSRules} className={classes.mainContainer} ref={(r) => {\n // eslint-disable-next-line react/no-find-dom-node\n const domNode = ReactDOM.findDOMNode(r);\n\n this.root = domNode || this.root;\n }}>\n <div className={classes.main}>\n {/* what is srOnly ? */}\n {mode === 'gather' && <h2 className={classes.srOnly}>Math Equation Response Question</h2>}\n\n <div className={classes.main}>\n {showCorrectAnswerToggle && (\n <CorrectAnswerToggle\n language={language}\n className={classes.toggle}\n show\n toggled={showCorrect}\n onToggle={this.toggleShowCorrect}\n />\n )}\n </div>\n\n {this.renderTeacherInstructions()}\n\n {prompt && (\n <div className={classes.promptContainer}>\n <PreviewPrompt prompt={prompt}/>\n </div>\n )}\n\n <Readable false>\n {this.renderPlayerContent()}\n </Readable>\n\n {displayNote && (\n <div\n className={cx(classes.note, 'note')}\n dangerouslySetInnerHTML={{ __html: note }}\n />\n )}\n\n {this.renderRationale()}\n </div>\n </UiLayout>\n );\n }\n}\n\nconst styles = (theme) => ({\n mainContainer: {\n color: color.text(),\n backgroundColor: color.background(),\n display: 'inline-block',\n },\n tooltip: {\n background: `${color.primaryLight()} !important`,\n color: color.text(),\n padding: theme.spacing.unit * 2,\n border: `1px solid ${color.secondary()}`,\n fontSize: '16px',\n '& :not(.MathJax) > table tr': {\n '&:nth-child(2n)': {\n backgroundColor: 'unset !important',\n },\n },\n },\n tooltipPopper: {\n opacity: 1,\n },\n keypadTooltip: {\n fontSize: 'initial',\n background: 'transparent',\n width: '600px',\n marginTop: 0,\n paddingTop: 0,\n },\n keypadTooltipPopper: {\n background: 'transparent',\n width: '650px',\n opacity: 1,\n },\n promptContainer: {\n marginBottom: theme.spacing.unit * 2,\n },\n main: {\n width: '100%',\n position: 'relative',\n backgroundColor: color.background(),\n color: color.text(),\n },\n title: {\n fontSize: '1.1rem',\n display: 'block',\n marginTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit,\n },\n collapsible: {\n marginBottom: theme.spacing.unit * 2,\n },\n responseContainer: {\n zIndex: 10,\n minWidth: '400px',\n marginTop: theme.spacing.unit * 2,\n },\n expression: {\n maxWidth: 'fit-content',\n '& > .mq-math-mode': {\n '& > .mq-root-block': {\n '& > .mq-editable-field': {\n minWidth: '10px',\n padding: theme.spacing.unit / 4,\n },\n },\n '& sup': {\n top: 0,\n },\n },\n },\n static: {\n '& > .mq-root-block': {\n '& > .mq-editable-field': {\n borderColor: color.text(),\n },\n },\n },\n inputAndKeypadContainer: {\n position: 'relative',\n '& > div > div': {\n display: 'flex',\n alignItems: 'baseline',\n flexWrap: 'wrap'\n },\n '& .mq-overarrow-inner': {\n border: 'none !important',\n padding: '0 !important',\n },\n '& .mq-overarrow-inner-right': {\n display: 'none !important',\n },\n '& .mq-overarrow-inner-left': {\n display: 'none !important',\n },\n '& .mq-overarrow.mq-arrow-both': {\n minWidth: '1.23em',\n '& *': {\n lineHeight: '1 !important',\n },\n '&:before': {\n top: '-0.4em',\n left: '-1px',\n },\n '&:after': {\n top: '-2.4em',\n right: '-1px',\n },\n '&.mq-empty:after': {\n top: '-0.45em',\n },\n },\n '& .mq-overarrow.mq-arrow-right': {\n '&:before': {\n top: '-0.4em',\n right: '-1px',\n },\n },\n '& .mq-longdiv-inner': {\n borderTop: '1px solid !important',\n paddingTop: '1.5px !important',\n },\n '& .mq-parallelogram': {\n lineHeight: 0.85,\n },\n },\n showCorrectness: {\n border: '2px solid',\n },\n correctAnswerShown: {\n padding: theme.spacing.unit,\n letterSpacing: '0.5px',\n },\n correct: {\n borderColor: `${color.correct()} !important`,\n },\n incorrect: {\n borderColor: `${color.incorrect()} !important`,\n },\n blockContainer: {\n margin: `${theme.spacing.unit}px !important`,\n display: 'inline-flex',\n border: '2px solid grey !important',\n },\n blockResponse: {\n flex: 2,\n color: 'grey',\n background: theme.palette.grey['A100'],\n fontSize: '0.8rem !important',\n padding: `${theme.spacing.unit / 2}px !important`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRight: `2px solid ${color.disabled()} !important`,\n },\n toggle: {\n color: color.text(),\n marginBottom: theme.spacing.unit * 2,\n },\n blockMath: {\n color: color.text(),\n backgroundColor: color.background(),\n padding: `${theme.spacing.unit / 2}px !important`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flex: 8,\n '& > .mq-math-mode': {\n '& > .mq-hasCursor': {\n '& > .mq-cursor': {\n display: 'none',\n },\n },\n },\n },\n printContainer: {\n marginBottom: theme.spacing.unit,\n pointerEvents: 'none',\n },\n srOnly: {\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n },\n note: {\n marginBottom: theme.spacing.unit * 2,\n },\n});\n\nexport default withStyles(styles)(Main);\n"],"file":"main.js"}
|
package/module/configure.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_debug, _dll_lodash} from "../../../@pie-lib/pie-toolbox-math-rendering-module@4.1.
|
|
2
|
-
import {_dll_pie_lib__pie_toolbox_config_ui, _dll_pie_lib__pie_toolbox_math_toolbar, _dll_pie_lib__pie_toolbox_render_ui, _dll_pie_lib__pie_toolbox_editable_html} from "../../../@pie-lib/pie-toolbox-module@7.0.
|
|
1
|
+
import {_dll_react, _dll_prop_types, _dll_classnames, _dll_react_dom, _dll_debug, _dll_lodash} from "../../../@pie-lib/pie-toolbox-math-rendering-module@4.1.5/module/index.js";
|
|
2
|
+
import {_dll_pie_lib__pie_toolbox_config_ui, _dll_pie_lib__pie_toolbox_math_toolbar, _dll_pie_lib__pie_toolbox_render_ui, _dll_pie_lib__pie_toolbox_editable_html} from "../../../@pie-lib/pie-toolbox-module@7.0.4/module/index.js";
|
|
3
3
|
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
|
|
4
4
|
function getDefaultExportFromCjs(x) {
|
|
5
5
|
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
@@ -115661,10 +115661,6 @@ const require$$23 = _dll_debug;
|
|
|
115661
115661
|
}
|
|
115662
115662
|
if (typeof window !== 'undefined') {
|
|
115663
115663
|
(0, _html.RegisterHTMLHandler)((0, _browserAdaptor.browserAdaptor)());
|
|
115664
|
-
if (window.MathJax && window.MathJax.Menu) {
|
|
115665
|
-
console.log('Prevent MathJax v2 from interfering with v3 MenuHandler');
|
|
115666
|
-
delete window.MathJax.Menu;
|
|
115667
|
-
}
|
|
115668
115664
|
}
|
|
115669
115665
|
var sreReady = false;
|
|
115670
115666
|
(0, _system.engineReady)().then(function () {
|
|
@@ -115782,9 +115778,7 @@ const require$$23 = _dll_debug;
|
|
|
115782
115778
|
};
|
|
115783
115779
|
var mml = new _mathml.MathML(mmlConfig);
|
|
115784
115780
|
var customMmlFactory = new _MmlFactory.MmlFactory(_objectSpread(_objectSpread({}, _MmlFactory.MmlFactory.defaultNodes), _mstack.mmlNodes));
|
|
115785
|
-
var
|
|
115786
|
-
var handler = window.MathJax && window.MathJax.Menu ? withAssistive : (0, _MenuHandler.MenuHandler)(withAssistive);
|
|
115787
|
-
var classFactory = (0, _semanticEnrich.EnrichHandler)(handler, mml);
|
|
115781
|
+
var classFactory = (0, _semanticEnrich.EnrichHandler)((0, _MenuHandler.MenuHandler)((0, _assistiveMml.AssistiveMmlHandler)(_mathjax.mathjax.handlers.handlesDocument(docProvided))), mml);
|
|
115788
115782
|
var html = classFactory.create(docProvided, {
|
|
115789
115783
|
compileError: function compileError(mj, math, err) {
|
|
115790
115784
|
console.log('bad math?:', math);
|
|
@@ -115795,13 +115789,6 @@ const require$$23 = _dll_debug;
|
|
|
115795
115789
|
console.error(err);
|
|
115796
115790
|
doc.typesetError(math, err);
|
|
115797
115791
|
},
|
|
115798
|
-
menuOptions: {
|
|
115799
|
-
settings: {
|
|
115800
|
-
assistiveMml: true,
|
|
115801
|
-
collapsible: false,
|
|
115802
|
-
explorer: false
|
|
115803
|
-
}
|
|
115804
|
-
},
|
|
115805
115792
|
sre: {
|
|
115806
115793
|
speech: 'deep'
|
|
115807
115794
|
},
|
|
@@ -115836,19 +115823,13 @@ const require$$23 = _dll_debug;
|
|
|
115836
115823
|
var attemptRender = function attemptRender() {
|
|
115837
115824
|
var _updatedDocument$math, _updatedDocument$math2;
|
|
115838
115825
|
var temporary = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
115839
|
-
var usesMenuHandler = !(window.MathJax && window.MathJax.Menu);
|
|
115840
115826
|
var updatedDocument = _this.html.findMath(elements.length ? {
|
|
115841
115827
|
elements: elements
|
|
115842
115828
|
} : {}).compile();
|
|
115843
115829
|
if (!temporary && sreReady) {
|
|
115844
115830
|
updatedDocument = updatedDocument.enrich();
|
|
115845
115831
|
}
|
|
115846
|
-
updatedDocument = updatedDocument.getMetrics().typeset().assistiveMml().attachSpeech();
|
|
115847
|
-
if (usesMenuHandler) {
|
|
115848
|
-
console.log('Using MenuHandler');
|
|
115849
|
-
updatedDocument = updatedDocument.addMenu();
|
|
115850
|
-
}
|
|
115851
|
-
updatedDocument = updatedDocument.updateDocument();
|
|
115832
|
+
updatedDocument = updatedDocument.getMetrics().typeset().assistiveMml().attachSpeech().addMenu().updateDocument();
|
|
115852
115833
|
if (!enrichSpeechInitialized && (0, _typeof2["default"])((_updatedDocument$math = updatedDocument.math.list) === null || _updatedDocument$math === void 0 ? void 0 : (_updatedDocument$math2 = _updatedDocument$math.next) === null || _updatedDocument$math2 === void 0 ? void 0 : _updatedDocument$math2.data) === 'object') {
|
|
115853
115834
|
enrichSpeechInitialized = true;
|
|
115854
115835
|
}
|
|
@@ -126508,9 +126489,9 @@ Object.defineProperty(hasText$1, "__esModule", {
|
|
|
126508
126489
|
value: true
|
|
126509
126490
|
});
|
|
126510
126491
|
hasText$1.hasText = void 0;
|
|
126511
|
-
var dp = new DOMParser();
|
|
126492
|
+
var dp$1 = new DOMParser();
|
|
126512
126493
|
var markupToText = function markupToText(s) {
|
|
126513
|
-
var root = dp.parseFromString(s, 'text/html');
|
|
126494
|
+
var root = dp$1.parseFromString(s, 'text/html');
|
|
126514
126495
|
return root.body.textContent;
|
|
126515
126496
|
};
|
|
126516
126497
|
var hasText = function hasText(s) {
|
|
@@ -126521,6 +126502,20 @@ var hasText = function hasText(s) {
|
|
|
126521
126502
|
return !!(tc && tc.trim());
|
|
126522
126503
|
};
|
|
126523
126504
|
hasText$1.hasText = hasText;
|
|
126505
|
+
var hasMedia$1 = {};
|
|
126506
|
+
Object.defineProperty(hasMedia$1, "__esModule", {
|
|
126507
|
+
value: true
|
|
126508
|
+
});
|
|
126509
|
+
hasMedia$1.hasMedia = void 0;
|
|
126510
|
+
var dp = new DOMParser();
|
|
126511
|
+
var hasMedia = function hasMedia(s) {
|
|
126512
|
+
if (!s) {
|
|
126513
|
+
return false;
|
|
126514
|
+
}
|
|
126515
|
+
var root = dp.parseFromString(s, 'text/html');
|
|
126516
|
+
return !!root.body.querySelector('img') || !!root.body.querySelector('video') || !!root.body.querySelector('audio');
|
|
126517
|
+
};
|
|
126518
|
+
hasMedia$1.hasMedia = hasMedia;
|
|
126524
126519
|
var enableAudioAutoplayImage = {};
|
|
126525
126520
|
(function (exports) {
|
|
126526
126521
|
Object.defineProperty(exports, "__esModule", {
|
|
@@ -126598,6 +126593,12 @@ getDefaultExportFromCjs(enableAudioAutoplayImage);
|
|
|
126598
126593
|
}
|
|
126599
126594
|
});
|
|
126600
126595
|
exports.color = void 0;
|
|
126596
|
+
Object.defineProperty(exports, "hasMedia", {
|
|
126597
|
+
enumerable: true,
|
|
126598
|
+
get: function get() {
|
|
126599
|
+
return _hasMedia.hasMedia;
|
|
126600
|
+
}
|
|
126601
|
+
});
|
|
126601
126602
|
Object.defineProperty(exports, "hasText", {
|
|
126602
126603
|
enumerable: true,
|
|
126603
126604
|
get: function get() {
|
|
@@ -126626,6 +126627,7 @@ getDefaultExportFromCjs(enableAudioAutoplayImage);
|
|
|
126626
126627
|
var color = _interopRequireWildcard(color$1);
|
|
126627
126628
|
exports.color = color;
|
|
126628
126629
|
var _hasText = hasText$1;
|
|
126630
|
+
var _hasMedia = hasMedia$1;
|
|
126629
126631
|
var _enableAudioAutoplayImage = _interopRequireDefault(enableAudioAutoplayImage);
|
|
126630
126632
|
function _getRequireWildcardCache(nodeInterop) {
|
|
126631
126633
|
if (typeof WeakMap !== "function") return null;
|