@pie-element/multiple-choice 9.2.6-next.13 → 9.2.6-next.25
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/main.js +3 -1
- package/configure/lib/main.js.map +1 -1
- package/configure/package.json +1 -1
- package/controller/lib/index.js +2 -1
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/docs/demo/generate.js +13 -1
- package/lib/main.js +10 -3
- package/lib/main.js.map +1 -1
- package/module/configure.js +28 -27
- package/module/controller.js +1 -0
- package/module/demo.js +13 -1
- package/module/element.js +11 -5
- package/module/print-demo.js +13 -1
- package/module/print.js +11 -5
- package/package.json +3 -3
package/configure/lib/main.js
CHANGED
|
@@ -206,7 +206,8 @@ var Design = (0, _styles.withStyles)(styles)(function (props) {
|
|
|
206
206
|
spellCheckEnabled = _ref3.spellCheckEnabled,
|
|
207
207
|
choices = _ref3.choices,
|
|
208
208
|
errors = _ref3.errors,
|
|
209
|
-
toolbarEditorPosition = _ref3.toolbarEditorPosition
|
|
209
|
+
toolbarEditorPosition = _ref3.toolbarEditorPosition,
|
|
210
|
+
extraCSSRules = _ref3.extraCSSRules;
|
|
210
211
|
|
|
211
212
|
var _ref4 = errors || {},
|
|
212
213
|
answerChoicesError = _ref4.answerChoices,
|
|
@@ -265,6 +266,7 @@ var Design = (0, _styles.withStyles)(styles)(function (props) {
|
|
|
265
266
|
return /*#__PURE__*/_react["default"].createElement(_configUi.layout.ConfigLayout, {
|
|
266
267
|
dimensions: contentDimensions,
|
|
267
268
|
hideSettings: settingsPanelDisabled,
|
|
269
|
+
extraCSSRules: extraCSSRules,
|
|
268
270
|
settings: /*#__PURE__*/_react["default"].createElement(Panel, {
|
|
269
271
|
model: model,
|
|
270
272
|
onChangeModel: onChangeModel,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/main.jsx"],"names":["Panel","settings","toggle","radio","dropdown","MAX_CHOICES","styles","theme","promptHolder","width","paddingTop","spacing","unit","marginBottom","rationaleHolder","flex","marginTop","marginLeft","accessibilityHolder","choiceConfigurationHolder","display","flexDirection","choiceConfiguration","switchElement","justifyContent","margin","addButton","disableButton","cursor","pointerEvents","backgroundColor","color","disabled","flexContainer","alignItems","titleText","fontSize","typography","marginRight","tooltip","whiteSpace","maxWidth","errorText","palette","error","main","Design","props","classes","model","configuration","onPromptChanged","onChoiceChanged","onRemoveChoice","onAddChoice","imageSupport","uploadSoundSupport","onChangeModel","onConfigurationChanged","onTeacherInstructionsChanged","addChoiceButton","contentDimensions","feedback","deleteChoice","choiceMode","choicePrefix","partialScoring","lockChoiceOrder","teacherInstructions","studentInstructions","rationale","accessibility","scoringType","sequentialChoiceLabels","settingsPanelDisabled","choicesLayout","spellCheck","gridColumns","maxImageWidth","maxImageHeight","prompt","withRubric","mathMlOptions","language","languageChoices","maxAnswerChoices","limitChoicesNumber","teacherInstructionsEnabled","rationaleEnabled","accessibilityLabelsEnabled","feedbackEnabled","promptEnabled","spellCheckEnabled","choices","errors","toolbarEditorPosition","answerChoicesError","answerChoices","choicesErrors","correctResponseError","correctResponse","promptError","rationaleErrors","teacherInstructionsError","nrOfColumnsAvailable","length","Array","from","_","i","baseInputConfiguration","toolbarOpts","position","getPluginProps","validationMessage","defaultImageMaxWidth","defaultImageMaxHeight","addChoiceButtonTooltip","panelSettings","label","enabled","options","panelProperties","studentInstructionsEnabled","rubricEnabled","Settings","Properties","inputConfiguration","map","choice","index","c","value","root","Main","showWarning","onModelChanged","minAnswerChoices","setState","splice","push","utils","firstAvailableIndex","type","correct","key","correctFound","state","React","Component","PropTypes","object","isRequired","disableSidePanel","bool","func","shape","add","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { EditableHtml } from '@pie-lib/pie-toolbox/editable-html';\nimport {\n AlertDialog,\n InputContainer,\n ChoiceConfiguration,\n settings,\n layout,\n choiceUtils as utils,\n} from '@pie-lib/pie-toolbox/config-ui';\nimport { color } from '@pie-lib/pie-toolbox/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\nimport Info from '@material-ui/icons/Info';\nimport merge from 'lodash/merge';\nimport { generateValidationMessage } from './utils';\n\nconst { Panel, toggle, radio, dropdown } = settings;\n\nconst MAX_CHOICES = 9;\n\nconst styles = (theme) => ({\n promptHolder: {\n width: '100%',\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n rationaleHolder: {\n flex: 1,\n marginTop: theme.spacing.unit * 1.5,\n paddingTop: theme.spacing.unit * 2,\n marginLeft: theme.spacing.unit * 3.5,\n },\n accessibilityHolder: {\n flex: 1,\n marginTop: theme.spacing.unit * 1.5,\n paddingTop: theme.spacing.unit * 2,\n marginLeft: theme.spacing.unit * 3.5,\n },\n choiceConfigurationHolder: {\n display: 'flex',\n flexDirection: 'column',\n marginBottom: theme.spacing.unit,\n },\n choiceConfiguration: {\n width: '100%',\n },\n switchElement: {\n justifyContent: 'space-between',\n margin: 0,\n },\n addButton: {\n marginTop: theme.spacing.unit,\n float: 'right',\n },\n disableButton: {\n cursor: 'not-allowed',\n pointerEvents: 'all',\n backgroundColor: color.disabled(),\n '&:hover': {\n backgroundColor: color.disabled(),\n },\n '&:focus': {\n backgroundColor: color.disabled(),\n },\n },\n flexContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n titleText: {\n fontSize: theme.typography.fontSize + 2,\n marginRight: theme.spacing.unit,\n },\n tooltip: {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\n },\n});\n\nconst Design = withStyles(styles)((props) => {\n const {\n classes,\n model,\n configuration,\n onPromptChanged,\n onChoiceChanged,\n onRemoveChoice,\n onAddChoice,\n imageSupport,\n uploadSoundSupport,\n onChangeModel,\n onConfigurationChanged,\n onTeacherInstructionsChanged,\n } = props;\n\n const {\n addChoiceButton = {},\n contentDimensions = {},\n feedback = {},\n deleteChoice = {},\n choiceMode = {},\n choicePrefix = {},\n partialScoring = {},\n lockChoiceOrder = {},\n teacherInstructions = {},\n studentInstructions = {},\n rationale = {},\n accessibility = {},\n scoringType = {},\n sequentialChoiceLabels = {},\n settingsPanelDisabled,\n choicesLayout,\n spellCheck = {},\n gridColumns,\n maxImageWidth = {},\n maxImageHeight = {},\n prompt = {},\n withRubric = {},\n mathMlOptions = {},\n language = {},\n languageChoices = {},\n } = configuration || {};\n let { maxAnswerChoices } = configuration || {};\n const {\n limitChoicesNumber,\n teacherInstructionsEnabled,\n rationaleEnabled,\n accessibilityLabelsEnabled,\n feedbackEnabled,\n promptEnabled,\n spellCheckEnabled,\n choices,\n errors,\n toolbarEditorPosition,\n } = model || {};\n\n const {\n answerChoices: answerChoicesError,\n choices: choicesErrors,\n correctResponse: correctResponseError,\n prompt: promptError,\n rationale: rationaleErrors,\n teacherInstructions: teacherInstructionsError,\n } = errors || {};\n const nrOfColumnsAvailable = choices?.length ? Array.from({ length: choices.length }, (_, i) => `${i + 1}`) : [];\n\n const { baseInputConfiguration = {} } = configuration;\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n // if old property is used, set maxAnswerChoices to 9\n if (limitChoicesNumber) {\n maxAnswerChoices = MAX_CHOICES;\n }\n\n const getPluginProps = (props = {}) => ({\n ...baseInputConfiguration,\n ...props,\n });\n\n const validationMessage = generateValidationMessage(configuration);\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n const addChoiceButtonTooltip =\n maxAnswerChoices && choices?.length >= maxAnswerChoices ? `Only ${maxAnswerChoices} allowed maximum` : '';\n\n const panelSettings = {\n choiceMode: choiceMode.settings && radio(choiceMode.label, ['checkbox', 'radio']),\n 'sequentialChoiceLabels.enabled': sequentialChoiceLabels.settings && toggle(sequentialChoiceLabels.label, true),\n choicePrefix: choicePrefix.settings && radio(choicePrefix.label, ['numbers', 'letters']),\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n lockChoiceOrder: lockChoiceOrder.settings && toggle(lockChoiceOrder.label),\n feedbackEnabled: feedback.settings && toggle(feedback.label),\n choicesLayout: choicesLayout.settings && dropdown(choicesLayout.label, ['vertical', 'grid', 'horizontal']),\n gridColumns:\n choicesLayout.settings &&\n model.choicesLayout === 'grid' &&\n nrOfColumnsAvailable.length > 0 &&\n dropdown(gridColumns.label, nrOfColumnsAvailable),\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 studentInstructionsEnabled: studentInstructions.settings && toggle(studentInstructions.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n accessibilityLabelsEnabled: accessibility.settings && toggle(accessibility.label),\n scoringType: scoringType.settings && radio(scoringType.label, ['auto', 'rubric']),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n return (\n <layout.ConfigLayout\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n onChangeModel={onChangeModel}\n configuration={configuration}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n {teacherInstructionsEnabled && (\n <InputContainer label={teacherInstructions.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.teacherInstructions || ''}\n onChange={onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={teacherInstructionsError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(configuration?.teacherInstructions?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.teacherInstructions) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.teacherInstructions) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {teacherInstructionsError && <div className={classes.errorText}>{teacherInstructionsError}</div>}\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer label={prompt.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n disableUnderline\n error={promptError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(configuration?.prompt?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={maxImageWidth && maxImageWidth.prompt}\n maxImageHeight={maxImageHeight && maxImageHeight.prompt}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {promptError && <div className={classes.errorText}>{promptError}</div>}\n </InputContainer>\n )}\n\n <div className={classes.flexContainer}>\n <Typography className={classes.titleText} component={'div'}>Choices</Typography>\n <Tooltip\n classes={{ tooltip: classes.tooltip }}\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} />\n </Tooltip>\n </div>\n\n {choices.map((choice, index) => (\n <div key={`choice-${index}`} className={classes.choiceConfigurationHolder}>\n <ChoiceConfiguration\n key={index}\n index={index + 1}\n useLetterOrdering={model.choicePrefix === 'letters'}\n className={classes.choiceConfiguration}\n mode={model.choiceMode}\n data={choice}\n defaultFeedback={{}}\n imageSupport={imageSupport}\n disableImageAlignmentButtons={true}\n onDelete={() => onRemoveChoice(index)}\n onChange={(c) => onChoiceChanged(index, c)}\n allowFeedBack={feedbackEnabled}\n allowDelete={deleteChoice.settings}\n noLabels\n pluginOpts={getPluginProps(configuration?.choices?.inputConfiguration)}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n error={choicesErrors?.[choice.value] || null}\n noCorrectAnswerError={correctResponseError}\n maxImageWidth={(maxImageWidth && maxImageWidth.choices) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.choices) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n mathMlOptions={mathMlOptions}\n />\n\n {rationaleEnabled && (\n <InputContainer key={`rationale-${index}`} label={rationale.label} className={classes.rationaleHolder}>\n <EditableHtml\n className={classes.rationale}\n markup={choice.rationale || ''}\n onChange={(c) => onChoiceChanged(index, { ...choice, rationale: c })}\n imageSupport={imageSupport}\n error={rationaleErrors?.[choice.value] || null}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(configuration?.rationale?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.rationale) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.rationale) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {rationaleErrors?.[choice.value] && (\n <div className={classes.errorText}>{rationaleErrors?.[choice.value]}</div>\n )}\n </InputContainer>\n )}\n\n {accessibilityLabelsEnabled && (\n <InputContainer\n key={`accessibility-${index}`}\n label={accessibility.label}\n className={classes.accessibilityHolder}\n >\n <EditableHtml\n className={classes.accessibility}\n markup={choice.accessibility || ''}\n onChange={(c) => onChoiceChanged(index, { ...choice, accessibility: c })}\n imageSupport={imageSupport}\n pluginProps={getPluginProps(configuration?.accessibility?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.choices) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.choices) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n </InputContainer>\n )}\n </div>\n ))}\n\n {correctResponseError && <div className={classes.errorText}>{correctResponseError}</div>}\n {answerChoicesError && <div className={classes.errorText}>{answerChoicesError}</div>}\n\n {addChoiceButton.settings && (\n <Tooltip title={addChoiceButtonTooltip} classes={{ tooltip: classes.tooltip }}>\n <Button\n classes={{ root: maxAnswerChoices && choices?.length >= maxAnswerChoices && classes.disableButton }}\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n onClick={onAddChoice}\n >\n {addChoiceButton.label}\n </Button>\n </Tooltip>\n )}\n </layout.ConfigLayout>\n );\n});\n\nexport class Main extends React.Component {\n static propTypes = {\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n disableSidePanel: PropTypes.bool,\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n };\n\n state = { showWarning: false };\n\n onRemoveChoice = (index) => {\n const { model, configuration, onModelChanged } = this.props;\n const { minAnswerChoices } = configuration || {};\n\n if (minAnswerChoices && model.choices.length === minAnswerChoices) {\n this.setState({ showWarning: true });\n\n return;\n }\n\n model.choices.splice(index, 1);\n onModelChanged(model);\n };\n\n onAddChoice = () => {\n const { model, configuration, onModelChanged } = this.props;\n let { maxAnswerChoices } = configuration || {};\n const { limitChoicesNumber } = model || {};\n\n // if old property is used, set maxAnswerChoices to 9\n if (limitChoicesNumber) {\n maxAnswerChoices = MAX_CHOICES;\n }\n\n if (maxAnswerChoices && model.choices.length >= maxAnswerChoices) {\n return;\n }\n\n model.choices.push({\n label: '',\n value: utils.firstAvailableIndex(\n model.choices.map((c) => c.value),\n 0,\n ),\n feedback: { type: 'none' },\n });\n\n onModelChanged(model);\n };\n\n onChoiceChanged = (index, choice) => {\n const { model, onModelChanged } = this.props;\n\n if (choice.correct && model.choiceMode === 'radio') {\n model.choices = model.choices.map((c) => merge({}, c, { correct: false }));\n }\n\n model.choices.splice(index, 1, choice);\n onModelChanged(model);\n };\n\n onPromptChanged = (prompt) => {\n this.props.onModelChanged({\n ...this.props.model,\n prompt,\n });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n this.props.onModelChanged({\n ...this.props.model,\n teacherInstructions,\n });\n };\n\n onModelChanged = (model, key) => {\n const { onModelChanged } = this.props;\n\n switch (key) {\n case 'choiceMode': {\n let value = model.choiceMode;\n\n if (value === 'radio') {\n let correctFound = false;\n\n model.choices = model.choices.map((c) => {\n if (correctFound) {\n c.correct = false;\n\n return c;\n }\n\n if (c.correct) {\n correctFound = true;\n }\n\n return c;\n });\n }\n\n onModelChanged(model, true);\n break;\n }\n\n default:\n onModelChanged(model);\n break;\n }\n };\n\n render() {\n const { configuration: { minAnswerChoices } = {} } = this.props;\n const { showWarning } = this.state;\n\n return (\n <React.Fragment>\n <AlertDialog\n open={showWarning}\n title=\"Warning\"\n text={`There can't be less than ${minAnswerChoices || 0} choices.`}\n onConfirm={() => this.setState({ showWarning: false })}\n />\n <Design\n {...this.props}\n onChangeModel={this.onModelChanged}\n onRemoveChoice={this.onRemoveChoice}\n onChoiceChanged={this.onChoiceChanged}\n onAddChoice={this.onAddChoice}\n onPromptChanged={this.onPromptChanged}\n onTeacherInstructionsChanged={this.onTeacherInstructionsChanged}\n />\n </React.Fragment>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Main);\n\nexport default Styled;\n"],"file":"main.js"}
|
|
1
|
+
{"version":3,"sources":["../src/main.jsx"],"names":["Panel","settings","toggle","radio","dropdown","MAX_CHOICES","styles","theme","promptHolder","width","paddingTop","spacing","unit","marginBottom","rationaleHolder","flex","marginTop","marginLeft","accessibilityHolder","choiceConfigurationHolder","display","flexDirection","choiceConfiguration","switchElement","justifyContent","margin","addButton","disableButton","cursor","pointerEvents","backgroundColor","color","disabled","flexContainer","alignItems","titleText","fontSize","typography","marginRight","tooltip","whiteSpace","maxWidth","errorText","palette","error","main","Design","props","classes","model","configuration","onPromptChanged","onChoiceChanged","onRemoveChoice","onAddChoice","imageSupport","uploadSoundSupport","onChangeModel","onConfigurationChanged","onTeacherInstructionsChanged","addChoiceButton","contentDimensions","feedback","deleteChoice","choiceMode","choicePrefix","partialScoring","lockChoiceOrder","teacherInstructions","studentInstructions","rationale","accessibility","scoringType","sequentialChoiceLabels","settingsPanelDisabled","choicesLayout","spellCheck","gridColumns","maxImageWidth","maxImageHeight","prompt","withRubric","mathMlOptions","language","languageChoices","maxAnswerChoices","limitChoicesNumber","teacherInstructionsEnabled","rationaleEnabled","accessibilityLabelsEnabled","feedbackEnabled","promptEnabled","spellCheckEnabled","choices","errors","toolbarEditorPosition","extraCSSRules","answerChoicesError","answerChoices","choicesErrors","correctResponseError","correctResponse","promptError","rationaleErrors","teacherInstructionsError","nrOfColumnsAvailable","length","Array","from","_","i","baseInputConfiguration","toolbarOpts","position","getPluginProps","validationMessage","defaultImageMaxWidth","defaultImageMaxHeight","addChoiceButtonTooltip","panelSettings","label","enabled","options","panelProperties","studentInstructionsEnabled","rubricEnabled","Settings","Properties","inputConfiguration","map","choice","index","c","value","root","Main","showWarning","onModelChanged","minAnswerChoices","setState","splice","push","utils","firstAvailableIndex","type","correct","key","correctFound","state","React","Component","PropTypes","object","isRequired","disableSidePanel","bool","func","shape","add","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { EditableHtml } from '@pie-lib/pie-toolbox/editable-html';\nimport {\n AlertDialog,\n InputContainer,\n ChoiceConfiguration,\n settings,\n layout,\n choiceUtils as utils,\n} from '@pie-lib/pie-toolbox/config-ui';\nimport { color } from '@pie-lib/pie-toolbox/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\nimport Info from '@material-ui/icons/Info';\nimport merge from 'lodash/merge';\nimport { generateValidationMessage } from './utils';\n\nconst { Panel, toggle, radio, dropdown } = settings;\n\nconst MAX_CHOICES = 9;\n\nconst styles = (theme) => ({\n promptHolder: {\n width: '100%',\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n rationaleHolder: {\n flex: 1,\n marginTop: theme.spacing.unit * 1.5,\n paddingTop: theme.spacing.unit * 2,\n marginLeft: theme.spacing.unit * 3.5,\n },\n accessibilityHolder: {\n flex: 1,\n marginTop: theme.spacing.unit * 1.5,\n paddingTop: theme.spacing.unit * 2,\n marginLeft: theme.spacing.unit * 3.5,\n },\n choiceConfigurationHolder: {\n display: 'flex',\n flexDirection: 'column',\n marginBottom: theme.spacing.unit,\n },\n choiceConfiguration: {\n width: '100%',\n },\n switchElement: {\n justifyContent: 'space-between',\n margin: 0,\n },\n addButton: {\n marginTop: theme.spacing.unit,\n float: 'right',\n },\n disableButton: {\n cursor: 'not-allowed',\n pointerEvents: 'all',\n backgroundColor: color.disabled(),\n '&:hover': {\n backgroundColor: color.disabled(),\n },\n '&:focus': {\n backgroundColor: color.disabled(),\n },\n },\n flexContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n titleText: {\n fontSize: theme.typography.fontSize + 2,\n marginRight: theme.spacing.unit,\n },\n tooltip: {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\n },\n});\n\nconst Design = withStyles(styles)((props) => {\n const {\n classes,\n model,\n configuration,\n onPromptChanged,\n onChoiceChanged,\n onRemoveChoice,\n onAddChoice,\n imageSupport,\n uploadSoundSupport,\n onChangeModel,\n onConfigurationChanged,\n onTeacherInstructionsChanged,\n } = props;\n\n const {\n addChoiceButton = {},\n contentDimensions = {},\n feedback = {},\n deleteChoice = {},\n choiceMode = {},\n choicePrefix = {},\n partialScoring = {},\n lockChoiceOrder = {},\n teacherInstructions = {},\n studentInstructions = {},\n rationale = {},\n accessibility = {},\n scoringType = {},\n sequentialChoiceLabels = {},\n settingsPanelDisabled,\n choicesLayout,\n spellCheck = {},\n gridColumns,\n maxImageWidth = {},\n maxImageHeight = {},\n prompt = {},\n withRubric = {},\n mathMlOptions = {},\n language = {},\n languageChoices = {},\n } = configuration || {};\n let { maxAnswerChoices } = configuration || {};\n const {\n limitChoicesNumber,\n teacherInstructionsEnabled,\n rationaleEnabled,\n accessibilityLabelsEnabled,\n feedbackEnabled,\n promptEnabled,\n spellCheckEnabled,\n choices,\n errors,\n toolbarEditorPosition,\n extraCSSRules,\n } = model || {};\n\n const {\n answerChoices: answerChoicesError,\n choices: choicesErrors,\n correctResponse: correctResponseError,\n prompt: promptError,\n rationale: rationaleErrors,\n teacherInstructions: teacherInstructionsError,\n } = errors || {};\n const nrOfColumnsAvailable = choices?.length ? Array.from({ length: choices.length }, (_, i) => `${i + 1}`) : [];\n\n const { baseInputConfiguration = {} } = configuration;\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n // if old property is used, set maxAnswerChoices to 9\n if (limitChoicesNumber) {\n maxAnswerChoices = MAX_CHOICES;\n }\n\n const getPluginProps = (props = {}) => ({\n ...baseInputConfiguration,\n ...props,\n });\n\n const validationMessage = generateValidationMessage(configuration);\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n const addChoiceButtonTooltip =\n maxAnswerChoices && choices?.length >= maxAnswerChoices ? `Only ${maxAnswerChoices} allowed maximum` : '';\n\n const panelSettings = {\n choiceMode: choiceMode.settings && radio(choiceMode.label, ['checkbox', 'radio']),\n 'sequentialChoiceLabels.enabled': sequentialChoiceLabels.settings && toggle(sequentialChoiceLabels.label, true),\n choicePrefix: choicePrefix.settings && radio(choicePrefix.label, ['numbers', 'letters']),\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n lockChoiceOrder: lockChoiceOrder.settings && toggle(lockChoiceOrder.label),\n feedbackEnabled: feedback.settings && toggle(feedback.label),\n choicesLayout: choicesLayout.settings && dropdown(choicesLayout.label, ['vertical', 'grid', 'horizontal']),\n gridColumns:\n choicesLayout.settings &&\n model.choicesLayout === 'grid' &&\n nrOfColumnsAvailable.length > 0 &&\n dropdown(gridColumns.label, nrOfColumnsAvailable),\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 studentInstructionsEnabled: studentInstructions.settings && toggle(studentInstructions.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n accessibilityLabelsEnabled: accessibility.settings && toggle(accessibility.label),\n scoringType: scoringType.settings && radio(scoringType.label, ['auto', 'rubric']),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n return (\n <layout.ConfigLayout\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n extraCSSRules={extraCSSRules}\n settings={\n <Panel\n model={model}\n onChangeModel={onChangeModel}\n configuration={configuration}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n {teacherInstructionsEnabled && (\n <InputContainer label={teacherInstructions.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.teacherInstructions || ''}\n onChange={onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={teacherInstructionsError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(configuration?.teacherInstructions?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.teacherInstructions) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.teacherInstructions) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {teacherInstructionsError && <div className={classes.errorText}>{teacherInstructionsError}</div>}\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer label={prompt.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n disableUnderline\n error={promptError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(configuration?.prompt?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={maxImageWidth && maxImageWidth.prompt}\n maxImageHeight={maxImageHeight && maxImageHeight.prompt}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {promptError && <div className={classes.errorText}>{promptError}</div>}\n </InputContainer>\n )}\n\n <div className={classes.flexContainer}>\n <Typography className={classes.titleText} component={'div'}>Choices</Typography>\n <Tooltip\n classes={{ tooltip: classes.tooltip }}\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} />\n </Tooltip>\n </div>\n\n {choices.map((choice, index) => (\n <div key={`choice-${index}`} className={classes.choiceConfigurationHolder}>\n <ChoiceConfiguration\n key={index}\n index={index + 1}\n useLetterOrdering={model.choicePrefix === 'letters'}\n className={classes.choiceConfiguration}\n mode={model.choiceMode}\n data={choice}\n defaultFeedback={{}}\n imageSupport={imageSupport}\n disableImageAlignmentButtons={true}\n onDelete={() => onRemoveChoice(index)}\n onChange={(c) => onChoiceChanged(index, c)}\n allowFeedBack={feedbackEnabled}\n allowDelete={deleteChoice.settings}\n noLabels\n pluginOpts={getPluginProps(configuration?.choices?.inputConfiguration)}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n error={choicesErrors?.[choice.value] || null}\n noCorrectAnswerError={correctResponseError}\n maxImageWidth={(maxImageWidth && maxImageWidth.choices) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.choices) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n mathMlOptions={mathMlOptions}\n />\n\n {rationaleEnabled && (\n <InputContainer key={`rationale-${index}`} label={rationale.label} className={classes.rationaleHolder}>\n <EditableHtml\n className={classes.rationale}\n markup={choice.rationale || ''}\n onChange={(c) => onChoiceChanged(index, { ...choice, rationale: c })}\n imageSupport={imageSupport}\n error={rationaleErrors?.[choice.value] || null}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(configuration?.rationale?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.rationale) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.rationale) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {rationaleErrors?.[choice.value] && (\n <div className={classes.errorText}>{rationaleErrors?.[choice.value]}</div>\n )}\n </InputContainer>\n )}\n\n {accessibilityLabelsEnabled && (\n <InputContainer\n key={`accessibility-${index}`}\n label={accessibility.label}\n className={classes.accessibilityHolder}\n >\n <EditableHtml\n className={classes.accessibility}\n markup={choice.accessibility || ''}\n onChange={(c) => onChoiceChanged(index, { ...choice, accessibility: c })}\n imageSupport={imageSupport}\n pluginProps={getPluginProps(configuration?.accessibility?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.choices) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.choices) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n </InputContainer>\n )}\n </div>\n ))}\n\n {correctResponseError && <div className={classes.errorText}>{correctResponseError}</div>}\n {answerChoicesError && <div className={classes.errorText}>{answerChoicesError}</div>}\n\n {addChoiceButton.settings && (\n <Tooltip title={addChoiceButtonTooltip} classes={{ tooltip: classes.tooltip }}>\n <Button\n classes={{ root: maxAnswerChoices && choices?.length >= maxAnswerChoices && classes.disableButton }}\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n onClick={onAddChoice}\n >\n {addChoiceButton.label}\n </Button>\n </Tooltip>\n )}\n </layout.ConfigLayout>\n );\n});\n\nexport class Main extends React.Component {\n static propTypes = {\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n disableSidePanel: PropTypes.bool,\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n };\n\n state = { showWarning: false };\n\n onRemoveChoice = (index) => {\n const { model, configuration, onModelChanged } = this.props;\n const { minAnswerChoices } = configuration || {};\n\n if (minAnswerChoices && model.choices.length === minAnswerChoices) {\n this.setState({ showWarning: true });\n\n return;\n }\n\n model.choices.splice(index, 1);\n onModelChanged(model);\n };\n\n onAddChoice = () => {\n const { model, configuration, onModelChanged } = this.props;\n let { maxAnswerChoices } = configuration || {};\n const { limitChoicesNumber } = model || {};\n\n // if old property is used, set maxAnswerChoices to 9\n if (limitChoicesNumber) {\n maxAnswerChoices = MAX_CHOICES;\n }\n\n if (maxAnswerChoices && model.choices.length >= maxAnswerChoices) {\n return;\n }\n\n model.choices.push({\n label: '',\n value: utils.firstAvailableIndex(\n model.choices.map((c) => c.value),\n 0,\n ),\n feedback: { type: 'none' },\n });\n\n onModelChanged(model);\n };\n\n onChoiceChanged = (index, choice) => {\n const { model, onModelChanged } = this.props;\n\n if (choice.correct && model.choiceMode === 'radio') {\n model.choices = model.choices.map((c) => merge({}, c, { correct: false }));\n }\n\n model.choices.splice(index, 1, choice);\n onModelChanged(model);\n };\n\n onPromptChanged = (prompt) => {\n this.props.onModelChanged({\n ...this.props.model,\n prompt,\n });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n this.props.onModelChanged({\n ...this.props.model,\n teacherInstructions,\n });\n };\n\n onModelChanged = (model, key) => {\n const { onModelChanged } = this.props;\n\n switch (key) {\n case 'choiceMode': {\n let value = model.choiceMode;\n\n if (value === 'radio') {\n let correctFound = false;\n\n model.choices = model.choices.map((c) => {\n if (correctFound) {\n c.correct = false;\n\n return c;\n }\n\n if (c.correct) {\n correctFound = true;\n }\n\n return c;\n });\n }\n\n onModelChanged(model, true);\n break;\n }\n\n default:\n onModelChanged(model);\n break;\n }\n };\n\n render() {\n const { configuration: { minAnswerChoices } = {} } = this.props;\n const { showWarning } = this.state;\n\n return (\n <React.Fragment>\n <AlertDialog\n open={showWarning}\n title=\"Warning\"\n text={`There can't be less than ${minAnswerChoices || 0} choices.`}\n onConfirm={() => this.setState({ showWarning: false })}\n />\n <Design\n {...this.props}\n onChangeModel={this.onModelChanged}\n onRemoveChoice={this.onRemoveChoice}\n onChoiceChanged={this.onChoiceChanged}\n onAddChoice={this.onAddChoice}\n onPromptChanged={this.onPromptChanged}\n onTeacherInstructionsChanged={this.onTeacherInstructionsChanged}\n />\n </React.Fragment>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Main);\n\nexport default Styled;\n"],"file":"main.js"}
|
package/configure/package.json
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"@material-ui/core": "^3.9.2",
|
|
9
9
|
"@material-ui/icons": "^3.0.1",
|
|
10
10
|
"@pie-framework/pie-configure-events": "^1.3.0",
|
|
11
|
-
"@pie-lib/pie-toolbox": "2.0
|
|
11
|
+
"@pie-lib/pie-toolbox": "2.1.0",
|
|
12
12
|
"debug": "^3.1.0",
|
|
13
13
|
"lodash": "^4.17.15",
|
|
14
14
|
"prop-types": "^15.6.2",
|
package/controller/lib/index.js
CHANGED
|
@@ -148,7 +148,8 @@ function _model() {
|
|
|
148
148
|
keyMode: normalizedQuestion.choicePrefix,
|
|
149
149
|
choices: choices,
|
|
150
150
|
responseCorrect: env.mode === 'evaluate' ? (0, _utils.isResponseCorrect)(normalizedQuestion, session) : undefined,
|
|
151
|
-
language: normalizedQuestion.language
|
|
151
|
+
language: normalizedQuestion.language,
|
|
152
|
+
extraCSSRules: normalizedQuestion.extraCSSRules
|
|
152
153
|
};
|
|
153
154
|
_ref4 = env || {}, role = _ref4.role, mode = _ref4.mode;
|
|
154
155
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["prepareChoice","model","env","defaultFeedback","choice","role","mode","out","label","value","accessibilityLabelsEnabled","accessibility","textContent","rationale","rationaleEnabled","correct","feedbackEnabled","feedbackType","feedback","type","createDefaultModel","Promise","resolve","defaults","normalize","question","verticalMode","choicesLayout","questionProps","session","updateSession","normalizedQuestion","Object","assign","incorrect","choices","map","lockChoiceOrder","disabled","prompt","promptEnabled","gridColumns","choiceMode","keyMode","choicePrefix","responseCorrect","undefined","language","teacherInstructions","teacherInstructionsEnabled","getScore","config","selectedChoices","correctChoices","filter","ch","score","reduce","acc","selectedChoice","find","length","str","parseFloat","toFixed","outcome","empty","partialScoringEnabled","partialScoring","enabled","createCorrectResponseSession","id","c","getInnerText","html","replaceAll","getContent","replace","validate","minAnswerChoices","maxAnswerChoices","reversedChoices","reverse","choicesErrors","rationaleErrors","errors","forEach","field","required","hasCorrectResponse","index","identicalAnswer","slice","some","nbOfChoices","answerChoices","correctResponse"],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport isEmpty from 'lodash/isEmpty';\nimport { isResponseCorrect, parseHTML } from './utils';\nimport defaults from './defaults';\nimport { lockChoices, partialScoring, getShuffledChoices } from '@pie-lib/pie-toolbox/controller-utils';\n\nconst prepareChoice = (model, env, defaultFeedback) => (choice) => {\n const { role, mode } = env || {};\n const out = {\n label: choice.label,\n value: choice.value,\n };\n\n if (model.accessibilityLabelsEnabled) {\n out.accessibility = parseHTML(choice.accessibility).textContent || choice.value;\n }\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n out.rationale = model.rationaleEnabled ? choice.rationale : null;\n } else {\n out.rationale = null;\n }\n\n if (mode === 'evaluate') {\n out.correct = !!choice.correct;\n\n if (model.feedbackEnabled) {\n const feedbackType = (choice.feedback && choice.feedback.type) || 'none';\n\n if (feedbackType === 'default') {\n out.feedback = defaultFeedback[choice.correct ? 'correct' : 'incorrect'];\n } else if (feedbackType === 'custom') {\n out.feedback = choice.feedback.value;\n }\n }\n }\n\n return out;\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => resolve({ ...defaults, ...model }));\n}\n\nexport const normalize = (question) => {\n const { verticalMode, choicesLayout, ...questionProps } = question || {};\n\n return {\n ...defaults,\n ...questionProps,\n // This is used for offering support for old models which have the property verticalMode\n // Same thing is set in authoring : packages/multiple-choice/configure/src/index.jsx - createDefaultModel\n choicesLayout: choicesLayout || (verticalMode === false && 'horizontal') || defaults.choicesLayout,\n };\n};\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport async function model(question, session, env, updateSession) {\n const normalizedQuestion = normalize(question);\n\n const defaultFeedback = Object.assign(\n { correct: 'Correct', incorrect: 'Incorrect' },\n normalizedQuestion.defaultFeedback,\n );\n\n let choices = (normalizedQuestion.choices || []).map(prepareChoice(normalizedQuestion, env, defaultFeedback));\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'value');\n }\n\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n choicesLayout: normalizedQuestion.choicesLayout,\n gridColumns: normalizedQuestion.gridColumns,\n choiceMode: normalizedQuestion.choiceMode,\n keyMode: normalizedQuestion.choicePrefix,\n choices,\n responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(normalizedQuestion, session) : undefined,\n language: normalizedQuestion.language,\n };\n\n const { role, mode } = env || {};\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.teacherInstructions = null;\n }\n\n return out;\n}\n\nexport const getScore = (config, session) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n const selectedChoices = session.value || [];\n const correctChoices = (config.choices || []).filter((ch) => ch.correct);\n\n let score = selectedChoices.reduce(\n (acc, selectedChoice) => acc + (correctChoices.find((ch) => ch.value === selectedChoice) ? 1 : 0),\n 0,\n );\n\n if (correctChoices.length < selectedChoices.length) {\n score -= selectedChoices.length - correctChoices.length;\n\n if (score < 0) {\n score = 0;\n }\n }\n\n const str = correctChoices.length ? score / correctChoices.length : 0;\n\n return parseFloat(str.toFixed(2));\n};\n\n/**\n *\n * The score is partial by default for checkbox mode, allOrNothing for radio mode.\n * To disable partial scoring for checkbox mode you either set model.partialScoring = false or env.partialScoring = false. the value in `env` will\n * override the value in `model`.\n * @param {Object} model - the main model\n * @param {*} session\n * @param {Object} env\n */\nexport function outcome(model, session, env) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const partialScoringEnabled = partialScoring.enabled(model, env) && model.choiceMode !== 'radio';\n const score = getScore(model, session);\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0, empty: false });\n }\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { choices } = question || { choices: [] };\n\n resolve({\n id: '1',\n value: choices.filter((c) => c.correct).map((c) => c.value),\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img and iframe\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { choices } = model;\n const { minAnswerChoices = 2, maxAnswerChoices } = config;\n const reversedChoices = [...(choices || [])].reverse();\n const choicesErrors = {};\n const rationaleErrors = {};\n const errors = {};\n\n ['teacherInstructions', 'prompt'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n let hasCorrectResponse = false;\n\n reversedChoices.forEach((choice, index) => {\n const { correct, value, label, rationale } = choice;\n\n if (correct) {\n hasCorrectResponse = true;\n }\n\n if (!getContent(label)) {\n choicesErrors[value] = 'Content should not be empty.';\n } else {\n const identicalAnswer = reversedChoices.slice(index + 1).some((c) => c.label === label);\n\n if (identicalAnswer) {\n choicesErrors[value] = 'Content should be unique.';\n }\n }\n\n if (config.rationale?.required && !getContent(rationale)) {\n rationaleErrors[value] = 'This field is required.';\n }\n });\n\n const nbOfChoices = (choices || []).length;\n\n if (nbOfChoices < minAnswerChoices) {\n errors.answerChoices = `There should be at least ${minAnswerChoices} choices defined.`;\n } else if (nbOfChoices > maxAnswerChoices) {\n errors.answerChoices = `No more than ${maxAnswerChoices} choices should be defined.`;\n }\n\n if (!hasCorrectResponse) {\n errors.correctResponse = 'No correct response defined.';\n }\n\n if (!isEmpty(choicesErrors)) {\n errors.choices = choicesErrors;\n }\n\n if (!isEmpty(rationaleErrors)) {\n errors.rationale = rationaleErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["prepareChoice","model","env","defaultFeedback","choice","role","mode","out","label","value","accessibilityLabelsEnabled","accessibility","textContent","rationale","rationaleEnabled","correct","feedbackEnabled","feedbackType","feedback","type","createDefaultModel","Promise","resolve","defaults","normalize","question","verticalMode","choicesLayout","questionProps","session","updateSession","normalizedQuestion","Object","assign","incorrect","choices","map","lockChoiceOrder","disabled","prompt","promptEnabled","gridColumns","choiceMode","keyMode","choicePrefix","responseCorrect","undefined","language","extraCSSRules","teacherInstructions","teacherInstructionsEnabled","getScore","config","selectedChoices","correctChoices","filter","ch","score","reduce","acc","selectedChoice","find","length","str","parseFloat","toFixed","outcome","empty","partialScoringEnabled","partialScoring","enabled","createCorrectResponseSession","id","c","getInnerText","html","replaceAll","getContent","replace","validate","minAnswerChoices","maxAnswerChoices","reversedChoices","reverse","choicesErrors","rationaleErrors","errors","forEach","field","required","hasCorrectResponse","index","identicalAnswer","slice","some","nbOfChoices","answerChoices","correctResponse"],"mappings":"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","sourcesContent":["/* eslint-disable no-console */\nimport isEmpty from 'lodash/isEmpty';\nimport { isResponseCorrect, parseHTML } from './utils';\nimport defaults from './defaults';\nimport { lockChoices, partialScoring, getShuffledChoices } from '@pie-lib/pie-toolbox/controller-utils';\n\nconst prepareChoice = (model, env, defaultFeedback) => (choice) => {\n const { role, mode } = env || {};\n const out = {\n label: choice.label,\n value: choice.value,\n };\n\n if (model.accessibilityLabelsEnabled) {\n out.accessibility = parseHTML(choice.accessibility).textContent || choice.value;\n }\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n out.rationale = model.rationaleEnabled ? choice.rationale : null;\n } else {\n out.rationale = null;\n }\n\n if (mode === 'evaluate') {\n out.correct = !!choice.correct;\n\n if (model.feedbackEnabled) {\n const feedbackType = (choice.feedback && choice.feedback.type) || 'none';\n\n if (feedbackType === 'default') {\n out.feedback = defaultFeedback[choice.correct ? 'correct' : 'incorrect'];\n } else if (feedbackType === 'custom') {\n out.feedback = choice.feedback.value;\n }\n }\n }\n\n return out;\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => resolve({ ...defaults, ...model }));\n}\n\nexport const normalize = (question) => {\n const { verticalMode, choicesLayout, ...questionProps } = question || {};\n\n return {\n ...defaults,\n ...questionProps,\n // This is used for offering support for old models which have the property verticalMode\n // Same thing is set in authoring : packages/multiple-choice/configure/src/index.jsx - createDefaultModel\n choicesLayout: choicesLayout || (verticalMode === false && 'horizontal') || defaults.choicesLayout,\n };\n};\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport async function model(question, session, env, updateSession) {\n const normalizedQuestion = normalize(question);\n\n const defaultFeedback = Object.assign(\n { correct: 'Correct', incorrect: 'Incorrect' },\n normalizedQuestion.defaultFeedback,\n );\n\n let choices = (normalizedQuestion.choices || []).map(prepareChoice(normalizedQuestion, env, defaultFeedback));\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'value');\n }\n\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n choicesLayout: normalizedQuestion.choicesLayout,\n gridColumns: normalizedQuestion.gridColumns,\n choiceMode: normalizedQuestion.choiceMode,\n keyMode: normalizedQuestion.choicePrefix,\n choices,\n responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(normalizedQuestion, session) : undefined,\n language: normalizedQuestion.language,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n const { role, mode } = env || {};\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.teacherInstructions = null;\n }\n\n return out;\n}\n\nexport const getScore = (config, session) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n const selectedChoices = session.value || [];\n const correctChoices = (config.choices || []).filter((ch) => ch.correct);\n\n let score = selectedChoices.reduce(\n (acc, selectedChoice) => acc + (correctChoices.find((ch) => ch.value === selectedChoice) ? 1 : 0),\n 0,\n );\n\n if (correctChoices.length < selectedChoices.length) {\n score -= selectedChoices.length - correctChoices.length;\n\n if (score < 0) {\n score = 0;\n }\n }\n\n const str = correctChoices.length ? score / correctChoices.length : 0;\n\n return parseFloat(str.toFixed(2));\n};\n\n/**\n *\n * The score is partial by default for checkbox mode, allOrNothing for radio mode.\n * To disable partial scoring for checkbox mode you either set model.partialScoring = false or env.partialScoring = false. the value in `env` will\n * override the value in `model`.\n * @param {Object} model - the main model\n * @param {*} session\n * @param {Object} env\n */\nexport function outcome(model, session, env) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const partialScoringEnabled = partialScoring.enabled(model, env) && model.choiceMode !== 'radio';\n const score = getScore(model, session);\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0, empty: false });\n }\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { choices } = question || { choices: [] };\n\n resolve({\n id: '1',\n value: choices.filter((c) => c.correct).map((c) => c.value),\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img and iframe\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { choices } = model;\n const { minAnswerChoices = 2, maxAnswerChoices } = config;\n const reversedChoices = [...(choices || [])].reverse();\n const choicesErrors = {};\n const rationaleErrors = {};\n const errors = {};\n\n ['teacherInstructions', 'prompt'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n let hasCorrectResponse = false;\n\n reversedChoices.forEach((choice, index) => {\n const { correct, value, label, rationale } = choice;\n\n if (correct) {\n hasCorrectResponse = true;\n }\n\n if (!getContent(label)) {\n choicesErrors[value] = 'Content should not be empty.';\n } else {\n const identicalAnswer = reversedChoices.slice(index + 1).some((c) => c.label === label);\n\n if (identicalAnswer) {\n choicesErrors[value] = 'Content should be unique.';\n }\n }\n\n if (config.rationale?.required && !getContent(rationale)) {\n rationaleErrors[value] = 'This field is required.';\n }\n });\n\n const nbOfChoices = (choices || []).length;\n\n if (nbOfChoices < minAnswerChoices) {\n errors.answerChoices = `There should be at least ${minAnswerChoices} choices defined.`;\n } else if (nbOfChoices > maxAnswerChoices) {\n errors.answerChoices = `No more than ${maxAnswerChoices} choices should be defined.`;\n }\n\n if (!hasCorrectResponse) {\n errors.correctResponse = 'No correct response defined.';\n }\n\n if (!isEmpty(choicesErrors)) {\n errors.choices = choicesErrors;\n }\n\n if (!isEmpty(rationaleErrors)) {\n errors.rationale = rationaleErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/package.json
CHANGED
package/docs/demo/generate.js
CHANGED
|
@@ -46,7 +46,19 @@ exports.model = (id, element) => ({
|
|
|
46
46
|
accessibility: 'finland',
|
|
47
47
|
},
|
|
48
48
|
],
|
|
49
|
-
|
|
49
|
+
extraCSSRules: {
|
|
50
|
+
names: ['red', 'blue'],
|
|
51
|
+
rules: `
|
|
52
|
+
.red {
|
|
53
|
+
color: red !important;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.blue {
|
|
57
|
+
color: blue !important;
|
|
58
|
+
}
|
|
59
|
+
`
|
|
60
|
+
},
|
|
61
|
+
prompt: '',
|
|
50
62
|
promptEnabled: true,
|
|
51
63
|
toolbarEditorPosition: 'bottom',
|
|
52
64
|
rubricEnabled: false,
|
package/lib/main.js
CHANGED
|
@@ -56,9 +56,12 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
56
56
|
model = _this$props.model,
|
|
57
57
|
onChoiceChanged = _this$props.onChoiceChanged,
|
|
58
58
|
session = _this$props.session,
|
|
59
|
-
onShowCorrectToggle = _this$props.onShowCorrectToggle;
|
|
59
|
+
onShowCorrectToggle = _this$props.onShowCorrectToggle;
|
|
60
|
+
var extraCSSRules = model.extraCSSRules; // model.partLabel is a property used for ebsr
|
|
60
61
|
|
|
61
|
-
return /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewLayout,
|
|
62
|
+
return /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewLayout, {
|
|
63
|
+
extraCSSRules: extraCSSRules
|
|
64
|
+
}, /*#__PURE__*/_react["default"].createElement(_multipleChoice["default"], (0, _extends2["default"])({}, model, {
|
|
62
65
|
session: session,
|
|
63
66
|
onChoiceChanged: onChoiceChanged,
|
|
64
67
|
onShowCorrectToggle: onShowCorrectToggle
|
|
@@ -73,7 +76,11 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
73
76
|
session: _propTypes["default"].object,
|
|
74
77
|
onChoiceChanged: _propTypes["default"].func,
|
|
75
78
|
classes: _propTypes["default"].object.isRequired,
|
|
76
|
-
onShowCorrectToggle: _propTypes["default"].func
|
|
79
|
+
onShowCorrectToggle: _propTypes["default"].func,
|
|
80
|
+
extraCSSRules: _propTypes["default"].shape({
|
|
81
|
+
names: _propTypes["default"].arrayOf(_propTypes["default"].string),
|
|
82
|
+
rules: _propTypes["default"].string
|
|
83
|
+
})
|
|
77
84
|
});
|
|
78
85
|
(0, _defineProperty2["default"])(Main, "defaultProps", {
|
|
79
86
|
model: {},
|
package/lib/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/main.jsx"],"names":["styles","Main","props","model","onChoiceChanged","session","onShowCorrectToggle","React","Component","PropTypes","object","func","classes","isRequired","Styled","name","theme","typography","useNextVariants","Root"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;;;;;AAEA,IAAMA,MAAM,GAAG,SAATA,MAAS;AAAA,SAAO,EAAP;AAAA,CAAf;;IAEMC,I;;;;;
|
|
1
|
+
{"version":3,"sources":["../src/main.jsx"],"names":["styles","Main","props","model","onChoiceChanged","session","onShowCorrectToggle","extraCSSRules","React","Component","PropTypes","object","func","classes","isRequired","shape","names","arrayOf","string","rules","Styled","name","theme","typography","useNextVariants","Root"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AACA;;;;;;AAEA,IAAMA,MAAM,GAAG,SAATA,MAAS;AAAA,SAAO,EAAP;AAAA,CAAf;;IAEMC,I;;;;;AAiBJ,gBAAYC,KAAZ,EAAmB;AAAA;AAAA,6BACXA,KADW;AAElB;;;;WAED,kBAAS;AACP,wBAAiE,KAAKA,KAAtE;AAAA,UAAQC,KAAR,eAAQA,KAAR;AAAA,UAAeC,eAAf,eAAeA,eAAf;AAAA,UAAgCC,OAAhC,eAAgCA,OAAhC;AAAA,UAAyCC,mBAAzC,eAAyCA,mBAAzC;AACA,UAAQC,aAAR,GAA0BJ,KAA1B,CAAQI,aAAR,CAFO,CAIP;;AACA,0BACE,gCAAC,uBAAD;AAAe,QAAA,aAAa,EAAEA;AAA9B,sBACE,gCAAC,0BAAD,gCACMJ,KADN;AAEE,QAAA,OAAO,EAAEE,OAFX;AAGE,QAAA,eAAe,EAAED,eAHnB;AAIE,QAAA,mBAAmB,EAAEE;AAJvB,SADF,CADF;AAUD;;;EApCgBE,kBAAMC,S;;iCAAnBR,I,eACe;AACjBE,EAAAA,KAAK,EAAEO,sBAAUC,MADA;AAEjBN,EAAAA,OAAO,EAAEK,sBAAUC,MAFF;AAGjBP,EAAAA,eAAe,EAAEM,sBAAUE,IAHV;AAIjBC,EAAAA,OAAO,EAAEH,sBAAUC,MAAV,CAAiBG,UAJT;AAKjBR,EAAAA,mBAAmB,EAAEI,sBAAUE,IALd;AAMjBL,EAAAA,aAAa,EAAEG,sBAAUK,KAAV,CAAgB;AAC7BC,IAAAA,KAAK,EAAEN,sBAAUO,OAAV,CAAkBP,sBAAUQ,MAA5B,CADsB;AAE7BC,IAAAA,KAAK,EAAET,sBAAUQ;AAFY,GAAhB;AANE,C;iCADfjB,I,kBAakB;AACpBE,EAAAA,KAAK,EAAE,EADa;AAEpBE,EAAAA,OAAO,EAAE;AAFW,C;AA0BxB,IAAMe,MAAM,GAAG,wBAAWpB,MAAX,EAAmB;AAAEqB,EAAAA,IAAI,EAAE;AAAR,CAAnB,EAAqCpB,IAArC,CAAf;AAEA,IAAMqB,KAAK,GAAG,4BAAe;AAC3BC,EAAAA,UAAU,EAAE;AACVC,IAAAA,eAAe,EAAE;AADP;AADe,CAAf,CAAd;;AAMA,IAAMC,IAAI,GAAG,SAAPA,IAAO,CAACvB,KAAD;AAAA,sBACX,gCAAC,wBAAD;AAAkB,IAAA,KAAK,EAAEoB;AAAzB,kBACE,gCAAC,MAAD,EAAYpB,KAAZ,CADF,CADW;AAAA,CAAb;;eAMeuB,I","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { createMuiTheme, MuiThemeProvider } from '@material-ui/core/styles';\nimport { PreviewLayout } from '@pie-lib/pie-toolbox/render-ui';\nimport MultipleChoice from './multiple-choice';\n\nconst styles = () => ({});\n\nclass Main extends React.Component {\n static propTypes = {\n model: PropTypes.object,\n session: PropTypes.object,\n onChoiceChanged: PropTypes.func,\n classes: PropTypes.object.isRequired,\n onShowCorrectToggle: PropTypes.func,\n extraCSSRules: PropTypes.shape({\n names: PropTypes.arrayOf(PropTypes.string),\n rules: PropTypes.string,\n }),\n };\n\n static defaultProps = {\n model: {},\n session: {},\n };\n constructor(props) {\n super(props);\n }\n\n render() {\n const { model, onChoiceChanged, session, onShowCorrectToggle } = this.props;\n const { extraCSSRules } = model;\n\n // model.partLabel is a property used for ebsr\n return (\n <PreviewLayout extraCSSRules={extraCSSRules}>\n <MultipleChoice\n {...model}\n session={session}\n onChoiceChanged={onChoiceChanged}\n onShowCorrectToggle={onShowCorrectToggle}\n />\n </PreviewLayout>\n );\n }\n}\n\nconst Styled = withStyles(styles, { name: 'Main' })(Main);\n\nconst theme = createMuiTheme({\n typography: {\n useNextVariants: true,\n },\n});\n\nconst Root = (props) => (\n <MuiThemeProvider theme={theme}>\n <Styled {...props} />\n </MuiThemeProvider>\n);\n\nexport default Root;\n"],"file":"main.js"}
|
package/module/configure.js
CHANGED
|
@@ -10267,7 +10267,7 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10267
10267
|
const {classes, model, configuration, onPromptChanged, onChoiceChanged, onRemoveChoice, onAddChoice, imageSupport, uploadSoundSupport, onChangeModel, onConfigurationChanged, onTeacherInstructionsChanged} = props;
|
|
10268
10268
|
const {addChoiceButton = {}, contentDimensions = {}, feedback = {}, deleteChoice = {}, choiceMode = {}, choicePrefix = {}, partialScoring = {}, lockChoiceOrder = {}, teacherInstructions = {}, studentInstructions = {}, rationale = {}, accessibility = {}, scoringType = {}, sequentialChoiceLabels = {}, settingsPanelDisabled, choicesLayout, spellCheck = {}, gridColumns, maxImageWidth = {}, maxImageHeight = {}, prompt = {}, withRubric = {}, mathMlOptions = {}, language = {}, languageChoices = {}} = configuration || ({});
|
|
10269
10269
|
let {maxAnswerChoices} = configuration || ({});
|
|
10270
|
-
const {limitChoicesNumber, teacherInstructionsEnabled, rationaleEnabled, accessibilityLabelsEnabled, feedbackEnabled, promptEnabled, spellCheckEnabled, choices, errors, toolbarEditorPosition} = model || ({});
|
|
10270
|
+
const {limitChoicesNumber, teacherInstructionsEnabled, rationaleEnabled, accessibilityLabelsEnabled, feedbackEnabled, promptEnabled, spellCheckEnabled, choices, errors, toolbarEditorPosition, extraCSSRules} = model || ({});
|
|
10271
10271
|
const {answerChoices: answerChoicesError, choices: choicesErrors, correctResponse: correctResponseError, prompt: promptError, rationale: rationaleErrors, teacherInstructions: teacherInstructionsError} = errors || ({});
|
|
10272
10272
|
const nrOfColumnsAvailable = _optionalChain$1([choices, 'optionalAccess', _2 => _2.length]) ? Array.from({
|
|
10273
10273
|
length: choices.length
|
|
@@ -10312,6 +10312,7 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10312
10312
|
return React$1.createElement(layout.ConfigLayout, {
|
|
10313
10313
|
dimensions: contentDimensions,
|
|
10314
10314
|
hideSettings: settingsPanelDisabled,
|
|
10315
|
+
extraCSSRules: extraCSSRules,
|
|
10315
10316
|
settings: React$1.createElement(Panel, {
|
|
10316
10317
|
model: model,
|
|
10317
10318
|
onChangeModel: onChangeModel,
|
|
@@ -10324,13 +10325,13 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10324
10325
|
__self: undefined,
|
|
10325
10326
|
__source: {
|
|
10326
10327
|
fileName: _jsxFileName,
|
|
10327
|
-
lineNumber:
|
|
10328
|
+
lineNumber: 213
|
|
10328
10329
|
}
|
|
10329
10330
|
}),
|
|
10330
10331
|
__self: undefined,
|
|
10331
10332
|
__source: {
|
|
10332
10333
|
fileName: _jsxFileName,
|
|
10333
|
-
lineNumber:
|
|
10334
|
+
lineNumber: 208
|
|
10334
10335
|
}
|
|
10335
10336
|
}, teacherInstructionsEnabled && React$1.createElement(InputContainer, {
|
|
10336
10337
|
label: teacherInstructions.label,
|
|
@@ -10338,7 +10339,7 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10338
10339
|
__self: undefined,
|
|
10339
10340
|
__source: {
|
|
10340
10341
|
fileName: _jsxFileName,
|
|
10341
|
-
lineNumber:
|
|
10342
|
+
lineNumber: 226
|
|
10342
10343
|
}
|
|
10343
10344
|
}, React$1.createElement(EditableHtml, {
|
|
10344
10345
|
className: classes.prompt,
|
|
@@ -10362,14 +10363,14 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10362
10363
|
__self: undefined,
|
|
10363
10364
|
__source: {
|
|
10364
10365
|
fileName: _jsxFileName,
|
|
10365
|
-
lineNumber:
|
|
10366
|
+
lineNumber: 227
|
|
10366
10367
|
}
|
|
10367
10368
|
}), teacherInstructionsError && React$1.createElement('div', {
|
|
10368
10369
|
className: classes.errorText,
|
|
10369
10370
|
__self: undefined,
|
|
10370
10371
|
__source: {
|
|
10371
10372
|
fileName: _jsxFileName,
|
|
10372
|
-
lineNumber:
|
|
10373
|
+
lineNumber: 243
|
|
10373
10374
|
}
|
|
10374
10375
|
}, teacherInstructionsError)), promptEnabled && React$1.createElement(InputContainer, {
|
|
10375
10376
|
label: prompt.label,
|
|
@@ -10377,7 +10378,7 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10377
10378
|
__self: undefined,
|
|
10378
10379
|
__source: {
|
|
10379
10380
|
fileName: _jsxFileName,
|
|
10380
|
-
lineNumber:
|
|
10381
|
+
lineNumber: 248
|
|
10381
10382
|
}
|
|
10382
10383
|
}, React$1.createElement(EditableHtml, {
|
|
10383
10384
|
className: classes.prompt,
|
|
@@ -10402,21 +10403,21 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10402
10403
|
__self: undefined,
|
|
10403
10404
|
__source: {
|
|
10404
10405
|
fileName: _jsxFileName,
|
|
10405
|
-
lineNumber:
|
|
10406
|
+
lineNumber: 249
|
|
10406
10407
|
}
|
|
10407
10408
|
}), promptError && React$1.createElement('div', {
|
|
10408
10409
|
className: classes.errorText,
|
|
10409
10410
|
__self: undefined,
|
|
10410
10411
|
__source: {
|
|
10411
10412
|
fileName: _jsxFileName,
|
|
10412
|
-
lineNumber:
|
|
10413
|
+
lineNumber: 266
|
|
10413
10414
|
}
|
|
10414
10415
|
}, promptError)), React$1.createElement('div', {
|
|
10415
10416
|
className: classes.flexContainer,
|
|
10416
10417
|
__self: undefined,
|
|
10417
10418
|
__source: {
|
|
10418
10419
|
fileName: _jsxFileName,
|
|
10419
|
-
lineNumber:
|
|
10420
|
+
lineNumber: 270
|
|
10420
10421
|
}
|
|
10421
10422
|
}, React$1.createElement(Typography, {
|
|
10422
10423
|
className: classes.titleText,
|
|
@@ -10424,7 +10425,7 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10424
10425
|
__self: undefined,
|
|
10425
10426
|
__source: {
|
|
10426
10427
|
fileName: _jsxFileName,
|
|
10427
|
-
lineNumber:
|
|
10428
|
+
lineNumber: 271
|
|
10428
10429
|
}
|
|
10429
10430
|
}, "Choices"), React$1.createElement(Tooltip, {
|
|
10430
10431
|
classes: {
|
|
@@ -10437,7 +10438,7 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10437
10438
|
__self: undefined,
|
|
10438
10439
|
__source: {
|
|
10439
10440
|
fileName: _jsxFileName,
|
|
10440
|
-
lineNumber:
|
|
10441
|
+
lineNumber: 272
|
|
10441
10442
|
}
|
|
10442
10443
|
}, React$1.createElement(default_1, {
|
|
10443
10444
|
fontSize: 'small',
|
|
@@ -10445,7 +10446,7 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10445
10446
|
__self: undefined,
|
|
10446
10447
|
__source: {
|
|
10447
10448
|
fileName: _jsxFileName,
|
|
10448
|
-
lineNumber:
|
|
10449
|
+
lineNumber: 279
|
|
10449
10450
|
}
|
|
10450
10451
|
}))), choices.map((choice, index) => React$1.createElement('div', {
|
|
10451
10452
|
key: `choice-${index}`,
|
|
@@ -10453,7 +10454,7 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10453
10454
|
__self: undefined,
|
|
10454
10455
|
__source: {
|
|
10455
10456
|
fileName: _jsxFileName,
|
|
10456
|
-
lineNumber:
|
|
10457
|
+
lineNumber: 284
|
|
10457
10458
|
}
|
|
10458
10459
|
}, React$1.createElement(ChoiceConfiguration, {
|
|
10459
10460
|
key: index,
|
|
@@ -10482,7 +10483,7 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10482
10483
|
__self: undefined,
|
|
10483
10484
|
__source: {
|
|
10484
10485
|
fileName: _jsxFileName,
|
|
10485
|
-
lineNumber:
|
|
10486
|
+
lineNumber: 285
|
|
10486
10487
|
}
|
|
10487
10488
|
}), rationaleEnabled && React$1.createElement(InputContainer, {
|
|
10488
10489
|
key: `rationale-${index}`,
|
|
@@ -10491,7 +10492,7 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10491
10492
|
__self: undefined,
|
|
10492
10493
|
__source: {
|
|
10493
10494
|
fileName: _jsxFileName,
|
|
10494
|
-
lineNumber:
|
|
10495
|
+
lineNumber: 312
|
|
10495
10496
|
}
|
|
10496
10497
|
}, React$1.createElement(EditableHtml, {
|
|
10497
10498
|
className: classes.rationale,
|
|
@@ -10517,14 +10518,14 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10517
10518
|
__self: undefined,
|
|
10518
10519
|
__source: {
|
|
10519
10520
|
fileName: _jsxFileName,
|
|
10520
|
-
lineNumber:
|
|
10521
|
+
lineNumber: 313
|
|
10521
10522
|
}
|
|
10522
10523
|
}), _optionalChain$1([rationaleErrors, 'optionalAccess', _16 => _16[choice.value]]) && React$1.createElement('div', {
|
|
10523
10524
|
className: classes.errorText,
|
|
10524
10525
|
__self: undefined,
|
|
10525
10526
|
__source: {
|
|
10526
10527
|
fileName: _jsxFileName,
|
|
10527
|
-
lineNumber:
|
|
10528
|
+
lineNumber: 329
|
|
10528
10529
|
}
|
|
10529
10530
|
}, _optionalChain$1([rationaleErrors, 'optionalAccess', _17 => _17[choice.value]]))), accessibilityLabelsEnabled && React$1.createElement(InputContainer, {
|
|
10530
10531
|
key: `accessibility-${index}`,
|
|
@@ -10533,7 +10534,7 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10533
10534
|
__self: undefined,
|
|
10534
10535
|
__source: {
|
|
10535
10536
|
fileName: _jsxFileName,
|
|
10536
|
-
lineNumber:
|
|
10537
|
+
lineNumber: 335
|
|
10537
10538
|
}
|
|
10538
10539
|
}, React$1.createElement(EditableHtml, {
|
|
10539
10540
|
className: classes.accessibility,
|
|
@@ -10557,21 +10558,21 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10557
10558
|
__self: undefined,
|
|
10558
10559
|
__source: {
|
|
10559
10560
|
fileName: _jsxFileName,
|
|
10560
|
-
lineNumber:
|
|
10561
|
+
lineNumber: 340
|
|
10561
10562
|
}
|
|
10562
10563
|
})))), correctResponseError && React$1.createElement('div', {
|
|
10563
10564
|
className: classes.errorText,
|
|
10564
10565
|
__self: undefined,
|
|
10565
10566
|
__source: {
|
|
10566
10567
|
fileName: _jsxFileName,
|
|
10567
|
-
lineNumber:
|
|
10568
|
+
lineNumber: 358
|
|
10568
10569
|
}
|
|
10569
10570
|
}, correctResponseError), answerChoicesError && React$1.createElement('div', {
|
|
10570
10571
|
className: classes.errorText,
|
|
10571
10572
|
__self: undefined,
|
|
10572
10573
|
__source: {
|
|
10573
10574
|
fileName: _jsxFileName,
|
|
10574
|
-
lineNumber:
|
|
10575
|
+
lineNumber: 359
|
|
10575
10576
|
}
|
|
10576
10577
|
}, answerChoicesError), addChoiceButton.settings && React$1.createElement(Tooltip, {
|
|
10577
10578
|
title: addChoiceButtonTooltip,
|
|
@@ -10581,7 +10582,7 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10581
10582
|
__self: undefined,
|
|
10582
10583
|
__source: {
|
|
10583
10584
|
fileName: _jsxFileName,
|
|
10584
|
-
lineNumber:
|
|
10585
|
+
lineNumber: 362
|
|
10585
10586
|
}
|
|
10586
10587
|
}, React$1.createElement(Button, {
|
|
10587
10588
|
classes: {
|
|
@@ -10594,7 +10595,7 @@ const Design = styles$8.withStyles(styles)(props => {
|
|
|
10594
10595
|
__self: undefined,
|
|
10595
10596
|
__source: {
|
|
10596
10597
|
fileName: _jsxFileName,
|
|
10597
|
-
lineNumber:
|
|
10598
|
+
lineNumber: 363
|
|
10598
10599
|
}
|
|
10599
10600
|
}, addChoiceButton.label)));
|
|
10600
10601
|
});
|
|
@@ -10727,7 +10728,7 @@ class Main extends React$1.Component {
|
|
|
10727
10728
|
__self: this,
|
|
10728
10729
|
__source: {
|
|
10729
10730
|
fileName: _jsxFileName,
|
|
10730
|
-
lineNumber:
|
|
10731
|
+
lineNumber: 499
|
|
10731
10732
|
}
|
|
10732
10733
|
}, React$1.createElement(AlertDialog, {
|
|
10733
10734
|
open: showWarning,
|
|
@@ -10739,7 +10740,7 @@ class Main extends React$1.Component {
|
|
|
10739
10740
|
__self: this,
|
|
10740
10741
|
__source: {
|
|
10741
10742
|
fileName: _jsxFileName,
|
|
10742
|
-
lineNumber:
|
|
10743
|
+
lineNumber: 500
|
|
10743
10744
|
}
|
|
10744
10745
|
}), React$1.createElement(Design, {
|
|
10745
10746
|
...this.props,
|
|
@@ -10752,7 +10753,7 @@ class Main extends React$1.Component {
|
|
|
10752
10753
|
__self: this,
|
|
10753
10754
|
__source: {
|
|
10754
10755
|
fileName: _jsxFileName,
|
|
10755
|
-
lineNumber:
|
|
10756
|
+
lineNumber: 506
|
|
10756
10757
|
}
|
|
10757
10758
|
}));
|
|
10758
10759
|
}
|
package/module/controller.js
CHANGED
|
@@ -20708,6 +20708,7 @@ async function model(question, session, env, updateSession) {
|
|
|
20708
20708
|
choices,
|
|
20709
20709
|
responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(normalizedQuestion, session) : undefined,
|
|
20710
20710
|
language: normalizedQuestion.language,
|
|
20711
|
+
extraCSSRules: normalizedQuestion.extraCSSRules,
|
|
20711
20712
|
};
|
|
20712
20713
|
|
|
20713
20714
|
const { role, mode } = env || {};
|
package/module/demo.js
CHANGED
|
@@ -52,7 +52,19 @@ generate.model = (id, element) => ({
|
|
|
52
52
|
accessibility: 'finland',
|
|
53
53
|
},
|
|
54
54
|
],
|
|
55
|
-
|
|
55
|
+
extraCSSRules: {
|
|
56
|
+
names: ['red', 'blue'],
|
|
57
|
+
rules: `
|
|
58
|
+
.red {
|
|
59
|
+
color: red !important;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.blue {
|
|
63
|
+
color: blue !important;
|
|
64
|
+
}
|
|
65
|
+
`
|
|
66
|
+
},
|
|
67
|
+
prompt: '',
|
|
56
68
|
promptEnabled: true,
|
|
57
69
|
toolbarEditorPosition: 'bottom',
|
|
58
70
|
rubricEnabled: false,
|
package/module/element.js
CHANGED
|
@@ -9611,7 +9611,11 @@ class Main extends React$1.Component {
|
|
|
9611
9611
|
session: PropTypes.object,
|
|
9612
9612
|
onChoiceChanged: PropTypes.func,
|
|
9613
9613
|
classes: PropTypes.object.isRequired,
|
|
9614
|
-
onShowCorrectToggle: PropTypes.func
|
|
9614
|
+
onShowCorrectToggle: PropTypes.func,
|
|
9615
|
+
extraCSSRules: PropTypes.shape({
|
|
9616
|
+
names: PropTypes.arrayOf(PropTypes.string),
|
|
9617
|
+
rules: PropTypes.string
|
|
9618
|
+
})
|
|
9615
9619
|
};
|
|
9616
9620
|
}
|
|
9617
9621
|
static __initStatic2() {
|
|
@@ -9625,11 +9629,13 @@ class Main extends React$1.Component {
|
|
|
9625
9629
|
}
|
|
9626
9630
|
render() {
|
|
9627
9631
|
const {model, onChoiceChanged, session, onShowCorrectToggle} = this.props;
|
|
9632
|
+
const {extraCSSRules} = model;
|
|
9628
9633
|
return React$1.createElement(PreviewLayout, {
|
|
9634
|
+
extraCSSRules: extraCSSRules,
|
|
9629
9635
|
__self: this,
|
|
9630
9636
|
__source: {
|
|
9631
9637
|
fileName: _jsxFileName,
|
|
9632
|
-
lineNumber:
|
|
9638
|
+
lineNumber: 37
|
|
9633
9639
|
}
|
|
9634
9640
|
}, React$1.createElement(MultipleChoice$2, {
|
|
9635
9641
|
...model,
|
|
@@ -9639,7 +9645,7 @@ class Main extends React$1.Component {
|
|
|
9639
9645
|
__self: this,
|
|
9640
9646
|
__source: {
|
|
9641
9647
|
fileName: _jsxFileName,
|
|
9642
|
-
lineNumber:
|
|
9648
|
+
lineNumber: 38
|
|
9643
9649
|
}
|
|
9644
9650
|
}));
|
|
9645
9651
|
}
|
|
@@ -9659,14 +9665,14 @@ const Root = props => React$1.createElement(styles$b.MuiThemeProvider, {
|
|
|
9659
9665
|
__self: undefined,
|
|
9660
9666
|
__source: {
|
|
9661
9667
|
fileName: _jsxFileName,
|
|
9662
|
-
lineNumber:
|
|
9668
|
+
lineNumber: 58
|
|
9663
9669
|
}
|
|
9664
9670
|
}, React$1.createElement(Styled, {
|
|
9665
9671
|
...props,
|
|
9666
9672
|
__self: undefined,
|
|
9667
9673
|
__source: {
|
|
9668
9674
|
fileName: _jsxFileName,
|
|
9669
|
-
lineNumber:
|
|
9675
|
+
lineNumber: 59
|
|
9670
9676
|
}
|
|
9671
9677
|
}));
|
|
9672
9678
|
const {concat: concat} = _dll_lodash;
|
package/module/print-demo.js
CHANGED
|
@@ -50,7 +50,19 @@ generate.model = (id, element) => ({
|
|
|
50
50
|
accessibility: 'finland',
|
|
51
51
|
},
|
|
52
52
|
],
|
|
53
|
-
|
|
53
|
+
extraCSSRules: {
|
|
54
|
+
names: ['red', 'blue'],
|
|
55
|
+
rules: `
|
|
56
|
+
.red {
|
|
57
|
+
color: red !important;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.blue {
|
|
61
|
+
color: blue !important;
|
|
62
|
+
}
|
|
63
|
+
`
|
|
64
|
+
},
|
|
65
|
+
prompt: '',
|
|
54
66
|
promptEnabled: true,
|
|
55
67
|
toolbarEditorPosition: 'bottom',
|
|
56
68
|
rubricEnabled: false,
|
package/module/print.js
CHANGED
|
@@ -9611,7 +9611,11 @@ class Main extends React$1.Component {
|
|
|
9611
9611
|
session: PropTypes.object,
|
|
9612
9612
|
onChoiceChanged: PropTypes.func,
|
|
9613
9613
|
classes: PropTypes.object.isRequired,
|
|
9614
|
-
onShowCorrectToggle: PropTypes.func
|
|
9614
|
+
onShowCorrectToggle: PropTypes.func,
|
|
9615
|
+
extraCSSRules: PropTypes.shape({
|
|
9616
|
+
names: PropTypes.arrayOf(PropTypes.string),
|
|
9617
|
+
rules: PropTypes.string
|
|
9618
|
+
})
|
|
9615
9619
|
};
|
|
9616
9620
|
}
|
|
9617
9621
|
static __initStatic2() {
|
|
@@ -9625,11 +9629,13 @@ class Main extends React$1.Component {
|
|
|
9625
9629
|
}
|
|
9626
9630
|
render() {
|
|
9627
9631
|
const {model, onChoiceChanged, session, onShowCorrectToggle} = this.props;
|
|
9632
|
+
const {extraCSSRules} = model;
|
|
9628
9633
|
return React$1.createElement(PreviewLayout, {
|
|
9634
|
+
extraCSSRules: extraCSSRules,
|
|
9629
9635
|
__self: this,
|
|
9630
9636
|
__source: {
|
|
9631
9637
|
fileName: _jsxFileName,
|
|
9632
|
-
lineNumber:
|
|
9638
|
+
lineNumber: 37
|
|
9633
9639
|
}
|
|
9634
9640
|
}, React$1.createElement(MultipleChoice$1, {
|
|
9635
9641
|
...model,
|
|
@@ -9639,7 +9645,7 @@ class Main extends React$1.Component {
|
|
|
9639
9645
|
__self: this,
|
|
9640
9646
|
__source: {
|
|
9641
9647
|
fileName: _jsxFileName,
|
|
9642
|
-
lineNumber:
|
|
9648
|
+
lineNumber: 38
|
|
9643
9649
|
}
|
|
9644
9650
|
}));
|
|
9645
9651
|
}
|
|
@@ -9659,14 +9665,14 @@ const Root = props => React$1.createElement(styles$b.MuiThemeProvider, {
|
|
|
9659
9665
|
__self: undefined,
|
|
9660
9666
|
__source: {
|
|
9661
9667
|
fileName: _jsxFileName,
|
|
9662
|
-
lineNumber:
|
|
9668
|
+
lineNumber: 58
|
|
9663
9669
|
}
|
|
9664
9670
|
}, React$1.createElement(Styled, {
|
|
9665
9671
|
...props,
|
|
9666
9672
|
__self: undefined,
|
|
9667
9673
|
__source: {
|
|
9668
9674
|
fileName: _jsxFileName,
|
|
9669
|
-
lineNumber:
|
|
9675
|
+
lineNumber: 59
|
|
9670
9676
|
}
|
|
9671
9677
|
}));
|
|
9672
9678
|
const React = _dll_react;
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/multiple-choice",
|
|
3
3
|
"repository": "pie-framework/pie-elements",
|
|
4
|
-
"version": "9.2.6-next.
|
|
4
|
+
"version": "9.2.6-next.25+56037c909",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"@material-ui/core": "^3.9.2",
|
|
10
|
-
"@pie-lib/pie-toolbox": "2.0
|
|
10
|
+
"@pie-lib/pie-toolbox": "2.1.0",
|
|
11
11
|
"classnames": "^2.2.5",
|
|
12
12
|
"debug": "^4.1.1",
|
|
13
13
|
"enzyme-to-json": "^3.3.3",
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"react-test-renderer": "^16.3.2",
|
|
19
19
|
"react-transition-group": "^2.3.1"
|
|
20
20
|
},
|
|
21
|
-
"gitHead": "
|
|
21
|
+
"gitHead": "56037c909c2777cf6baf16db9895db37345448dd",
|
|
22
22
|
"scripts": {
|
|
23
23
|
"postpublish": "../../scripts/postpublish"
|
|
24
24
|
},
|