@pie-element/categorize 8.11.1-next.2 → 8.11.1-next.33
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/package.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"@material-ui/core": "^3.9.2",
|
|
13
13
|
"@material-ui/icons": "^3.0.1",
|
|
14
14
|
"@pie-framework/pie-configure-events": "^1.3.0",
|
|
15
|
-
"@pie-lib/pie-toolbox": "1.12.
|
|
15
|
+
"@pie-lib/pie-toolbox": "1.12.2",
|
|
16
16
|
"classnames": "^2.2.5",
|
|
17
17
|
"debug": "^3.1.0",
|
|
18
18
|
"lodash": "^4.17.15",
|
package/controller/lib/index.js
CHANGED
|
@@ -333,12 +333,18 @@ var createCorrectResponseSession = function createCorrectResponseSession(questio
|
|
|
333
333
|
return resolve(null);
|
|
334
334
|
}
|
|
335
335
|
});
|
|
336
|
-
};
|
|
336
|
+
}; // remove all html tags
|
|
337
|
+
|
|
337
338
|
|
|
338
339
|
exports.createCorrectResponseSession = createCorrectResponseSession;
|
|
339
340
|
|
|
340
341
|
var getInnerText = function getInnerText(html) {
|
|
341
342
|
return (html || '').replaceAll(/<[^>]*>/g, '');
|
|
343
|
+
}; // remove all html tags except img and iframe
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
var getContent = function getContent(html) {
|
|
347
|
+
return (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');
|
|
342
348
|
};
|
|
343
349
|
|
|
344
350
|
var validate = function validate() {
|
|
@@ -366,29 +372,27 @@ var validate = function validate() {
|
|
|
366
372
|
['teacherInstructions', 'prompt', 'rationale'].forEach(function (field) {
|
|
367
373
|
var _config$field;
|
|
368
374
|
|
|
369
|
-
if ((_config$field = config[field]) !== null && _config$field !== void 0 && _config$field.required && !
|
|
370
|
-
errors[field] = 'This field is required';
|
|
375
|
+
if ((_config$field = config[field]) !== null && _config$field !== void 0 && _config$field.required && !getContent(model[field])) {
|
|
376
|
+
errors[field] = 'This field is required.';
|
|
371
377
|
}
|
|
372
378
|
});
|
|
373
379
|
(categories || []).forEach(function (category) {
|
|
374
380
|
var id = category.id,
|
|
375
381
|
label = category.label;
|
|
376
|
-
var parsedLabel = label.replace(/<(?:.|\n)*?>/gm, '');
|
|
377
382
|
|
|
378
|
-
if (
|
|
383
|
+
if (getInnerText(label).length > maxLengthPerCategory) {
|
|
379
384
|
categoriesErrors[id] = "Category labels should be no more than ".concat(maxLengthPerCategory, " characters long.");
|
|
380
385
|
}
|
|
381
386
|
});
|
|
382
387
|
(reversedChoices || []).forEach(function (choice, index) {
|
|
383
388
|
var id = choice.id,
|
|
384
389
|
content = choice.content;
|
|
385
|
-
var parsedContent = content.replace(/<(?:.|\n)*?>/gm, '');
|
|
386
390
|
|
|
387
|
-
if (
|
|
391
|
+
if (getInnerText(content).length > maxLengthPerChoice) {
|
|
388
392
|
choicesErrors[id] = "Tokens should be no more than ".concat(maxLengthPerChoice, " characters long.");
|
|
389
393
|
}
|
|
390
394
|
|
|
391
|
-
if (!
|
|
395
|
+
if (!getContent(content)) {
|
|
392
396
|
choicesErrors[id] = 'Tokens should not be empty.';
|
|
393
397
|
} else {
|
|
394
398
|
var identicalAnswer = reversedChoices.slice(index + 1).some(function (c) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["translator","Translator","disableAlternateResponses","question","correctResponse","mappedCorrectResponse","map","cr","alternateResponses","response","allowAlternateEnabled","getPartialScore","builtCategories","reduce","acc","choices","placements","length","score","filter","ch","correct","maxScore","extraPlacements","totalScore","parseFloat","toFixed","getAlternates","c","alternate","getTotalScore","session","env","Object","keys","categories","answers","alternates","enabled","partialScoring","getCorrectness","Promise","resolve","mode","undefined","createDefaultModel","model","defaults","normalize","newQuestion","updateSession","normalizedQuestion","answerCorrectness","role","categoriesPerRow","choicesLabel","choicesPosition","feedback","feedbackEnabled","promptEnabled","prompt","rowLabels","rationaleEnabled","rationale","teacherInstructionsEnabled","teacherInstructions","language","maxChoicesPerCategory","note","lockChoiceOrder","filteredCorrectResponse","filteredChoices","choice","fb","t","lng","out","correctness","disabled","showNote","outcome","reject","Error","empty","createCorrectResponseSession","id","getInnerText","html","replaceAll","validate","config","minChoices","maxChoices","minCategories","maxCategories","maxLengthPerChoice","maxLengthPerCategory","reversedChoices","reverse","errors","choicesErrors","categoriesErrors","forEach","field","required","category","label","parsedLabel","replace","index","content","parsedContent","identicalAnswer","slice","some","nbOfCategories","nbOfChoices","categoriesError","choicesError","hasAssociations","duplicateAlternateIndex","duplicateCategory","duplicateAlternate","associationError"],"mappings":"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","sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { buildState, score } from '@pie-lib/pie-toolbox/categorize';\nimport { getFeedbackForCorrectness } from '@pie-lib/pie-toolbox/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\nimport Translator from '@pie-lib/pie-toolbox/translator';\n\nconst { translator } = Translator;\nimport defaults from './defaults';\nimport { isAlternateDuplicated, isCorrectResponseDuplicated } from './utils';\n\n// eslint-disable-next-line no-console\n\nexport { score };\n\n// PD-2960: make sure we don't have alternates in model or possibility to add them (temporary solution)\n// this function is used in configure part, too\nconst disableAlternateResponses = (question) => {\n let { correctResponse } = question || {};\n correctResponse = correctResponse || [];\n const mappedCorrectResponse = correctResponse.map((cr) => {\n const { alternateResponses, ...response } = cr;\n return response;\n });\n return {\n ...question,\n correctResponse: mappedCorrectResponse,\n allowAlternateEnabled: false,\n };\n};\n\nexport const getPartialScore = (correctResponse, builtCategories) => {\n // in the resulted best scenario we make a sum with all the correct responses\n // and all the placements\n const { placements, score } = builtCategories.reduce(\n (acc, { choices = [] }) => ({\n placements: acc.placements + choices.length,\n score: acc.score + choices.filter((ch) => ch.correct).length,\n }),\n { placements: 0, score: 0 },\n );\n\n // in the correct response, we make a sum of the max possible score\n const { maxScore } = correctResponse.reduce(\n (acc, { choices }) => ({\n maxScore: acc.maxScore + choices.length,\n }),\n { maxScore: 0 },\n );\n\n // if there are any extra placements, we subtract from the obtained score\n const extraPlacements = placements > maxScore ? placements - maxScore : 0;\n const totalScore = (score - extraPlacements) / maxScore;\n\n return totalScore < 0 ? 0 : parseFloat(totalScore.toFixed(2));\n};\n\nconst getAlternates = (correctResponse) =>\n correctResponse.map((c) => c.alternateResponses).filter((alternate) => alternate);\n\nexport const getTotalScore = (question, session, env) => {\n if (!session) {\n return 0;\n }\n\n if (Object.keys(session).length === 0) {\n return 0;\n }\n const { categories, choices } = question || {};\n let { correctResponse } = question || {};\n let { answers } = session || {};\n answers = answers || [];\n correctResponse = correctResponse || [];\n\n // this function is used in pie-ui/categorize as well, in order to get the best scenario\n // so we get the best scenario and calculate the score\n const { categories: builtCategories, correct } = buildState(categories, choices, answers, correctResponse);\n\n const alternates = getAlternates(correctResponse);\n const enabled = partialScoring.enabled(question, env);\n\n // if there are any alternates, there will be no partial scoring!\n if (enabled && !alternates.length) {\n // we apply partial scoring\n return getPartialScore(correctResponse, builtCategories);\n }\n\n // else we apply dichotomous\n return correct ? 1 : 0;\n};\n\nexport const getCorrectness = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode === 'evaluate') {\n const score = getTotalScore(question, session, env);\n if (score === 1) {\n resolve('correct');\n } else if (score === 0) {\n resolve('incorrect');\n } else {\n resolve('partially-correct');\n }\n } else {\n resolve(undefined);\n }\n });\n};\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nexport const normalize = (question) => {\n const newQuestion = disableAlternateResponses(question);\n return {\n ...defaults,\n ...newQuestion,\n };\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 const model = (question, session, env, updateSession) =>\n new Promise(async (resolve) => {\n const normalizedQuestion = normalize(question);\n const answerCorrectness = await getCorrectness(normalizedQuestion, session, env);\n\n const { mode, role } = env || {};\n\n const {\n categories,\n categoriesPerRow,\n choicesLabel,\n choicesPosition,\n correctResponse,\n feedback,\n feedbackEnabled,\n promptEnabled,\n prompt,\n rowLabels,\n rationaleEnabled,\n rationale,\n teacherInstructionsEnabled,\n teacherInstructions,\n language,\n maxChoicesPerCategory,\n } = normalizedQuestion;\n let { choices, note } = normalizedQuestion;\n let fb;\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n const filteredCorrectResponse = correctResponse.map((response) => {\n const filteredChoices = (response.choices || []).filter((choice) => choice !== 'null');\n return { ...response, choices: filteredChoices };\n });\n\n if (mode === 'evaluate' && feedbackEnabled) {\n fb = await getFeedbackForCorrectness(answerCorrectness, feedback);\n }\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'id');\n }\n\n if (!note) {\n note = translator.t('common:commonCorrectAnswerWithAlternates', { lng: language });\n }\n\n const alternates = getAlternates(filteredCorrectResponse);\n const out = {\n categories: categories || [],\n categoriesPerRow: categoriesPerRow || 2,\n maxChoicesPerCategory,\n correctness: answerCorrectness,\n choices: choices || [],\n choicesLabel: choicesLabel || '',\n choicesPosition,\n disabled: mode !== 'gather',\n feedback: fb,\n lockChoiceOrder,\n prompt: promptEnabled ? prompt : null,\n rowLabels,\n note,\n env,\n showNote: alternates && alternates.length > 0,\n correctResponse: mode === 'evaluate' ? filteredCorrectResponse : undefined,\n language\n };\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n out.rationale = rationaleEnabled ? rationale : null;\n out.teacherInstructions = teacherInstructionsEnabled ? teacherInstructions : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n\nexport const outcome = (question, session, env) => {\n if (env.mode !== 'evaluate') {\n return Promise.reject(new Error('Can not call outcome when mode is not evaluate'));\n } else {\n return new Promise((resolve) => {\n resolve({\n score: getTotalScore(question, session, env),\n empty: !session || isEmpty(session),\n });\n });\n }\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n const { mode, role } = env || {};\n\n if (mode !== 'evaluate' && role === 'instructor') {\n const { correctResponse } = question;\n\n resolve({ answers: correctResponse, id: 1 });\n } else {\n return resolve(null);\n }\n });\n};\n\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { categories, choices, correctResponse } = model;\n const {\n minChoices = 1,\n maxChoices = 15,\n minCategories = 1,\n maxCategories = 12,\n maxLengthPerChoice = 300,\n maxLengthPerCategory = 150,\n } = config;\n const reversedChoices = [...(choices || [])].reverse();\n const errors = {};\n const choicesErrors = {};\n const categoriesErrors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getInnerText(model[field])) {\n errors[field] = 'This field is required';\n }\n });\n\n (categories || []).forEach((category) => {\n const { id, label } = category;\n const parsedLabel = label.replace(/<(?:.|\\n)*?>/gm, '');\n if (parsedLabel.length > maxLengthPerCategory) {\n categoriesErrors[id] = `Category labels should be no more than ${maxLengthPerCategory} characters long.`;\n }\n });\n\n (reversedChoices || []).forEach((choice, index) => {\n const { id, content } = choice;\n const parsedContent = content.replace(/<(?:.|\\n)*?>/gm, '');\n if (parsedContent.length > maxLengthPerChoice) {\n choicesErrors[id] = `Tokens should be no more than ${maxLengthPerChoice} characters long.`;\n }\n if (!getInnerText(content)) {\n choicesErrors[id] = 'Tokens should not be empty.';\n } else {\n const identicalAnswer = reversedChoices.slice(index + 1).some((c) => c.content === content);\n\n if (identicalAnswer) {\n choicesErrors[id] = 'Tokens content should be unique.';\n }\n }\n });\n\n const nbOfCategories = (categories || []).length;\n const nbOfChoices = (choices || []).length;\n\n if (nbOfCategories > maxCategories) {\n errors.categoriesError = `No more than ${maxCategories} categories should be defined.`;\n } else if (nbOfCategories < minCategories) {\n errors.categoriesError = `There should be at least ${minCategories} category defined.`;\n }\n\n if (nbOfChoices < minChoices) {\n errors.choicesError = `There should be at least ${minChoices} choices defined.`;\n } else if (nbOfChoices > maxChoices) {\n errors.choicesError = `No more than ${maxChoices} choices should be defined.`;\n }\n\n if (nbOfChoices && nbOfCategories) {\n let hasAssociations = false;\n\n (correctResponse || []).forEach((response) => {\n const { choices = [], alternateResponses = [] } = response;\n\n if (choices.length) {\n hasAssociations = true;\n } else {\n alternateResponses.forEach((alternate) => {\n if ((alternate || []).length) {\n hasAssociations = true;\n }\n });\n }\n });\n\n let duplicateAlternateIndex = -1;\n let duplicateCategory = '';\n (correctResponse || []).forEach((response) => {\n const { choices = [], alternateResponses = [], category } = response;\n if (duplicateAlternateIndex === -1) {\n duplicateAlternateIndex = isCorrectResponseDuplicated(choices, alternateResponses);\n if (duplicateAlternateIndex === -1) {\n duplicateAlternateIndex = isAlternateDuplicated(alternateResponses);\n }\n duplicateCategory = category;\n }\n });\n\n if (duplicateAlternateIndex > -1) {\n errors.duplicateAlternate = { index: duplicateAlternateIndex, category: duplicateCategory };\n }\n\n if (!hasAssociations) {\n errors.associationError = 'At least one token should be assigned to at least one category.';\n }\n }\n\n if (!isEmpty(choicesErrors)) {\n errors.choicesErrors = choicesErrors;\n }\n\n if (!isEmpty(categoriesErrors)) {\n errors.categoriesErrors = categoriesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["translator","Translator","disableAlternateResponses","question","correctResponse","mappedCorrectResponse","map","cr","alternateResponses","response","allowAlternateEnabled","getPartialScore","builtCategories","reduce","acc","choices","placements","length","score","filter","ch","correct","maxScore","extraPlacements","totalScore","parseFloat","toFixed","getAlternates","c","alternate","getTotalScore","session","env","Object","keys","categories","answers","alternates","enabled","partialScoring","getCorrectness","Promise","resolve","mode","undefined","createDefaultModel","model","defaults","normalize","newQuestion","updateSession","normalizedQuestion","answerCorrectness","role","categoriesPerRow","choicesLabel","choicesPosition","feedback","feedbackEnabled","promptEnabled","prompt","rowLabels","rationaleEnabled","rationale","teacherInstructionsEnabled","teacherInstructions","language","maxChoicesPerCategory","note","lockChoiceOrder","filteredCorrectResponse","filteredChoices","choice","fb","t","lng","out","correctness","disabled","showNote","outcome","reject","Error","empty","createCorrectResponseSession","id","getInnerText","html","replaceAll","getContent","replace","validate","config","minChoices","maxChoices","minCategories","maxCategories","maxLengthPerChoice","maxLengthPerCategory","reversedChoices","reverse","errors","choicesErrors","categoriesErrors","forEach","field","required","category","label","index","content","identicalAnswer","slice","some","nbOfCategories","nbOfChoices","categoriesError","choicesError","hasAssociations","duplicateAlternateIndex","duplicateCategory","duplicateAlternate","associationError"],"mappings":"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","sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { buildState, score } from '@pie-lib/pie-toolbox/categorize';\nimport { getFeedbackForCorrectness } from '@pie-lib/pie-toolbox/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\nimport Translator from '@pie-lib/pie-toolbox/translator';\n\nconst { translator } = Translator;\nimport defaults from './defaults';\nimport { isAlternateDuplicated, isCorrectResponseDuplicated } from './utils';\n\n// eslint-disable-next-line no-console\n\nexport { score };\n\n// PD-2960: make sure we don't have alternates in model or possibility to add them (temporary solution)\n// this function is used in configure part, too\nconst disableAlternateResponses = (question) => {\n let { correctResponse } = question || {};\n correctResponse = correctResponse || [];\n const mappedCorrectResponse = correctResponse.map((cr) => {\n const { alternateResponses, ...response } = cr;\n return response;\n });\n return {\n ...question,\n correctResponse: mappedCorrectResponse,\n allowAlternateEnabled: false,\n };\n};\n\nexport const getPartialScore = (correctResponse, builtCategories) => {\n // in the resulted best scenario we make a sum with all the correct responses\n // and all the placements\n const { placements, score } = builtCategories.reduce(\n (acc, { choices = [] }) => ({\n placements: acc.placements + choices.length,\n score: acc.score + choices.filter((ch) => ch.correct).length,\n }),\n { placements: 0, score: 0 },\n );\n\n // in the correct response, we make a sum of the max possible score\n const { maxScore } = correctResponse.reduce(\n (acc, { choices }) => ({\n maxScore: acc.maxScore + choices.length,\n }),\n { maxScore: 0 },\n );\n\n // if there are any extra placements, we subtract from the obtained score\n const extraPlacements = placements > maxScore ? placements - maxScore : 0;\n const totalScore = (score - extraPlacements) / maxScore;\n\n return totalScore < 0 ? 0 : parseFloat(totalScore.toFixed(2));\n};\n\nconst getAlternates = (correctResponse) =>\n correctResponse.map((c) => c.alternateResponses).filter((alternate) => alternate);\n\nexport const getTotalScore = (question, session, env) => {\n if (!session) {\n return 0;\n }\n\n if (Object.keys(session).length === 0) {\n return 0;\n }\n const { categories, choices } = question || {};\n let { correctResponse } = question || {};\n let { answers } = session || {};\n answers = answers || [];\n correctResponse = correctResponse || [];\n\n // this function is used in pie-ui/categorize as well, in order to get the best scenario\n // so we get the best scenario and calculate the score\n const { categories: builtCategories, correct } = buildState(categories, choices, answers, correctResponse);\n\n const alternates = getAlternates(correctResponse);\n const enabled = partialScoring.enabled(question, env);\n\n // if there are any alternates, there will be no partial scoring!\n if (enabled && !alternates.length) {\n // we apply partial scoring\n return getPartialScore(correctResponse, builtCategories);\n }\n\n // else we apply dichotomous\n return correct ? 1 : 0;\n};\n\nexport const getCorrectness = (question, session, env) => {\n return new Promise((resolve) => {\n if (env.mode === 'evaluate') {\n const score = getTotalScore(question, session, env);\n if (score === 1) {\n resolve('correct');\n } else if (score === 0) {\n resolve('incorrect');\n } else {\n resolve('partially-correct');\n }\n } else {\n resolve(undefined);\n }\n });\n};\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nexport const normalize = (question) => {\n const newQuestion = disableAlternateResponses(question);\n return {\n ...defaults,\n ...newQuestion,\n };\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 const model = (question, session, env, updateSession) =>\n new Promise(async (resolve) => {\n const normalizedQuestion = normalize(question);\n const answerCorrectness = await getCorrectness(normalizedQuestion, session, env);\n\n const { mode, role } = env || {};\n\n const {\n categories,\n categoriesPerRow,\n choicesLabel,\n choicesPosition,\n correctResponse,\n feedback,\n feedbackEnabled,\n promptEnabled,\n prompt,\n rowLabels,\n rationaleEnabled,\n rationale,\n teacherInstructionsEnabled,\n teacherInstructions,\n language,\n maxChoicesPerCategory,\n } = normalizedQuestion;\n let { choices, note } = normalizedQuestion;\n let fb;\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n const filteredCorrectResponse = correctResponse.map((response) => {\n const filteredChoices = (response.choices || []).filter((choice) => choice !== 'null');\n return { ...response, choices: filteredChoices };\n });\n\n if (mode === 'evaluate' && feedbackEnabled) {\n fb = await getFeedbackForCorrectness(answerCorrectness, feedback);\n }\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'id');\n }\n\n if (!note) {\n note = translator.t('common:commonCorrectAnswerWithAlternates', { lng: language });\n }\n\n const alternates = getAlternates(filteredCorrectResponse);\n const out = {\n categories: categories || [],\n categoriesPerRow: categoriesPerRow || 2,\n maxChoicesPerCategory,\n correctness: answerCorrectness,\n choices: choices || [],\n choicesLabel: choicesLabel || '',\n choicesPosition,\n disabled: mode !== 'gather',\n feedback: fb,\n lockChoiceOrder,\n prompt: promptEnabled ? prompt : null,\n rowLabels,\n note,\n env,\n showNote: alternates && alternates.length > 0,\n correctResponse: mode === 'evaluate' ? filteredCorrectResponse : undefined,\n language\n };\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n out.rationale = rationaleEnabled ? rationale : null;\n out.teacherInstructions = teacherInstructionsEnabled ? teacherInstructions : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n\nexport const outcome = (question, session, env) => {\n if (env.mode !== 'evaluate') {\n return Promise.reject(new Error('Can not call outcome when mode is not evaluate'));\n } else {\n return new Promise((resolve) => {\n resolve({\n score: getTotalScore(question, session, env),\n empty: !session || isEmpty(session),\n });\n });\n }\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n const { mode, role } = env || {};\n\n if (mode !== 'evaluate' && role === 'instructor') {\n const { correctResponse } = question;\n\n resolve({ answers: correctResponse, id: 1 });\n } else {\n return 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 and iframe\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { categories, choices, correctResponse } = model;\n const {\n minChoices = 1,\n maxChoices = 15,\n minCategories = 1,\n maxCategories = 12,\n maxLengthPerChoice = 300,\n maxLengthPerCategory = 150,\n } = config;\n const reversedChoices = [...(choices || [])].reverse();\n const errors = {};\n const choicesErrors = {};\n const categoriesErrors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n (categories || []).forEach((category) => {\n const { id, label } = category;\n\n if (getInnerText(label).length > maxLengthPerCategory) {\n categoriesErrors[id] = `Category labels should be no more than ${maxLengthPerCategory} characters long.`;\n }\n });\n\n (reversedChoices || []).forEach((choice, index) => {\n const { id, content } = choice;\n\n if (getInnerText(content).length > maxLengthPerChoice) {\n choicesErrors[id] = `Tokens should be no more than ${maxLengthPerChoice} characters long.`;\n }\n\n if (!getContent(content)) {\n choicesErrors[id] = 'Tokens should not be empty.';\n } else {\n const identicalAnswer = reversedChoices.slice(index + 1).some((c) => c.content === content);\n\n if (identicalAnswer) {\n choicesErrors[id] = 'Tokens content should be unique.';\n }\n }\n });\n\n const nbOfCategories = (categories || []).length;\n const nbOfChoices = (choices || []).length;\n\n if (nbOfCategories > maxCategories) {\n errors.categoriesError = `No more than ${maxCategories} categories should be defined.`;\n } else if (nbOfCategories < minCategories) {\n errors.categoriesError = `There should be at least ${minCategories} category defined.`;\n }\n\n if (nbOfChoices < minChoices) {\n errors.choicesError = `There should be at least ${minChoices} choices defined.`;\n } else if (nbOfChoices > maxChoices) {\n errors.choicesError = `No more than ${maxChoices} choices should be defined.`;\n }\n\n if (nbOfChoices && nbOfCategories) {\n let hasAssociations = false;\n\n (correctResponse || []).forEach((response) => {\n const { choices = [], alternateResponses = [] } = response;\n\n if (choices.length) {\n hasAssociations = true;\n } else {\n alternateResponses.forEach((alternate) => {\n if ((alternate || []).length) {\n hasAssociations = true;\n }\n });\n }\n });\n\n let duplicateAlternateIndex = -1;\n let duplicateCategory = '';\n (correctResponse || []).forEach((response) => {\n const { choices = [], alternateResponses = [], category } = response;\n\n if (duplicateAlternateIndex === -1) {\n duplicateAlternateIndex = isCorrectResponseDuplicated(choices, alternateResponses);\n\n if (duplicateAlternateIndex === -1) {\n duplicateAlternateIndex = isAlternateDuplicated(alternateResponses);\n }\n\n duplicateCategory = category;\n }\n });\n\n if (duplicateAlternateIndex > -1) {\n errors.duplicateAlternate = { index: duplicateAlternateIndex, category: duplicateCategory };\n }\n\n if (!hasAssociations) {\n errors.associationError = 'At least one token should be assigned to at least one category.';\n }\n }\n\n if (!isEmpty(choicesErrors)) {\n errors.choicesErrors = choicesErrors;\n }\n\n if (!isEmpty(categoriesErrors)) {\n errors.categoriesErrors = categoriesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.js"],"names":["multiplePlacements","enabled","disabled","perChoice","isCorrectResponseDuplicated","choices","alternate","length","stringChoices","JSON","stringify","sort","stringAlternate","reduce","total","current","foundIndexDuplicate","findIndex","isAlternateDuplicated","elementSet","Set","i","has","add"],"mappings":";;;;;;;;;;;AAAA;AACO,IAAMA,kBAAkB,GAAG;AAAEC,EAAAA,OAAO,EAAE,KAAX;AAAkBC,EAAAA,QAAQ,EAAE,IAA5B;AAAkCC,EAAAA,SAAS,EAAE;AAA7C,CAA3B,C,CAEP;;;;AACO,IAAMC,2BAA2B,GAAG,SAA9BA,2BAA8B,CAACC,OAAD,EAASC,SAAT,EAAuB;AAC9D,MAAID,OAAO,CAACE,MAAR,GAAiB,CAAjB,IAAsBD,SAAS,CAACC,MAAV,GAAmB,CAA7C,EAA+C;AAC3C,WAAO,CAAC,CAAR;AACH;;
|
|
1
|
+
{"version":3,"sources":["../src/utils.js"],"names":["multiplePlacements","enabled","disabled","perChoice","isCorrectResponseDuplicated","choices","alternate","length","stringChoices","JSON","stringify","sort","stringAlternate","reduce","total","current","foundIndexDuplicate","findIndex","isAlternateDuplicated","elementSet","Set","i","has","add"],"mappings":";;;;;;;;;;;AAAA;AACO,IAAMA,kBAAkB,GAAG;AAAEC,EAAAA,OAAO,EAAE,KAAX;AAAkBC,EAAAA,QAAQ,EAAE,IAA5B;AAAkCC,EAAAA,SAAS,EAAE;AAA7C,CAA3B,C,CAEP;;;;AACO,IAAMC,2BAA2B,GAAG,SAA9BA,2BAA8B,CAACC,OAAD,EAASC,SAAT,EAAuB;AAC9D,MAAID,OAAO,CAACE,MAAR,GAAiB,CAAjB,IAAsBD,SAAS,CAACC,MAAV,GAAmB,CAA7C,EAA+C;AAC3C,WAAO,CAAC,CAAR;AACH;;AAED,MAAMC,aAAa,GAAIC,IAAI,CAACC,SAAL,CAAeL,OAAO,CAACM,IAAR,EAAf,CAAvB;AACA,MAAMC,eAAe,GAAGN,SAAS,CAACO,MAAV,CAAiB,UAACC,KAAD,EAAQC,OAAR;AAAA,WAAoBA,OAAO,CAACR,MAAR,GAAiB,CAAjB,iDAAyBO,KAAzB,IAAgCL,IAAI,CAACC,SAAL,CAAeK,OAAO,CAACJ,IAAR,EAAf,CAAhC,KAAkEG,KAAtF;AAAA,GAAjB,EAA8G,EAA9G,CAAxB;AACA,MAAME,mBAAmB,GAAGJ,eAAe,CAACK,SAAhB,CAA0B,UAAAX,SAAS;AAAA,WAAIA,SAAS,CAACC,MAAV,IAAqBD,SAAS,KAAKE,aAAvC;AAAA,GAAnC,CAA5B;AAEA,SAAOQ,mBAAP;AACH,CAVM;;;;AAYA,IAAME,qBAAqB,GAAG,SAAxBA,qBAAwB,CAACZ,SAAD,EAAe;AAChD,MAAIA,SAAS,CAACC,MAAV,IAAoB,CAAxB,EAA0B;AACtB,WAAO,CAAC,CAAR;AACH;;AAED,MAAMY,UAAU,GAAG,IAAIC,GAAJ,EAAnB;AACA,MAAMR,eAAe,GAAGN,SAAS,CAACO,MAAV,CAAiB,UAACC,KAAD,EAAQC,OAAR;AAAA,WAAoBA,OAAO,CAACR,MAAR,GAAiB,CAAjB,iDAAyBO,KAAzB,IAAgCL,IAAI,CAACC,SAAL,CAAeK,OAAO,CAACJ,IAAR,EAAf,CAAhC,KAAkEG,KAAtF;AAAA,GAAjB,EAA8G,EAA9G,CAAxB;;AAEA,OAAK,IAAIO,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGT,eAAe,CAACL,MAApC,EAA4Cc,CAAC,EAA7C,EAAiD;AAC7C,QAAIF,UAAU,CAACG,GAAX,CAAeV,eAAe,CAACS,CAAD,CAA9B,KAAsCT,eAAe,CAACS,CAAD,CAAzD,EAA8D;AAC1D,aAAOA,CAAP;AACH;;AAEDF,IAAAA,UAAU,CAACI,GAAX,CAAeX,eAAe,CAACS,CAAD,CAA9B;AACH;;AAED,SAAO,CAAC,CAAR;AACH,CAjBM","sourcesContent":["// used in configure too, for consistency modify it there too\nexport const multiplePlacements = { enabled: 'Yes', disabled: 'No', perChoice: 'Set Per Choice' };\n\n// used to validate the config\nexport const isCorrectResponseDuplicated = (choices,alternate) => {\n if (choices.length < 1 || alternate.length < 1){\n return -1;\n }\n\n const stringChoices = JSON.stringify(choices.sort());\n const stringAlternate = alternate.reduce((total, current) => current.length > 0 ? [...total, JSON.stringify(current.sort())] : total, []);\n const foundIndexDuplicate = stringAlternate.findIndex(alternate => alternate.length && alternate === stringChoices);\n\n return foundIndexDuplicate;\n};\n\nexport const isAlternateDuplicated = (alternate) => {\n if (alternate.length <= 1){\n return -1;\n }\n\n const elementSet = new Set();\n const stringAlternate = alternate.reduce((total, current) => current.length > 0 ? [...total, JSON.stringify(current.sort())] : total, []);\n\n for (let i = 0; i < stringAlternate.length; i++) {\n if (elementSet.has(stringAlternate[i]) && stringAlternate[i]) {\n return i;\n }\n\n elementSet.add(stringAlternate[i]);\n }\n\n return -1;\n};\n"],"file":"utils.js"}
|
package/controller/package.json
CHANGED
package/package.json
CHANGED
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "8.11.1-next.
|
|
7
|
+
"version": "8.11.1-next.33+8fc82ab19",
|
|
8
8
|
"description": "",
|
|
9
9
|
"author": "pie framework developers",
|
|
10
10
|
"license": "ISC",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@material-ui/core": "^3.9.2",
|
|
13
13
|
"@pie-framework/pie-player-events": "^0.1.0",
|
|
14
|
-
"@pie-lib/pie-toolbox": "1.12.
|
|
14
|
+
"@pie-lib/pie-toolbox": "1.12.2",
|
|
15
15
|
"classnames": "^2.2.5",
|
|
16
16
|
"debug": "^4.1.1",
|
|
17
17
|
"lodash": "^4.17.15",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"react-dnd": "^14.0.5",
|
|
21
21
|
"react-dom": "^16.8.1"
|
|
22
22
|
},
|
|
23
|
-
"gitHead": "
|
|
23
|
+
"gitHead": "8fc82ab19baf45aecb40e4b364a7c307a9840130",
|
|
24
24
|
"scripts": {
|
|
25
25
|
"postpublish": "../../scripts/postpublish"
|
|
26
26
|
},
|