@pie-element/math-templated 2.12.1-next.0 → 2.12.1-next.5
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/design.js +27 -16
- package/configure/lib/design.js.map +1 -1
- package/controller/lib/index.js +74 -6
- package/controller/lib/index.js.map +1 -1
- package/lib/index.js +0 -4
- package/lib/index.js.map +1 -1
- package/module/configure.js +62 -47
- package/module/controller.js +64 -189
- package/module/element.js +6 -28
- package/package.json +2 -2
package/configure/lib/design.js
CHANGED
|
@@ -327,13 +327,12 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
327
327
|
equationEditor = _ref3.equationEditor;
|
|
328
328
|
|
|
329
329
|
var _ref4 = errors || {},
|
|
330
|
-
_ref4$choices = _ref4.choices,
|
|
331
|
-
choicesErrors = _ref4$choices === void 0 ? {} : _ref4$choices,
|
|
332
330
|
promptError = _ref4.prompt,
|
|
333
331
|
rationaleError = _ref4.rationale,
|
|
334
332
|
responseAreasError = _ref4.responseAreas,
|
|
335
333
|
teacherInstructionsError = _ref4.teacherInstructions,
|
|
336
|
-
|
|
334
|
+
_ref4$responses = _ref4.responses,
|
|
335
|
+
responsesErrors = _ref4$responses === void 0 ? {} : _ref4$responses;
|
|
337
336
|
|
|
338
337
|
var panelSettings = {
|
|
339
338
|
'language.enabled': language.settings && toggle(language.label, true),
|
|
@@ -441,7 +440,7 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
441
440
|
type: 'math-templated',
|
|
442
441
|
respAreaToolbar: null,
|
|
443
442
|
error: function error() {
|
|
444
|
-
return
|
|
443
|
+
return responsesErrors;
|
|
445
444
|
},
|
|
446
445
|
onHandleAreaChange: this.onHandleAreaChange,
|
|
447
446
|
maxResponseAreas: maxResponseAreas
|
|
@@ -462,7 +461,9 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
462
461
|
language: 'special'
|
|
463
462
|
}],
|
|
464
463
|
mathMlOptions: mathMlOptions
|
|
465
|
-
}), /*#__PURE__*/_react["default"].createElement(
|
|
464
|
+
}), responseAreasError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
465
|
+
className: classes.responseAreaError
|
|
466
|
+
}, responseAreasError), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
|
466
467
|
className: classes.title
|
|
467
468
|
}, "Define Response"), /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
468
469
|
label: "Response Template Equation Editor",
|
|
@@ -499,17 +500,22 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
499
500
|
value: 'item-authoring'
|
|
500
501
|
}, "Item Authoring"))), Object.keys(responses || {}).map(function (responseKey, idx) {
|
|
501
502
|
var response = responses[responseKey];
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
503
|
+
|
|
504
|
+
if (response) {
|
|
505
|
+
return /*#__PURE__*/_react["default"].createElement(_response["default"], {
|
|
506
|
+
key: responseKey,
|
|
507
|
+
responseKey: responseKey,
|
|
508
|
+
mode: equationEditor,
|
|
509
|
+
response: response,
|
|
510
|
+
onResponseChange: _this2.onResponseChange,
|
|
511
|
+
index: idx,
|
|
512
|
+
cIgnoreOrder: cIgnoreOrder,
|
|
513
|
+
cAllowTrailingZeros: cAllowTrailingZeros,
|
|
514
|
+
error: responsesErrors && responsesErrors[idx]
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
return null;
|
|
513
519
|
}), rationaleEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
514
520
|
label: rationale.label,
|
|
515
521
|
className: classes.promptHolder
|
|
@@ -574,6 +580,11 @@ var _default = (0, _styles.withStyles)(function (theme) {
|
|
|
574
580
|
fontSize: '0.75rem',
|
|
575
581
|
marginTop: theme.spacing.unit
|
|
576
582
|
},
|
|
583
|
+
responseAreaError: {
|
|
584
|
+
color: theme.palette.error.main,
|
|
585
|
+
fontSize: '0.75rem',
|
|
586
|
+
marginBottom: theme.spacing.unit
|
|
587
|
+
},
|
|
577
588
|
markup: {
|
|
578
589
|
width: '100%',
|
|
579
590
|
marginTop: theme.spacing.unit * 2,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/design.jsx"],"names":["Panel","settings","toggle","createElementFromHTML","htmlString","div","document","createElement","innerHTML","trim","Design","key","value","props","onModelChanged","model","updatedModel","response","index","newModel","responses","newVal","answer","id","allowSpaces","markup","newResponses","domMarkup","responseAreas","querySelectorAll","forEach","element","dataset","dataIndex","validation","allowTrailingZeros","ignoreOrder","alternates","processedMarkup","callback","slateMarkup","setState","cachedChoices","undefined","nodes","cachedResponses","state","newChoices","newCachedResponses","node","keyForNode","data","get","Object","assign","hasOwnProperty","trailing","leading","e","relatedTarget","currentTarget","getParentWithRoleTooltip","depth","parent","offsetParent","getAttribute","getDeepChildDataKeypad","child","children","attributes","parentWithTooltipRole","childWithDataKeypad","activeAnswerBlock","classes","configuration","imageSupport","onConfigurationChanged","uploadSoundSupport","baseInputConfiguration","contentDimensions","prompt","rationale","settingsPanelDisabled","teacherInstructions","language","languageChoices","spellCheck","playerSpellCheck","maxImageWidth","maxImageHeight","mathMlOptions","template","editSource","cIgnoreOrder","cAllowTrailingZeros","partialScoring","maxResponseAreas","errors","promptEnabled","rationaleEnabled","spellCheckEnabled","teacherInstructionsEnabled","toolbarEditorPosition","equationEditor","choices","choicesErrors","promptError","rationaleError","responseAreasError","teacherInstructionsError","responsesErrors","panelSettings","label","enabled","options","panelProperties","playerSpellCheckEnabled","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","getPluginProps","Settings","Properties","promptHolder","handleChange","inputConfiguration","errorText","title","ALL_PLUGINS","type","respAreaToolbar","error","onHandleAreaChange","onChange","onBlur","selectContainer","select","event","target","keys","map","responseKey","idx","onResponseChange","math","controlledKeypadMode","React","Component","PropTypes","object","isRequired","func","shape","add","theme","width","paddingTop","spacing","unit","marginBottom","color","palette","main","fontSize","marginTop","typography","fontWeight"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport cloneDeep from 'lodash/cloneDeep';\nimport pick from 'lodash/pick';\nimport throttle from 'lodash/throttle';\nimport {\n InputContainer,\n settings,\n layout,\n} from '@pie-lib/pie-toolbox/config-ui';\nimport {\n ALL_PLUGINS,\n EditableHtml,\n} from '@pie-lib/pie-toolbox/editable-html';\nimport { dropdown } from '@pie-lib/pie-toolbox/code/config-ui/settings';\n\nimport Response from './response';\nimport { processMarkup } from './markupUtils';\n\nconst { Panel, toggle } = settings;\n\nconst createElementFromHTML = (htmlString) => {\n const div = document.createElement('div');\n div.innerHTML = htmlString.trim();\n\n return div;\n};\n\nclass Design extends React.Component {\n static propTypes = {\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n classes: PropTypes.object.isRequired,\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.object,\n };\n\n state = {};\n\n componentDidMount() {\n const { model: { slateMarkup } } = this.props;\n\n this.setState({ markup: slateMarkup });\n\n }\n\n handleChange = (key, value) => {\n const { onModelChanged, model } = this.props;\n const updatedModel = cloneDeep(model);\n updatedModel[key] = value;\n onModelChanged(updatedModel);\n };\n\n onResponseChange = (response, index) => {\n const { model, onModelChanged } = this.props;\n const newModel = { ...model };\n\n newModel.responses[index] = response;\n onModelChanged(newModel);\n };\n\n onChangeResponse = (index, newVal) => {\n const { model, onModelChanged } = this.props;\n const { responses } = model;\n\n if (!responses[index]) {\n responses[index] = [{ answer: newVal || '', id: 'response' + index, allowSpaces: true }];\n } else {\n responses[index][0].answer = newVal || '';\n }\n\n onModelChanged({ ...model, responses });\n };\n\n onResponsesChanged = (responses) => {\n this.props.onModelChanged({ ...this.props.model, responses });\n };\n\n onChange = (markup) => {\n const {\n model: { responses },\n onModelChanged,\n } = this.props;\n const newResponses = {};\n const domMarkup = createElementFromHTML(markup);\n const responseAreas = domMarkup.querySelectorAll('[data-type=\"math_templated\"]');\n\n responseAreas.forEach((element) => {\n const { value, index: dataIndex } = element.dataset;\n\n if (!value) {\n element.dataset.value = `R ${dataIndex}`;\n }\n\n newResponses[dataIndex] = responses[dataIndex] || {\n // TODO: Initialize with customizable defaults\n allowSpaces: true,\n validation: 'symbolic',\n allowTrailingZeros: false,\n ignoreOrder: false,\n answer: '',\n alternates: {},\n };\n\n element.dataset.index = dataIndex;\n });\n\n const processedMarkup = processMarkup(markup);\n\n const callback = () =>\n onModelChanged({\n ...this.props.model,\n slateMarkup: domMarkup.innerHTML,\n responses: newResponses,\n markup: processedMarkup\n });\n\n this.setState({ cachedChoices: undefined }, callback);\n };\n\n onHandleAreaChange = throttle(\n (nodes) => {\n const {\n model: { responses },\n onModelChanged,\n } = this.props;\n const { cachedResponses } = this.state;\n\n if (!nodes) {\n return;\n }\n\n const newChoices = responses ? cloneDeep(responses) : {};\n const newCachedResponses = cachedResponses ? cloneDeep(cachedResponses) : {};\n\n nodes.forEach((node) => {\n const keyForNode = node.data.get('index');\n\n if (!newChoices[keyForNode] && newCachedResponses[keyForNode]) {\n Object.assign(newChoices, pick(newCachedResponses, keyForNode));\n\n if (newCachedResponses.hasOwnProperty(keyForNode)) {\n delete newCachedResponses[keyForNode];\n }\n } else {\n Object.assign(newCachedResponses, pick(newChoices, keyForNode));\n\n if (newChoices.hasOwnProperty(keyForNode)) {\n delete newChoices[keyForNode];\n }\n }\n });\n\n const callback = () => onModelChanged({ ...this.props.model, responses: newChoices });\n\n this.setState({ cachedResponses: newCachedResponses }, callback);\n },\n 500,\n { trailing: false, leading: true },\n );\n\n onBlur = (e) => {\n const { relatedTarget, currentTarget } = e || {};\n\n function getParentWithRoleTooltip(element, depth = 0) {\n // only run this max 16 times\n if (!element || depth >= 16) return null;\n\n const parent = element.offsetParent;\n\n if (!parent) return null;\n\n if (parent.getAttribute('role') === 'tooltip') {\n return parent;\n }\n\n return getParentWithRoleTooltip(parent, depth + 1);\n }\n\n function getDeepChildDataKeypad(element, depth = 0) {\n // only run this max 4 times\n if (!element || depth >= 4) return null;\n\n const child = element?.children?.[0];\n\n if (!child) return null;\n\n if (child.attributes && child.attributes['data-keypad']) {\n return child;\n }\n\n return getDeepChildDataKeypad(child, depth + 1);\n }\n\n const parentWithTooltipRole = getParentWithRoleTooltip(relatedTarget);\n const childWithDataKeypad = parentWithTooltipRole ? getDeepChildDataKeypad(parentWithTooltipRole) : null;\n\n if (!relatedTarget || !currentTarget || !childWithDataKeypad?.attributes['data-keypad']) {\n this.setState({ activeAnswerBlock: '' });\n }\n };\n\n render() {\n const {\n classes,\n configuration,\n imageSupport,\n model,\n onConfigurationChanged,\n onModelChanged,\n uploadSoundSupport,\n } = this.props;\n\n const {\n baseInputConfiguration = {},\n contentDimensions = {},\n prompt = {},\n rationale = {},\n settingsPanelDisabled,\n teacherInstructions = {},\n language = {},\n languageChoices = {},\n spellCheck = {},\n playerSpellCheck = {},\n maxImageWidth = {},\n maxImageHeight = {},\n mathMlOptions = {},\n template = {},\n editSource = {},\n ignoreOrder: cIgnoreOrder = {},\n allowTrailingZeros: cAllowTrailingZeros = {},\n partialScoring = {},\n maxResponseAreas,\n } = configuration || {};\n\n const {\n errors,\n promptEnabled,\n rationaleEnabled,\n spellCheckEnabled,\n teacherInstructionsEnabled,\n toolbarEditorPosition,\n responses,\n equationEditor,\n } = model || {};\n\n const {\n choices: choicesErrors = {},\n prompt: promptError,\n rationale: rationaleError,\n responseAreas: responseAreasError,\n teacherInstructions: teacherInstructionsError,\n responses: responsesErrors,\n } = errors || {};\n\n const panelSettings = {\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n };\n\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n playerSpellCheckEnabled: playerSpellCheck.settings && toggle(playerSpellCheck.label),\n 'editSource.enabled': editSource?.settings && toggle(editSource.label, true),\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n };\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n const getPluginProps = (props = {}, baseInputConfiguration = {}) => ({\n ...baseInputConfiguration,\n ...props,\n });\n\n return (\n <layout.ConfigLayout\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n configuration={configuration}\n onChangeModel={(updatedModel) => onModelChanged(updatedModel)}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n {teacherInstructionsEnabled && (\n <InputContainer\n label={teacherInstructions.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.teacherInstructions || ''}\n onChange={(value) => this.handleChange('teacherInstructions', value)}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={teacherInstructionsError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(\n teacherInstructions?.inputConfiguration,\n baseInputConfiguration\n )}\n spellCheck={spellCheckEnabled}\n maxImageWidth={\n (maxImageWidth && maxImageWidth.teacherInstructions) ||\n defaultImageMaxWidth\n }\n maxImageHeight={\n (maxImageHeight && maxImageHeight.teacherInstructions) ||\n defaultImageMaxHeight\n }\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[\n { language: 'spanish' },\n { language: 'special' },\n ]}\n mathMlOptions={mathMlOptions}\n />\n {teacherInstructionsError && (\n <div className={classes.errorText}>{teacherInstructionsError}</div>\n )}\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer\n label={prompt.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={(value) => this.handleChange('prompt', value)}\n imageSupport={imageSupport}\n nonEmpty={false}\n disableUnderline\n error={promptError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(\n teacherInstructions?.inputConfiguration,\n baseInputConfiguration\n )}\n spellCheck={spellCheckEnabled}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[\n { language: 'spanish' },\n { language: 'special' },\n ]}\n mathMlOptions={mathMlOptions}\n />\n {promptError && (\n <div className={classes.errorText}>{promptError}</div>\n )}\n </InputContainer>\n )}\n\n <Typography className={classes.title}>Response Template</Typography>\n\n <EditableHtml\n activePlugins={ALL_PLUGINS}\n toolbarOpts={{ position: 'top' }}\n spellCheck={spellCheckEnabled}\n pluginProps={getPluginProps(\n template?.inputConfiguration,\n baseInputConfiguration\n )}\n responseAreaProps={{\n type: 'math-templated',\n respAreaToolbar: null,\n error: () => choicesErrors,\n onHandleAreaChange: this.onHandleAreaChange,\n maxResponseAreas: maxResponseAreas,\n }}\n className={classes.markup}\n markup={model.slateMarkup}\n onChange={this.onChange}\n imageSupport={imageSupport}\n disableImageAlignmentButtons={true}\n onBlur={this.onBlur}\n disabled={false}\n highlightShape={false}\n error={responseAreasError}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[\n { language: 'spanish' },\n { language: 'special' },\n ]}\n mathMlOptions={mathMlOptions}\n />\n\n <Typography className={classes.title}>Define Response</Typography>\n\n <InputContainer\n label=\"Response Template Equation Editor\"\n className={classes.selectContainer}\n >\n <Select\n className={classes.select}\n onChange={(event) =>\n this.handleChange('equationEditor', event.target.value)\n }\n value={equationEditor}\n >\n <MenuItem value=\"non-negative-integers\">\n Numeric - Non-Negative Integers\n </MenuItem>\n <MenuItem value=\"integers\">Numeric - Integers</MenuItem>\n <MenuItem value=\"decimals\">Numeric - Decimals</MenuItem>\n <MenuItem value=\"fractions\">Numeric - Fractions</MenuItem>\n <MenuItem value={1}>Grade 1 - 2</MenuItem>\n <MenuItem value={3}>Grade 3 - 5</MenuItem>\n <MenuItem value={6}>Grade 6 - 7</MenuItem>\n <MenuItem value={8}>Grade 8 - HS</MenuItem>\n <MenuItem value={'geometry'}>Geometry</MenuItem>\n <MenuItem value={'advanced-algebra'}>\n Advanced Algebra\n </MenuItem>\n <MenuItem value={'statistics'}>Statistics</MenuItem>\n <MenuItem value={'item-authoring'}>Item Authoring</MenuItem>\n </Select>\n </InputContainer>\n\n {Object.keys(responses || {}).map((responseKey, idx) => {\n const response = responses[responseKey];\n\n return (\n <Response\n key={responseKey}\n responseKey={responseKey}\n mode={equationEditor}\n response={response}\n onResponseChange={this.onResponseChange}\n index={idx}\n cIgnoreOrder={cIgnoreOrder}\n cAllowTrailingZeros={cAllowTrailingZeros}\n error={responsesErrors && responsesErrors[idx]}\n />\n );\n })}\n\n {rationaleEnabled && (\n <InputContainer\n label={rationale.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.rationale || ''}\n onChange={(value) => this.handleChange('rationale', value)}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={rationaleError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(rationale?.inputConfiguration, {\n ...baseInputConfiguration,\n math: {\n controlledKeypadMode: false,\n },\n })}\n spellCheck={spellCheckEnabled}\n maxImageWidth={\n (maxImageWidth && maxImageWidth.rationale) ||\n defaultImageMaxWidth\n }\n maxImageHeight={\n (maxImageHeight && maxImageHeight.rationale) ||\n defaultImageMaxHeight\n }\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[\n { language: 'spanish' },\n { language: 'special' },\n ]}\n mathMlOptions={mathMlOptions}\n />\n {rationaleError && (\n <div className={classes.errorText}>{rationaleError}</div>\n )}\n </InputContainer>\n )}\n </layout.ConfigLayout>\n );\n }\n}\n\nexport default withStyles((theme) => ({\n promptHolder: {\n width: '100%',\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n prompt: {\n width: '100%',\n },\n errorText: {\n color: theme.palette.error.main,\n fontSize: '0.75rem',\n marginTop: theme.spacing.unit,\n },\n markup: {\n width: '100%',\n marginTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 3,\n },\n selectContainer: {\n width: '100%',\n marginTop: theme.spacing.unit * 2,\n },\n select: {\n width: '100%',\n },\n title: {\n fontSize: theme.typography.fontSize * 1.25,\n fontWeight: 'bold',\n }\n}))(Design);\n"],"file":"design.js"}
|
|
1
|
+
{"version":3,"sources":["../src/design.jsx"],"names":["Panel","settings","toggle","createElementFromHTML","htmlString","div","document","createElement","innerHTML","trim","Design","key","value","props","onModelChanged","model","updatedModel","response","index","newModel","responses","newVal","answer","id","allowSpaces","markup","newResponses","domMarkup","responseAreas","querySelectorAll","forEach","element","dataset","dataIndex","validation","allowTrailingZeros","ignoreOrder","alternates","processedMarkup","callback","slateMarkup","setState","cachedChoices","undefined","nodes","cachedResponses","state","newChoices","newCachedResponses","node","keyForNode","data","get","Object","assign","hasOwnProperty","trailing","leading","e","relatedTarget","currentTarget","getParentWithRoleTooltip","depth","parent","offsetParent","getAttribute","getDeepChildDataKeypad","child","children","attributes","parentWithTooltipRole","childWithDataKeypad","activeAnswerBlock","classes","configuration","imageSupport","onConfigurationChanged","uploadSoundSupport","baseInputConfiguration","contentDimensions","prompt","rationale","settingsPanelDisabled","teacherInstructions","language","languageChoices","spellCheck","playerSpellCheck","maxImageWidth","maxImageHeight","mathMlOptions","template","editSource","cIgnoreOrder","cAllowTrailingZeros","partialScoring","maxResponseAreas","errors","promptEnabled","rationaleEnabled","spellCheckEnabled","teacherInstructionsEnabled","toolbarEditorPosition","equationEditor","promptError","rationaleError","responseAreasError","teacherInstructionsError","responsesErrors","panelSettings","label","enabled","options","panelProperties","playerSpellCheckEnabled","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","getPluginProps","Settings","Properties","promptHolder","handleChange","inputConfiguration","errorText","title","ALL_PLUGINS","type","respAreaToolbar","error","onHandleAreaChange","onChange","onBlur","responseAreaError","selectContainer","select","event","target","keys","map","responseKey","idx","onResponseChange","math","controlledKeypadMode","React","Component","PropTypes","object","isRequired","func","shape","add","theme","width","paddingTop","spacing","unit","marginBottom","color","palette","main","fontSize","marginTop","typography","fontWeight"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Select from '@material-ui/core/Select';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport cloneDeep from 'lodash/cloneDeep';\nimport pick from 'lodash/pick';\nimport throttle from 'lodash/throttle';\nimport {\n InputContainer,\n settings,\n layout,\n} from '@pie-lib/pie-toolbox/config-ui';\nimport {\n ALL_PLUGINS,\n EditableHtml,\n} from '@pie-lib/pie-toolbox/editable-html';\nimport { dropdown } from '@pie-lib/pie-toolbox/code/config-ui/settings';\n\nimport Response from './response';\nimport { processMarkup } from './markupUtils';\n\nconst { Panel, toggle } = settings;\n\nconst createElementFromHTML = (htmlString) => {\n const div = document.createElement('div');\n div.innerHTML = htmlString.trim();\n\n return div;\n};\n\nclass Design extends React.Component {\n static propTypes = {\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n classes: PropTypes.object.isRequired,\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.object,\n };\n\n state = {};\n\n componentDidMount() {\n const { model: { slateMarkup } } = this.props;\n\n this.setState({ markup: slateMarkup });\n\n }\n\n handleChange = (key, value) => {\n const { onModelChanged, model } = this.props;\n const updatedModel = cloneDeep(model);\n updatedModel[key] = value;\n onModelChanged(updatedModel);\n };\n\n onResponseChange = (response, index) => {\n const { model, onModelChanged } = this.props;\n const newModel = { ...model };\n\n newModel.responses[index] = response;\n onModelChanged(newModel);\n };\n\n onChangeResponse = (index, newVal) => {\n const { model, onModelChanged } = this.props;\n const { responses } = model;\n\n if (!responses[index]) {\n responses[index] = [{ answer: newVal || '', id: 'response' + index, allowSpaces: true }];\n } else {\n responses[index][0].answer = newVal || '';\n }\n\n onModelChanged({ ...model, responses });\n };\n\n onResponsesChanged = (responses) => {\n this.props.onModelChanged({ ...this.props.model, responses });\n };\n\n onChange = (markup) => {\n const {\n model: { responses },\n onModelChanged,\n } = this.props;\n const newResponses = {};\n const domMarkup = createElementFromHTML(markup);\n const responseAreas = domMarkup.querySelectorAll('[data-type=\"math_templated\"]');\n\n responseAreas.forEach((element) => {\n const { value, index: dataIndex } = element.dataset;\n\n if (!value) {\n element.dataset.value = `R ${dataIndex}`;\n }\n\n newResponses[dataIndex] = responses[dataIndex] || {\n // TODO: Initialize with customizable defaults\n allowSpaces: true,\n validation: 'symbolic',\n allowTrailingZeros: false,\n ignoreOrder: false,\n answer: '',\n alternates: {},\n };\n\n element.dataset.index = dataIndex;\n });\n\n const processedMarkup = processMarkup(markup);\n\n const callback = () =>\n onModelChanged({\n ...this.props.model,\n slateMarkup: domMarkup.innerHTML,\n responses: newResponses,\n markup: processedMarkup\n });\n\n this.setState({ cachedChoices: undefined }, callback);\n };\n\n onHandleAreaChange = throttle(\n (nodes) => {\n const {\n model: { responses },\n onModelChanged,\n } = this.props;\n const { cachedResponses } = this.state;\n\n if (!nodes) {\n return;\n }\n\n const newChoices = responses ? cloneDeep(responses) : {};\n const newCachedResponses = cachedResponses ? cloneDeep(cachedResponses) : {};\n\n nodes.forEach((node) => {\n const keyForNode = node.data.get('index');\n\n if (!newChoices[keyForNode] && newCachedResponses[keyForNode]) {\n Object.assign(newChoices, pick(newCachedResponses, keyForNode));\n\n if (newCachedResponses.hasOwnProperty(keyForNode)) {\n delete newCachedResponses[keyForNode];\n }\n } else {\n Object.assign(newCachedResponses, pick(newChoices, keyForNode));\n\n if (newChoices.hasOwnProperty(keyForNode)) {\n delete newChoices[keyForNode];\n }\n }\n });\n\n const callback = () => onModelChanged({ ...this.props.model, responses: newChoices });\n\n this.setState({ cachedResponses: newCachedResponses }, callback);\n },\n 500,\n { trailing: false, leading: true },\n );\n\n onBlur = (e) => {\n const { relatedTarget, currentTarget } = e || {};\n\n function getParentWithRoleTooltip(element, depth = 0) {\n // only run this max 16 times\n if (!element || depth >= 16) return null;\n\n const parent = element.offsetParent;\n\n if (!parent) return null;\n\n if (parent.getAttribute('role') === 'tooltip') {\n return parent;\n }\n\n return getParentWithRoleTooltip(parent, depth + 1);\n }\n\n function getDeepChildDataKeypad(element, depth = 0) {\n // only run this max 4 times\n if (!element || depth >= 4) return null;\n\n const child = element?.children?.[0];\n\n if (!child) return null;\n\n if (child.attributes && child.attributes['data-keypad']) {\n return child;\n }\n\n return getDeepChildDataKeypad(child, depth + 1);\n }\n\n const parentWithTooltipRole = getParentWithRoleTooltip(relatedTarget);\n const childWithDataKeypad = parentWithTooltipRole ? getDeepChildDataKeypad(parentWithTooltipRole) : null;\n\n if (!relatedTarget || !currentTarget || !childWithDataKeypad?.attributes['data-keypad']) {\n this.setState({ activeAnswerBlock: '' });\n }\n };\n\n render() {\n const {\n classes,\n configuration,\n imageSupport,\n model,\n onConfigurationChanged,\n onModelChanged,\n uploadSoundSupport,\n } = this.props;\n\n const {\n baseInputConfiguration = {},\n contentDimensions = {},\n prompt = {},\n rationale = {},\n settingsPanelDisabled,\n teacherInstructions = {},\n language = {},\n languageChoices = {},\n spellCheck = {},\n playerSpellCheck = {},\n maxImageWidth = {},\n maxImageHeight = {},\n mathMlOptions = {},\n template = {},\n editSource = {},\n ignoreOrder: cIgnoreOrder = {},\n allowTrailingZeros: cAllowTrailingZeros = {},\n partialScoring = {},\n maxResponseAreas,\n } = configuration || {};\n\n const {\n errors,\n promptEnabled,\n rationaleEnabled,\n spellCheckEnabled,\n teacherInstructionsEnabled,\n toolbarEditorPosition,\n responses,\n equationEditor,\n } = model || {};\n\n const {\n prompt: promptError,\n rationale: rationaleError,\n responseAreas: responseAreasError,\n teacherInstructions: teacherInstructionsError,\n responses: responsesErrors = {},\n } = errors || {};\n\n const panelSettings = {\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n };\n\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n playerSpellCheckEnabled: playerSpellCheck.settings && toggle(playerSpellCheck.label),\n 'editSource.enabled': editSource?.settings && toggle(editSource.label, true),\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n };\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n const getPluginProps = (props = {}, baseInputConfiguration = {}) => ({\n ...baseInputConfiguration,\n ...props,\n });\n\n return (\n <layout.ConfigLayout\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n configuration={configuration}\n onChangeModel={(updatedModel) => onModelChanged(updatedModel)}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n {teacherInstructionsEnabled && (\n <InputContainer\n label={teacherInstructions.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.teacherInstructions || ''}\n onChange={(value) => this.handleChange('teacherInstructions', value)}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={teacherInstructionsError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(\n teacherInstructions?.inputConfiguration,\n baseInputConfiguration\n )}\n spellCheck={spellCheckEnabled}\n maxImageWidth={\n (maxImageWidth && maxImageWidth.teacherInstructions) ||\n defaultImageMaxWidth\n }\n maxImageHeight={\n (maxImageHeight && maxImageHeight.teacherInstructions) ||\n defaultImageMaxHeight\n }\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[\n { language: 'spanish' },\n { language: 'special' },\n ]}\n mathMlOptions={mathMlOptions}\n />\n {teacherInstructionsError && (\n <div className={classes.errorText}>{teacherInstructionsError}</div>\n )}\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer\n label={prompt.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={(value) => this.handleChange('prompt', value)}\n imageSupport={imageSupport}\n nonEmpty={false}\n disableUnderline\n error={promptError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(\n teacherInstructions?.inputConfiguration,\n baseInputConfiguration\n )}\n spellCheck={spellCheckEnabled}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[\n { language: 'spanish' },\n { language: 'special' },\n ]}\n mathMlOptions={mathMlOptions}\n />\n {promptError && (\n <div className={classes.errorText}>{promptError}</div>\n )}\n </InputContainer>\n )}\n\n <Typography className={classes.title}>Response Template</Typography>\n\n <EditableHtml\n activePlugins={ALL_PLUGINS}\n toolbarOpts={{ position: 'top' }}\n spellCheck={spellCheckEnabled}\n pluginProps={getPluginProps(\n template?.inputConfiguration,\n baseInputConfiguration\n )}\n responseAreaProps={{\n type: 'math-templated',\n respAreaToolbar: null,\n error: () => responsesErrors,\n onHandleAreaChange: this.onHandleAreaChange,\n maxResponseAreas: maxResponseAreas,\n }}\n className={classes.markup}\n markup={model.slateMarkup}\n onChange={this.onChange}\n imageSupport={imageSupport}\n disableImageAlignmentButtons={true}\n onBlur={this.onBlur}\n disabled={false}\n highlightShape={false}\n error={responseAreasError}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[\n { language: 'spanish' },\n { language: 'special' },\n ]}\n mathMlOptions={mathMlOptions}\n />\n {responseAreasError && (\n <div className={classes.responseAreaError}>{responseAreasError}</div>\n )}\n\n <Typography className={classes.title}>Define Response</Typography>\n\n <InputContainer\n label=\"Response Template Equation Editor\"\n className={classes.selectContainer}\n >\n <Select\n className={classes.select}\n onChange={(event) =>\n this.handleChange('equationEditor', event.target.value)\n }\n value={equationEditor}\n >\n <MenuItem value=\"non-negative-integers\">\n Numeric - Non-Negative Integers\n </MenuItem>\n <MenuItem value=\"integers\">Numeric - Integers</MenuItem>\n <MenuItem value=\"decimals\">Numeric - Decimals</MenuItem>\n <MenuItem value=\"fractions\">Numeric - Fractions</MenuItem>\n <MenuItem value={1}>Grade 1 - 2</MenuItem>\n <MenuItem value={3}>Grade 3 - 5</MenuItem>\n <MenuItem value={6}>Grade 6 - 7</MenuItem>\n <MenuItem value={8}>Grade 8 - HS</MenuItem>\n <MenuItem value={'geometry'}>Geometry</MenuItem>\n <MenuItem value={'advanced-algebra'}>\n Advanced Algebra\n </MenuItem>\n <MenuItem value={'statistics'}>Statistics</MenuItem>\n <MenuItem value={'item-authoring'}>Item Authoring</MenuItem>\n </Select>\n </InputContainer>\n\n {Object.keys(responses || {}).map((responseKey, idx) => {\n const response = responses[responseKey];\n\n if (response) {\n return (\n <Response\n key={responseKey}\n responseKey={responseKey}\n mode={equationEditor}\n response={response}\n onResponseChange={this.onResponseChange}\n index={idx}\n cIgnoreOrder={cIgnoreOrder}\n cAllowTrailingZeros={cAllowTrailingZeros}\n error={responsesErrors && responsesErrors[idx]}\n />\n );\n }\n\n return null;\n })}\n\n {rationaleEnabled && (\n <InputContainer\n label={rationale.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.rationale || ''}\n onChange={(value) => this.handleChange('rationale', value)}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={rationaleError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(rationale?.inputConfiguration, {\n ...baseInputConfiguration,\n math: {\n controlledKeypadMode: false,\n },\n })}\n spellCheck={spellCheckEnabled}\n maxImageWidth={\n (maxImageWidth && maxImageWidth.rationale) ||\n defaultImageMaxWidth\n }\n maxImageHeight={\n (maxImageHeight && maxImageHeight.rationale) ||\n defaultImageMaxHeight\n }\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[\n { language: 'spanish' },\n { language: 'special' },\n ]}\n mathMlOptions={mathMlOptions}\n />\n {rationaleError && (\n <div className={classes.errorText}>{rationaleError}</div>\n )}\n </InputContainer>\n )}\n </layout.ConfigLayout>\n );\n }\n}\n\nexport default withStyles((theme) => ({\n promptHolder: {\n width: '100%',\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n prompt: {\n width: '100%',\n },\n errorText: {\n color: theme.palette.error.main,\n fontSize: '0.75rem',\n marginTop: theme.spacing.unit,\n },\n responseAreaError: {\n color: theme.palette.error.main,\n fontSize: '0.75rem',\n marginBottom: theme.spacing.unit,\n },\n markup: {\n width: '100%',\n marginTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 3,\n },\n selectContainer: {\n width: '100%',\n marginTop: theme.spacing.unit * 2,\n },\n select: {\n width: '100%',\n },\n title: {\n fontSize: theme.typography.fontSize * 1.25,\n fontWeight: 'bold',\n }\n}))(Design);\n"],"file":"design.js"}
|
package/controller/lib/index.js
CHANGED
|
@@ -9,6 +9,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
9
|
});
|
|
10
10
|
exports.validate = exports.prepareVal = exports.outcome = exports.normalizeSession = exports.model = exports.getPartialScore = exports.getCorrectness = exports.createDefaultModel = exports.createCorrectResponseSession = void 0;
|
|
11
11
|
|
|
12
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
|
+
|
|
12
14
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
13
15
|
|
|
14
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
@@ -21,8 +23,6 @@ var _translator = _interopRequireDefault(require("@pie-lib/pie-toolbox/translato
|
|
|
21
23
|
|
|
22
24
|
var mv = _interopRequireWildcard(require("@pie-framework/math-validation"));
|
|
23
25
|
|
|
24
|
-
var _feedback = require("@pie-lib/pie-toolbox/feedback");
|
|
25
|
-
|
|
26
26
|
var _defaults = _interopRequireDefault(require("./defaults"));
|
|
27
27
|
|
|
28
28
|
var _controllerUtils = require("@pie-lib/pie-toolbox/controller-utils");
|
|
@@ -48,6 +48,10 @@ var getFeedback = function getFeedback(value) {
|
|
|
48
48
|
return value ? 'correct' : 'incorrect';
|
|
49
49
|
};
|
|
50
50
|
|
|
51
|
+
var getContent = function getContent(html) {
|
|
52
|
+
return (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');
|
|
53
|
+
};
|
|
54
|
+
|
|
51
55
|
var getIsAnswerCorrect = function getIsAnswerCorrect(correctResponse, answerItem) {
|
|
52
56
|
var answerCorrect = false;
|
|
53
57
|
|
|
@@ -100,20 +104,22 @@ var getResponseCorrectness = function getResponseCorrectness(question, sessionRe
|
|
|
100
104
|
var correctAnswers = 0;
|
|
101
105
|
var score = 0;
|
|
102
106
|
var correct = false;
|
|
107
|
+
var correctResponsesCount = Object.keys(correctResponses || {}).length;
|
|
103
108
|
Object.keys(correctResponses).forEach(function (responseId) {
|
|
104
109
|
var answerItem = sessionResponse['r' + responseId];
|
|
105
|
-
var correctResponse = correctResponses[responseId];
|
|
110
|
+
var correctResponse = correctResponses[responseId] || {};
|
|
106
111
|
var answerCorrect = getIsAnswerCorrect(correctResponse, answerItem);
|
|
107
112
|
|
|
108
113
|
if (answerCorrect) {
|
|
109
114
|
correctAnswers++;
|
|
110
115
|
}
|
|
111
|
-
});
|
|
116
|
+
});
|
|
117
|
+
var fullyCorrect = correctAnswers === correctResponsesCount; // partial credit scoring: each correct answer is worth 1 / total answers point
|
|
112
118
|
// dichotomous scoring: for credit to be awarded, a correct answer must be entered for every response area
|
|
113
119
|
|
|
114
120
|
score = (correctAnswers / Object.keys(correctResponses).length).toFixed(2);
|
|
115
121
|
return {
|
|
116
|
-
correctness:
|
|
122
|
+
correctness: fullyCorrect ? 'correct' : 'incorrect',
|
|
117
123
|
score: correctAnswers > 0 ? score : 0,
|
|
118
124
|
correct: correct
|
|
119
125
|
};
|
|
@@ -203,7 +209,7 @@ var model = function model(question, session, env) {
|
|
|
203
209
|
var showNote = false; // check if there is at least one alternate response or if the validation for at least one response is not literal
|
|
204
210
|
|
|
205
211
|
Object.keys(responses).forEach(function (responseId) {
|
|
206
|
-
var correctResponse = responses[responseId];
|
|
212
|
+
var correctResponse = responses[responseId] || {};
|
|
207
213
|
|
|
208
214
|
if (correctResponse.alternates && Object.keys(correctResponse.alternates).length > 0) {
|
|
209
215
|
showNote = true;
|
|
@@ -294,7 +300,69 @@ exports.createCorrectResponseSession = createCorrectResponseSession;
|
|
|
294
300
|
var validate = function validate() {
|
|
295
301
|
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
296
302
|
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
303
|
+
var responses = model.responses,
|
|
304
|
+
markup = model.markup;
|
|
305
|
+
var maxResponseAreas = config.maxResponseAreas;
|
|
306
|
+
var responsesErrors = {};
|
|
297
307
|
var errors = {};
|
|
308
|
+
['teacherInstructions', 'prompt', 'rationale'].forEach(function (field) {
|
|
309
|
+
var _config$field;
|
|
310
|
+
|
|
311
|
+
if ((_config$field = config[field]) !== null && _config$field !== void 0 && _config$field.required && !getContent(model[field])) {
|
|
312
|
+
errors[field] = 'This field is required.';
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
Object.entries(responses || {}).forEach(function (_ref2, index) {
|
|
316
|
+
var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
|
|
317
|
+
key = _ref3[0],
|
|
318
|
+
response = _ref3[1];
|
|
319
|
+
|
|
320
|
+
var answer = response.answer;
|
|
321
|
+
var reversedAlternates = (0, _toConsumableArray2["default"])(Object.entries(response.alternates || {})).reverse();
|
|
322
|
+
var alternatesErrors = {};
|
|
323
|
+
var responseError = {};
|
|
324
|
+
|
|
325
|
+
if (answer === '') {
|
|
326
|
+
responseError.answer = 'Content should not be empty.';
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
reversedAlternates.forEach(function (_ref4, index) {
|
|
330
|
+
var _ref5 = (0, _slicedToArray2["default"])(_ref4, 2),
|
|
331
|
+
key = _ref5[0],
|
|
332
|
+
value = _ref5[1];
|
|
333
|
+
|
|
334
|
+
if (value === '') {
|
|
335
|
+
alternatesErrors[key] = 'Content should not be empty.';
|
|
336
|
+
} else {
|
|
337
|
+
var identicalAnswer = answer === value || reversedAlternates.slice(index + 1).some(function (_ref6) {
|
|
338
|
+
var _ref7 = (0, _slicedToArray2["default"])(_ref6, 2),
|
|
339
|
+
val = _ref7[1];
|
|
340
|
+
|
|
341
|
+
return val === value;
|
|
342
|
+
});
|
|
343
|
+
|
|
344
|
+
if (identicalAnswer) {
|
|
345
|
+
alternatesErrors[key] = 'Content should be unique.';
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
});
|
|
349
|
+
|
|
350
|
+
if (!(0, _isEmpty["default"])(responseError) || !(0, _isEmpty["default"])(alternatesErrors)) {
|
|
351
|
+
responsesErrors[index] = _objectSpread(_objectSpread({}, responseError), alternatesErrors);
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
var nbOfResponseAreas = (markup.match(/\{\{(\d+)\}\}/g) || []).length;
|
|
355
|
+
|
|
356
|
+
if (nbOfResponseAreas > maxResponseAreas) {
|
|
357
|
+
errors.responseAreas = "No more than ".concat(maxResponseAreas, " response areas should be defined.");
|
|
358
|
+
} else if (nbOfResponseAreas < 1) {
|
|
359
|
+
errors.responseAreas = 'There should be at least 1 response area defined.';
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
if (!(0, _isEmpty["default"])(responsesErrors)) {
|
|
363
|
+
errors.responses = responsesErrors;
|
|
364
|
+
}
|
|
365
|
+
|
|
298
366
|
return errors;
|
|
299
367
|
};
|
|
300
368
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["translator","Translator","log","getFeedback","value","getIsAnswerCorrect","correctResponse","answerItem","answerCorrect","opts","mode","validation","defaults","validationDefault","literal","allowTrailingZeros","ignoreOrder","acceptedValues","answer","Object","values","alternates","mv","latexEqual","e","getResponseCorrectness","question","sessionResponse","correctResponses","responses","correctness","score","correct","correctAnswers","keys","forEach","responseId","length","toFixed","getCorrectness","env","session","answers","getPartialScore","outcome","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","console","normalizeSession","undefined","completed","createDefaultModel","model","s","getTextFromHTML","html","replace","prepareVal","trim","normalizedQuestion","language","note","showNote","t","lng","out","prompt","promptEnabled","markup","equationEditor","customKeys","disabled","view","feedback","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","createCorrectResponseSession","reduce","acc","id","validate","config","errors"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport Translator from '@pie-lib/pie-toolbox/translator';\nimport * as mv from '@pie-framework/math-validation';\nimport { getFeedbackForCorrectness } from '@pie-lib/pie-toolbox/feedback';\n\nimport defaults from './defaults';\nimport { partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\n\nconst { translator } = Translator;\nconst log = debug('@pie-element:math-templated:controller');\n\nconst getFeedback = value => value ? 'correct' : 'incorrect';\n\nconst getIsAnswerCorrect = (correctResponse, answerItem) => {\n let answerCorrect = false;\n\n const opts = {\n mode: correctResponse.validation || defaults.validationDefault,\n ...(correctResponse.validation === 'literal' && {\n literal: {\n allowTrailingZeros: correctResponse.allowTrailingZeros || false,\n ignoreOrder: correctResponse.ignoreOrder || false,\n }\n })\n };\n\n if (!answerCorrect) {\n const acceptedValues = [\n correctResponse.answer,\n ...Object.values(correctResponse.alternates || {})\n ];\n\n try {\n for (const value of acceptedValues) {\n answerCorrect = mv.latexEqual(answerItem.value, value, opts);\n if (answerCorrect) break;\n }\n } catch (e) {\n log('Parse failure when evaluating math', e, correctResponse, answerItem);\n answerCorrect = false;\n }\n }\n\n return answerCorrect;\n};\n\nconst getResponseCorrectness = (question, sessionResponse) => {\n const correctResponses = question.responses;\n\n if (!sessionResponse) {\n return {\n correctness: 'unanswered',\n score: 0,\n correct: false,\n };\n } else {\n let correctAnswers = 0;\n let score = 0;\n let correct = false;\n Object.keys(correctResponses).forEach((responseId) => {\n const answerItem = sessionResponse['r' + responseId];\n const correctResponse = correctResponses[responseId];\n\n const answerCorrect = getIsAnswerCorrect(correctResponse, answerItem);\n if (answerCorrect) {\n correctAnswers++;\n }\n });\n\n // partial credit scoring: each correct answer is worth 1 / total answers point\n // dichotomous scoring: for credit to be awarded, a correct answer must be entered for every response area\n score = (correctAnswers / Object.keys(correctResponses).length).toFixed(2);\n\n return {\n correctness: correctAnswers > 0 ? 'correct' : 'incorrect',\n score: correctAnswers > 0 ? score : 0,\n correct\n };\n }\n};\n\nexport const getCorrectness = (question, env, session) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(\n question,\n session && session.answers\n );\n }\n};\n\nexport const getPartialScore = (question, session) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n return 1;\n};\n\nexport const outcome = (question, session, env) =>\n new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n const partialScoringEnabled = partialScoring.enabled(question, env);\n console.log('partialScoringEnabled: ', partialScoringEnabled);\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n const correctness = getCorrectness(question, env, session, true);\n const score = correctness.score;\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n\nexport const createDefaultModel = (model = {}) => ({\n ...defaults.model,\n ...model,\n});\n\nexport const normalizeSession = (s) => ({ ...s });\n\nconst getTextFromHTML = html => (html || '').replace(/<\\/?[^>]+(>|$)/g, '');\n\nexport const prepareVal = html => getTextFromHTML(html).trim();\n\nexport const model = (question, session, env) => {\n return new Promise((resolve) => {\n session = session || {};\n const normalizedQuestion = createDefaultModel(question);\n const correctness = getCorrectness(normalizedQuestion, env, session);\n const { responses, language } = normalizedQuestion;\n let { note } = normalizedQuestion;\n let showNote = false;\n\n // check if there is at least one alternate response or if the validation for at least one response is not literal\n Object.keys(responses).forEach((responseId) => {\n const correctResponse = responses[responseId];\n if (correctResponse.alternates && Object.keys(correctResponse.alternates).length > 0) {\n showNote = true;\n } else if (correctResponse.validation !== 'literal') {\n showNote = true;\n }\n });\n\n if (!note) {\n note = translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });\n }\n\n const out = {\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n markup: normalizedQuestion.markup,\n responses: env.mode === 'gather' ? null : normalizedQuestion.responses,\n language: normalizedQuestion.language,\n equationEditor: normalizedQuestion.equationEditor,\n customKeys: normalizedQuestion.customKeys,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n correctness,\n env,\n };\n\n const { answers = {} } = session || {};\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n Object.keys(responses).forEach((responseId) => {\n const answerItem = answers['r' + responseId];\n const correctResponse = responses[responseId];\n feedback[responseId] = getIsAnswerCorrect(correctResponse, answerItem);\n });\n }\n\n if (env.mode === 'evaluate') {\n out.correctResponse = {};\n out.showNote = showNote;\n out.note = note;\n out.feedback = feedback;\n } else {\n out.responses = {};\n out.showNote = false;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n log('out: ', out);\n resolve(out);\n });\n};\n\nexport const createCorrectResponseSession = (question, env) =>\n new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const correctResponse = Object.keys(question.responses).reduce((acc, responseId) => {\n acc['r' + responseId] = { value: question.responses[responseId].answer };\n return acc;\n }, {});\n\n resolve({ id: '1', answers: correctResponse });\n } else {\n resolve(null);\n }\n });\n\nexport const validate = (model = {}, config = {}) => {\n const errors = {};\n\n return errors;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["translator","Translator","log","getFeedback","value","getContent","html","replace","getIsAnswerCorrect","correctResponse","answerItem","answerCorrect","opts","mode","validation","defaults","validationDefault","literal","allowTrailingZeros","ignoreOrder","acceptedValues","answer","Object","values","alternates","mv","latexEqual","e","getResponseCorrectness","question","sessionResponse","correctResponses","responses","correctness","score","correct","correctAnswers","correctResponsesCount","keys","length","forEach","responseId","fullyCorrect","toFixed","getCorrectness","env","session","answers","getPartialScore","outcome","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","console","normalizeSession","undefined","completed","createDefaultModel","model","s","getTextFromHTML","prepareVal","trim","normalizedQuestion","language","note","showNote","t","lng","out","prompt","promptEnabled","markup","equationEditor","customKeys","disabled","view","feedback","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","createCorrectResponseSession","reduce","acc","id","validate","config","maxResponseAreas","responsesErrors","errors","field","required","entries","index","key","response","reversedAlternates","reverse","alternatesErrors","responseError","identicalAnswer","slice","some","val","nbOfResponseAreas","match","responseAreas"],"mappings":";;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEA;;AACA;;;;;;;;;;;;;;;;AAEA,IAAQA,UAAR,GAAuBC,sBAAvB,CAAQD,UAAR;AACA,IAAME,GAAG,GAAG,uBAAM,wCAAN,CAAZ;;AAEA,IAAMC,WAAW,GAAG,SAAdA,WAAc,CAAAC,KAAK;AAAA,SAAIA,KAAK,GAAG,SAAH,GAAe,WAAxB;AAAA,CAAzB;;AACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAACC,IAAD;AAAA,SAAU,CAACA,IAAI,IAAI,EAAT,EAAaC,OAAb,CAAqB,6BAArB,EAAoD,EAApD,CAAV;AAAA,CAAnB;;AAEA,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,CAACC,eAAD,EAAkBC,UAAlB,EAAiC;AAC1D,MAAIC,aAAa,GAAG,KAApB;;AAEA,MAAMC,IAAI;AACRC,IAAAA,IAAI,EAAEJ,eAAe,CAACK,UAAhB,IAA8BC,qBAASC;AADrC,KAEJP,eAAe,CAACK,UAAhB,KAA+B,SAA/B,IAA4C;AAC9CG,IAAAA,OAAO,EAAE;AACPC,MAAAA,kBAAkB,EAAET,eAAe,CAACS,kBAAhB,IAAsC,KADnD;AAEPC,MAAAA,WAAW,EAAEV,eAAe,CAACU,WAAhB,IAA+B;AAFrC;AADqC,GAFxC,CAAV;;AAUA,MAAI,CAACR,aAAL,EAAoB;AAClB,QAAMS,cAAc,IAClBX,eAAe,CAACY,MADE,6CAEfC,MAAM,CAACC,MAAP,CAAcd,eAAe,CAACe,UAAhB,IAA8B,EAA5C,CAFe,EAApB;;AAKA,QAAI;AAAA,iDACkBJ,cADlB;AAAA;;AAAA;AACF,4DAAoC;AAAA,cAAzBhB,KAAyB;AAClCO,UAAAA,aAAa,GAAGc,EAAE,CAACC,UAAH,CAAchB,UAAU,CAACN,KAAzB,EAAgCA,KAAhC,EAAuCQ,IAAvC,CAAhB;AACA,cAAID,aAAJ,EAAmB;AACpB;AAJC;AAAA;AAAA;AAAA;AAAA;AAKH,KALD,CAKE,OAAOgB,CAAP,EAAU;AACVzB,MAAAA,GAAG,CAAC,oCAAD,EAAuCyB,CAAvC,EAA0ClB,eAA1C,EAA2DC,UAA3D,CAAH;AACAC,MAAAA,aAAa,GAAG,KAAhB;AACD;AACF;;AAED,SAAOA,aAAP;AACD,CA/BD;;AAiCA,IAAMiB,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACC,QAAD,EAAWC,eAAX,EAA+B;AAC5D,MAAMC,gBAAgB,GAAGF,QAAQ,CAACG,SAAlC;;AAEA,MAAI,CAACF,eAAL,EAAsB;AACpB,WAAO;AACLG,MAAAA,WAAW,EAAE,YADR;AAELC,MAAAA,KAAK,EAAE,CAFF;AAGLC,MAAAA,OAAO,EAAE;AAHJ,KAAP;AAKD,GAND,MAMO;AACL,QAAIC,cAAc,GAAG,CAArB;AACA,QAAIF,KAAK,GAAG,CAAZ;AACA,QAAIC,OAAO,GAAG,KAAd;AACA,QAAME,qBAAqB,GAAGf,MAAM,CAACgB,IAAP,CAAYP,gBAAgB,IAAI,EAAhC,EAAoCQ,MAAlE;AAEAjB,IAAAA,MAAM,CAACgB,IAAP,CAAYP,gBAAZ,EAA8BS,OAA9B,CAAsC,UAACC,UAAD,EAAgB;AACpD,UAAM/B,UAAU,GAAGoB,eAAe,CAAC,MAAMW,UAAP,CAAlC;AACA,UAAMhC,eAAe,GAAGsB,gBAAgB,CAACU,UAAD,CAAhB,IAAgC,EAAxD;AAEA,UAAM9B,aAAa,GAAGH,kBAAkB,CAACC,eAAD,EAAkBC,UAAlB,CAAxC;;AACA,UAAIC,aAAJ,EAAmB;AACjByB,QAAAA,cAAc;AACf;AACF,KARD;AAUA,QAAMM,YAAY,GAAGN,cAAc,KAAKC,qBAAxC,CAhBK,CAkBL;AACA;;AACAH,IAAAA,KAAK,GAAG,CAACE,cAAc,GAAGd,MAAM,CAACgB,IAAP,CAAYP,gBAAZ,EAA8BQ,MAAhD,EAAwDI,OAAxD,CAAgE,CAAhE,CAAR;AAEA,WAAO;AACLV,MAAAA,WAAW,EAAES,YAAY,GAAG,SAAH,GAAe,WADnC;AAELR,MAAAA,KAAK,EAAEE,cAAc,GAAG,CAAjB,GAAqBF,KAArB,GAA6B,CAF/B;AAGLC,MAAAA,OAAO,EAAPA;AAHK,KAAP;AAKD;AACF,CArCD;;AAuCO,IAAMS,cAAc,GAAG,SAAjBA,cAAiB,CAACf,QAAD,EAAWgB,GAAX,EAAgBC,OAAhB,EAA4B;AACxD,MAAID,GAAG,CAAChC,IAAJ,KAAa,UAAjB,EAA6B;AAC3B,WAAOe,sBAAsB,CAC3BC,QAD2B,EAE3BiB,OAAO,IAAIA,OAAO,CAACC,OAFQ,CAA7B;AAID;AACF,CAPM;;;;AASA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAACnB,QAAD,EAAWiB,OAAX,EAAuB;AACpD,MAAI,CAACA,OAAD,IAAY,yBAAQA,OAAR,CAAhB,EAAkC;AAChC,WAAO,CAAP;AACD;;AAED,SAAO,CAAP;AACD,CANM;;;;AAQA,IAAMG,OAAO,GAAG,SAAVA,OAAU,CAACpB,QAAD,EAAWiB,OAAX,EAAoBD,GAApB;AAAA,SACrB,IAAIK,OAAJ,CAAY,UAACC,OAAD,EAAa;AACvB,QAAI,CAACL,OAAD,IAAY,yBAAQA,OAAR,CAAhB,EAAkC;AAChCK,MAAAA,OAAO,CAAC;AAAEjB,QAAAA,KAAK,EAAE,CAAT;AAAYkB,QAAAA,KAAK,EAAE;AAAnB,OAAD,CAAP;AACD;;AACD,QAAMC,qBAAqB,GAAGC,gCAAeC,OAAf,CAAuB1B,QAAvB,EAAiCgB,GAAjC,CAA9B;;AACAW,IAAAA,OAAO,CAACtD,GAAR,CAAY,yBAAZ,EAAuCmD,qBAAvC;AACAP,IAAAA,OAAO,GAAGW,gBAAgB,CAACX,OAAD,CAA1B;;AAEA,QAAID,GAAG,CAAChC,IAAJ,KAAa,UAAjB,EAA6B;AAC3BsC,MAAAA,OAAO,CAAC;AAAEjB,QAAAA,KAAK,EAAEwB,SAAT;AAAoBC,QAAAA,SAAS,EAAED;AAA/B,OAAD,CAAP;AACD,KAFD,MAEO;AACL,UAAMzB,WAAW,GAAGW,cAAc,CAACf,QAAD,EAAWgB,GAAX,EAAgBC,OAAhB,EAAyB,IAAzB,CAAlC;AACA,UAAMZ,KAAK,GAAGD,WAAW,CAACC,KAA1B;AAEAiB,MAAAA,OAAO,CAAC;AAAEjB,QAAAA,KAAK,EAAEmB,qBAAqB,GAAGnB,KAAH,GAAWA,KAAK,KAAK,CAAV,GAAc,CAAd,GAAkB;AAA3D,OAAD,CAAP;AACD;AACF,GAhBD,CADqB;AAAA,CAAhB;;;;AAmBA,IAAM0B,kBAAkB,GAAG,SAArBA,kBAAqB;AAAA,MAACC,KAAD,uEAAS,EAAT;AAAA,yCAC7B9C,qBAAS8C,KADoB,GAE7BA,KAF6B;AAAA,CAA3B;;;;AAKA,IAAMJ,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACK,CAAD;AAAA,2BAAaA,CAAb;AAAA,CAAzB;;;;AAEP,IAAMC,eAAe,GAAG,SAAlBA,eAAkB,CAAAzD,IAAI;AAAA,SAAI,CAACA,IAAI,IAAI,EAAT,EAAaC,OAAb,CAAqB,iBAArB,EAAwC,EAAxC,CAAJ;AAAA,CAA5B;;AAEO,IAAMyD,UAAU,GAAG,SAAbA,UAAa,CAAA1D,IAAI;AAAA,SAAIyD,eAAe,CAACzD,IAAD,CAAf,CAAsB2D,IAAtB,EAAJ;AAAA,CAAvB;;;;AAEA,IAAMJ,KAAK,GAAG,SAARA,KAAQ,CAAChC,QAAD,EAAWiB,OAAX,EAAoBD,GAApB,EAA4B;AAC/C,SAAO,IAAIK,OAAJ,CAAY,UAACC,OAAD,EAAa;AAC9BL,IAAAA,OAAO,GAAGA,OAAO,IAAI,EAArB;AACA,QAAMoB,kBAAkB,GAAGN,kBAAkB,CAAC/B,QAAD,CAA7C;AACA,QAAMI,WAAW,GAAGW,cAAc,CAACsB,kBAAD,EAAqBrB,GAArB,EAA0BC,OAA1B,CAAlC;AACA,QAAQd,SAAR,GAAgCkC,kBAAhC,CAAQlC,SAAR;AAAA,QAAmBmC,QAAnB,GAAgCD,kBAAhC,CAAmBC,QAAnB;AACA,QAAMC,IAAN,GAAeF,kBAAf,CAAME,IAAN;AACA,QAAIC,QAAQ,GAAG,KAAf,CAN8B,CAQ9B;;AACA/C,IAAAA,MAAM,CAACgB,IAAP,CAAYN,SAAZ,EAAuBQ,OAAvB,CAA+B,UAACC,UAAD,EAAgB;AAC7C,UAAMhC,eAAe,GAAGuB,SAAS,CAACS,UAAD,CAAT,IAAyB,EAAjD;;AACA,UAAIhC,eAAe,CAACe,UAAhB,IAA8BF,MAAM,CAACgB,IAAP,CAAY7B,eAAe,CAACe,UAA5B,EAAwCe,MAAxC,GAAiD,CAAnF,EAAsF;AACpF8B,QAAAA,QAAQ,GAAG,IAAX;AACD,OAFD,MAEO,IAAI5D,eAAe,CAACK,UAAhB,KAA+B,SAAnC,EAA8C;AACnDuD,QAAAA,QAAQ,GAAG,IAAX;AACD;AACF,KAPD;;AASA,QAAI,CAACD,IAAL,EAAW;AACTA,MAAAA,IAAI,GAAGpE,UAAU,CAACsE,CAAX,CAAa,yCAAb,EAAwD;AAAEC,QAAAA,GAAG,EAAEJ;AAAP,OAAxD,CAAP;AACD;;AAED,QAAMK,GAAG,GAAG;AACVC,MAAAA,MAAM,EAAEP,kBAAkB,CAACQ,aAAnB,GAAmCR,kBAAkB,CAACO,MAAtD,GAA+D,IAD7D;AAEVE,MAAAA,MAAM,EAAET,kBAAkB,CAACS,MAFjB;AAGV3C,MAAAA,SAAS,EAAEa,GAAG,CAAChC,IAAJ,KAAa,QAAb,GAAwB,IAAxB,GAA+BqD,kBAAkB,CAAClC,SAHnD;AAIVmC,MAAAA,QAAQ,EAAED,kBAAkB,CAACC,QAJnB;AAKVS,MAAAA,cAAc,EAAEV,kBAAkB,CAACU,cALzB;AAMVC,MAAAA,UAAU,EAAEX,kBAAkB,CAACW,UANrB;AAOVC,MAAAA,QAAQ,EAAEjC,GAAG,CAAChC,IAAJ,KAAa,QAPb;AAQVkE,MAAAA,IAAI,EAAElC,GAAG,CAAChC,IAAJ,KAAa,MART;AASVoB,MAAAA,WAAW,EAAXA,WATU;AAUVY,MAAAA,GAAG,EAAHA;AAVU,KAAZ;;AAaA,eAAyBC,OAAO,IAAI,EAApC;AAAA,4BAAQC,OAAR;AAAA,QAAQA,OAAR,6BAAkB,EAAlB;;AACA,QAAIiC,QAAQ,GAAG,EAAf;;AAEA,QAAInC,GAAG,CAAChC,IAAJ,KAAa,UAAjB,EAA6B;AAC3BS,MAAAA,MAAM,CAACgB,IAAP,CAAYN,SAAZ,EAAuBQ,OAAvB,CAA+B,UAACC,UAAD,EAAgB;AAC7C,YAAM/B,UAAU,GAAGqC,OAAO,CAAC,MAAMN,UAAP,CAA1B;AACA,YAAMhC,eAAe,GAAGuB,SAAS,CAACS,UAAD,CAAjC;AACAuC,QAAAA,QAAQ,CAACvC,UAAD,CAAR,GAAuBjC,kBAAkB,CAACC,eAAD,EAAkBC,UAAlB,CAAzC;AACD,OAJD;AAKD;;AAED,QAAImC,GAAG,CAAChC,IAAJ,KAAa,UAAjB,EAA6B;AAC3B2D,MAAAA,GAAG,CAAC/D,eAAJ,GAAsB,EAAtB;AACA+D,MAAAA,GAAG,CAACH,QAAJ,GAAeA,QAAf;AACAG,MAAAA,GAAG,CAACJ,IAAJ,GAAWA,IAAX;AACAI,MAAAA,GAAG,CAACQ,QAAJ,GAAeA,QAAf;AACD,KALD,MAKO;AACLR,MAAAA,GAAG,CAACxC,SAAJ,GAAgB,EAAhB;AACAwC,MAAAA,GAAG,CAACH,QAAJ,GAAe,KAAf;AACD;;AAED,QAAIxB,GAAG,CAACoC,IAAJ,KAAa,YAAb,KAA8BpC,GAAG,CAAChC,IAAJ,KAAa,MAAb,IAAuBgC,GAAG,CAAChC,IAAJ,KAAa,UAAlE,CAAJ,EAAmF;AACjF2D,MAAAA,GAAG,CAACU,SAAJ,GAAgBhB,kBAAkB,CAACiB,gBAAnB,GAAsCjB,kBAAkB,CAACgB,SAAzD,GAAqE,IAArF;AACAV,MAAAA,GAAG,CAACY,mBAAJ,GAA0BlB,kBAAkB,CAACmB,0BAAnB,GACtBnB,kBAAkB,CAACkB,mBADG,GAEtB,IAFJ;AAGD,KALD,MAKO;AACLZ,MAAAA,GAAG,CAACU,SAAJ,GAAgB,IAAhB;AACAV,MAAAA,GAAG,CAACY,mBAAJ,GAA0B,IAA1B;AACD;;AAEDlF,IAAAA,GAAG,CAAC,OAAD,EAAUsE,GAAV,CAAH;AACArB,IAAAA,OAAO,CAACqB,GAAD,CAAP;AACD,GApEM,CAAP;AAqED,CAtEM;;;;AAwEA,IAAMc,4BAA4B,GAAG,SAA/BA,4BAA+B,CAACzD,QAAD,EAAWgB,GAAX;AAAA,SAC1C,IAAIK,OAAJ,CAAY,UAACC,OAAD,EAAa;AACvB,QAAIN,GAAG,CAAChC,IAAJ,KAAa,UAAb,IAA2BgC,GAAG,CAACoC,IAAJ,KAAa,YAA5C,EAA0D;AACxD,UAAMxE,eAAe,GAAGa,MAAM,CAACgB,IAAP,CAAYT,QAAQ,CAACG,SAArB,EAAgCuD,MAAhC,CAAuC,UAACC,GAAD,EAAM/C,UAAN,EAAqB;AAClF+C,QAAAA,GAAG,CAAC,MAAM/C,UAAP,CAAH,GAAwB;AAAErC,UAAAA,KAAK,EAAEyB,QAAQ,CAACG,SAAT,CAAmBS,UAAnB,EAA+BpB;AAAxC,SAAxB;AACA,eAAOmE,GAAP;AACD,OAHuB,EAGrB,EAHqB,CAAxB;AAKArC,MAAAA,OAAO,CAAC;AAAEsC,QAAAA,EAAE,EAAE,GAAN;AAAW1C,QAAAA,OAAO,EAAEtC;AAApB,OAAD,CAAP;AACD,KAPD,MAOO;AACL0C,MAAAA,OAAO,CAAC,IAAD,CAAP;AACD;AACF,GAXD,CAD0C;AAAA,CAArC;;;;AAcA,IAAMuC,QAAQ,GAAG,SAAXA,QAAW,GAA6B;AAAA,MAA5B7B,KAA4B,uEAApB,EAAoB;AAAA,MAAhB8B,MAAgB,uEAAP,EAAO;AACnD,MAAQ3D,SAAR,GAA8B6B,KAA9B,CAAQ7B,SAAR;AAAA,MAAmB2C,MAAnB,GAA8Bd,KAA9B,CAAmBc,MAAnB;AACA,MAAQiB,gBAAR,GAA6BD,MAA7B,CAAQC,gBAAR;AACA,MAAMC,eAAe,GAAG,EAAxB;AACA,MAAMC,MAAM,GAAG,EAAf;AAEA,GAAC,qBAAD,EAAwB,QAAxB,EAAkC,WAAlC,EAA+CtD,OAA/C,CAAuD,UAACuD,KAAD,EAAW;AAAA;;AAChE,QAAI,iBAAAJ,MAAM,CAACI,KAAD,CAAN,wDAAeC,QAAf,IAA2B,CAAC3F,UAAU,CAACwD,KAAK,CAACkC,KAAD,CAAN,CAA1C,EAA0D;AACxDD,MAAAA,MAAM,CAACC,KAAD,CAAN,GAAgB,yBAAhB;AACD;AACF,GAJD;AAMAzE,EAAAA,MAAM,CAAC2E,OAAP,CAAejE,SAAS,IAAI,EAA5B,EAAgCQ,OAAhC,CAAwC,iBAAkB0D,KAAlB,EAA4B;AAAA;AAAA,QAA1BC,GAA0B;AAAA,QAArBC,QAAqB;;AAClE,QAAQ/E,MAAR,GAAmB+E,QAAnB,CAAQ/E,MAAR;AACA,QAAMgF,kBAAkB,GAAG,oCAAI/E,MAAM,CAAC2E,OAAP,CAAeG,QAAQ,CAAC5E,UAAT,IAAuB,EAAtC,CAAJ,EAA+C8E,OAA/C,EAA3B;AACA,QAAMC,gBAAgB,GAAG,EAAzB;AACA,QAAMC,aAAa,GAAG,EAAtB;;AAEA,QAAInF,MAAM,KAAK,EAAf,EAAmB;AACjBmF,MAAAA,aAAa,CAACnF,MAAd,GAAuB,8BAAvB;AACD;;AAEDgF,IAAAA,kBAAkB,CAAC7D,OAAnB,CAA2B,iBAAe0D,KAAf,EAAyB;AAAA;AAAA,UAAvBC,GAAuB;AAAA,UAAlB/F,KAAkB;;AAClD,UAAIA,KAAK,KAAK,EAAd,EAAkB;AAChBmG,QAAAA,gBAAgB,CAACJ,GAAD,CAAhB,GAAwB,8BAAxB;AACD,OAFD,MAEO;AACL,YAAMM,eAAe,GACnBpF,MAAM,KAAKjB,KAAX,IAAoBiG,kBAAkB,CAACK,KAAnB,CAAyBR,KAAK,GAAG,CAAjC,EAAoCS,IAApC,CAAyC;AAAA;AAAA,cAAIC,GAAJ;;AAAA,iBAAaA,GAAG,KAAKxG,KAArB;AAAA,SAAzC,CADtB;;AAGA,YAAIqG,eAAJ,EAAqB;AACnBF,UAAAA,gBAAgB,CAACJ,GAAD,CAAhB,GAAwB,2BAAxB;AACD;AACF;AACF,KAXD;;AAaA,QAAI,CAAC,yBAAQK,aAAR,CAAD,IAA2B,CAAC,yBAAQD,gBAAR,CAAhC,EAA2D;AACzDV,MAAAA,eAAe,CAACK,KAAD,CAAf,mCAA8BM,aAA9B,GAAgDD,gBAAhD;AACD;AACF,GA1BD;AA4BA,MAAMM,iBAAiB,GAAG,CAAClC,MAAM,CAACmC,KAAP,CAAa,gBAAb,KAAkC,EAAnC,EAAuCvE,MAAjE;;AAEA,MAAIsE,iBAAiB,GAAGjB,gBAAxB,EAA0C;AACxCE,IAAAA,MAAM,CAACiB,aAAP,0BAAuCnB,gBAAvC;AACD,GAFD,MAEO,IAAIiB,iBAAiB,GAAG,CAAxB,EAA2B;AAChCf,IAAAA,MAAM,CAACiB,aAAP,GAAuB,mDAAvB;AACD;;AAED,MAAI,CAAC,yBAAQlB,eAAR,CAAL,EAA+B;AAC7BC,IAAAA,MAAM,CAAC9D,SAAP,GAAmB6D,eAAnB;AACD;;AAED,SAAOC,MAAP;AACD,CArDM","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport Translator from '@pie-lib/pie-toolbox/translator';\nimport * as mv from '@pie-framework/math-validation';\n\nimport defaults from './defaults';\nimport { partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\n\nconst { translator } = Translator;\nconst log = debug('@pie-element:math-templated:controller');\n\nconst getFeedback = value => value ? 'correct' : 'incorrect';\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');\n\nconst getIsAnswerCorrect = (correctResponse, answerItem) => {\n let answerCorrect = false;\n\n const opts = {\n mode: correctResponse.validation || defaults.validationDefault,\n ...(correctResponse.validation === 'literal' && {\n literal: {\n allowTrailingZeros: correctResponse.allowTrailingZeros || false,\n ignoreOrder: correctResponse.ignoreOrder || false,\n }\n })\n };\n\n if (!answerCorrect) {\n const acceptedValues = [\n correctResponse.answer,\n ...Object.values(correctResponse.alternates || {})\n ];\n\n try {\n for (const value of acceptedValues) {\n answerCorrect = mv.latexEqual(answerItem.value, value, opts);\n if (answerCorrect) break;\n }\n } catch (e) {\n log('Parse failure when evaluating math', e, correctResponse, answerItem);\n answerCorrect = false;\n }\n }\n\n return answerCorrect;\n};\n\nconst getResponseCorrectness = (question, sessionResponse) => {\n const correctResponses = question.responses;\n\n if (!sessionResponse) {\n return {\n correctness: 'unanswered',\n score: 0,\n correct: false,\n };\n } else {\n let correctAnswers = 0;\n let score = 0;\n let correct = false;\n const correctResponsesCount = Object.keys(correctResponses || {}).length;\n\n Object.keys(correctResponses).forEach((responseId) => {\n const answerItem = sessionResponse['r' + responseId];\n const correctResponse = correctResponses[responseId] || {};\n\n const answerCorrect = getIsAnswerCorrect(correctResponse, answerItem);\n if (answerCorrect) {\n correctAnswers++;\n }\n });\n\n const fullyCorrect = correctAnswers === correctResponsesCount;\n\n // partial credit scoring: each correct answer is worth 1 / total answers point\n // dichotomous scoring: for credit to be awarded, a correct answer must be entered for every response area\n score = (correctAnswers / Object.keys(correctResponses).length).toFixed(2);\n\n return {\n correctness: fullyCorrect ? 'correct' : 'incorrect',\n score: correctAnswers > 0 ? score : 0,\n correct\n };\n }\n};\n\nexport const getCorrectness = (question, env, session) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(\n question,\n session && session.answers\n );\n }\n};\n\nexport const getPartialScore = (question, session) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n return 1;\n};\n\nexport const outcome = (question, session, env) =>\n new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n const partialScoringEnabled = partialScoring.enabled(question, env);\n console.log('partialScoringEnabled: ', partialScoringEnabled);\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n const correctness = getCorrectness(question, env, session, true);\n const score = correctness.score;\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n\nexport const createDefaultModel = (model = {}) => ({\n ...defaults.model,\n ...model,\n});\n\nexport const normalizeSession = (s) => ({ ...s });\n\nconst getTextFromHTML = html => (html || '').replace(/<\\/?[^>]+(>|$)/g, '');\n\nexport const prepareVal = html => getTextFromHTML(html).trim();\n\nexport const model = (question, session, env) => {\n return new Promise((resolve) => {\n session = session || {};\n const normalizedQuestion = createDefaultModel(question);\n const correctness = getCorrectness(normalizedQuestion, env, session);\n const { responses, language } = normalizedQuestion;\n let { note } = normalizedQuestion;\n let showNote = false;\n\n // check if there is at least one alternate response or if the validation for at least one response is not literal\n Object.keys(responses).forEach((responseId) => {\n const correctResponse = responses[responseId] || {};\n if (correctResponse.alternates && Object.keys(correctResponse.alternates).length > 0) {\n showNote = true;\n } else if (correctResponse.validation !== 'literal') {\n showNote = true;\n }\n });\n\n if (!note) {\n note = translator.t('mathInline.primaryCorrectWithAlternates', { lng: language });\n }\n\n const out = {\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n markup: normalizedQuestion.markup,\n responses: env.mode === 'gather' ? null : normalizedQuestion.responses,\n language: normalizedQuestion.language,\n equationEditor: normalizedQuestion.equationEditor,\n customKeys: normalizedQuestion.customKeys,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view',\n correctness,\n env,\n };\n\n const { answers = {} } = session || {};\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n Object.keys(responses).forEach((responseId) => {\n const answerItem = answers['r' + responseId];\n const correctResponse = responses[responseId];\n feedback[responseId] = getIsAnswerCorrect(correctResponse, answerItem);\n });\n }\n\n if (env.mode === 'evaluate') {\n out.correctResponse = {};\n out.showNote = showNote;\n out.note = note;\n out.feedback = feedback;\n } else {\n out.responses = {};\n out.showNote = false;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n log('out: ', out);\n resolve(out);\n });\n};\n\nexport const createCorrectResponseSession = (question, env) =>\n new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const correctResponse = Object.keys(question.responses).reduce((acc, responseId) => {\n acc['r' + responseId] = { value: question.responses[responseId].answer };\n return acc;\n }, {});\n\n resolve({ id: '1', answers: correctResponse });\n } else {\n resolve(null);\n }\n });\n\nexport const validate = (model = {}, config = {}) => {\n const { responses, markup } = model;\n const { maxResponseAreas } = config;\n const responsesErrors = {};\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n Object.entries(responses || {}).forEach(([key, response], index) => {\n const { answer } = response;\n const reversedAlternates = [...Object.entries(response.alternates || {})].reverse();\n const alternatesErrors = {};\n const responseError = {};\n\n if (answer === '') {\n responseError.answer = 'Content should not be empty.';\n }\n\n reversedAlternates.forEach(([key, value], index) => {\n if (value === '') {\n alternatesErrors[key] = 'Content should not be empty.';\n } else {\n const identicalAnswer =\n answer === value || reversedAlternates.slice(index + 1).some(([, val]) => val === value);\n\n if (identicalAnswer) {\n alternatesErrors[key] = 'Content should be unique.';\n }\n }\n });\n\n if (!isEmpty(responseError) || !isEmpty(alternatesErrors)) {\n responsesErrors[index] = { ...responseError, ...alternatesErrors };\n }\n });\n\n const nbOfResponseAreas = (markup.match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreas = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreas = 'There should be at least 1 response area defined.';\n }\n\n if (!isEmpty(responsesErrors)) {\n errors.responses = responsesErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
package/lib/index.js
CHANGED
|
@@ -95,10 +95,6 @@ var MathTemplated = /*#__PURE__*/function (_HTMLElement) {
|
|
|
95
95
|
}, {
|
|
96
96
|
key: "render",
|
|
97
97
|
value: function render() {
|
|
98
|
-
var _this$_session;
|
|
99
|
-
|
|
100
|
-
console.log('In Player Render, session.answers', (_this$_session = this._session) === null || _this$_session === void 0 ? void 0 : _this$_session.answers);
|
|
101
|
-
|
|
102
98
|
if (!this._model || !this._session) {
|
|
103
99
|
return;
|
|
104
100
|
}
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["MathTemplated","sessionChangedEventCaller","_","debounce","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","_model","m","render","ModelSetEvent","isSessionComplete","undefined","_session","s","session","Object","keys","map","key","
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["MathTemplated","sessionChangedEventCaller","_","debounce","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","_model","m","render","ModelSetEvent","isSessionComplete","undefined","_session","s","session","Object","keys","map","key","el","React","createElement","Main","model","onSessionChange","bind","ReactDOM","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;;;IAEqBA,a;;;;;AACjB,2BAAc;AAAA;;AAAA;AACV;AACA,UAAKC,yBAAL,GAAiCC,mBAAEC,QAAF,CAAW,YAAM;AAC9C,YAAKC,aAAL,CAAmB,IAAIC,oCAAJ,CAAwB,MAAKC,OAAL,CAAaC,WAAb,EAAxB,EAAoD,IAApD,CAAnB;AACH,KAFgC,EAE9B,IAF8B,CAAjC;AAFU;AAKb;;;;SASD,eAAY;AACR,aAAO,KAAKC,MAAZ;AACH,K;SATD,aAAUC,CAAV,EAAa;AACT,WAAKD,MAAL,GAAcC,CAAd;AAEA,WAAKC,MAAL;AACA,WAAKN,aAAL,CAAmB,IAAIO,8BAAJ,CAAkB,KAAKL,OAAL,CAAaC,WAAb,EAAlB,EAA8C,KAAKK,iBAAL,EAA9C,EAAwE,KAAKJ,MAAL,KAAgBK,SAAxF,CAAnB;AACH;;;SAYD,eAAc;AACV,aAAO,KAAKC,QAAZ;AACH,K;SARD,aAAYC,CAAZ,EAAe;AACX,WAAKD,QAAL,GAAgBC,CAAhB;AAEA,WAAKL,MAAL;AACH;;;WAMD,6BAAoB;AAChB;AACA,aAAO,IAAP;AACH;;;WAED,yBAAgBM,OAAhB,EAAyB;AAAA;;AACrB;AACAC,MAAAA,MAAM,CAACC,IAAP,CAAYF,OAAZ,EAAqBG,GAArB,CAAyB,UAACC,GAAD,EAAS;AAC9B,QAAA,MAAI,CAACN,QAAL,CAAcM,GAAd,IAAqBJ,OAAO,CAACI,GAAD,CAA5B;AACH,OAFD;AAIA,WAAKnB,yBAAL;AACA,WAAKS,MAAL;AACH;;;WAED,6BAAoB;AAChB;AAEA,WAAKA,MAAL;AACH;;;WAED,kBAAS;AACL,UAAI,CAAC,KAAKF,MAAN,IAAgB,CAAC,KAAKM,QAA1B,EAAoC;AAChC;AACH;;AAED,UAAI,KAAKN,MAAL,IAAe,KAAKM,QAAxB,EAAkC;AAC9B,YAAMO,EAAE,gBAAGC,kBAAMC,aAAN,CAAoBC,gBAApB,EAA0B;AACjCC,UAAAA,KAAK,EAAE,KAAKjB,MADqB;AAEjCQ,UAAAA,OAAO,EAAE,KAAKF,QAFmB;AAGjCY,UAAAA,eAAe,EAAE,KAAKA,eAAL,CAAqBC,IAArB,CAA0B,IAA1B;AAHgB,SAA1B,CAAX;;AAMAC,6BAASlB,MAAT,CAAgBW,EAAhB,EAAoB,IAApB;AACH;AACJ;;;kDAhEsCQ,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {SessionChangedEvent, ModelSetEvent} from '@pie-framework/pie-player-events';\nimport Main from './main';\nimport _ from 'lodash';\n\nexport default class MathTemplated extends HTMLElement {\n constructor() {\n super();\n this.sessionChangedEventCaller = _.debounce(() => {\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), true));\n }, 1000);\n }\n\n set model(m) {\n this._model = m;\n\n this.render();\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this.isSessionComplete(), this._model !== undefined));\n }\n\n get model() {\n return this._model;\n }\n\n set session(s) {\n this._session = s;\n\n this.render();\n }\n\n get session() {\n return this._session;\n }\n\n isSessionComplete() {\n // a method to check if student answered the question\n return true;\n }\n\n onSessionChange(session) {\n // you can add an extra step here to validate session\n Object.keys(session).map((key) => {\n this._session[key] = session[key];\n });\n\n this.sessionChangedEventCaller();\n this.render();\n }\n\n connectedCallback() {\n // TODO set accessibility labels\n\n this.render();\n }\n\n render() {\n if (!this._model || !this._session) {\n return;\n }\n\n if (this._model && this._session) {\n const el = React.createElement(Main, {\n model: this._model,\n session: this._session,\n onSessionChange: this.onSessionChange.bind(this),\n });\n\n ReactDOM.render(el, this);\n }\n }\n}\n"],"file":"index.js"}
|
package/module/configure.js
CHANGED
|
@@ -105801,7 +105801,7 @@ class Design extends React$1.Component {
|
|
|
105801
105801
|
const {classes, configuration, imageSupport, model, onConfigurationChanged, onModelChanged, uploadSoundSupport} = this.props;
|
|
105802
105802
|
const {baseInputConfiguration = {}, contentDimensions = {}, prompt = {}, rationale = {}, settingsPanelDisabled, teacherInstructions = {}, language = {}, languageChoices = {}, spellCheck = {}, playerSpellCheck = {}, maxImageWidth = {}, maxImageHeight = {}, mathMlOptions = {}, template = {}, editSource = {}, ignoreOrder: cIgnoreOrder = {}, allowTrailingZeros: cAllowTrailingZeros = {}, partialScoring = {}, maxResponseAreas} = configuration || ({});
|
|
105803
105803
|
const {errors, promptEnabled, rationaleEnabled, spellCheckEnabled, teacherInstructionsEnabled, toolbarEditorPosition, responses, equationEditor} = model || ({});
|
|
105804
|
-
const {
|
|
105804
|
+
const {prompt: promptError, rationale: rationaleError, responseAreas: responseAreasError, teacherInstructions: teacherInstructionsError, responses: responsesErrors = {}} = errors || ({});
|
|
105805
105805
|
const panelSettings = {
|
|
105806
105806
|
'language.enabled': language.settings && toggle(language.label, true),
|
|
105807
105807
|
language: language.settings && language.enabled && settings$1.dropdown(languageChoices.label, languageChoices.options)
|
|
@@ -105839,13 +105839,13 @@ class Design extends React$1.Component {
|
|
|
105839
105839
|
__self: this,
|
|
105840
105840
|
__source: {
|
|
105841
105841
|
fileName: _jsxFileName,
|
|
105842
|
-
lineNumber:
|
|
105842
|
+
lineNumber: 296
|
|
105843
105843
|
}
|
|
105844
105844
|
}),
|
|
105845
105845
|
__self: this,
|
|
105846
105846
|
__source: {
|
|
105847
105847
|
fileName: _jsxFileName,
|
|
105848
|
-
lineNumber:
|
|
105848
|
+
lineNumber: 292
|
|
105849
105849
|
}
|
|
105850
105850
|
}, teacherInstructionsEnabled && React$1.createElement(InputContainer, {
|
|
105851
105851
|
label: teacherInstructions.label,
|
|
@@ -105853,7 +105853,7 @@ class Design extends React$1.Component {
|
|
|
105853
105853
|
__self: this,
|
|
105854
105854
|
__source: {
|
|
105855
105855
|
fileName: _jsxFileName,
|
|
105856
|
-
lineNumber:
|
|
105856
|
+
lineNumber: 309
|
|
105857
105857
|
}
|
|
105858
105858
|
}, React$1.createElement(EditableHtml, {
|
|
105859
105859
|
className: classes.prompt,
|
|
@@ -105877,14 +105877,14 @@ class Design extends React$1.Component {
|
|
|
105877
105877
|
__self: this,
|
|
105878
105878
|
__source: {
|
|
105879
105879
|
fileName: _jsxFileName,
|
|
105880
|
-
lineNumber:
|
|
105880
|
+
lineNumber: 313
|
|
105881
105881
|
}
|
|
105882
105882
|
}), teacherInstructionsError && React$1.createElement('div', {
|
|
105883
105883
|
className: classes.errorText,
|
|
105884
105884
|
__self: this,
|
|
105885
105885
|
__source: {
|
|
105886
105886
|
fileName: _jsxFileName,
|
|
105887
|
-
lineNumber:
|
|
105887
|
+
lineNumber: 342
|
|
105888
105888
|
}
|
|
105889
105889
|
}, teacherInstructionsError)), promptEnabled && React$1.createElement(InputContainer, {
|
|
105890
105890
|
label: prompt.label,
|
|
@@ -105892,7 +105892,7 @@ class Design extends React$1.Component {
|
|
|
105892
105892
|
__self: this,
|
|
105893
105893
|
__source: {
|
|
105894
105894
|
fileName: _jsxFileName,
|
|
105895
|
-
lineNumber:
|
|
105895
|
+
lineNumber: 348
|
|
105896
105896
|
}
|
|
105897
105897
|
}, React$1.createElement(EditableHtml, {
|
|
105898
105898
|
className: classes.prompt,
|
|
@@ -105917,21 +105917,21 @@ class Design extends React$1.Component {
|
|
|
105917
105917
|
__self: this,
|
|
105918
105918
|
__source: {
|
|
105919
105919
|
fileName: _jsxFileName,
|
|
105920
|
-
lineNumber:
|
|
105920
|
+
lineNumber: 352
|
|
105921
105921
|
}
|
|
105922
105922
|
}), promptError && React$1.createElement('div', {
|
|
105923
105923
|
className: classes.errorText,
|
|
105924
105924
|
__self: this,
|
|
105925
105925
|
__source: {
|
|
105926
105926
|
fileName: _jsxFileName,
|
|
105927
|
-
lineNumber:
|
|
105927
|
+
lineNumber: 376
|
|
105928
105928
|
}
|
|
105929
105929
|
}, promptError)), React$1.createElement(Typography, {
|
|
105930
105930
|
className: classes.title,
|
|
105931
105931
|
__self: this,
|
|
105932
105932
|
__source: {
|
|
105933
105933
|
fileName: _jsxFileName,
|
|
105934
|
-
lineNumber:
|
|
105934
|
+
lineNumber: 381
|
|
105935
105935
|
}
|
|
105936
105936
|
}, "Response Template"), React$1.createElement(EditableHtml, {
|
|
105937
105937
|
activePlugins: ALL_PLUGINS,
|
|
@@ -105943,7 +105943,7 @@ class Design extends React$1.Component {
|
|
|
105943
105943
|
responseAreaProps: {
|
|
105944
105944
|
type: 'math-templated',
|
|
105945
105945
|
respAreaToolbar: null,
|
|
105946
|
-
error: () =>
|
|
105946
|
+
error: () => responsesErrors,
|
|
105947
105947
|
onHandleAreaChange: this.onHandleAreaChange,
|
|
105948
105948
|
maxResponseAreas: maxResponseAreas
|
|
105949
105949
|
},
|
|
@@ -105966,14 +105966,21 @@ class Design extends React$1.Component {
|
|
|
105966
105966
|
__self: this,
|
|
105967
105967
|
__source: {
|
|
105968
105968
|
fileName: _jsxFileName,
|
|
105969
|
-
lineNumber:
|
|
105969
|
+
lineNumber: 383
|
|
105970
105970
|
}
|
|
105971
|
-
}), React$1.createElement(
|
|
105971
|
+
}), responseAreasError && React$1.createElement('div', {
|
|
105972
|
+
className: classes.responseAreaError,
|
|
105973
|
+
__self: this,
|
|
105974
|
+
__source: {
|
|
105975
|
+
fileName: _jsxFileName,
|
|
105976
|
+
lineNumber: 415
|
|
105977
|
+
}
|
|
105978
|
+
}, responseAreasError), React$1.createElement(Typography, {
|
|
105972
105979
|
className: classes.title,
|
|
105973
105980
|
__self: this,
|
|
105974
105981
|
__source: {
|
|
105975
105982
|
fileName: _jsxFileName,
|
|
105976
|
-
lineNumber:
|
|
105983
|
+
lineNumber: 418
|
|
105977
105984
|
}
|
|
105978
105985
|
}, "Define Response"), React$1.createElement(InputContainer, {
|
|
105979
105986
|
label: "Response Template Equation Editor",
|
|
@@ -105981,7 +105988,7 @@ class Design extends React$1.Component {
|
|
|
105981
105988
|
__self: this,
|
|
105982
105989
|
__source: {
|
|
105983
105990
|
fileName: _jsxFileName,
|
|
105984
|
-
lineNumber:
|
|
105991
|
+
lineNumber: 420
|
|
105985
105992
|
}
|
|
105986
105993
|
}, React$1.createElement(Select, {
|
|
105987
105994
|
className: classes.select,
|
|
@@ -105990,117 +105997,120 @@ class Design extends React$1.Component {
|
|
|
105990
105997
|
__self: this,
|
|
105991
105998
|
__source: {
|
|
105992
105999
|
fileName: _jsxFileName,
|
|
105993
|
-
lineNumber:
|
|
106000
|
+
lineNumber: 424
|
|
105994
106001
|
}
|
|
105995
106002
|
}, React$1.createElement(MenuItem, {
|
|
105996
106003
|
value: "non-negative-integers",
|
|
105997
106004
|
__self: this,
|
|
105998
106005
|
__source: {
|
|
105999
106006
|
fileName: _jsxFileName,
|
|
106000
|
-
lineNumber:
|
|
106007
|
+
lineNumber: 431
|
|
106001
106008
|
}
|
|
106002
106009
|
}, "Numeric - Non-Negative Integers"), React$1.createElement(MenuItem, {
|
|
106003
106010
|
value: "integers",
|
|
106004
106011
|
__self: this,
|
|
106005
106012
|
__source: {
|
|
106006
106013
|
fileName: _jsxFileName,
|
|
106007
|
-
lineNumber:
|
|
106014
|
+
lineNumber: 434
|
|
106008
106015
|
}
|
|
106009
106016
|
}, "Numeric - Integers"), React$1.createElement(MenuItem, {
|
|
106010
106017
|
value: "decimals",
|
|
106011
106018
|
__self: this,
|
|
106012
106019
|
__source: {
|
|
106013
106020
|
fileName: _jsxFileName,
|
|
106014
|
-
lineNumber:
|
|
106021
|
+
lineNumber: 435
|
|
106015
106022
|
}
|
|
106016
106023
|
}, "Numeric - Decimals"), React$1.createElement(MenuItem, {
|
|
106017
106024
|
value: "fractions",
|
|
106018
106025
|
__self: this,
|
|
106019
106026
|
__source: {
|
|
106020
106027
|
fileName: _jsxFileName,
|
|
106021
|
-
lineNumber:
|
|
106028
|
+
lineNumber: 436
|
|
106022
106029
|
}
|
|
106023
106030
|
}, "Numeric - Fractions"), React$1.createElement(MenuItem, {
|
|
106024
106031
|
value: 1,
|
|
106025
106032
|
__self: this,
|
|
106026
106033
|
__source: {
|
|
106027
106034
|
fileName: _jsxFileName,
|
|
106028
|
-
lineNumber:
|
|
106035
|
+
lineNumber: 437
|
|
106029
106036
|
}
|
|
106030
106037
|
}, "Grade 1 - 2"), React$1.createElement(MenuItem, {
|
|
106031
106038
|
value: 3,
|
|
106032
106039
|
__self: this,
|
|
106033
106040
|
__source: {
|
|
106034
106041
|
fileName: _jsxFileName,
|
|
106035
|
-
lineNumber:
|
|
106042
|
+
lineNumber: 438
|
|
106036
106043
|
}
|
|
106037
106044
|
}, "Grade 3 - 5"), React$1.createElement(MenuItem, {
|
|
106038
106045
|
value: 6,
|
|
106039
106046
|
__self: this,
|
|
106040
106047
|
__source: {
|
|
106041
106048
|
fileName: _jsxFileName,
|
|
106042
|
-
lineNumber:
|
|
106049
|
+
lineNumber: 439
|
|
106043
106050
|
}
|
|
106044
106051
|
}, "Grade 6 - 7"), React$1.createElement(MenuItem, {
|
|
106045
106052
|
value: 8,
|
|
106046
106053
|
__self: this,
|
|
106047
106054
|
__source: {
|
|
106048
106055
|
fileName: _jsxFileName,
|
|
106049
|
-
lineNumber:
|
|
106056
|
+
lineNumber: 440
|
|
106050
106057
|
}
|
|
106051
106058
|
}, "Grade 8 - HS"), React$1.createElement(MenuItem, {
|
|
106052
106059
|
value: 'geometry',
|
|
106053
106060
|
__self: this,
|
|
106054
106061
|
__source: {
|
|
106055
106062
|
fileName: _jsxFileName,
|
|
106056
|
-
lineNumber:
|
|
106063
|
+
lineNumber: 441
|
|
106057
106064
|
}
|
|
106058
106065
|
}, "Geometry"), React$1.createElement(MenuItem, {
|
|
106059
106066
|
value: 'advanced-algebra',
|
|
106060
106067
|
__self: this,
|
|
106061
106068
|
__source: {
|
|
106062
106069
|
fileName: _jsxFileName,
|
|
106063
|
-
lineNumber:
|
|
106070
|
+
lineNumber: 442
|
|
106064
106071
|
}
|
|
106065
106072
|
}, "Advanced Algebra"), React$1.createElement(MenuItem, {
|
|
106066
106073
|
value: 'statistics',
|
|
106067
106074
|
__self: this,
|
|
106068
106075
|
__source: {
|
|
106069
106076
|
fileName: _jsxFileName,
|
|
106070
|
-
lineNumber:
|
|
106077
|
+
lineNumber: 445
|
|
106071
106078
|
}
|
|
106072
106079
|
}, "Statistics"), React$1.createElement(MenuItem, {
|
|
106073
106080
|
value: 'item-authoring',
|
|
106074
106081
|
__self: this,
|
|
106075
106082
|
__source: {
|
|
106076
106083
|
fileName: _jsxFileName,
|
|
106077
|
-
lineNumber:
|
|
106084
|
+
lineNumber: 446
|
|
106078
106085
|
}
|
|
106079
106086
|
}, "Item Authoring"))), Object.keys(responses || ({})).map((responseKey, idx) => {
|
|
106080
106087
|
const response = responses[responseKey];
|
|
106081
|
-
|
|
106082
|
-
|
|
106083
|
-
|
|
106084
|
-
|
|
106085
|
-
|
|
106086
|
-
|
|
106087
|
-
|
|
106088
|
-
|
|
106089
|
-
|
|
106090
|
-
|
|
106091
|
-
|
|
106092
|
-
|
|
106093
|
-
|
|
106094
|
-
|
|
106095
|
-
|
|
106096
|
-
|
|
106088
|
+
if (response) {
|
|
106089
|
+
return React$1.createElement(Response$1, {
|
|
106090
|
+
key: responseKey,
|
|
106091
|
+
responseKey: responseKey,
|
|
106092
|
+
mode: equationEditor,
|
|
106093
|
+
response: response,
|
|
106094
|
+
onResponseChange: this.onResponseChange,
|
|
106095
|
+
index: idx,
|
|
106096
|
+
cIgnoreOrder: cIgnoreOrder,
|
|
106097
|
+
cAllowTrailingZeros: cAllowTrailingZeros,
|
|
106098
|
+
error: responsesErrors && responsesErrors[idx],
|
|
106099
|
+
__self: this,
|
|
106100
|
+
__source: {
|
|
106101
|
+
fileName: _jsxFileName,
|
|
106102
|
+
lineNumber: 455
|
|
106103
|
+
}
|
|
106104
|
+
});
|
|
106105
|
+
}
|
|
106106
|
+
return null;
|
|
106097
106107
|
}), rationaleEnabled && React$1.createElement(InputContainer, {
|
|
106098
106108
|
label: rationale.label,
|
|
106099
106109
|
className: classes.promptHolder,
|
|
106100
106110
|
__self: this,
|
|
106101
106111
|
__source: {
|
|
106102
106112
|
fileName: _jsxFileName,
|
|
106103
|
-
lineNumber:
|
|
106113
|
+
lineNumber: 473
|
|
106104
106114
|
}
|
|
106105
106115
|
}, React$1.createElement(EditableHtml, {
|
|
106106
106116
|
className: classes.prompt,
|
|
@@ -106129,14 +106139,14 @@ class Design extends React$1.Component {
|
|
|
106129
106139
|
__self: this,
|
|
106130
106140
|
__source: {
|
|
106131
106141
|
fileName: _jsxFileName,
|
|
106132
|
-
lineNumber:
|
|
106142
|
+
lineNumber: 477
|
|
106133
106143
|
}
|
|
106134
106144
|
}), rationaleError && React$1.createElement('div', {
|
|
106135
106145
|
className: classes.errorText,
|
|
106136
106146
|
__self: this,
|
|
106137
106147
|
__source: {
|
|
106138
106148
|
fileName: _jsxFileName,
|
|
106139
|
-
lineNumber:
|
|
106149
|
+
lineNumber: 508
|
|
106140
106150
|
}
|
|
106141
106151
|
}, rationaleError)));
|
|
106142
106152
|
}
|
|
@@ -106156,6 +106166,11 @@ var Main = styles$D.withStyles(theme => ({
|
|
|
106156
106166
|
fontSize: '0.75rem',
|
|
106157
106167
|
marginTop: theme.spacing.unit
|
|
106158
106168
|
},
|
|
106169
|
+
responseAreaError: {
|
|
106170
|
+
color: theme.palette.error.main,
|
|
106171
|
+
fontSize: '0.75rem',
|
|
106172
|
+
marginBottom: theme.spacing.unit
|
|
106173
|
+
},
|
|
106159
106174
|
markup: {
|
|
106160
106175
|
width: '100%',
|
|
106161
106176
|
marginTop: theme.spacing.unit * 2,
|
package/module/controller.js
CHANGED
|
@@ -3250,8 +3250,8 @@ function transformOptions(options) {
|
|
|
3250
3250
|
return options;
|
|
3251
3251
|
}
|
|
3252
3252
|
|
|
3253
|
-
function ownKeys
|
|
3254
|
-
function _objectSpread
|
|
3253
|
+
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; }
|
|
3254
|
+
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) { _defineProperty__default["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; }
|
|
3255
3255
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf__default["default"](Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf__default["default"](this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn__default["default"](this, result); }; }
|
|
3256
3256
|
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; } }
|
|
3257
3257
|
function noop() {}
|
|
@@ -3311,9 +3311,9 @@ var I18n = function (_EventEmitter) {
|
|
|
3311
3311
|
}
|
|
3312
3312
|
}
|
|
3313
3313
|
var defOpts = get$1();
|
|
3314
|
-
this.options = _objectSpread
|
|
3314
|
+
this.options = _objectSpread(_objectSpread(_objectSpread({}, defOpts), this.options), transformOptions(options));
|
|
3315
3315
|
if (this.options.compatibilityAPI !== 'v1') {
|
|
3316
|
-
this.options.interpolation = _objectSpread
|
|
3316
|
+
this.options.interpolation = _objectSpread(_objectSpread({}, defOpts.interpolation), this.options.interpolation);
|
|
3317
3317
|
}
|
|
3318
3318
|
if (options.keySeparator !== undefined) {
|
|
3319
3319
|
this.options.userDefinedKeySeparator = options.keySeparator;
|
|
@@ -3591,7 +3591,7 @@ var I18n = function (_EventEmitter) {
|
|
|
3591
3591
|
}
|
|
3592
3592
|
options = _this5.options.overloadTranslationOptionHandler([key, opts].concat(rest));
|
|
3593
3593
|
} else {
|
|
3594
|
-
options = _objectSpread
|
|
3594
|
+
options = _objectSpread({}, opts);
|
|
3595
3595
|
}
|
|
3596
3596
|
options.lng = options.lng || fixedT.lng;
|
|
3597
3597
|
options.lngs = options.lngs || fixedT.lngs;
|
|
@@ -3718,7 +3718,7 @@ var I18n = function (_EventEmitter) {
|
|
|
3718
3718
|
var _this8 = this;
|
|
3719
3719
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
3720
3720
|
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
|
|
3721
|
-
var mergedOptions = _objectSpread
|
|
3721
|
+
var mergedOptions = _objectSpread(_objectSpread(_objectSpread({}, this.options), options), {
|
|
3722
3722
|
isClone: true
|
|
3723
3723
|
});
|
|
3724
3724
|
var clone = new I18n(mergedOptions);
|
|
@@ -3729,7 +3729,7 @@ var I18n = function (_EventEmitter) {
|
|
|
3729
3729
|
membersToCopy.forEach(function (m) {
|
|
3730
3730
|
clone[m] = _this8[m];
|
|
3731
3731
|
});
|
|
3732
|
-
clone.services = _objectSpread
|
|
3732
|
+
clone.services = _objectSpread({}, this.services);
|
|
3733
3733
|
clone.services.utils = {
|
|
3734
3734
|
hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)
|
|
3735
3735
|
};
|
|
@@ -4041,185 +4041,6 @@ exports["default"] = _default;
|
|
|
4041
4041
|
|
|
4042
4042
|
var Translator = /*@__PURE__*/getDefaultExportFromCjs(translator$2);
|
|
4043
4043
|
|
|
4044
|
-
var feedback$1 = {};
|
|
4045
|
-
|
|
4046
|
-
var feedback = {};
|
|
4047
|
-
|
|
4048
|
-
var _interopRequireDefault$2 = interopRequireDefault.exports;
|
|
4049
|
-
|
|
4050
|
-
Object.defineProperty(feedback, "__esModule", {
|
|
4051
|
-
value: true
|
|
4052
|
-
});
|
|
4053
|
-
feedback.getFeedbackForCorrectness = feedback.getFeedback = feedback.getActualFeedbackForCorrectness = feedback.getActualFeedback = feedback.defaults = void 0;
|
|
4054
|
-
|
|
4055
|
-
var _defineProperty2 = _interopRequireDefault$2(defineProperty$1.exports);
|
|
4056
|
-
|
|
4057
|
-
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; }
|
|
4058
|
-
|
|
4059
|
-
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; }
|
|
4060
|
-
|
|
4061
|
-
var defaults$1 = {
|
|
4062
|
-
correct: {
|
|
4063
|
-
type: 'default',
|
|
4064
|
-
"default": 'Correct',
|
|
4065
|
-
custom: 'Correct'
|
|
4066
|
-
},
|
|
4067
|
-
incorrect: {
|
|
4068
|
-
type: 'default',
|
|
4069
|
-
"default": 'Incorrect',
|
|
4070
|
-
custom: 'Incorrect'
|
|
4071
|
-
},
|
|
4072
|
-
partial: {
|
|
4073
|
-
type: 'default',
|
|
4074
|
-
"default": 'Nearly',
|
|
4075
|
-
custom: 'Nearly'
|
|
4076
|
-
},
|
|
4077
|
-
unanswered: {
|
|
4078
|
-
type: 'default',
|
|
4079
|
-
"default": 'You have not entered a response',
|
|
4080
|
-
custom: 'You have not entered a response'
|
|
4081
|
-
}
|
|
4082
|
-
};
|
|
4083
|
-
/**
|
|
4084
|
-
* @typedef {Object} FeedbackConfig
|
|
4085
|
-
* @property {'default'|'none'|'custom'} type
|
|
4086
|
-
* @property {string} default
|
|
4087
|
-
* @property {string} custom
|
|
4088
|
-
*
|
|
4089
|
-
* @typedef {Object} Feedback
|
|
4090
|
-
* @property {FeedbackConfig} correct
|
|
4091
|
-
* @property {FeedbackConfig} incorrect
|
|
4092
|
-
* @property {FeedbackConfig} partial
|
|
4093
|
-
*/
|
|
4094
|
-
|
|
4095
|
-
feedback.defaults = defaults$1;
|
|
4096
|
-
|
|
4097
|
-
var normalizeCorrectness = function normalizeCorrectness(c) {
|
|
4098
|
-
if (c === 'partially-correct') {
|
|
4099
|
-
return 'partial';
|
|
4100
|
-
}
|
|
4101
|
-
|
|
4102
|
-
return c;
|
|
4103
|
-
};
|
|
4104
|
-
/**
|
|
4105
|
-
* Get the feedback for the correctness
|
|
4106
|
-
*
|
|
4107
|
-
* @param {'correct'|'incorrect'|'partial'} correctness
|
|
4108
|
-
* @param {Feedback} feedback
|
|
4109
|
-
*/
|
|
4110
|
-
|
|
4111
|
-
|
|
4112
|
-
var getFeedbackForCorrectness = function getFeedbackForCorrectness(correctness, feedback) {
|
|
4113
|
-
return new Promise(function (resolve) {
|
|
4114
|
-
feedback = _objectSpread(_objectSpread({}, defaults$1), feedback);
|
|
4115
|
-
correctness = normalizeCorrectness(correctness);
|
|
4116
|
-
var fb = feedback[correctness] || defaults$1[correctness] || {};
|
|
4117
|
-
var d = defaults$1[correctness] || {};
|
|
4118
|
-
getFeedback(fb, d[fb.type || 'default']).then(function (result) {
|
|
4119
|
-
return resolve(result);
|
|
4120
|
-
});
|
|
4121
|
-
});
|
|
4122
|
-
};
|
|
4123
|
-
/**
|
|
4124
|
-
* Get the feedback from a {FeedbackConfig}
|
|
4125
|
-
*
|
|
4126
|
-
* @param {FeedbackConfig} feedback
|
|
4127
|
-
* @param {string} fallback
|
|
4128
|
-
*/
|
|
4129
|
-
|
|
4130
|
-
|
|
4131
|
-
feedback.getFeedbackForCorrectness = getFeedbackForCorrectness;
|
|
4132
|
-
|
|
4133
|
-
var getFeedback = function getFeedback(feedback, fallback) {
|
|
4134
|
-
return new Promise(function (resolve) {
|
|
4135
|
-
if (!feedback || feedback.type === 'none') {
|
|
4136
|
-
resolve(undefined);
|
|
4137
|
-
return;
|
|
4138
|
-
}
|
|
4139
|
-
|
|
4140
|
-
feedback = feedback || {};
|
|
4141
|
-
var out = feedback[feedback.type] || fallback;
|
|
4142
|
-
resolve(out);
|
|
4143
|
-
});
|
|
4144
|
-
}; // TODO: should replace getFeedbackForCorrectness
|
|
4145
|
-
|
|
4146
|
-
/**
|
|
4147
|
-
* Get feedback for correctness
|
|
4148
|
-
* @param {'correct'|'incorrect'|'partial'} correctness
|
|
4149
|
-
* @param {Feedback} feedback
|
|
4150
|
-
*/
|
|
4151
|
-
|
|
4152
|
-
|
|
4153
|
-
feedback.getFeedback = getFeedback;
|
|
4154
|
-
|
|
4155
|
-
var getActualFeedbackForCorrectness = function getActualFeedbackForCorrectness(correctness, feedback) {
|
|
4156
|
-
feedback = _objectSpread(_objectSpread({}, defaults$1), feedback); // normalize correctness
|
|
4157
|
-
|
|
4158
|
-
correctness = correctness === 'partially-correct' ? 'partial' : correctness;
|
|
4159
|
-
var defaultFeedback = defaults$1[correctness] || {};
|
|
4160
|
-
var fb = feedback[correctness] || defaultFeedback;
|
|
4161
|
-
return getActualFeedback(fb, defaultFeedback[fb.type || 'default']);
|
|
4162
|
-
}; // TODO: should replace getFeedback
|
|
4163
|
-
|
|
4164
|
-
/**
|
|
4165
|
-
* Get the feedback from a {FeedbackConfig}
|
|
4166
|
-
* @param {FeedbackConfig} feedback
|
|
4167
|
-
* @param {string} fallback
|
|
4168
|
-
*/
|
|
4169
|
-
|
|
4170
|
-
|
|
4171
|
-
feedback.getActualFeedbackForCorrectness = getActualFeedbackForCorrectness;
|
|
4172
|
-
|
|
4173
|
-
var getActualFeedback = function getActualFeedback(feedback, fallback) {
|
|
4174
|
-
if (!feedback || feedback.type === 'none') {
|
|
4175
|
-
return undefined;
|
|
4176
|
-
}
|
|
4177
|
-
|
|
4178
|
-
return feedback[feedback.type] || fallback;
|
|
4179
|
-
};
|
|
4180
|
-
|
|
4181
|
-
feedback.getActualFeedback = getActualFeedback;
|
|
4182
|
-
|
|
4183
|
-
(function (exports) {
|
|
4184
|
-
|
|
4185
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4186
|
-
value: true
|
|
4187
|
-
});
|
|
4188
|
-
Object.defineProperty(exports, "defaults", {
|
|
4189
|
-
enumerable: true,
|
|
4190
|
-
get: function get() {
|
|
4191
|
-
return _feedback.defaults;
|
|
4192
|
-
}
|
|
4193
|
-
});
|
|
4194
|
-
Object.defineProperty(exports, "getActualFeedback", {
|
|
4195
|
-
enumerable: true,
|
|
4196
|
-
get: function get() {
|
|
4197
|
-
return _feedback.getActualFeedback;
|
|
4198
|
-
}
|
|
4199
|
-
});
|
|
4200
|
-
Object.defineProperty(exports, "getActualFeedbackForCorrectness", {
|
|
4201
|
-
enumerable: true,
|
|
4202
|
-
get: function get() {
|
|
4203
|
-
return _feedback.getActualFeedbackForCorrectness;
|
|
4204
|
-
}
|
|
4205
|
-
});
|
|
4206
|
-
Object.defineProperty(exports, "getFeedback", {
|
|
4207
|
-
enumerable: true,
|
|
4208
|
-
get: function get() {
|
|
4209
|
-
return _feedback.getFeedback;
|
|
4210
|
-
}
|
|
4211
|
-
});
|
|
4212
|
-
Object.defineProperty(exports, "getFeedbackForCorrectness", {
|
|
4213
|
-
enumerable: true,
|
|
4214
|
-
get: function get() {
|
|
4215
|
-
return _feedback.getFeedbackForCorrectness;
|
|
4216
|
-
}
|
|
4217
|
-
});
|
|
4218
|
-
|
|
4219
|
-
var _feedback = feedback;
|
|
4220
|
-
|
|
4221
|
-
}(feedback$1));
|
|
4222
|
-
|
|
4223
4044
|
// Should be exactly the same as configure/defaults.js
|
|
4224
4045
|
var defaults = {
|
|
4225
4046
|
model: {
|
|
@@ -22971,6 +22792,7 @@ var _controllerUtils = controllerUtils;
|
|
|
22971
22792
|
}(controllerUtils$1));
|
|
22972
22793
|
|
|
22973
22794
|
const { translator } = Translator;
|
|
22795
|
+
const getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');
|
|
22974
22796
|
|
|
22975
22797
|
const getIsAnswerCorrect = (correctResponse, answerItem) => {
|
|
22976
22798
|
let answerCorrect = false;
|
|
@@ -23017,9 +22839,11 @@ const getResponseCorrectness = (question, sessionResponse) => {
|
|
|
23017
22839
|
let correctAnswers = 0;
|
|
23018
22840
|
let score = 0;
|
|
23019
22841
|
let correct = false;
|
|
22842
|
+
const correctResponsesCount = Object.keys(correctResponses || {}).length;
|
|
22843
|
+
|
|
23020
22844
|
Object.keys(correctResponses).forEach((responseId) => {
|
|
23021
22845
|
const answerItem = sessionResponse['r' + responseId];
|
|
23022
|
-
const correctResponse = correctResponses[responseId];
|
|
22846
|
+
const correctResponse = correctResponses[responseId] || {};
|
|
23023
22847
|
|
|
23024
22848
|
const answerCorrect = getIsAnswerCorrect(correctResponse, answerItem);
|
|
23025
22849
|
if (answerCorrect) {
|
|
@@ -23027,12 +22851,14 @@ const getResponseCorrectness = (question, sessionResponse) => {
|
|
|
23027
22851
|
}
|
|
23028
22852
|
});
|
|
23029
22853
|
|
|
22854
|
+
const fullyCorrect = correctAnswers === correctResponsesCount;
|
|
22855
|
+
|
|
23030
22856
|
// partial credit scoring: each correct answer is worth 1 / total answers point
|
|
23031
22857
|
// dichotomous scoring: for credit to be awarded, a correct answer must be entered for every response area
|
|
23032
22858
|
score = (correctAnswers / Object.keys(correctResponses).length).toFixed(2);
|
|
23033
22859
|
|
|
23034
22860
|
return {
|
|
23035
|
-
correctness:
|
|
22861
|
+
correctness: fullyCorrect ? 'correct' : 'incorrect',
|
|
23036
22862
|
score: correctAnswers > 0 ? score : 0,
|
|
23037
22863
|
correct
|
|
23038
22864
|
};
|
|
@@ -23097,7 +22923,7 @@ const model = (question, session, env) => {
|
|
|
23097
22923
|
|
|
23098
22924
|
// check if there is at least one alternate response or if the validation for at least one response is not literal
|
|
23099
22925
|
Object.keys(responses).forEach((responseId) => {
|
|
23100
|
-
const correctResponse = responses[responseId];
|
|
22926
|
+
const correctResponse = responses[responseId] || {};
|
|
23101
22927
|
if (correctResponse.alternates && Object.keys(correctResponse.alternates).length > 0) {
|
|
23102
22928
|
showNote = true;
|
|
23103
22929
|
} else if (correctResponse.validation !== 'literal') {
|
|
@@ -23171,8 +22997,57 @@ const createCorrectResponseSession = (question, env) =>
|
|
|
23171
22997
|
});
|
|
23172
22998
|
|
|
23173
22999
|
const validate = (model = {}, config = {}) => {
|
|
23000
|
+
const { responses, markup } = model;
|
|
23001
|
+
const { maxResponseAreas } = config;
|
|
23002
|
+
const responsesErrors = {};
|
|
23174
23003
|
const errors = {};
|
|
23175
23004
|
|
|
23005
|
+
['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {
|
|
23006
|
+
if (config[field]?.required && !getContent(model[field])) {
|
|
23007
|
+
errors[field] = 'This field is required.';
|
|
23008
|
+
}
|
|
23009
|
+
});
|
|
23010
|
+
|
|
23011
|
+
Object.entries(responses || {}).forEach(([key, response], index) => {
|
|
23012
|
+
const { answer } = response;
|
|
23013
|
+
const reversedAlternates = [...Object.entries(response.alternates || {})].reverse();
|
|
23014
|
+
const alternatesErrors = {};
|
|
23015
|
+
const responseError = {};
|
|
23016
|
+
|
|
23017
|
+
if (answer === '') {
|
|
23018
|
+
responseError.answer = 'Content should not be empty.';
|
|
23019
|
+
}
|
|
23020
|
+
|
|
23021
|
+
reversedAlternates.forEach(([key, value], index) => {
|
|
23022
|
+
if (value === '') {
|
|
23023
|
+
alternatesErrors[key] = 'Content should not be empty.';
|
|
23024
|
+
} else {
|
|
23025
|
+
const identicalAnswer =
|
|
23026
|
+
answer === value || reversedAlternates.slice(index + 1).some(([, val]) => val === value);
|
|
23027
|
+
|
|
23028
|
+
if (identicalAnswer) {
|
|
23029
|
+
alternatesErrors[key] = 'Content should be unique.';
|
|
23030
|
+
}
|
|
23031
|
+
}
|
|
23032
|
+
});
|
|
23033
|
+
|
|
23034
|
+
if (!isEmpty_1(responseError) || !isEmpty_1(alternatesErrors)) {
|
|
23035
|
+
responsesErrors[index] = { ...responseError, ...alternatesErrors };
|
|
23036
|
+
}
|
|
23037
|
+
});
|
|
23038
|
+
|
|
23039
|
+
const nbOfResponseAreas = (markup.match(/\{\{(\d+)\}\}/g) || []).length;
|
|
23040
|
+
|
|
23041
|
+
if (nbOfResponseAreas > maxResponseAreas) {
|
|
23042
|
+
errors.responseAreas = `No more than ${maxResponseAreas} response areas should be defined.`;
|
|
23043
|
+
} else if (nbOfResponseAreas < 1) {
|
|
23044
|
+
errors.responseAreas = 'There should be at least 1 response area defined.';
|
|
23045
|
+
}
|
|
23046
|
+
|
|
23047
|
+
if (!isEmpty_1(responsesErrors)) {
|
|
23048
|
+
errors.responses = responsesErrors;
|
|
23049
|
+
}
|
|
23050
|
+
|
|
23176
23051
|
return errors;
|
|
23177
23052
|
};
|
|
23178
23053
|
|
package/module/element.js
CHANGED
|
@@ -126692,7 +126692,7 @@ const {PreviewPrompt: PreviewPrompt} = _dll_pie_lib__pie_toolbox_render_ui;
|
|
|
126692
126692
|
const {color: color} = _dll_pie_lib__pie_toolbox_render_ui;
|
|
126693
126693
|
const {CorrectAnswerToggle: CorrectAnswerToggle} = _dll_pie_lib__pie_toolbox_correct_answer_toggle;
|
|
126694
126694
|
const _jsxFileName = "/home/circleci/repo/packages/math-templated/src/main.jsx";
|
|
126695
|
-
function _optionalChain
|
|
126695
|
+
function _optionalChain(ops) {
|
|
126696
126696
|
let lastAccessLHS = undefined;
|
|
126697
126697
|
let value = ops[0];
|
|
126698
126698
|
let i = 1;
|
|
@@ -126737,7 +126737,7 @@ function prepareForStatic(model, state) {
|
|
|
126737
126737
|
if (markup) {
|
|
126738
126738
|
if (state.showCorrect) {
|
|
126739
126739
|
return Object.keys(responses || ({})).reduce((acc, responseKey) => {
|
|
126740
|
-
acc[responseKey] = _optionalChain
|
|
126740
|
+
acc[responseKey] = _optionalChain([responses, 'optionalAccess', _ => _[responseKey], 'optionalAccess', _2 => _2.answer]);
|
|
126741
126741
|
return acc;
|
|
126742
126742
|
}, {});
|
|
126743
126743
|
}
|
|
@@ -126804,7 +126804,7 @@ class Main extends React$1.Component {
|
|
|
126804
126804
|
const responseKey = Main.getResponseKey(response);
|
|
126805
126805
|
const sessionAnswerForResponse = sessionAnswers && sessionAnswers[`r${responseKey}`];
|
|
126806
126806
|
answers[`r${responseKey}`] = {
|
|
126807
|
-
value: _optionalChain
|
|
126807
|
+
value: _optionalChain([sessionAnswerForResponse, 'optionalAccess', _7 => _7.value]) || ''
|
|
126808
126808
|
};
|
|
126809
126809
|
});
|
|
126810
126810
|
}
|
|
@@ -126873,7 +126873,7 @@ class Main extends React$1.Component {
|
|
|
126873
126873
|
const responseKey = Main.getResponseKey(nextMatch);
|
|
126874
126874
|
const sessionAnswerForResponse = answers && answers[`r${responseKey}`];
|
|
126875
126875
|
newAnswers[`r${responseKey}`] = {
|
|
126876
|
-
value: _optionalChain
|
|
126876
|
+
value: _optionalChain([sessionAnswerForResponse, 'optionalAccess', _8 => _8.value]) || ''
|
|
126877
126877
|
};
|
|
126878
126878
|
});
|
|
126879
126879
|
this.setState(state => ({
|
|
@@ -127011,7 +127011,7 @@ class Main extends React$1.Component {
|
|
|
127011
127011
|
}
|
|
127012
127012
|
function getDeepChildDataKeypad(element, depth = 0) {
|
|
127013
127013
|
if (!element || depth >= 4) return null;
|
|
127014
|
-
const child = _optionalChain
|
|
127014
|
+
const child = _optionalChain([element, 'optionalAccess', _9 => _9.children, 'optionalAccess', _10 => _10[0]]);
|
|
127015
127015
|
if (!child) return null;
|
|
127016
127016
|
if (child.attributes && child.attributes['data-keypad']) {
|
|
127017
127017
|
return child;
|
|
@@ -127020,7 +127020,7 @@ class Main extends React$1.Component {
|
|
|
127020
127020
|
}
|
|
127021
127021
|
const parentWithTooltipRole = getParentWithRoleTooltip(relatedTarget);
|
|
127022
127022
|
const childWithDataKeypad = parentWithTooltipRole ? getDeepChildDataKeypad(parentWithTooltipRole) : null;
|
|
127023
|
-
if (!relatedTarget || !currentTarget || !_optionalChain
|
|
127023
|
+
if (!relatedTarget || !currentTarget || !_optionalChain([childWithDataKeypad, 'optionalAccess', _11 => _11.attributes, 'access', _12 => _12['data-keypad']])) {
|
|
127024
127024
|
this.setState({
|
|
127025
127025
|
activeAnswerBlock: ''
|
|
127026
127026
|
});
|
|
@@ -127485,27 +127485,6 @@ var Main$1 = styles$q.withStyles(styles)(Main);
|
|
|
127485
127485
|
const React = _dll_react;
|
|
127486
127486
|
const ReactDOM = _dll_react_dom;
|
|
127487
127487
|
const _ = _dll_lodash;
|
|
127488
|
-
function _optionalChain(ops) {
|
|
127489
|
-
let lastAccessLHS = undefined;
|
|
127490
|
-
let value = ops[0];
|
|
127491
|
-
let i = 1;
|
|
127492
|
-
while (i < ops.length) {
|
|
127493
|
-
const op = ops[i];
|
|
127494
|
-
const fn = ops[i + 1];
|
|
127495
|
-
i += 2;
|
|
127496
|
-
if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) {
|
|
127497
|
-
return undefined;
|
|
127498
|
-
}
|
|
127499
|
-
if (op === 'access' || op === 'optionalAccess') {
|
|
127500
|
-
lastAccessLHS = value;
|
|
127501
|
-
value = fn(value);
|
|
127502
|
-
} else if (op === 'call' || op === 'optionalCall') {
|
|
127503
|
-
value = fn((...args) => value.call(lastAccessLHS, ...args));
|
|
127504
|
-
lastAccessLHS = undefined;
|
|
127505
|
-
}
|
|
127506
|
-
}
|
|
127507
|
-
return value;
|
|
127508
|
-
}
|
|
127509
127488
|
class MathTemplated extends HTMLElement {
|
|
127510
127489
|
constructor() {
|
|
127511
127490
|
super();
|
|
@@ -127542,7 +127521,6 @@ class MathTemplated extends HTMLElement {
|
|
|
127542
127521
|
this.render();
|
|
127543
127522
|
}
|
|
127544
127523
|
render() {
|
|
127545
|
-
console.log('In Player Render, session.answers', _optionalChain([this, 'access', _2 => _2._session, 'optionalAccess', _3 => _3.answers]));
|
|
127546
127524
|
if (!this._model || !this._session) {
|
|
127547
127525
|
return;
|
|
127548
127526
|
}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"repository": "pie-framework/pie-elements",
|
|
7
|
-
"version": "2.12.1-next.
|
|
7
|
+
"version": "2.12.1-next.5+c50a5005c",
|
|
8
8
|
"description": "",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@material-ui/core": "^3.9.2",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"author": "",
|
|
18
18
|
"license": "ISC",
|
|
19
|
-
"gitHead": "
|
|
19
|
+
"gitHead": "c50a5005c4299f831331fb1975beeb1c96b8b678",
|
|
20
20
|
"scripts": {
|
|
21
21
|
"postpublish": "../../scripts/postpublish"
|
|
22
22
|
},
|