@pie-element/math-templated 2.12.1-next.0 → 2.12.1-next.3
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 +16 -11
- package/configure/lib/design.js.map +1 -1
- package/controller/lib/index.js +6 -4
- 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 +22 -19
- package/module/controller.js +7 -3
- package/module/element.js +6 -28
- package/package.json +2 -2
package/configure/lib/design.js
CHANGED
|
@@ -499,17 +499,22 @@ var Design = /*#__PURE__*/function (_React$Component) {
|
|
|
499
499
|
value: 'item-authoring'
|
|
500
500
|
}, "Item Authoring"))), Object.keys(responses || {}).map(function (responseKey, idx) {
|
|
501
501
|
var response = responses[responseKey];
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
502
|
+
|
|
503
|
+
if (response) {
|
|
504
|
+
return /*#__PURE__*/_react["default"].createElement(_response["default"], {
|
|
505
|
+
key: responseKey,
|
|
506
|
+
responseKey: responseKey,
|
|
507
|
+
mode: equationEditor,
|
|
508
|
+
response: response,
|
|
509
|
+
onResponseChange: _this2.onResponseChange,
|
|
510
|
+
index: idx,
|
|
511
|
+
cIgnoreOrder: cIgnoreOrder,
|
|
512
|
+
cAllowTrailingZeros: cAllowTrailingZeros,
|
|
513
|
+
error: responsesErrors && responsesErrors[idx]
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
return null;
|
|
513
518
|
}), rationaleEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
514
519
|
label: rationale.label,
|
|
515
520
|
className: classes.promptHolder
|
|
@@ -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","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 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 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
|
@@ -100,20 +100,22 @@ var getResponseCorrectness = function getResponseCorrectness(question, sessionRe
|
|
|
100
100
|
var correctAnswers = 0;
|
|
101
101
|
var score = 0;
|
|
102
102
|
var correct = false;
|
|
103
|
+
var correctResponsesCount = Object.keys(correctResponses || {}).length;
|
|
103
104
|
Object.keys(correctResponses).forEach(function (responseId) {
|
|
104
105
|
var answerItem = sessionResponse['r' + responseId];
|
|
105
|
-
var correctResponse = correctResponses[responseId];
|
|
106
|
+
var correctResponse = correctResponses[responseId] || {};
|
|
106
107
|
var answerCorrect = getIsAnswerCorrect(correctResponse, answerItem);
|
|
107
108
|
|
|
108
109
|
if (answerCorrect) {
|
|
109
110
|
correctAnswers++;
|
|
110
111
|
}
|
|
111
|
-
});
|
|
112
|
+
});
|
|
113
|
+
var fullyCorrect = correctAnswers === correctResponsesCount; // partial credit scoring: each correct answer is worth 1 / total answers point
|
|
112
114
|
// dichotomous scoring: for credit to be awarded, a correct answer must be entered for every response area
|
|
113
115
|
|
|
114
116
|
score = (correctAnswers / Object.keys(correctResponses).length).toFixed(2);
|
|
115
117
|
return {
|
|
116
|
-
correctness:
|
|
118
|
+
correctness: fullyCorrect ? 'correct' : 'incorrect',
|
|
117
119
|
score: correctAnswers > 0 ? score : 0,
|
|
118
120
|
correct: correct
|
|
119
121
|
};
|
|
@@ -203,7 +205,7 @@ var model = function model(question, session, env) {
|
|
|
203
205
|
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
206
|
|
|
205
207
|
Object.keys(responses).forEach(function (responseId) {
|
|
206
|
-
var correctResponse = responses[responseId];
|
|
208
|
+
var correctResponse = responses[responseId] || {};
|
|
207
209
|
|
|
208
210
|
if (correctResponse.alternates && Object.keys(correctResponse.alternates).length > 0) {
|
|
209
211
|
showNote = true;
|
|
@@ -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","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","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 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 errors = {};\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
|
@@ -106078,29 +106078,32 @@ class Design extends React$1.Component {
|
|
|
106078
106078
|
}
|
|
106079
106079
|
}, "Item Authoring"))), Object.keys(responses || ({})).map((responseKey, idx) => {
|
|
106080
106080
|
const response = responses[responseKey];
|
|
106081
|
-
|
|
106082
|
-
|
|
106083
|
-
|
|
106084
|
-
|
|
106085
|
-
|
|
106086
|
-
|
|
106087
|
-
|
|
106088
|
-
|
|
106089
|
-
|
|
106090
|
-
|
|
106091
|
-
|
|
106092
|
-
|
|
106093
|
-
|
|
106094
|
-
|
|
106095
|
-
|
|
106096
|
-
|
|
106081
|
+
if (response) {
|
|
106082
|
+
return React$1.createElement(Response$1, {
|
|
106083
|
+
key: responseKey,
|
|
106084
|
+
responseKey: responseKey,
|
|
106085
|
+
mode: equationEditor,
|
|
106086
|
+
response: response,
|
|
106087
|
+
onResponseChange: this.onResponseChange,
|
|
106088
|
+
index: idx,
|
|
106089
|
+
cIgnoreOrder: cIgnoreOrder,
|
|
106090
|
+
cAllowTrailingZeros: cAllowTrailingZeros,
|
|
106091
|
+
error: responsesErrors && responsesErrors[idx],
|
|
106092
|
+
__self: this,
|
|
106093
|
+
__source: {
|
|
106094
|
+
fileName: _jsxFileName,
|
|
106095
|
+
lineNumber: 453
|
|
106096
|
+
}
|
|
106097
|
+
});
|
|
106098
|
+
}
|
|
106099
|
+
return null;
|
|
106097
106100
|
}), rationaleEnabled && React$1.createElement(InputContainer, {
|
|
106098
106101
|
label: rationale.label,
|
|
106099
106102
|
className: classes.promptHolder,
|
|
106100
106103
|
__self: this,
|
|
106101
106104
|
__source: {
|
|
106102
106105
|
fileName: _jsxFileName,
|
|
106103
|
-
lineNumber:
|
|
106106
|
+
lineNumber: 471
|
|
106104
106107
|
}
|
|
106105
106108
|
}, React$1.createElement(EditableHtml, {
|
|
106106
106109
|
className: classes.prompt,
|
|
@@ -106129,14 +106132,14 @@ class Design extends React$1.Component {
|
|
|
106129
106132
|
__self: this,
|
|
106130
106133
|
__source: {
|
|
106131
106134
|
fileName: _jsxFileName,
|
|
106132
|
-
lineNumber:
|
|
106135
|
+
lineNumber: 475
|
|
106133
106136
|
}
|
|
106134
106137
|
}), rationaleError && React$1.createElement('div', {
|
|
106135
106138
|
className: classes.errorText,
|
|
106136
106139
|
__self: this,
|
|
106137
106140
|
__source: {
|
|
106138
106141
|
fileName: _jsxFileName,
|
|
106139
|
-
lineNumber:
|
|
106142
|
+
lineNumber: 506
|
|
106140
106143
|
}
|
|
106141
106144
|
}, rationaleError)));
|
|
106142
106145
|
}
|
package/module/controller.js
CHANGED
|
@@ -23017,9 +23017,11 @@ const getResponseCorrectness = (question, sessionResponse) => {
|
|
|
23017
23017
|
let correctAnswers = 0;
|
|
23018
23018
|
let score = 0;
|
|
23019
23019
|
let correct = false;
|
|
23020
|
+
const correctResponsesCount = Object.keys(correctResponses || {}).length;
|
|
23021
|
+
|
|
23020
23022
|
Object.keys(correctResponses).forEach((responseId) => {
|
|
23021
23023
|
const answerItem = sessionResponse['r' + responseId];
|
|
23022
|
-
const correctResponse = correctResponses[responseId];
|
|
23024
|
+
const correctResponse = correctResponses[responseId] || {};
|
|
23023
23025
|
|
|
23024
23026
|
const answerCorrect = getIsAnswerCorrect(correctResponse, answerItem);
|
|
23025
23027
|
if (answerCorrect) {
|
|
@@ -23027,12 +23029,14 @@ const getResponseCorrectness = (question, sessionResponse) => {
|
|
|
23027
23029
|
}
|
|
23028
23030
|
});
|
|
23029
23031
|
|
|
23032
|
+
const fullyCorrect = correctAnswers === correctResponsesCount;
|
|
23033
|
+
|
|
23030
23034
|
// partial credit scoring: each correct answer is worth 1 / total answers point
|
|
23031
23035
|
// dichotomous scoring: for credit to be awarded, a correct answer must be entered for every response area
|
|
23032
23036
|
score = (correctAnswers / Object.keys(correctResponses).length).toFixed(2);
|
|
23033
23037
|
|
|
23034
23038
|
return {
|
|
23035
|
-
correctness:
|
|
23039
|
+
correctness: fullyCorrect ? 'correct' : 'incorrect',
|
|
23036
23040
|
score: correctAnswers > 0 ? score : 0,
|
|
23037
23041
|
correct
|
|
23038
23042
|
};
|
|
@@ -23097,7 +23101,7 @@ const model = (question, session, env) => {
|
|
|
23097
23101
|
|
|
23098
23102
|
// check if there is at least one alternate response or if the validation for at least one response is not literal
|
|
23099
23103
|
Object.keys(responses).forEach((responseId) => {
|
|
23100
|
-
const correctResponse = responses[responseId];
|
|
23104
|
+
const correctResponse = responses[responseId] || {};
|
|
23101
23105
|
if (correctResponse.alternates && Object.keys(correctResponse.alternates).length > 0) {
|
|
23102
23106
|
showNote = true;
|
|
23103
23107
|
} else if (correctResponse.validation !== 'literal') {
|
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.3+470013869",
|
|
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": "4700138696af59213719cc41adcada7744eee071",
|
|
20
20
|
"scripts": {
|
|
21
21
|
"postpublish": "../../scripts/postpublish"
|
|
22
22
|
},
|