@pie-element/math-templated 3.6.7-next.20 → 3.6.7-next.25

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.
@@ -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"}
@@ -22822,7 +22822,7 @@ var _controllerUtils = controllerUtils;
22822
22822
  const { translator } = Translator;
22823
22823
 
22824
22824
  const getFeedback = value => value ? 'correct' : 'incorrect';
22825
- const getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');
22825
+ const getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');
22826
22826
 
22827
22827
  const getIsAnswerCorrect = (correctResponse, answerItem) => {
22828
22828
  let answerCorrect = false;
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "repository": "pie-framework/pie-elements",
7
- "version": "3.6.7-next.20+8645a526e",
7
+ "version": "3.6.7-next.25+1be632237",
8
8
  "description": "",
9
9
  "dependencies": {
10
10
  "@material-ui/core": "^3.9.2",
@@ -16,7 +16,7 @@
16
16
  },
17
17
  "author": "",
18
18
  "license": "ISC",
19
- "gitHead": "8645a526eb8d93c6f42ec1b4e088c4865ed2a0a7",
19
+ "gitHead": "1be6322375f0933165a37643c644a68d17856e6b",
20
20
  "scripts": {
21
21
  "postpublish": "../../scripts/postpublish"
22
22
  },