@pie-element/ebsr 12.3.4-next.0 → 13.0.0-beta.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/configure/lib/defaults.js +23 -36
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/index.js +114 -202
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/main.js +188 -271
- package/configure/lib/main.js.map +1 -1
- package/configure/node_modules/@pie-element/multiple-choice/CHANGELOG.json +1972 -0
- package/configure/node_modules/@pie-element/multiple-choice/CHANGELOG.md +4213 -0
- package/configure/node_modules/@pie-element/multiple-choice/PRINT.md +35 -0
- package/configure/node_modules/@pie-element/multiple-choice/README.md +56 -0
- package/configure/node_modules/@pie-element/multiple-choice/choice.png +0 -0
- package/configure/node_modules/@pie-element/multiple-choice/configure/CHANGELOG.json +1387 -0
- package/configure/node_modules/@pie-element/multiple-choice/configure/CHANGELOG.md +3351 -0
- package/configure/node_modules/@pie-element/multiple-choice/configure/lib/__tests__/root.test.js +248 -0
- package/configure/node_modules/@pie-element/multiple-choice/configure/lib/defaults.js +200 -0
- package/configure/node_modules/@pie-element/multiple-choice/configure/lib/defaults.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/configure/lib/index.js +211 -0
- package/configure/node_modules/@pie-element/multiple-choice/configure/lib/index.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/configure/lib/main.js +477 -0
- package/configure/node_modules/@pie-element/multiple-choice/configure/lib/main.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/configure/lib/utils.js +18 -0
- package/configure/node_modules/@pie-element/multiple-choice/configure/lib/utils.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/configure/package.json +22 -0
- package/configure/node_modules/@pie-element/multiple-choice/controller/CHANGELOG.json +527 -0
- package/configure/node_modules/@pie-element/multiple-choice/controller/CHANGELOG.md +2316 -0
- package/configure/node_modules/@pie-element/multiple-choice/controller/lib/__tests__/index.test.js +520 -0
- package/configure/node_modules/@pie-element/multiple-choice/controller/lib/__tests__/utils.test.js +8 -0
- package/configure/node_modules/@pie-element/multiple-choice/controller/lib/defaults.js +33 -0
- package/configure/node_modules/@pie-element/multiple-choice/controller/lib/defaults.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/controller/lib/index.js +251 -0
- package/configure/node_modules/@pie-element/multiple-choice/controller/lib/index.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/controller/lib/utils.js +16 -0
- package/configure/node_modules/@pie-element/multiple-choice/controller/lib/utils.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/controller/package.json +15 -0
- package/configure/node_modules/@pie-element/multiple-choice/docs/config-schema.json +2993 -0
- package/configure/node_modules/@pie-element/multiple-choice/docs/config-schema.json.md +2217 -0
- package/configure/node_modules/@pie-element/multiple-choice/docs/demo/config.js +8 -0
- package/configure/node_modules/@pie-element/multiple-choice/docs/demo/generate.js +61 -0
- package/configure/node_modules/@pie-element/multiple-choice/docs/demo/index.html +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/docs/demo/pie.manifest.json +11 -0
- package/configure/node_modules/@pie-element/multiple-choice/docs/demo/session.js +7 -0
- package/configure/node_modules/@pie-element/multiple-choice/docs/pie-schema.json +1332 -0
- package/configure/node_modules/@pie-element/multiple-choice/docs/pie-schema.json.md +1015 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/__tests__/choice-input-test.js +117 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/__tests__/index-test.js +151 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/__tests__/key-events-test.js +95 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/__tests__/multiple-choice-test.js +223 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/__tests__/session-updater-test.js +70 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/choice-input.js +370 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/choice-input.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/choice.js +197 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/choice.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/feedback-tick.js +130 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/feedback-tick.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/index.js +292 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/index.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/main.js +54 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/main.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/multiple-choice.js +386 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/multiple-choice.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/print.js +92 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/print.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/session-updater.js +37 -0
- package/configure/node_modules/@pie-element/multiple-choice/lib/session-updater.js.map +1 -0
- package/configure/node_modules/@pie-element/multiple-choice/package.json +39 -0
- package/configure/package.json +9 -6
- package/configure/src/__tests__/index.test.js +99 -108
- package/configure/src/index.js +13 -6
- package/configure/src/main.jsx +14 -18
- package/controller/lib/defaults.js +20 -32
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js +224 -349
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +4 -18
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +3 -3
- package/lib/index.js +113 -181
- package/lib/index.js.map +1 -1
- package/lib/print.js +120 -204
- package/lib/print.js.map +1 -1
- package/package.json +5 -9
- package/src/__tests__/index.test.js +18 -5
- package/configure/src/__tests__/__snapshots__/index.test.js.snap +0 -83
- package/module/configure.js +0 -1
- package/module/controller.js +0 -6469
- package/module/demo.js +0 -77
- package/module/element.js +0 -1
- package/module/index.html +0 -21
- package/module/manifest.json +0 -14
- package/module/print-demo.js +0 -115
- package/module/print.html +0 -18
- package/module/print.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["translator","Translator","prepareChoice","model","env","defaultFeedback","choice","out","label","value","role","mode","rationale","rationaleEnabled","correct","feedbackEnabled","feedbackType","feedback","type","parsePart","part","key","session","Object","assign","incorrect","choices","map","disabled","complete","min","filter","c","length","responseCorrect","undefined","normalizePart","base","choicesLayout","verticalMode","normalize","partA","partB","language","question","defaults","updateSession","normalizedQuestion","shuffledValues","us","id","element","update","Promise","resolve","partASession","partALockChoiceOrder","partAChoices","partBChoices","partBSession","partBLockChoiceOrder","e","console","error","partLabels","partLabel","t","lng","index","partLabelType","teacherInstructions","teacherInstructionsEnabled","prompt","promptEnabled","extraCSSRules","createDefaultModel","isCorrect","getScore","config","sessionPart","partialScoringEnabled","maxScore","sessionPartValue","chosen","find","v","correctAndNotChosen","incorrectAndChosen","correctChoices","reduce","total","parseFloat","toFixed","outcome","score","scoreA","scoreB","empty","partialScoring","enabled","max","returnPartCorrect","answers","forEach","i","push","createCorrectResponseSession","partACorrect","partBCorrect","getInnerText","html","replaceAll","getContent","replace","validatePart","minAnswerChoices","maxAnswerChoices","reversedChoices","reverse","errors","choicesErrors","rationaleErrors","hasCorrectResponse","field","required","identicalAnswer","slice","some","nbOfChoices","answerChoices","correctResponse","validate","partAConfig","partBConfig","partAErrors","partBErrors"],"mappings":"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","sourcesContent":["import defaults from './defaults';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport { isResponseCorrect } from './utils';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport Translator from '@pie-lib/translator';\n\nconst { translator } = Translator;\n\nconst prepareChoice = (model, env, defaultFeedback) => (choice) => {\n const out = {\n label: choice.label,\n value: choice.value,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = model.rationaleEnabled ? choice.rationale : null;\n } else {\n out.rationale = null;\n }\n\n if (env.mode === 'evaluate') {\n out.correct = !!choice.correct;\n\n if (model.feedbackEnabled) {\n const feedbackType = (choice.feedback && choice.feedback.type) || 'none';\n\n if (feedbackType === 'default') {\n out.feedback = defaultFeedback[choice.correct ? 'correct' : 'incorrect'];\n } else if (feedbackType === 'custom') {\n out.feedback = choice.feedback.value;\n }\n }\n }\n\n return out;\n};\n\nconst parsePart = (part, key, session, env) => {\n const defaultFeedback = Object.assign({ correct: 'Correct', incorrect: 'Incorrect' }, part.defaultFeedback);\n\n let choices = part.choices ? part.choices.map(prepareChoice(part, env, defaultFeedback)) : [];\n\n return {\n ...part,\n choices,\n disabled: env.mode !== 'gather',\n complete: {\n min: part.choices.filter((c) => c.correct).length,\n },\n responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(part, key, session) : undefined,\n };\n};\n\nconst normalizePart = (model, base) => ({\n ...base,\n ...model,\n choicesLayout: model.choicesLayout || (model.verticalMode === false && 'horizontal') || 'vertical',\n});\n\nexport const normalize = ({ partA = {}, partB = {}, language, ...question }) => ({\n ...defaults,\n ...question,\n partA: normalizePart(partA, { ...defaults.partA, language }),\n partB: normalizePart(partB, { ...defaults.partB, language }),\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport async function model(question, session, env, updateSession) {\n const normalizedQuestion = normalize(question);\n const partA = parsePart(normalizedQuestion.partA, 'partA', session, env);\n const partB = parsePart(normalizedQuestion.partB, 'partB', session, env);\n\n const shuffledValues = {};\n\n const us = (part) => (id, element, update) =>\n new Promise((resolve) => {\n shuffledValues[part] = update.shuffledValues;\n resolve();\n });\n\n const partASession = get(session, 'value.partA');\n const partALockChoiceOrder = lockChoices(normalizedQuestion.partA, partASession, env);\n\n const { choices: partAChoices } = partA || {};\n const { choices: partBChoices } = partB || {};\n\n if (!partALockChoiceOrder && partAChoices && partAChoices.length) {\n partA.choices = await getShuffledChoices(\n partAChoices,\n { shuffledValues: (session.shuffledValues || {}).partA },\n us('partA'),\n 'value',\n );\n }\n\n const partBSession = get(session, 'value.partB');\n const partBLockChoiceOrder = lockChoices(normalizedQuestion.partB, partBSession, env);\n\n if (!partBLockChoiceOrder && partBChoices && partBChoices.length) {\n partB.choices = await getShuffledChoices(\n partBChoices,\n { shuffledValues: (session.shuffledValues || {}).partB },\n us('partB'),\n 'value',\n );\n }\n\n if (!isEmpty(shuffledValues)) {\n if (updateSession && typeof updateSession === 'function') {\n updateSession(session.id, session.element, {\n shuffledValues,\n }).catch((e) => {\n // eslint-disable-next-line no-console\n console.error('update session failed', e);\n });\n }\n }\n\n if (normalizedQuestion.partLabels) {\n const language = normalizedQuestion.language;\n partA.partLabel = translator.t('ebsr.part', {\n lng: language,\n index: normalizedQuestion.partLabelType === 'Letters' ? 'A' : '1',\n });\n partB.partLabel = translator.t('ebsr.part', {\n lng: language,\n index: normalizedQuestion.partLabelType === 'Letters' ? 'B' : '2',\n });\n } else {\n partA.partLabel = undefined;\n partB.partLabel = undefined;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n partA.teacherInstructions = normalizedQuestion.partA.teacherInstructionsEnabled\n ? normalizedQuestion.partA.teacherInstructions\n : null;\n partB.teacherInstructions = normalizedQuestion.partB.teacherInstructionsEnabled\n ? normalizedQuestion.partB.teacherInstructions\n : null;\n } else {\n partA.teacherInstructions = null;\n partB.teacherInstructions = null;\n }\n\n partA.prompt = normalizedQuestion.partA.promptEnabled ? normalizedQuestion.partA.prompt : null;\n partB.prompt = normalizedQuestion.partB.promptEnabled ? normalizedQuestion.partB.prompt : null;\n\n return new Promise((resolve) => {\n resolve({\n disabled: env.mode !== 'gather',\n mode: env.mode,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n partA,\n partB,\n });\n });\n}\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nconst isCorrect = (c) => c.correct === true;\n\nconst getScore = (config, sessionPart, key, partialScoringEnabled) => {\n const { choices = [] } = (config && config[key]) || {};\n const maxScore = choices.length;\n const { value: sessionPartValue } = sessionPart || {};\n\n const chosen = (c) => !!(sessionPartValue || []).find((v) => v === c.value);\n const correctAndNotChosen = (c) => isCorrect(c) && !chosen(c);\n const incorrectAndChosen = (c) => !isCorrect(c) && chosen(c);\n const correctChoices = choices.reduce((total, choice) => {\n if (correctAndNotChosen(choice) || incorrectAndChosen(choice)) {\n return total - 1;\n } else {\n return total;\n }\n }, choices.length);\n\n // determine score for a part\n if (!partialScoringEnabled && correctChoices < maxScore) {\n return 0;\n }\n\n return parseFloat(maxScore ? (correctChoices / maxScore).toFixed(2) : 0);\n};\n\nexport function outcome(config, session, env) {\n return new Promise((resolve) => {\n const { value } = session || {};\n\n if (!session || !value) {\n resolve({ score: 0, scoreA: 0, scoreB: 0, empty: true });\n }\n\n if (value) {\n const { partA, partB } = value || {};\n\n const partialScoringEnabled = partialScoring.enabled(config, env);\n\n const scoreA = getScore(config, partA, 'partA', partialScoringEnabled);\n const scoreB = getScore(config, partB, 'partB', partialScoringEnabled);\n\n if (!partialScoringEnabled) {\n // The EBSR item is worth 1 point\n // That point is awarded if and only if both parts are fully correct, otherwise no points are awarded\n resolve({ score: scoreA === 1 && scoreB === 1 ? 1 : 0, scoreA, scoreB, max: 1 });\n } else {\n // The EBSR item is worth 2 points\n if (scoreA === 1) {\n if (scoreB === 1) {\n // If Part A and Part B are both correct, 2 points are awarded\n resolve({ score: 2, scoreA, scoreB, max: 2 });\n } else {\n // If Part A is correct and part B is incorrect, 1 point is awarded\n resolve({ score: 1, scoreA, scoreB, max: 2 });\n }\n } else {\n // For all other combinations, no points are awarded\n resolve({ score: 0, scoreA, scoreB, max: 2 });\n }\n }\n }\n });\n}\n\nconst returnPartCorrect = (choices) => {\n let answers = [];\n\n choices.forEach((i) => {\n const { correct, value } = i;\n if (correct) {\n answers.push(value);\n }\n });\n return answers;\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { partA, partB } = question;\n\n const partACorrect = returnPartCorrect(partA.choices);\n const partBCorrect = returnPartCorrect(partB.choices);\n\n resolve({\n value: {\n partA: {\n id: 'partA',\n value: partACorrect,\n },\n partB: {\n id: 'partB',\n value: partBCorrect,\n },\n },\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nconst validatePart = (model = {}, config = {}) => {\n const { choices } = model;\n const { minAnswerChoices = 2, maxAnswerChoices } = config;\n const reversedChoices = [...(choices || [])].reverse();\n const errors = {};\n const choicesErrors = {};\n const rationaleErrors = {};\n let hasCorrectResponse = false;\n\n ['teacherInstructions', 'prompt'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n reversedChoices.forEach((choice, index) => {\n const { correct, value, label, rationale } = choice;\n\n if (correct) {\n hasCorrectResponse = true;\n }\n\n if (!getContent(label)) {\n choicesErrors[value] = 'Content should not be empty.';\n } else {\n const identicalAnswer = reversedChoices.slice(index + 1).some((c) => c.label === label);\n\n if (identicalAnswer) {\n choicesErrors[value] = 'Content should be unique.';\n }\n }\n\n if (config.rationale?.required && !getContent(rationale)) {\n rationaleErrors[value] = 'This field is required.';\n }\n });\n\n const nbOfChoices = (choices || []).length;\n\n if (nbOfChoices < minAnswerChoices) {\n errors.answerChoices = `There should be at least ${minAnswerChoices} choices defined.`;\n } else if (nbOfChoices > maxAnswerChoices) {\n errors.answerChoices = `No more than ${maxAnswerChoices} choices should be defined.`;\n }\n\n if (!hasCorrectResponse) {\n errors.correctResponse = 'No correct response defined.';\n }\n\n if (!isEmpty(choicesErrors)) {\n errors.choices = choicesErrors;\n }\n\n if (!isEmpty(rationaleErrors)) {\n errors.rationale = rationaleErrors;\n }\n\n return errors;\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { partA, partB } = model || {};\n const { partA: partAConfig, partB: partBConfig } = config || {};\n\n const partAErrors = validatePart(partA, partAConfig);\n const partBErrors = validatePart(partB, partBConfig);\n\n return { partA: partAErrors, partB: partBErrors };\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_defaults","_interopRequireDefault","require","_controllerUtils","_utils","_get","_isEmpty","_translator","translator","Translator","prepareChoice","model","env","defaultFeedback","choice","out","label","value","role","mode","rationale","rationaleEnabled","correct","feedbackEnabled","feedbackType","feedback","type","parsePart","part","key","session","Object","assign","incorrect","choices","map","disabled","complete","min","filter","c","length","responseCorrect","isResponseCorrect","undefined","normalizePart","base","choicesLayout","verticalMode","normalize","partA","partB","language","question","defaults","exports","updateSession","normalizedQuestion","shuffledValues","us","id","element","update","Promise","resolve","partASession","get","partALockChoiceOrder","lockChoices","partAChoices","partBChoices","getShuffledChoices","partBSession","partBLockChoiceOrder","isEmpty","catch","e","console","error","partLabels","partLabel","t","lng","index","partLabelType","teacherInstructions","teacherInstructionsEnabled","prompt","promptEnabled","extraCSSRules","createDefaultModel","isCorrect","getScore","config","sessionPart","partialScoringEnabled","maxScore","sessionPartValue","chosen","find","v","correctAndNotChosen","incorrectAndChosen","correctChoices","reduce","total","parseFloat","toFixed","outcome","score","scoreA","scoreB","empty","partialScoring","enabled","max","returnPartCorrect","answers","forEach","i","push","createCorrectResponseSession","partACorrect","partBCorrect","getInnerText","html","replaceAll","getContent","replace","validatePart","minAnswerChoices","maxAnswerChoices","reversedChoices","reverse","errors","choicesErrors","rationaleErrors","hasCorrectResponse","field","required","identicalAnswer","slice","some","nbOfChoices","answerChoices","correctResponse","validate","partAConfig","partBConfig","partAErrors","partBErrors"],"sources":["../src/index.js"],"sourcesContent":["import defaults from './defaults';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport { isResponseCorrect } from './utils';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport Translator from '@pie-lib/translator';\n\nconst { translator } = Translator;\n\nconst prepareChoice = (model, env, defaultFeedback) => (choice) => {\n const out = {\n label: choice.label,\n value: choice.value,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = model.rationaleEnabled ? choice.rationale : null;\n } else {\n out.rationale = null;\n }\n\n if (env.mode === 'evaluate') {\n out.correct = !!choice.correct;\n\n if (model.feedbackEnabled) {\n const feedbackType = (choice.feedback && choice.feedback.type) || 'none';\n\n if (feedbackType === 'default') {\n out.feedback = defaultFeedback[choice.correct ? 'correct' : 'incorrect'];\n } else if (feedbackType === 'custom') {\n out.feedback = choice.feedback.value;\n }\n }\n }\n\n return out;\n};\n\nconst parsePart = (part, key, session, env) => {\n const defaultFeedback = Object.assign({ correct: 'Correct', incorrect: 'Incorrect' }, part.defaultFeedback);\n\n let choices = part.choices ? part.choices.map(prepareChoice(part, env, defaultFeedback)) : [];\n\n return {\n ...part,\n choices,\n disabled: env.mode !== 'gather',\n complete: {\n min: part.choices.filter((c) => c.correct).length,\n },\n responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(part, key, session) : undefined,\n };\n};\n\nconst normalizePart = (model, base) => ({\n ...base,\n ...model,\n choicesLayout: model.choicesLayout || (model.verticalMode === false && 'horizontal') || 'vertical',\n});\n\nexport const normalize = ({ partA = {}, partB = {}, language, ...question }) => ({\n ...defaults,\n ...question,\n partA: normalizePart(partA, { ...defaults.partA, language }),\n partB: normalizePart(partB, { ...defaults.partB, language }),\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport async function model(question, session, env, updateSession) {\n const normalizedQuestion = normalize(question);\n const partA = parsePart(normalizedQuestion.partA, 'partA', session, env);\n const partB = parsePart(normalizedQuestion.partB, 'partB', session, env);\n\n const shuffledValues = {};\n\n const us = (part) => (id, element, update) =>\n new Promise((resolve) => {\n shuffledValues[part] = update.shuffledValues;\n resolve();\n });\n\n const partASession = get(session, 'value.partA');\n const partALockChoiceOrder = lockChoices(normalizedQuestion.partA, partASession, env);\n\n const { choices: partAChoices } = partA || {};\n const { choices: partBChoices } = partB || {};\n\n if (!partALockChoiceOrder && partAChoices && partAChoices.length) {\n partA.choices = await getShuffledChoices(\n partAChoices,\n { shuffledValues: (session.shuffledValues || {}).partA },\n us('partA'),\n 'value',\n );\n }\n\n const partBSession = get(session, 'value.partB');\n const partBLockChoiceOrder = lockChoices(normalizedQuestion.partB, partBSession, env);\n\n if (!partBLockChoiceOrder && partBChoices && partBChoices.length) {\n partB.choices = await getShuffledChoices(\n partBChoices,\n { shuffledValues: (session.shuffledValues || {}).partB },\n us('partB'),\n 'value',\n );\n }\n\n if (!isEmpty(shuffledValues)) {\n if (updateSession && typeof updateSession === 'function') {\n updateSession(session.id, session.element, {\n shuffledValues,\n }).catch((e) => {\n // eslint-disable-next-line no-console\n console.error('update session failed', e);\n });\n }\n }\n\n if (normalizedQuestion.partLabels) {\n const language = normalizedQuestion.language;\n partA.partLabel = translator.t('ebsr.part', {\n lng: language,\n index: normalizedQuestion.partLabelType === 'Letters' ? 'A' : '1',\n });\n partB.partLabel = translator.t('ebsr.part', {\n lng: language,\n index: normalizedQuestion.partLabelType === 'Letters' ? 'B' : '2',\n });\n } else {\n partA.partLabel = undefined;\n partB.partLabel = undefined;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n partA.teacherInstructions = normalizedQuestion.partA.teacherInstructionsEnabled\n ? normalizedQuestion.partA.teacherInstructions\n : null;\n partB.teacherInstructions = normalizedQuestion.partB.teacherInstructionsEnabled\n ? normalizedQuestion.partB.teacherInstructions\n : null;\n } else {\n partA.teacherInstructions = null;\n partB.teacherInstructions = null;\n }\n\n partA.prompt = normalizedQuestion.partA.promptEnabled ? normalizedQuestion.partA.prompt : null;\n partB.prompt = normalizedQuestion.partB.promptEnabled ? normalizedQuestion.partB.prompt : null;\n\n return new Promise((resolve) => {\n resolve({\n disabled: env.mode !== 'gather',\n mode: env.mode,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n partA,\n partB,\n });\n });\n}\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nconst isCorrect = (c) => c.correct === true;\n\nconst getScore = (config, sessionPart, key, partialScoringEnabled) => {\n const { choices = [] } = (config && config[key]) || {};\n const maxScore = choices.length;\n const { value: sessionPartValue } = sessionPart || {};\n\n const chosen = (c) => !!(sessionPartValue || []).find((v) => v === c.value);\n const correctAndNotChosen = (c) => isCorrect(c) && !chosen(c);\n const incorrectAndChosen = (c) => !isCorrect(c) && chosen(c);\n const correctChoices = choices.reduce((total, choice) => {\n if (correctAndNotChosen(choice) || incorrectAndChosen(choice)) {\n return total - 1;\n } else {\n return total;\n }\n }, choices.length);\n\n // determine score for a part\n if (!partialScoringEnabled && correctChoices < maxScore) {\n return 0;\n }\n\n return parseFloat(maxScore ? (correctChoices / maxScore).toFixed(2) : 0);\n};\n\nexport function outcome(config, session, env) {\n return new Promise((resolve) => {\n const { value } = session || {};\n\n if (!session || !value) {\n resolve({ score: 0, scoreA: 0, scoreB: 0, empty: true });\n }\n\n if (value) {\n const { partA, partB } = value || {};\n\n const partialScoringEnabled = partialScoring.enabled(config, env);\n\n const scoreA = getScore(config, partA, 'partA', partialScoringEnabled);\n const scoreB = getScore(config, partB, 'partB', partialScoringEnabled);\n\n if (!partialScoringEnabled) {\n // The EBSR item is worth 1 point\n // That point is awarded if and only if both parts are fully correct, otherwise no points are awarded\n resolve({ score: scoreA === 1 && scoreB === 1 ? 1 : 0, scoreA, scoreB, max: 1 });\n } else {\n // The EBSR item is worth 2 points\n if (scoreA === 1) {\n if (scoreB === 1) {\n // If Part A and Part B are both correct, 2 points are awarded\n resolve({ score: 2, scoreA, scoreB, max: 2 });\n } else {\n // If Part A is correct and part B is incorrect, 1 point is awarded\n resolve({ score: 1, scoreA, scoreB, max: 2 });\n }\n } else {\n // For all other combinations, no points are awarded\n resolve({ score: 0, scoreA, scoreB, max: 2 });\n }\n }\n }\n });\n}\n\nconst returnPartCorrect = (choices) => {\n let answers = [];\n\n choices.forEach((i) => {\n const { correct, value } = i;\n if (correct) {\n answers.push(value);\n }\n });\n return answers;\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { partA, partB } = question;\n\n const partACorrect = returnPartCorrect(partA.choices);\n const partBCorrect = returnPartCorrect(partB.choices);\n\n resolve({\n value: {\n partA: {\n id: 'partA',\n value: partACorrect,\n },\n partB: {\n id: 'partB',\n value: partBCorrect,\n },\n },\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nconst validatePart = (model = {}, config = {}) => {\n const { choices } = model;\n const { minAnswerChoices = 2, maxAnswerChoices } = config;\n const reversedChoices = [...(choices || [])].reverse();\n const errors = {};\n const choicesErrors = {};\n const rationaleErrors = {};\n let hasCorrectResponse = false;\n\n ['teacherInstructions', 'prompt'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n reversedChoices.forEach((choice, index) => {\n const { correct, value, label, rationale } = choice;\n\n if (correct) {\n hasCorrectResponse = true;\n }\n\n if (!getContent(label)) {\n choicesErrors[value] = 'Content should not be empty.';\n } else {\n const identicalAnswer = reversedChoices.slice(index + 1).some((c) => c.label === label);\n\n if (identicalAnswer) {\n choicesErrors[value] = 'Content should be unique.';\n }\n }\n\n if (config.rationale?.required && !getContent(rationale)) {\n rationaleErrors[value] = 'This field is required.';\n }\n });\n\n const nbOfChoices = (choices || []).length;\n\n if (nbOfChoices < minAnswerChoices) {\n errors.answerChoices = `There should be at least ${minAnswerChoices} choices defined.`;\n } else if (nbOfChoices > maxAnswerChoices) {\n errors.answerChoices = `No more than ${maxAnswerChoices} choices should be defined.`;\n }\n\n if (!hasCorrectResponse) {\n errors.correctResponse = 'No correct response defined.';\n }\n\n if (!isEmpty(choicesErrors)) {\n errors.choices = choicesErrors;\n }\n\n if (!isEmpty(rationaleErrors)) {\n errors.rationale = rationaleErrors;\n }\n\n return errors;\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { partA, partB } = model || {};\n const { partA: partAConfig, partB: partBConfig } = config || {};\n\n const partAErrors = validatePart(partA, partAConfig);\n const partBErrors = validatePart(partB, partBConfig);\n\n return { partA: partAErrors, partB: partBErrors };\n};\n"],"mappings":"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","ignoreList":[]}
|
package/controller/lib/utils.js
CHANGED
|
@@ -1,33 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports.isResponseCorrect = exports.getCorrectResponse = void 0;
|
|
9
|
-
|
|
10
8
|
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
11
|
-
|
|
12
|
-
var getCorrectResponse = function getCorrectResponse(choices) {
|
|
13
|
-
return choices && choices.filter(function (c) {
|
|
14
|
-
return c.correct;
|
|
15
|
-
}).map(function (c) {
|
|
16
|
-
return c.value;
|
|
17
|
-
}).sort();
|
|
18
|
-
};
|
|
19
|
-
|
|
9
|
+
const getCorrectResponse = choices => choices && choices.filter(c => c.correct).map(c => c.value).sort();
|
|
20
10
|
exports.getCorrectResponse = getCorrectResponse;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
var correctResponse = getCorrectResponse(question.choices);
|
|
24
|
-
|
|
11
|
+
const isResponseCorrect = (question, key, session) => {
|
|
12
|
+
let correctResponse = getCorrectResponse(question.choices);
|
|
25
13
|
if (session && session.value) {
|
|
26
|
-
return (0, _isEqual
|
|
14
|
+
return (0, _isEqual.default)((session.value[key].value || []).sort(), correctResponse);
|
|
27
15
|
}
|
|
28
|
-
|
|
29
16
|
return false;
|
|
30
17
|
};
|
|
31
|
-
|
|
32
18
|
exports.isResponseCorrect = isResponseCorrect;
|
|
33
19
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"utils.js","names":["_isEqual","_interopRequireDefault","require","getCorrectResponse","choices","filter","c","correct","map","value","sort","exports","isResponseCorrect","question","key","session","correctResponse","isEqual"],"sources":["../src/utils.js"],"sourcesContent":["import isEqual from 'lodash/isEqual';\n\nexport const getCorrectResponse = (choices) =>\n choices &&\n choices\n .filter((c) => c.correct)\n .map((c) => c.value)\n .sort();\n\nexport const isResponseCorrect = (question, key, session) => {\n let correctResponse = getCorrectResponse(question.choices);\n\n if (session && session.value) {\n return isEqual((session.value[key].value || []).sort(), correctResponse);\n }\n\n return false;\n};\n"],"mappings":";;;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEO,MAAMC,kBAAkB,GAAIC,OAAO,IACxCA,OAAO,IACPA,OAAO,CACJC,MAAM,CAAEC,CAAC,IAAKA,CAAC,CAACC,OAAO,CAAC,CACxBC,GAAG,CAAEF,CAAC,IAAKA,CAAC,CAACG,KAAK,CAAC,CACnBC,IAAI,CAAC,CAAC;AAACC,OAAA,CAAAR,kBAAA,GAAAA,kBAAA;AAEL,MAAMS,iBAAiB,GAAGA,CAACC,QAAQ,EAAEC,GAAG,EAAEC,OAAO,KAAK;EAC3D,IAAIC,eAAe,GAAGb,kBAAkB,CAACU,QAAQ,CAACT,OAAO,CAAC;EAE1D,IAAIW,OAAO,IAAIA,OAAO,CAACN,KAAK,EAAE;IAC5B,OAAO,IAAAQ,gBAAO,EAAC,CAACF,OAAO,CAACN,KAAK,CAACK,GAAG,CAAC,CAACL,KAAK,IAAI,EAAE,EAAEC,IAAI,CAAC,CAAC,EAAEM,eAAe,CAAC;EAC1E;EAEA,OAAO,KAAK;AACd,CAAC;AAACL,OAAA,CAAAC,iBAAA,GAAAA,iBAAA","ignoreList":[]}
|
package/controller/package.json
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/ebsr-controller",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "10.0.0-beta.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@pie-lib/controller-utils": "0.22.
|
|
11
|
-
"@pie-lib/translator": "2.23.
|
|
10
|
+
"@pie-lib/controller-utils": "0.22.4-next.0",
|
|
11
|
+
"@pie-lib/translator": "2.23.3-next.0",
|
|
12
12
|
"lodash": "^4.17.15"
|
|
13
13
|
},
|
|
14
14
|
"author": "",
|
package/lib/index.js
CHANGED
|
@@ -1,214 +1,146 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
exports.isSessionComplete = exports
|
|
9
|
-
|
|
10
|
-
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
11
|
-
|
|
12
|
-
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
13
|
-
|
|
7
|
+
exports.isSessionComplete = exports.default = void 0;
|
|
14
8
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
-
|
|
16
|
-
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
17
|
-
|
|
18
|
-
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
19
|
-
|
|
20
|
-
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
21
|
-
|
|
22
|
-
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
23
|
-
|
|
24
|
-
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
25
|
-
|
|
26
9
|
var _piePlayerEvents = require("@pie-framework/pie-player-events");
|
|
27
|
-
|
|
28
10
|
var _multipleChoice = _interopRequireDefault(require("@pie-element/multiple-choice"));
|
|
29
|
-
|
|
30
11
|
var _get = _interopRequireDefault(require("lodash/get"));
|
|
31
|
-
|
|
32
12
|
var _debug = _interopRequireDefault(require("debug"));
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
39
|
-
|
|
40
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
41
|
-
|
|
42
|
-
var SESSION_CHANGED = _piePlayerEvents.SessionChangedEvent.TYPE;
|
|
43
|
-
var MC_TAG_NAME = 'ebsr-multiple-choice';
|
|
44
|
-
var log = (0, _debug["default"])('pie-elements:ebsr');
|
|
45
|
-
|
|
46
|
-
var EbsrMC = /*#__PURE__*/function (_MultipleChoice) {
|
|
47
|
-
(0, _inherits2["default"])(EbsrMC, _MultipleChoice);
|
|
48
|
-
|
|
49
|
-
var _super = _createSuper(EbsrMC);
|
|
50
|
-
|
|
51
|
-
function EbsrMC() {
|
|
52
|
-
(0, _classCallCheck2["default"])(this, EbsrMC);
|
|
53
|
-
return _super.apply(this, arguments);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
return (0, _createClass2["default"])(EbsrMC);
|
|
57
|
-
}(_multipleChoice["default"]);
|
|
58
|
-
|
|
59
|
-
var defineMultipleChoice = function defineMultipleChoice() {
|
|
13
|
+
const SESSION_CHANGED = _piePlayerEvents.SessionChangedEvent.TYPE;
|
|
14
|
+
const MC_TAG_NAME = 'ebsr-multiple-choice';
|
|
15
|
+
const log = (0, _debug.default)('pie-elements:ebsr');
|
|
16
|
+
class EbsrMC extends _multipleChoice.default {}
|
|
17
|
+
const defineMultipleChoice = () => {
|
|
60
18
|
if (!customElements.get(MC_TAG_NAME)) {
|
|
61
19
|
customElements.define(MC_TAG_NAME, EbsrMC);
|
|
62
20
|
}
|
|
63
21
|
};
|
|
64
|
-
|
|
65
22
|
defineMultipleChoice();
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
var isSessionComplete = function isSessionComplete(session) {
|
|
72
|
-
var a = (0, _get["default"])(session, 'value.partA.value');
|
|
73
|
-
var b = (0, _get["default"])(session, 'value.partB.value');
|
|
23
|
+
const isNonEmptyArray = a => Array.isArray(a) && a.length > 0;
|
|
24
|
+
const isSessionComplete = session => {
|
|
25
|
+
const a = (0, _get.default)(session, 'value.partA.value');
|
|
26
|
+
const b = (0, _get.default)(session, 'value.partB.value');
|
|
74
27
|
return isNonEmptyArray(a) && isNonEmptyArray(b);
|
|
75
28
|
};
|
|
76
|
-
|
|
77
29
|
exports.isSessionComplete = isSessionComplete;
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
function Ebsr() {
|
|
85
|
-
var _this;
|
|
86
|
-
|
|
87
|
-
(0, _classCallCheck2["default"])(this, Ebsr);
|
|
88
|
-
_this = _super2.call(this);
|
|
89
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onSessionUpdated", function (e) {
|
|
90
|
-
if (e.target === (0, _assertThisInitialized2["default"])(_this)) {
|
|
30
|
+
class Ebsr extends HTMLElement {
|
|
31
|
+
constructor() {
|
|
32
|
+
super();
|
|
33
|
+
(0, _defineProperty2.default)(this, "onSessionUpdated", e => {
|
|
34
|
+
if (e.target === this) {
|
|
91
35
|
return;
|
|
92
36
|
}
|
|
93
|
-
|
|
94
37
|
e.preventDefault();
|
|
95
38
|
e.stopImmediatePropagation();
|
|
96
|
-
|
|
97
|
-
|
|
39
|
+
const id = e.target.getAttribute('id');
|
|
98
40
|
if (id) {
|
|
99
|
-
|
|
100
|
-
|
|
41
|
+
const key = `part${id.toUpperCase()}`;
|
|
101
42
|
if (e.update) {
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
_this.dispatchSessionChanged(e.srcElement._session, key);
|
|
43
|
+
this._model[key] = e.update;
|
|
44
|
+
}
|
|
45
|
+
//TODO: accessing a private property here. The session event should contain the update in future to prevent this.
|
|
46
|
+
this.dispatchSessionChanged(e.srcElement._session, key);
|
|
107
47
|
}
|
|
108
48
|
});
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
return _this;
|
|
49
|
+
this._model = {};
|
|
50
|
+
this._session = {};
|
|
112
51
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
}, {
|
|
142
|
-
key: "setPartModel",
|
|
143
|
-
value: function setPartModel(part, key) {
|
|
144
|
-
if (this._model && this._model[key] && part) {
|
|
145
|
-
var mode = this._model.mode;
|
|
146
|
-
part.model = _objectSpread(_objectSpread({}, this._model[key]), {}, {
|
|
147
|
-
mode: mode,
|
|
148
|
-
keyMode: this._model[key].choicePrefix
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}, {
|
|
153
|
-
key: "setPartSession",
|
|
154
|
-
value: function setPartSession(part, key) {
|
|
155
|
-
if (this._session && this._model && part) {
|
|
156
|
-
var value = this._session.value;
|
|
157
|
-
part.session = value && value[key] ? value[key] : {
|
|
158
|
-
id: key
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}, {
|
|
163
|
-
key: "dispatchSessionChanged",
|
|
164
|
-
value: function dispatchSessionChanged(partSession, key) {
|
|
165
|
-
this._session.value = _objectSpread(_objectSpread({}, this._session.value), {}, (0, _defineProperty2["default"])({}, key, partSession));
|
|
166
|
-
log('[onSessionChanged] session: ', this._session);
|
|
167
|
-
var complete = isSessionComplete(this._session);
|
|
168
|
-
this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(this.tagName.toLowerCase(), complete));
|
|
169
|
-
}
|
|
170
|
-
}, {
|
|
171
|
-
key: "partA",
|
|
172
|
-
get: function get() {
|
|
173
|
-
return this.querySelector("".concat(MC_TAG_NAME, "#a"));
|
|
174
|
-
}
|
|
175
|
-
}, {
|
|
176
|
-
key: "partB",
|
|
177
|
-
get: function get() {
|
|
178
|
-
return this.querySelector("".concat(MC_TAG_NAME, "#b"));
|
|
179
|
-
}
|
|
180
|
-
}, {
|
|
181
|
-
key: "connectedCallback",
|
|
182
|
-
value: function connectedCallback() {
|
|
183
|
-
this._render();
|
|
184
|
-
|
|
185
|
-
this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);
|
|
52
|
+
set model(m) {
|
|
53
|
+
this._model = m;
|
|
54
|
+
customElements.whenDefined(MC_TAG_NAME).then(() => {
|
|
55
|
+
this.setPartModel(this.partA, 'partA');
|
|
56
|
+
this.setPartModel(this.partB, 'partB');
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
set session(s) {
|
|
60
|
+
this._session = s;
|
|
61
|
+
customElements.whenDefined(MC_TAG_NAME).then(() => {
|
|
62
|
+
this.setPartSession(this.partA, 'partA');
|
|
63
|
+
this.setPartSession(this.partB, 'partB');
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
get session() {
|
|
67
|
+
return this._session;
|
|
68
|
+
}
|
|
69
|
+
setPartModel(part, key) {
|
|
70
|
+
if (this._model && this._model[key] && part) {
|
|
71
|
+
const {
|
|
72
|
+
mode
|
|
73
|
+
} = this._model;
|
|
74
|
+
part.model = {
|
|
75
|
+
...this._model[key],
|
|
76
|
+
mode,
|
|
77
|
+
keyMode: this._model[key].choicePrefix
|
|
78
|
+
};
|
|
186
79
|
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
80
|
+
}
|
|
81
|
+
setPartSession(part, key) {
|
|
82
|
+
if (this._session && this._model && part) {
|
|
83
|
+
const {
|
|
84
|
+
value
|
|
85
|
+
} = this._session;
|
|
86
|
+
part.session = value && value[key] ? value[key] : {
|
|
87
|
+
id: key
|
|
88
|
+
};
|
|
191
89
|
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
value
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
90
|
+
}
|
|
91
|
+
dispatchSessionChanged(partSession, key) {
|
|
92
|
+
this._session.value = {
|
|
93
|
+
...this._session.value,
|
|
94
|
+
[key]: partSession
|
|
95
|
+
};
|
|
96
|
+
log('[onSessionChanged] session: ', this._session);
|
|
97
|
+
const complete = isSessionComplete(this._session);
|
|
98
|
+
this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(this.tagName.toLowerCase(), complete));
|
|
99
|
+
}
|
|
100
|
+
get partA() {
|
|
101
|
+
return this.querySelector(`${MC_TAG_NAME}#a`);
|
|
102
|
+
}
|
|
103
|
+
get partB() {
|
|
104
|
+
return this.querySelector(`${MC_TAG_NAME}#b`);
|
|
105
|
+
}
|
|
106
|
+
connectedCallback() {
|
|
107
|
+
this._render();
|
|
108
|
+
this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);
|
|
109
|
+
}
|
|
110
|
+
disconnectedCallback() {
|
|
111
|
+
this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);
|
|
112
|
+
}
|
|
113
|
+
_render() {
|
|
114
|
+
this.ariaLabel = 'Two-Part Question';
|
|
115
|
+
this.role = 'region';
|
|
116
|
+
this.innerHTML = `
|
|
117
|
+
<style>
|
|
118
|
+
.srOnly {
|
|
119
|
+
position: absolute;
|
|
120
|
+
width: 1px;
|
|
121
|
+
height: 1px;
|
|
122
|
+
padding: 0;
|
|
123
|
+
margin: -1px;
|
|
124
|
+
overflow: hidden;
|
|
125
|
+
left: -10000px;
|
|
126
|
+
top: auto;
|
|
207
127
|
}
|
|
128
|
+
${this._model?.extraCSSRules?.rules}
|
|
129
|
+
</style>
|
|
130
|
+
<h2 class="srOnly">Two-Part Question</h2>
|
|
131
|
+
<${MC_TAG_NAME} id="a"></${MC_TAG_NAME}>
|
|
132
|
+
<${MC_TAG_NAME} id="b"></${MC_TAG_NAME}>
|
|
133
|
+
`;
|
|
134
|
+
|
|
135
|
+
// when item is re-rendered (due to connectedCallback), if the custom element is already defined,
|
|
136
|
+
// we need to set the model and session, otherwise the setters are not reached again
|
|
137
|
+
if (customElements.get(MC_TAG_NAME)) {
|
|
138
|
+
this.setPartModel(this.partA, 'partA');
|
|
139
|
+
this.setPartModel(this.partB, 'partB');
|
|
140
|
+
this.setPartSession(this.partA, 'partA');
|
|
141
|
+
this.setPartSession(this.partB, 'partB');
|
|
208
142
|
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
exports["default"] = Ebsr;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
exports.default = Ebsr;
|
|
214
146
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","names":["_piePlayerEvents","require","_multipleChoice","_interopRequireDefault","_get","_debug","SESSION_CHANGED","SessionChangedEvent","TYPE","MC_TAG_NAME","log","debug","EbsrMC","MultipleChoice","defineMultipleChoice","customElements","get","define","isNonEmptyArray","a","Array","isArray","length","isSessionComplete","session","b","exports","Ebsr","HTMLElement","constructor","_defineProperty2","default","e","target","preventDefault","stopImmediatePropagation","id","getAttribute","key","toUpperCase","update","_model","dispatchSessionChanged","srcElement","_session","model","m","whenDefined","then","setPartModel","partA","partB","s","setPartSession","part","mode","keyMode","choicePrefix","value","partSession","complete","dispatchEvent","tagName","toLowerCase","querySelector","connectedCallback","_render","addEventListener","onSessionUpdated","disconnectedCallback","removeEventListener","ariaLabel","role","innerHTML","extraCSSRules","rules"],"sources":["../src/index.js"],"sourcesContent":["import { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport MultipleChoice from '@pie-element/multiple-choice';\nimport get from 'lodash/get';\nimport debug from 'debug';\n\nconst SESSION_CHANGED = SessionChangedEvent.TYPE;\nconst MC_TAG_NAME = 'ebsr-multiple-choice';\nconst log = debug('pie-elements:ebsr');\n\nclass EbsrMC extends MultipleChoice {}\n\nconst defineMultipleChoice = () => {\n if (!customElements.get(MC_TAG_NAME)) {\n customElements.define(MC_TAG_NAME, EbsrMC);\n }\n};\n\ndefineMultipleChoice();\n\nconst isNonEmptyArray = (a) => Array.isArray(a) && a.length > 0;\n\nexport const isSessionComplete = (session) => {\n const a = get(session, 'value.partA.value');\n const b = get(session, 'value.partB.value');\n\n return isNonEmptyArray(a) && isNonEmptyArray(b);\n};\n\nexport default class Ebsr extends HTMLElement {\n constructor() {\n super();\n this._model = {};\n this._session = {};\n }\n\n onSessionUpdated = (e) => {\n if (e.target === this) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n\n const id = e.target.getAttribute('id');\n\n if (id) {\n const key = `part${id.toUpperCase()}`;\n\n if (e.update) {\n this._model[key] = e.update;\n }\n //TODO: accessing a private property here. The session event should contain the update in future to prevent this.\n this.dispatchSessionChanged(e.srcElement._session, key);\n }\n };\n\n set model(m) {\n this._model = m;\n\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartModel(this.partA, 'partA');\n this.setPartModel(this.partB, 'partB');\n });\n }\n\n set session(s) {\n this._session = s;\n\n customElements.whenDefined(MC_TAG_NAME).then(() => {\n this.setPartSession(this.partA, 'partA');\n this.setPartSession(this.partB, 'partB');\n });\n }\n\n get session() {\n return this._session;\n }\n\n setPartModel(part, key) {\n if (this._model && this._model[key] && part) {\n const { mode } = this._model;\n\n part.model = {\n ...this._model[key],\n mode,\n keyMode: this._model[key].choicePrefix,\n };\n }\n }\n\n setPartSession(part, key) {\n if (this._session && this._model && part) {\n const { value } = this._session;\n part.session = value && value[key] ? value[key] : { id: key };\n }\n }\n\n dispatchSessionChanged(partSession, key) {\n this._session.value = {\n ...this._session.value,\n [key]: partSession,\n };\n\n log('[onSessionChanged] session: ', this._session);\n const complete = isSessionComplete(this._session);\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), complete));\n }\n\n get partA() {\n return this.querySelector(`${MC_TAG_NAME}#a`);\n }\n\n get partB() {\n return this.querySelector(`${MC_TAG_NAME}#b`);\n }\n\n connectedCallback() {\n this._render();\n this.addEventListener(SESSION_CHANGED, this.onSessionUpdated);\n }\n\n disconnectedCallback() {\n this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);\n }\n\n _render() {\n this.ariaLabel = 'Two-Part Question';\n this.role = 'region';\n this.innerHTML = `\n <style>\n .srOnly {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n left: -10000px;\n top: auto;\n }\n ${this._model?.extraCSSRules?.rules}\n </style>\n <h2 class=\"srOnly\">Two-Part Question</h2>\n <${MC_TAG_NAME} id=\"a\"></${MC_TAG_NAME}>\n <${MC_TAG_NAME} id=\"b\"></${MC_TAG_NAME}>\n `;\n\n // when item is re-rendered (due to connectedCallback), if the custom element is already defined,\n // we need to set the model and session, otherwise the setters are not reached again\n if (customElements.get(MC_TAG_NAME)) {\n this.setPartModel(this.partA, 'partA');\n this.setPartModel(this.partB, 'partB');\n this.setPartSession(this.partA, 'partA');\n this.setPartSession(this.partB, 'partB');\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|