@pie-element/ebsr 12.3.4-next.3 → 13.0.0-beta.1

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.
Files changed (45) hide show
  1. package/CHANGELOG.md +0 -11
  2. package/configure/CHANGELOG.md +0 -11
  3. package/configure/lib/defaults.js +23 -36
  4. package/configure/lib/defaults.js.map +1 -1
  5. package/configure/lib/index.js +114 -202
  6. package/configure/lib/index.js.map +1 -1
  7. package/configure/lib/main.js +188 -271
  8. package/configure/lib/main.js.map +1 -1
  9. package/configure/package.json +9 -6
  10. package/configure/src/__tests__/index.test.js +99 -108
  11. package/configure/src/index.js +13 -6
  12. package/configure/src/main.jsx +14 -18
  13. package/controller/CHANGELOG.md +0 -11
  14. package/controller/lib/defaults.js +20 -32
  15. package/controller/lib/defaults.js.map +1 -1
  16. package/controller/lib/index.js +224 -349
  17. package/controller/lib/index.js.map +1 -1
  18. package/controller/lib/utils.js +4 -18
  19. package/controller/lib/utils.js.map +1 -1
  20. package/controller/package.json +3 -3
  21. package/lib/index.js +113 -181
  22. package/lib/index.js.map +1 -1
  23. package/lib/print.js +120 -204
  24. package/lib/print.js.map +1 -1
  25. package/package.json +5 -13
  26. package/src/__tests__/index.test.js +18 -5
  27. package/configure/src/__tests__/__snapshots__/index.test.js.snap +0 -83
  28. package/esm/configure.js +0 -12003
  29. package/esm/configure.js.map +0 -1
  30. package/esm/controller.js +0 -3358
  31. package/esm/controller.js.map +0 -1
  32. package/esm/element.js +0 -2203
  33. package/esm/element.js.map +0 -1
  34. package/esm/package.json +0 -3
  35. package/esm/print.js +0 -4092
  36. package/esm/print.js.map +0 -1
  37. package/module/configure.js +0 -1
  38. package/module/controller.js +0 -6469
  39. package/module/demo.js +0 -77
  40. package/module/element.js +0 -1
  41. package/module/index.html +0 -21
  42. package/module/manifest.json +0 -14
  43. package/module/print-demo.js +0 -115
  44. package/module/print.html +0 -18
  45. 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":[]}
@@ -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
- var isResponseCorrect = function isResponseCorrect(question, key, session) {
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["default"])((session.value[key].value || []).sort(), correctResponse);
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,"sources":["../src/utils.js"],"names":["getCorrectResponse","choices","filter","c","correct","map","value","sort","isResponseCorrect","question","key","session","correctResponse"],"mappings":";;;;;;;;;AAAA;;AAEO,IAAMA,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,OAAD;AAAA,SAChCA,OAAO,IACPA,OAAO,CACJC,MADH,CACU,UAACC,CAAD;AAAA,WAAOA,CAAC,CAACC,OAAT;AAAA,GADV,EAEGC,GAFH,CAEO,UAACF,CAAD;AAAA,WAAOA,CAAC,CAACG,KAAT;AAAA,GAFP,EAGGC,IAHH,EAFgC;AAAA,CAA3B;;;;AAOA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACC,QAAD,EAAWC,GAAX,EAAgBC,OAAhB,EAA4B;AAC3D,MAAIC,eAAe,GAAGZ,kBAAkB,CAACS,QAAQ,CAACR,OAAV,CAAxC;;AAEA,MAAIU,OAAO,IAAIA,OAAO,CAACL,KAAvB,EAA8B;AAC5B,WAAO,yBAAQ,CAACK,OAAO,CAACL,KAAR,CAAcI,GAAd,EAAmBJ,KAAnB,IAA4B,EAA7B,EAAiCC,IAAjC,EAAR,EAAiDK,eAAjD,CAAP;AACD;;AAED,SAAO,KAAP;AACD,CARM","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"],"file":"utils.js"}
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":[]}
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@pie-element/ebsr-controller",
3
3
  "private": true,
4
- "version": "9.3.3",
4
+ "version": "10.0.0-beta.1",
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.2",
11
- "@pie-lib/translator": "2.23.1",
10
+ "@pie-lib/controller-utils": "1.1.0-next.4",
11
+ "@pie-lib/translator": "3.1.0-next.4",
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["default"] = void 0;
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
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
35
-
36
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
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
- var isNonEmptyArray = function isNonEmptyArray(a) {
68
- return Array.isArray(a) && a.length > 0;
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
- var Ebsr = /*#__PURE__*/function (_HTMLElement) {
80
- (0, _inherits2["default"])(Ebsr, _HTMLElement);
81
-
82
- var _super2 = _createSuper(Ebsr);
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
- var id = e.target.getAttribute('id');
97
-
39
+ const id = e.target.getAttribute('id');
98
40
  if (id) {
99
- var key = "part".concat(id.toUpperCase());
100
-
41
+ const key = `part${id.toUpperCase()}`;
101
42
  if (e.update) {
102
- _this._model[key] = e.update;
103
- } //TODO: accessing a private property here. The session event should contain the update in future to prevent this.
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
- _this._model = {};
110
- _this._session = {};
111
- return _this;
49
+ this._model = {};
50
+ this._session = {};
112
51
  }
113
-
114
- (0, _createClass2["default"])(Ebsr, [{
115
- key: "model",
116
- set: function set(m) {
117
- var _this2 = this;
118
-
119
- this._model = m;
120
- customElements.whenDefined(MC_TAG_NAME).then(function () {
121
- _this2.setPartModel(_this2.partA, 'partA');
122
-
123
- _this2.setPartModel(_this2.partB, 'partB');
124
- });
125
- }
126
- }, {
127
- key: "session",
128
- get: function get() {
129
- return this._session;
130
- },
131
- set: function set(s) {
132
- var _this3 = this;
133
-
134
- this._session = s;
135
- customElements.whenDefined(MC_TAG_NAME).then(function () {
136
- _this3.setPartSession(_this3.partA, 'partA');
137
-
138
- _this3.setPartSession(_this3.partB, 'partB');
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
- key: "disconnectedCallback",
189
- value: function disconnectedCallback() {
190
- this.removeEventListener(SESSION_CHANGED, this.onSessionUpdated);
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
- key: "_render",
194
- value: function _render() {
195
- var _this$_model, _this$_model$extraCSS;
196
-
197
- this.ariaLabel = 'Two-Part Question';
198
- this.role = 'region';
199
- 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 ".concat((_this$_model = this._model) === null || _this$_model === void 0 ? void 0 : (_this$_model$extraCSS = _this$_model.extraCSSRules) === null || _this$_model$extraCSS === void 0 ? void 0 : _this$_model$extraCSS.rules, "\n </style>\n <h2 class=\"srOnly\">Two-Part Question</h2>\n <").concat(MC_TAG_NAME, " id=\"a\"></").concat(MC_TAG_NAME, ">\n <").concat(MC_TAG_NAME, " id=\"b\"></").concat(MC_TAG_NAME, ">\n "); // when item is re-rendered (due to connectedCallback), if the custom element is already defined,
200
- // we need to set the model and session, otherwise the setters are not reached again
201
-
202
- if (customElements.get(MC_TAG_NAME)) {
203
- this.setPartModel(this.partA, 'partA');
204
- this.setPartModel(this.partB, 'partB');
205
- this.setPartSession(this.partA, 'partA');
206
- this.setPartSession(this.partB, 'partB');
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
- return Ebsr;
211
- }( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
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,"sources":["../src/index.js"],"names":["SESSION_CHANGED","SessionChangedEvent","TYPE","MC_TAG_NAME","log","EbsrMC","MultipleChoice","defineMultipleChoice","customElements","get","define","isNonEmptyArray","a","Array","isArray","length","isSessionComplete","session","b","Ebsr","e","target","preventDefault","stopImmediatePropagation","id","getAttribute","key","toUpperCase","update","_model","dispatchSessionChanged","srcElement","_session","m","whenDefined","then","setPartModel","partA","partB","s","setPartSession","part","mode","model","keyMode","choicePrefix","value","partSession","complete","dispatchEvent","tagName","toLowerCase","querySelector","_render","addEventListener","onSessionUpdated","removeEventListener","ariaLabel","role","innerHTML","extraCSSRules","rules","HTMLElement"],"mappings":"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","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"],"file":"index.js"}
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":[]}