@pie-element/ebsr 8.14.2 → 9.0.0
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/CHANGELOG.md +24 -0
- package/configure/CHANGELOG.md +24 -0
- package/configure/lib/main.js +1 -1
- package/configure/lib/main.js.map +1 -1
- package/configure/package.json +3 -3
- package/configure/src/__tests__/index.test.js +2 -2
- package/configure/src/main.jsx +1 -1
- package/controller/CHANGELOG.md +24 -0
- package/controller/lib/index.js +2 -2
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +2 -3
- package/controller/src/index.js +2 -2
- package/package.json +3 -3
- package/src/__tests__/index.test.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,30 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [9.0.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/ebsr@8.14.2...@pie-element/ebsr@9.0.0) (2023-11-07)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* update pie-lib version to fix imports for pie-lib/pie-toolbox/editable-html ([a90cbf6](https://github.com/pie-framework/pie-elements/commit/a90cbf6be81824e7266df23c2dc49b259337c1b6))
|
|
12
|
+
* update pie-lib/pie-toolbox version ([212cbfa](https://github.com/pie-framework/pie-elements/commit/212cbfad27b29f0b1b2a3706ba82f6fb59147001))
|
|
13
|
+
* update pie-lib/pie-toolbox version ([b791e10](https://github.com/pie-framework/pie-elements/commit/b791e10857928766e2d73c6aa80b3fb50fd1afac))
|
|
14
|
+
* update pie-lib/pie-toolbox version ([7f64f9f](https://github.com/pie-framework/pie-elements/commit/7f64f9f2b874fd08bd8f6f05c1c4292c34ac6338))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Code Refactoring
|
|
18
|
+
|
|
19
|
+
* replaced all pie-lib packages with the new pie-toolbox package that contains all of them. ([073d7e5](https://github.com/pie-framework/pie-elements/commit/073d7e5175f7a73069f09d2ceda799682acce494))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### BREAKING CHANGES
|
|
23
|
+
|
|
24
|
+
* using pie-lib/pie-toolbox now, instead of any other pie-lib package.
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
6
30
|
## [8.14.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/ebsr@8.14.1...@pie-element/ebsr@8.14.2) (2023-11-07)
|
|
7
31
|
|
|
8
32
|
**Note:** Version bump only for package @pie-element/ebsr
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,30 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [9.0.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/ebsr-configure@8.12.2...@pie-element/ebsr-configure@9.0.0) (2023-11-07)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* update pie-lib version to fix imports for pie-lib/pie-toolbox/editable-html ([a90cbf6](https://github.com/pie-framework/pie-elements/commit/a90cbf6be81824e7266df23c2dc49b259337c1b6))
|
|
12
|
+
* update pie-lib/pie-toolbox version ([212cbfa](https://github.com/pie-framework/pie-elements/commit/212cbfad27b29f0b1b2a3706ba82f6fb59147001))
|
|
13
|
+
* update pie-lib/pie-toolbox version ([b791e10](https://github.com/pie-framework/pie-elements/commit/b791e10857928766e2d73c6aa80b3fb50fd1afac))
|
|
14
|
+
* update pie-lib/pie-toolbox version ([7f64f9f](https://github.com/pie-framework/pie-elements/commit/7f64f9f2b874fd08bd8f6f05c1c4292c34ac6338))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Code Refactoring
|
|
18
|
+
|
|
19
|
+
* replaced all pie-lib packages with the new pie-toolbox package that contains all of them. ([073d7e5](https://github.com/pie-framework/pie-elements/commit/073d7e5175f7a73069f09d2ceda799682acce494))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### BREAKING CHANGES
|
|
23
|
+
|
|
24
|
+
* using pie-lib/pie-toolbox now, instead of any other pie-lib package.
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
6
30
|
## [8.12.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/ebsr-configure@8.12.1...@pie-element/ebsr-configure@8.12.2) (2023-11-07)
|
|
7
31
|
|
|
8
32
|
**Note:** Version bump only for package @pie-element/ebsr-configure
|
package/configure/lib/main.js
CHANGED
|
@@ -27,7 +27,7 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
27
27
|
|
|
28
28
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
29
29
|
|
|
30
|
-
var _configUi = require("@pie-lib/config-ui");
|
|
30
|
+
var _configUi = require("@pie-lib/pie-toolbox/config-ui");
|
|
31
31
|
|
|
32
32
|
var _styles = require("@material-ui/core/styles");
|
|
33
33
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/main.jsx"],"names":["Panel","settings","toggle","radio","dropdown","styles","theme","partLabel","paddingBottom","spacing","unit","divider","flex","height","Main","choices","correctFound","map","choice","correct","model","key","onModelChanged","props","partA","choiceMode","removeExtraChoices","partB","classes","configuration","onConfigurationChanged","partLabelType","modelPartA","modelPartB","contentDimensions","partialScoring","settingsPanelDisabled","scoringType","language","languageChoices","generalConfiguration","feedback","feedbackA","choiceModeA","choicePrefix","choicePrefixA","lockChoiceOrder","lockChoiceOrderA","prompt","promptA","teacherInstructions","teacherInstructionsA","studentInstructions","studentInstructionsA","choicesLayout","choicesLayoutA","gridColumns","gridColumnsA","rationale","rationaleA","spellCheck","spellCheckA","feedbackB","choiceModeB","choicePrefixB","lockChoiceOrderB","promptB","teacherInstructionsB","studentInstructionsB","choicesLayoutB","gridColumnsB","rationaleB","spellCheckB","type","typeIsNumber","firstPart","secondPart","nrOfColumnsAvailable","length","Array","from","_","i","panelSettings","partLabels","label","enabled","options","panelSettingsPartA","panelPropertiesPartA","panelSettingsPartB","panelPropertiesPartB","ref","_model","errors","React","Component","PropTypes","object","func","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { settings, layout } from '@pie-lib/config-ui';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst { Panel, toggle, radio, dropdown } = settings;\n\nconst styles = (theme) => ({\n partLabel: {\n paddingBottom: theme.spacing.unit * 2,\n },\n divider: {\n flex: 1,\n height: theme.spacing.unit * 2.5,\n },\n});\n\nexport class Main extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n configuration: PropTypes.object,\n model: PropTypes.object,\n onModelChanged: PropTypes.func,\n onConfigurationChanged: PropTypes.func,\n };\n\n removeExtraChoices = (choices) => {\n let correctFound = false;\n\n return (choices || []).map((choice) => {\n if (correctFound) {\n choice.correct = false;\n\n return choice;\n }\n\n if (choice.correct) {\n correctFound = true;\n }\n\n return choice;\n });\n };\n\n onModelChanged = (model, key) => {\n const { onModelChanged } = this.props;\n\n if (key === 'partA.choiceMode' && model.partA.choiceMode === 'radio') {\n model.partA.choices = this.removeExtraChoices(model.partA.choices);\n\n return onModelChanged(model, true);\n }\n\n if (key === 'partB.choiceMode' && model.partB.choiceMode === 'radio') {\n model.partB.choices = this.removeExtraChoices(model.partB.choices);\n\n return onModelChanged(model, true);\n }\n\n return onModelChanged(model);\n };\n\n render() {\n const { classes, model, configuration, onConfigurationChanged } = this.props;\n const { partLabelType, partA: modelPartA, partB: modelPartB } = model;\n const {\n contentDimensions = {},\n partA = {},\n partB = {},\n partialScoring = {},\n settingsPanelDisabled,\n scoringType = {},\n language = {},\n languageChoices = {},\n ...generalConfiguration\n } = configuration;\n const {\n feedback: feedbackA = {},\n choiceMode: choiceModeA = {},\n choicePrefix: choicePrefixA = {},\n lockChoiceOrder: lockChoiceOrderA = {},\n prompt: promptA = {},\n teacherInstructions: teacherInstructionsA = {},\n studentInstructions: studentInstructionsA = {},\n choicesLayout: choicesLayoutA = {},\n gridColumns: gridColumnsA = {},\n rationale: rationaleA = {},\n spellCheck: spellCheckA = {},\n } = partA || {};\n const {\n feedback: feedbackB = {},\n choiceMode: choiceModeB = {},\n choicePrefix: choicePrefixB = {},\n lockChoiceOrder: lockChoiceOrderB = {},\n prompt: promptB = {},\n teacherInstructions: teacherInstructionsB = {},\n studentInstructions: studentInstructionsB = {},\n choicesLayout: choicesLayoutB = {},\n gridColumns: gridColumnsB = {},\n rationale: rationaleB = {},\n spellCheck: spellCheckB = {},\n } = partB || {};\n\n const type = partLabelType || 'Numbers';\n const typeIsNumber = type === 'Numbers';\n const firstPart = `Part ${typeIsNumber ? '1' : 'A'}`;\n const secondPart = `Part ${typeIsNumber ? '2' : 'B'}`;\n const nrOfColumnsAvailable = {\n partA:\n modelPartA.choices && modelPartA.choices.length\n ? Array.from({ length: modelPartA.choices.length }, (_, i) => `${i + 1}`)\n : [],\n partB:\n modelPartB.choices && modelPartB.choices.length\n ? Array.from({ length: modelPartB.choices.length }, (_, i) => `${i + 1}`)\n : [],\n };\n\n const panelSettings = {\n partLabels: generalConfiguration.partLabels.settings && toggle(generalConfiguration.partLabels.label),\n partLabelType: model.partLabels && dropdown('', ['Numbers', 'Letters']),\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n scoringType: scoringType.settings && radio(scoringType.label, ['auto', 'rubric']),\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n };\n\n const panelSettingsPartA = {\n 'partA.choiceMode': choiceModeA.settings && radio(choiceModeA.label, ['checkbox', 'radio']),\n 'partA.choicePrefix': choicePrefixA.settings && radio(choicePrefixA.label, ['numbers', 'letters']),\n 'partA.lockChoiceOrder': lockChoiceOrderA.settings && toggle(lockChoiceOrderA.label),\n 'partA.choicesLayout':\n choicesLayoutA.settings && dropdown(choicesLayoutA.label, ['vertical', 'grid', 'horizontal']),\n 'partA.gridColumns':\n choicesLayoutA.settings &&\n modelPartA.choicesLayout === 'grid' &&\n nrOfColumnsAvailable.partA.length > 0 &&\n dropdown(gridColumnsA.label, nrOfColumnsAvailable.partA),\n };\n const panelPropertiesPartA = {\n 'partA.feedbackEnabled': feedbackA.settings && toggle(feedbackA.label),\n 'partA.promptEnabled': promptA.settings && toggle(promptA.label),\n 'partA.teacherInstructionsEnabled': teacherInstructionsA.settings && toggle(teacherInstructionsA.label),\n 'partA.studentInstructionsEnabled': studentInstructionsA.settings && toggle(studentInstructionsA.label),\n 'partA.rationaleEnabled': rationaleA.settings && toggle(rationaleA.label),\n 'partA.spellCheckEnabled': spellCheckA.settings && toggle(spellCheckA.label),\n };\n\n const panelSettingsPartB = {\n 'partB.choiceMode': choiceModeB.settings && radio(choiceModeB.label, ['checkbox', 'radio']),\n 'partB.choicePrefix': choicePrefixB.settings && radio(choicePrefixB.label, ['numbers', 'letters']),\n 'partB.lockChoiceOrder': lockChoiceOrderB.settings && toggle(lockChoiceOrderB.label),\n 'partB.choicesLayout':\n choicesLayoutB.settings && dropdown(choicesLayoutB.label, ['vertical', 'grid', 'horizontal']),\n 'partB.gridColumns':\n choicesLayoutB.settings &&\n modelPartB.choicesLayout === 'grid' &&\n nrOfColumnsAvailable.partB.length > 0 &&\n dropdown(gridColumnsB.label, nrOfColumnsAvailable.partB),\n };\n const panelPropertiesPartB = {\n 'partB.feedbackEnabled': feedbackB.settings && toggle(feedbackB.label),\n 'partB.promptEnabled': promptB.settings && toggle(promptB.label),\n 'partB.teacherInstructionsEnabled': teacherInstructionsB.settings && toggle(teacherInstructionsB.label),\n 'partB.studentInstructionsEnabled': studentInstructionsB.settings && toggle(studentInstructionsB.label),\n 'partB.rationaleEnabled': rationaleB.settings && toggle(rationaleB.label),\n 'partB.spellCheckEnabled': spellCheckB.settings && toggle(spellCheckB.label),\n };\n\n return (\n <layout.ConfigLayout\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n onChangeModel={this.onModelChanged}\n configuration={configuration}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n 'Settings for both': panelSettings,\n [`Settings ${firstPart}`]: panelSettingsPartA,\n [`Properties ${firstPart}`]: panelPropertiesPartA,\n [`Settings ${secondPart}`]: panelSettingsPartB,\n [`Properties ${secondPart}`]: panelPropertiesPartB,\n }}\n />\n }\n >\n {model.partLabels && <div className={classes.partLabel}>{firstPart}</div>}\n <ebsr-multiple-choice-configure\n id=\"A\"\n key=\"partA\"\n ref={(ref) => {\n if (ref) {\n // do not use destructuring to get model from props\n this.partA = ref;\n this.partA._model = {\n ...this.props.model.partA,\n errors: (this.props.model.errors && this.props.model.errors.partA) || {},\n };\n this.partA.configuration = {\n ...partA,\n ...generalConfiguration,\n };\n }\n }}\n />\n\n <div className={classes.divider} />\n\n {model.partLabels && <div className={classes.partLabel}>{secondPart}</div>}\n <ebsr-multiple-choice-configure\n id=\"B\"\n key=\"partB\"\n ref={(ref) => {\n if (ref) {\n // do not use destructuring to get model from props\n this.partB = ref;\n this.partB._model = {\n ...this.props.model.partB,\n errors: (this.props.model.errors && this.props.model.errors.partB) || {},\n };\n this.partB.configuration = {\n ...partB,\n ...generalConfiguration,\n };\n }\n }}\n />\n </layout.ConfigLayout>\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","styles","theme","partLabel","paddingBottom","spacing","unit","divider","flex","height","Main","choices","correctFound","map","choice","correct","model","key","onModelChanged","props","partA","choiceMode","removeExtraChoices","partB","classes","configuration","onConfigurationChanged","partLabelType","modelPartA","modelPartB","contentDimensions","partialScoring","settingsPanelDisabled","scoringType","language","languageChoices","generalConfiguration","feedback","feedbackA","choiceModeA","choicePrefix","choicePrefixA","lockChoiceOrder","lockChoiceOrderA","prompt","promptA","teacherInstructions","teacherInstructionsA","studentInstructions","studentInstructionsA","choicesLayout","choicesLayoutA","gridColumns","gridColumnsA","rationale","rationaleA","spellCheck","spellCheckA","feedbackB","choiceModeB","choicePrefixB","lockChoiceOrderB","promptB","teacherInstructionsB","studentInstructionsB","choicesLayoutB","gridColumnsB","rationaleB","spellCheckB","type","typeIsNumber","firstPart","secondPart","nrOfColumnsAvailable","length","Array","from","_","i","panelSettings","partLabels","label","enabled","options","panelSettingsPartA","panelPropertiesPartA","panelSettingsPartB","panelPropertiesPartB","ref","_model","errors","React","Component","PropTypes","object","func","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { settings, layout } from '@pie-lib/pie-toolbox/config-ui';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst { Panel, toggle, radio, dropdown } = settings;\n\nconst styles = (theme) => ({\n partLabel: {\n paddingBottom: theme.spacing.unit * 2,\n },\n divider: {\n flex: 1,\n height: theme.spacing.unit * 2.5,\n },\n});\n\nexport class Main extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n configuration: PropTypes.object,\n model: PropTypes.object,\n onModelChanged: PropTypes.func,\n onConfigurationChanged: PropTypes.func,\n };\n\n removeExtraChoices = (choices) => {\n let correctFound = false;\n\n return (choices || []).map((choice) => {\n if (correctFound) {\n choice.correct = false;\n\n return choice;\n }\n\n if (choice.correct) {\n correctFound = true;\n }\n\n return choice;\n });\n };\n\n onModelChanged = (model, key) => {\n const { onModelChanged } = this.props;\n\n if (key === 'partA.choiceMode' && model.partA.choiceMode === 'radio') {\n model.partA.choices = this.removeExtraChoices(model.partA.choices);\n\n return onModelChanged(model, true);\n }\n\n if (key === 'partB.choiceMode' && model.partB.choiceMode === 'radio') {\n model.partB.choices = this.removeExtraChoices(model.partB.choices);\n\n return onModelChanged(model, true);\n }\n\n return onModelChanged(model);\n };\n\n render() {\n const { classes, model, configuration, onConfigurationChanged } = this.props;\n const { partLabelType, partA: modelPartA, partB: modelPartB } = model;\n const {\n contentDimensions = {},\n partA = {},\n partB = {},\n partialScoring = {},\n settingsPanelDisabled,\n scoringType = {},\n language = {},\n languageChoices = {},\n ...generalConfiguration\n } = configuration;\n const {\n feedback: feedbackA = {},\n choiceMode: choiceModeA = {},\n choicePrefix: choicePrefixA = {},\n lockChoiceOrder: lockChoiceOrderA = {},\n prompt: promptA = {},\n teacherInstructions: teacherInstructionsA = {},\n studentInstructions: studentInstructionsA = {},\n choicesLayout: choicesLayoutA = {},\n gridColumns: gridColumnsA = {},\n rationale: rationaleA = {},\n spellCheck: spellCheckA = {},\n } = partA || {};\n const {\n feedback: feedbackB = {},\n choiceMode: choiceModeB = {},\n choicePrefix: choicePrefixB = {},\n lockChoiceOrder: lockChoiceOrderB = {},\n prompt: promptB = {},\n teacherInstructions: teacherInstructionsB = {},\n studentInstructions: studentInstructionsB = {},\n choicesLayout: choicesLayoutB = {},\n gridColumns: gridColumnsB = {},\n rationale: rationaleB = {},\n spellCheck: spellCheckB = {},\n } = partB || {};\n\n const type = partLabelType || 'Numbers';\n const typeIsNumber = type === 'Numbers';\n const firstPart = `Part ${typeIsNumber ? '1' : 'A'}`;\n const secondPart = `Part ${typeIsNumber ? '2' : 'B'}`;\n const nrOfColumnsAvailable = {\n partA:\n modelPartA.choices && modelPartA.choices.length\n ? Array.from({ length: modelPartA.choices.length }, (_, i) => `${i + 1}`)\n : [],\n partB:\n modelPartB.choices && modelPartB.choices.length\n ? Array.from({ length: modelPartB.choices.length }, (_, i) => `${i + 1}`)\n : [],\n };\n\n const panelSettings = {\n partLabels: generalConfiguration.partLabels.settings && toggle(generalConfiguration.partLabels.label),\n partLabelType: model.partLabels && dropdown('', ['Numbers', 'Letters']),\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n scoringType: scoringType.settings && radio(scoringType.label, ['auto', 'rubric']),\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n };\n\n const panelSettingsPartA = {\n 'partA.choiceMode': choiceModeA.settings && radio(choiceModeA.label, ['checkbox', 'radio']),\n 'partA.choicePrefix': choicePrefixA.settings && radio(choicePrefixA.label, ['numbers', 'letters']),\n 'partA.lockChoiceOrder': lockChoiceOrderA.settings && toggle(lockChoiceOrderA.label),\n 'partA.choicesLayout':\n choicesLayoutA.settings && dropdown(choicesLayoutA.label, ['vertical', 'grid', 'horizontal']),\n 'partA.gridColumns':\n choicesLayoutA.settings &&\n modelPartA.choicesLayout === 'grid' &&\n nrOfColumnsAvailable.partA.length > 0 &&\n dropdown(gridColumnsA.label, nrOfColumnsAvailable.partA),\n };\n const panelPropertiesPartA = {\n 'partA.feedbackEnabled': feedbackA.settings && toggle(feedbackA.label),\n 'partA.promptEnabled': promptA.settings && toggle(promptA.label),\n 'partA.teacherInstructionsEnabled': teacherInstructionsA.settings && toggle(teacherInstructionsA.label),\n 'partA.studentInstructionsEnabled': studentInstructionsA.settings && toggle(studentInstructionsA.label),\n 'partA.rationaleEnabled': rationaleA.settings && toggle(rationaleA.label),\n 'partA.spellCheckEnabled': spellCheckA.settings && toggle(spellCheckA.label),\n };\n\n const panelSettingsPartB = {\n 'partB.choiceMode': choiceModeB.settings && radio(choiceModeB.label, ['checkbox', 'radio']),\n 'partB.choicePrefix': choicePrefixB.settings && radio(choicePrefixB.label, ['numbers', 'letters']),\n 'partB.lockChoiceOrder': lockChoiceOrderB.settings && toggle(lockChoiceOrderB.label),\n 'partB.choicesLayout':\n choicesLayoutB.settings && dropdown(choicesLayoutB.label, ['vertical', 'grid', 'horizontal']),\n 'partB.gridColumns':\n choicesLayoutB.settings &&\n modelPartB.choicesLayout === 'grid' &&\n nrOfColumnsAvailable.partB.length > 0 &&\n dropdown(gridColumnsB.label, nrOfColumnsAvailable.partB),\n };\n const panelPropertiesPartB = {\n 'partB.feedbackEnabled': feedbackB.settings && toggle(feedbackB.label),\n 'partB.promptEnabled': promptB.settings && toggle(promptB.label),\n 'partB.teacherInstructionsEnabled': teacherInstructionsB.settings && toggle(teacherInstructionsB.label),\n 'partB.studentInstructionsEnabled': studentInstructionsB.settings && toggle(studentInstructionsB.label),\n 'partB.rationaleEnabled': rationaleB.settings && toggle(rationaleB.label),\n 'partB.spellCheckEnabled': spellCheckB.settings && toggle(spellCheckB.label),\n };\n\n return (\n <layout.ConfigLayout\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n onChangeModel={this.onModelChanged}\n configuration={configuration}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n 'Settings for both': panelSettings,\n [`Settings ${firstPart}`]: panelSettingsPartA,\n [`Properties ${firstPart}`]: panelPropertiesPartA,\n [`Settings ${secondPart}`]: panelSettingsPartB,\n [`Properties ${secondPart}`]: panelPropertiesPartB,\n }}\n />\n }\n >\n {model.partLabels && <div className={classes.partLabel}>{firstPart}</div>}\n <ebsr-multiple-choice-configure\n id=\"A\"\n key=\"partA\"\n ref={(ref) => {\n if (ref) {\n // do not use destructuring to get model from props\n this.partA = ref;\n this.partA._model = {\n ...this.props.model.partA,\n errors: (this.props.model.errors && this.props.model.errors.partA) || {},\n };\n this.partA.configuration = {\n ...partA,\n ...generalConfiguration,\n };\n }\n }}\n />\n\n <div className={classes.divider} />\n\n {model.partLabels && <div className={classes.partLabel}>{secondPart}</div>}\n <ebsr-multiple-choice-configure\n id=\"B\"\n key=\"partB\"\n ref={(ref) => {\n if (ref) {\n // do not use destructuring to get model from props\n this.partB = ref;\n this.partB._model = {\n ...this.props.model.partB,\n errors: (this.props.model.errors && this.props.model.errors.partB) || {},\n };\n this.partB.configuration = {\n ...partB,\n ...generalConfiguration,\n };\n }\n }}\n />\n </layout.ConfigLayout>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Main);\n\nexport default Styled;\n"],"file":"main.js"}
|
package/configure/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/ebsr-configure",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "9.0.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
8
8
|
"author": "",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@material-ui/core": "^3.9.2",
|
|
11
|
-
"@pie-element/multiple-choice": "^
|
|
11
|
+
"@pie-element/multiple-choice": "^8.0.0",
|
|
12
12
|
"@pie-framework/pie-configure-events": "^1.2.0",
|
|
13
|
-
"@pie-lib/
|
|
13
|
+
"@pie-lib/pie-toolbox": "1.0.5",
|
|
14
14
|
"lodash": "^4.17.15",
|
|
15
15
|
"prop-types": "^15.6.2",
|
|
16
16
|
"react": "^16.8.1",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { mount } from 'enzyme';
|
|
3
3
|
import { ModelUpdatedEvent } from '@pie-framework/pie-configure-events';
|
|
4
|
-
import { choiceUtils as utils } from '@pie-lib/config-ui';
|
|
4
|
+
import { choiceUtils as utils } from '@pie-lib/pie-toolbox/config-ui';
|
|
5
5
|
import ReactDOM from 'react-dom';
|
|
6
6
|
import defaults from '../defaults';
|
|
7
7
|
import { Main } from '../main';
|
|
@@ -21,7 +21,7 @@ jest.mock('@pie-framework/pie-configure-events', () => ({
|
|
|
21
21
|
},
|
|
22
22
|
}));
|
|
23
23
|
|
|
24
|
-
jest.mock('@pie-lib/config-ui', () => ({
|
|
24
|
+
jest.mock('@pie-lib/pie-toolbox/config-ui', () => ({
|
|
25
25
|
choiceUtils: {
|
|
26
26
|
firstAvailableIndex: jest.fn(),
|
|
27
27
|
},
|
package/configure/src/main.jsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
|
-
import { settings, layout } from '@pie-lib/config-ui';
|
|
3
|
+
import { settings, layout } from '@pie-lib/pie-toolbox/config-ui';
|
|
4
4
|
import { withStyles } from '@material-ui/core/styles';
|
|
5
5
|
|
|
6
6
|
const { Panel, toggle, radio, dropdown } = settings;
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,30 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [7.0.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/ebsr-controller@6.4.1...@pie-element/ebsr-controller@7.0.0) (2023-11-07)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* update pie-lib version to fix imports for pie-lib/pie-toolbox/editable-html ([a90cbf6](https://github.com/pie-framework/pie-elements/commit/a90cbf6be81824e7266df23c2dc49b259337c1b6))
|
|
12
|
+
* update pie-lib/pie-toolbox version ([212cbfa](https://github.com/pie-framework/pie-elements/commit/212cbfad27b29f0b1b2a3706ba82f6fb59147001))
|
|
13
|
+
* update pie-lib/pie-toolbox version ([b791e10](https://github.com/pie-framework/pie-elements/commit/b791e10857928766e2d73c6aa80b3fb50fd1afac))
|
|
14
|
+
* update pie-lib/pie-toolbox version ([7f64f9f](https://github.com/pie-framework/pie-elements/commit/7f64f9f2b874fd08bd8f6f05c1c4292c34ac6338))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Code Refactoring
|
|
18
|
+
|
|
19
|
+
* replaced all pie-lib packages with the new pie-toolbox package that contains all of them. ([073d7e5](https://github.com/pie-framework/pie-elements/commit/073d7e5175f7a73069f09d2ceda799682acce494))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
### BREAKING CHANGES
|
|
23
|
+
|
|
24
|
+
* using pie-lib/pie-toolbox now, instead of any other pie-lib package.
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
6
30
|
## [6.4.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/ebsr-controller@6.4.0...@pie-element/ebsr-controller@6.4.1) (2023-09-25)
|
|
7
31
|
|
|
8
32
|
|
package/controller/lib/index.js
CHANGED
|
@@ -23,7 +23,7 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
23
23
|
|
|
24
24
|
var _defaults = _interopRequireDefault(require("./defaults"));
|
|
25
25
|
|
|
26
|
-
var _controllerUtils = require("@pie-lib/controller-utils");
|
|
26
|
+
var _controllerUtils = require("@pie-lib/pie-toolbox/controller-utils");
|
|
27
27
|
|
|
28
28
|
var _utils = require("./utils");
|
|
29
29
|
|
|
@@ -31,7 +31,7 @@ var _get = _interopRequireDefault(require("lodash/get"));
|
|
|
31
31
|
|
|
32
32
|
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
33
33
|
|
|
34
|
-
var _translator = _interopRequireDefault(require("@pie-lib/translator"));
|
|
34
|
+
var _translator = _interopRequireDefault(require("@pie-lib/pie-toolbox/translator"));
|
|
35
35
|
|
|
36
36
|
var _excluded = ["partA", "partB"];
|
|
37
37
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["translator","Translator","prepareChoice","model","env","defaultFeedback","choice","out","label","value","role","mode","rationale","rationaleEnabled","correct","feedbackEnabled","feedbackType","feedback","type","parsePart","part","key","session","Object","assign","incorrect","choices","map","disabled","complete","min","filter","c","length","responseCorrect","undefined","normalize","partA","partB","question","partLabels","partLabelType","defaults","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","gridColumns","choicesLayout","verticalMode","updateSession","normalizedQuestion","shuffledValues","us","id","element","update","Promise","resolve","partASession","partALockChoiceOrder","partAChoices","partBChoices","partBSession","partBLockChoiceOrder","e","console","error","language","partLabel","t","lng","index","teacherInstructions","prompt","createDefaultModel","isCorrect","getScore","config","sessionPart","partialScoringEnabled","maxScore","sessionPartValue","chosen","find","v","correctAndNotChosen","incorrectAndChosen","correctChoices","reduce","total","parseFloat","toFixed","outcome","score","scoreA","scoreB","empty","partialScoring","enabled","max","returnPartCorrect","answers","forEach","i","push","createCorrectResponseSession","partACorrect","partBCorrect","validatePart","minAnswerChoices","maxAnswerChoices","reversedChoices","reverse","choicesErrors","hasCorrectResponse","identicalAnswer","slice","some","errors","nbOfChoices","answerChoicesError","correctResponseError","validate","partAConfig","partBConfig","partAErrors","partBErrors"],"mappings":"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","sourcesContent":["import defaults from './defaults';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport { isResponseCorrect } from './utils';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport Translator from '@pie-lib/translator';\n\nconst { translator } = Translator;\n\nconst prepareChoice = (model, env, defaultFeedback) => (choice) => {\n const out = {\n label: choice.label,\n value: choice.value,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = model.rationaleEnabled ? choice.rationale : null;\n } else {\n out.rationale = null;\n }\n\n if (env.mode === 'evaluate') {\n out.correct = !!choice.correct;\n\n if (model.feedbackEnabled) {\n const feedbackType = (choice.feedback && choice.feedback.type) || 'none';\n\n if (feedbackType === 'default') {\n out.feedback = defaultFeedback[choice.correct ? 'correct' : 'incorrect'];\n } else if (feedbackType === 'custom') {\n out.feedback = choice.feedback.value;\n }\n }\n }\n\n return out;\n};\n\nconst parsePart = (part, key, session, env) => {\n const defaultFeedback = Object.assign({ correct: 'Correct', incorrect: 'Incorrect' }, part.defaultFeedback);\n\n let choices = part.choices ? part.choices.map(prepareChoice(part, env, defaultFeedback)) : [];\n\n return {\n ...part,\n choices,\n disabled: env.mode !== 'gather',\n complete: {\n min: part.choices.filter((c) => c.correct).length,\n },\n responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(part, key, session) : undefined,\n };\n};\n\nexport const normalize = ({ partA = {}, partB = {}, ...question }) => ({\n partLabels: true,\n partLabelType: 'Letters',\n ...question,\n partA: {\n ...defaults.partA,\n rationaleEnabled: true,\n feedbackEnabled: false,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n gridColumns: '2',\n ...partA,\n choicesLayout: partA.choicesLayout || (partA.verticalMode === false && 'horizontal') || 'vertical',\n },\n partB: {\n ...defaults.partB,\n rationaleEnabled: true,\n promptEnabled: true,\n feedbackEnabled: false,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n gridColumns: '2',\n ...partB,\n choicesLayout: partB.choicesLayout || (partB.verticalMode === false && 'horizontal') || 'vertical',\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 const partA = parsePart(normalizedQuestion.partA, 'partA', session, env);\n const partB = parsePart(normalizedQuestion.partB, 'partB', session, env);\n\n const shuffledValues = {};\n\n const us = (part) => (id, element, update) =>\n new Promise((resolve) => {\n shuffledValues[part] = update.shuffledValues;\n resolve();\n });\n\n const partASession = get(session, 'value.partA');\n const partALockChoiceOrder = lockChoices(normalizedQuestion.partA, partASession, env);\n\n const { choices: partAChoices } = partA || {};\n const { choices: partBChoices } = partB || {};\n\n if (!partALockChoiceOrder && partAChoices && partAChoices.length) {\n partA.choices = await getShuffledChoices(\n partAChoices,\n { shuffledValues: (session.shuffledValues || {}).partA },\n us('partA'),\n 'value',\n );\n }\n\n const partBSession = get(session, 'value.partB');\n const partBLockChoiceOrder = lockChoices(normalizedQuestion.partB, partBSession, env);\n\n if (!partBLockChoiceOrder && partBChoices && partBChoices.length) {\n partB.choices = await getShuffledChoices(\n partBChoices,\n { shuffledValues: (session.shuffledValues || {}).partB },\n us('partB'),\n 'value',\n );\n }\n\n if (!isEmpty(shuffledValues)) {\n if (updateSession && typeof updateSession === 'function') {\n updateSession(session.id, session.element, {\n shuffledValues,\n }).catch((e) => {\n // eslint-disable-next-line no-console\n console.error('update session failed', e);\n });\n }\n }\n\n if (normalizedQuestion.partLabels) {\n const language = normalizedQuestion.language;\n partA.partLabel = translator.t('ebsr.part', {lng: language, index: normalizedQuestion.partLabelType === 'Letters' ? 'A' : '1'});\n partB.partLabel = translator.t('ebsr.part', {lng: language, index: normalizedQuestion.partLabelType === 'Letters' ? 'B' : '2'});\n } else {\n partA.partLabel = undefined;\n partB.partLabel = undefined;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n partA.teacherInstructions = normalizedQuestion.partA.teacherInstructionsEnabled\n ? normalizedQuestion.partA.teacherInstructions\n : null;\n partB.teacherInstructions = normalizedQuestion.partB.teacherInstructionsEnabled\n ? normalizedQuestion.partB.teacherInstructions\n : null;\n } else {\n partA.teacherInstructions = null;\n partB.teacherInstructions = null;\n }\n\n partA.prompt = normalizedQuestion.partA.promptEnabled ? normalizedQuestion.partA.prompt : null;\n partB.prompt = normalizedQuestion.partB.promptEnabled ? normalizedQuestion.partB.prompt : null;\n\n return new Promise((resolve) => {\n resolve({\n disabled: env.mode !== 'gather',\n mode: env.mode,\n partA,\n partB,\n });\n });\n}\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nconst isCorrect = (c) => c.correct === true;\n\nconst getScore = (config, sessionPart, key, partialScoringEnabled) => {\n const { choices = [] } = (config && config[key]) || {};\n const maxScore = choices.length;\n const { value: sessionPartValue } = sessionPart || {};\n\n const chosen = (c) => !!(sessionPartValue || []).find((v) => v === c.value);\n const correctAndNotChosen = (c) => isCorrect(c) && !chosen(c);\n const incorrectAndChosen = (c) => !isCorrect(c) && chosen(c);\n const correctChoices = choices.reduce((total, choice) => {\n if (correctAndNotChosen(choice) || incorrectAndChosen(choice)) {\n return total - 1;\n } else {\n return total;\n }\n }, choices.length);\n\n // determine score for a part\n if (!partialScoringEnabled && correctChoices < maxScore) {\n return 0;\n }\n\n return parseFloat(maxScore ? (correctChoices / maxScore).toFixed(2) : 0);\n};\n\nexport function outcome(config, session, env) {\n return new Promise((resolve) => {\n const { value } = session || {};\n\n if (!session || !value) {\n resolve({ score: 0, scoreA: 0, scoreB: 0, empty: true });\n }\n\n if (value) {\n const { partA, partB } = value || {};\n\n const partialScoringEnabled = partialScoring.enabled(config, env);\n\n const scoreA = getScore(config, partA, 'partA', partialScoringEnabled);\n const scoreB = getScore(config, partB, 'partB', partialScoringEnabled);\n\n if (!partialScoringEnabled) {\n // The EBSR item is worth 1 point\n // That point is awarded if and only if both parts are fully correct, otherwise no points are awarded\n resolve({ score: scoreA === 1 && scoreB === 1 ? 1 : 0, scoreA, scoreB, max: 1 });\n } else {\n // The EBSR item is worth 2 points\n if (scoreA === 1) {\n if (scoreB === 1) {\n // If Part A and Part B are both correct, 2 points are awarded\n resolve({ score: 2, scoreA, scoreB, max: 2 });\n } else {\n // If Part A is correct and part B is incorrect, 1 point is awarded\n resolve({ score: 1, scoreA, scoreB, max: 2 });\n }\n } else {\n // For all other combinations, no points are awarded\n resolve({ score: 0, scoreA, scoreB, max: 2 });\n }\n }\n }\n });\n}\n\nconst returnPartCorrect = (choices) => {\n let answers = [];\n\n choices.forEach((i) => {\n const { correct, value } = i;\n if (correct) {\n answers.push(value);\n }\n });\n return answers;\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { partA, partB } = question;\n\n const partACorrect = returnPartCorrect(partA.choices);\n const partBCorrect = returnPartCorrect(partB.choices);\n\n resolve({\n value: {\n partA: {\n id: 'partA',\n value: partACorrect,\n },\n partB: {\n id: 'partB',\n value: partBCorrect,\n },\n },\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\nconst validatePart = (model = {}, config = {}) => {\n const { choices } = model;\n const { minAnswerChoices = 2, maxAnswerChoices } = config;\n const reversedChoices = [...(choices || [])].reverse();\n const choicesErrors = {};\n let hasCorrectResponse = false;\n\n reversedChoices.forEach((choice, index) => {\n const { correct, value, label } = choice;\n\n if (correct) {\n hasCorrectResponse = true;\n }\n\n if (label === '' || label === '<div></div>') {\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\n const errors = {};\n const nbOfChoices = (choices || []).length;\n\n if (nbOfChoices < minAnswerChoices) {\n errors.answerChoicesError = `There should be at least ${minAnswerChoices} choices defined.`;\n } else if (nbOfChoices > maxAnswerChoices) {\n errors.answerChoicesError = `No more than ${maxAnswerChoices} choices should be defined.`;\n }\n\n if (!hasCorrectResponse) {\n errors.correctResponseError = 'No correct response defined.';\n }\n\n if (!isEmpty(choicesErrors)) {\n errors.choicesErrors = choicesErrors;\n }\n\n return errors;\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { partA, partB } = model || {};\n const { partA: partAConfig, partB: partBConfig } = config || {};\n\n const partAErrors = validatePart(partA, partAConfig);\n const partBErrors = validatePart(partB, partBConfig);\n\n return { partA: partAErrors, partB: partBErrors };\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["translator","Translator","prepareChoice","model","env","defaultFeedback","choice","out","label","value","role","mode","rationale","rationaleEnabled","correct","feedbackEnabled","feedbackType","feedback","type","parsePart","part","key","session","Object","assign","incorrect","choices","map","disabled","complete","min","filter","c","length","responseCorrect","undefined","normalize","partA","partB","question","partLabels","partLabelType","defaults","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","gridColumns","choicesLayout","verticalMode","updateSession","normalizedQuestion","shuffledValues","us","id","element","update","Promise","resolve","partASession","partALockChoiceOrder","partAChoices","partBChoices","partBSession","partBLockChoiceOrder","e","console","error","language","partLabel","t","lng","index","teacherInstructions","prompt","createDefaultModel","isCorrect","getScore","config","sessionPart","partialScoringEnabled","maxScore","sessionPartValue","chosen","find","v","correctAndNotChosen","incorrectAndChosen","correctChoices","reduce","total","parseFloat","toFixed","outcome","score","scoreA","scoreB","empty","partialScoring","enabled","max","returnPartCorrect","answers","forEach","i","push","createCorrectResponseSession","partACorrect","partBCorrect","validatePart","minAnswerChoices","maxAnswerChoices","reversedChoices","reverse","choicesErrors","hasCorrectResponse","identicalAnswer","slice","some","errors","nbOfChoices","answerChoicesError","correctResponseError","validate","partAConfig","partBConfig","partAErrors","partBErrors"],"mappings":"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","sourcesContent":["import defaults from './defaults';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\nimport { isResponseCorrect } from './utils';\nimport get from 'lodash/get';\nimport isEmpty from 'lodash/isEmpty';\nimport Translator from '@pie-lib/pie-toolbox/translator';\n\nconst { translator } = Translator;\n\nconst prepareChoice = (model, env, defaultFeedback) => (choice) => {\n const out = {\n label: choice.label,\n value: choice.value,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = model.rationaleEnabled ? choice.rationale : null;\n } else {\n out.rationale = null;\n }\n\n if (env.mode === 'evaluate') {\n out.correct = !!choice.correct;\n\n if (model.feedbackEnabled) {\n const feedbackType = (choice.feedback && choice.feedback.type) || 'none';\n\n if (feedbackType === 'default') {\n out.feedback = defaultFeedback[choice.correct ? 'correct' : 'incorrect'];\n } else if (feedbackType === 'custom') {\n out.feedback = choice.feedback.value;\n }\n }\n }\n\n return out;\n};\n\nconst parsePart = (part, key, session, env) => {\n const defaultFeedback = Object.assign({ correct: 'Correct', incorrect: 'Incorrect' }, part.defaultFeedback);\n\n let choices = part.choices ? part.choices.map(prepareChoice(part, env, defaultFeedback)) : [];\n\n return {\n ...part,\n choices,\n disabled: env.mode !== 'gather',\n complete: {\n min: part.choices.filter((c) => c.correct).length,\n },\n responseCorrect: env.mode === 'evaluate' ? isResponseCorrect(part, key, session) : undefined,\n };\n};\n\nexport const normalize = ({ partA = {}, partB = {}, ...question }) => ({\n partLabels: true,\n partLabelType: 'Letters',\n ...question,\n partA: {\n ...defaults.partA,\n rationaleEnabled: true,\n feedbackEnabled: false,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n gridColumns: '2',\n ...partA,\n choicesLayout: partA.choicesLayout || (partA.verticalMode === false && 'horizontal') || 'vertical',\n },\n partB: {\n ...defaults.partB,\n rationaleEnabled: true,\n promptEnabled: true,\n feedbackEnabled: false,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n gridColumns: '2',\n ...partB,\n choicesLayout: partB.choicesLayout || (partB.verticalMode === false && 'horizontal') || 'vertical',\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 const partA = parsePart(normalizedQuestion.partA, 'partA', session, env);\n const partB = parsePart(normalizedQuestion.partB, 'partB', session, env);\n\n const shuffledValues = {};\n\n const us = (part) => (id, element, update) =>\n new Promise((resolve) => {\n shuffledValues[part] = update.shuffledValues;\n resolve();\n });\n\n const partASession = get(session, 'value.partA');\n const partALockChoiceOrder = lockChoices(normalizedQuestion.partA, partASession, env);\n\n const { choices: partAChoices } = partA || {};\n const { choices: partBChoices } = partB || {};\n\n if (!partALockChoiceOrder && partAChoices && partAChoices.length) {\n partA.choices = await getShuffledChoices(\n partAChoices,\n { shuffledValues: (session.shuffledValues || {}).partA },\n us('partA'),\n 'value',\n );\n }\n\n const partBSession = get(session, 'value.partB');\n const partBLockChoiceOrder = lockChoices(normalizedQuestion.partB, partBSession, env);\n\n if (!partBLockChoiceOrder && partBChoices && partBChoices.length) {\n partB.choices = await getShuffledChoices(\n partBChoices,\n { shuffledValues: (session.shuffledValues || {}).partB },\n us('partB'),\n 'value',\n );\n }\n\n if (!isEmpty(shuffledValues)) {\n if (updateSession && typeof updateSession === 'function') {\n updateSession(session.id, session.element, {\n shuffledValues,\n }).catch((e) => {\n // eslint-disable-next-line no-console\n console.error('update session failed', e);\n });\n }\n }\n\n if (normalizedQuestion.partLabels) {\n const language = normalizedQuestion.language;\n partA.partLabel = translator.t('ebsr.part', {lng: language, index: normalizedQuestion.partLabelType === 'Letters' ? 'A' : '1'});\n partB.partLabel = translator.t('ebsr.part', {lng: language, index: normalizedQuestion.partLabelType === 'Letters' ? 'B' : '2'});\n } else {\n partA.partLabel = undefined;\n partB.partLabel = undefined;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n partA.teacherInstructions = normalizedQuestion.partA.teacherInstructionsEnabled\n ? normalizedQuestion.partA.teacherInstructions\n : null;\n partB.teacherInstructions = normalizedQuestion.partB.teacherInstructionsEnabled\n ? normalizedQuestion.partB.teacherInstructions\n : null;\n } else {\n partA.teacherInstructions = null;\n partB.teacherInstructions = null;\n }\n\n partA.prompt = normalizedQuestion.partA.promptEnabled ? normalizedQuestion.partA.prompt : null;\n partB.prompt = normalizedQuestion.partB.promptEnabled ? normalizedQuestion.partB.prompt : null;\n\n return new Promise((resolve) => {\n resolve({\n disabled: env.mode !== 'gather',\n mode: env.mode,\n partA,\n partB,\n });\n });\n}\n\nexport const createDefaultModel = (model = {}) =>\n new Promise((resolve) => {\n resolve({\n ...defaults,\n ...model,\n });\n });\n\nconst isCorrect = (c) => c.correct === true;\n\nconst getScore = (config, sessionPart, key, partialScoringEnabled) => {\n const { choices = [] } = (config && config[key]) || {};\n const maxScore = choices.length;\n const { value: sessionPartValue } = sessionPart || {};\n\n const chosen = (c) => !!(sessionPartValue || []).find((v) => v === c.value);\n const correctAndNotChosen = (c) => isCorrect(c) && !chosen(c);\n const incorrectAndChosen = (c) => !isCorrect(c) && chosen(c);\n const correctChoices = choices.reduce((total, choice) => {\n if (correctAndNotChosen(choice) || incorrectAndChosen(choice)) {\n return total - 1;\n } else {\n return total;\n }\n }, choices.length);\n\n // determine score for a part\n if (!partialScoringEnabled && correctChoices < maxScore) {\n return 0;\n }\n\n return parseFloat(maxScore ? (correctChoices / maxScore).toFixed(2) : 0);\n};\n\nexport function outcome(config, session, env) {\n return new Promise((resolve) => {\n const { value } = session || {};\n\n if (!session || !value) {\n resolve({ score: 0, scoreA: 0, scoreB: 0, empty: true });\n }\n\n if (value) {\n const { partA, partB } = value || {};\n\n const partialScoringEnabled = partialScoring.enabled(config, env);\n\n const scoreA = getScore(config, partA, 'partA', partialScoringEnabled);\n const scoreB = getScore(config, partB, 'partB', partialScoringEnabled);\n\n if (!partialScoringEnabled) {\n // The EBSR item is worth 1 point\n // That point is awarded if and only if both parts are fully correct, otherwise no points are awarded\n resolve({ score: scoreA === 1 && scoreB === 1 ? 1 : 0, scoreA, scoreB, max: 1 });\n } else {\n // The EBSR item is worth 2 points\n if (scoreA === 1) {\n if (scoreB === 1) {\n // If Part A and Part B are both correct, 2 points are awarded\n resolve({ score: 2, scoreA, scoreB, max: 2 });\n } else {\n // If Part A is correct and part B is incorrect, 1 point is awarded\n resolve({ score: 1, scoreA, scoreB, max: 2 });\n }\n } else {\n // For all other combinations, no points are awarded\n resolve({ score: 0, scoreA, scoreB, max: 2 });\n }\n }\n }\n });\n}\n\nconst returnPartCorrect = (choices) => {\n let answers = [];\n\n choices.forEach((i) => {\n const { correct, value } = i;\n if (correct) {\n answers.push(value);\n }\n });\n return answers;\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { partA, partB } = question;\n\n const partACorrect = returnPartCorrect(partA.choices);\n const partBCorrect = returnPartCorrect(partB.choices);\n\n resolve({\n value: {\n partA: {\n id: 'partA',\n value: partACorrect,\n },\n partB: {\n id: 'partB',\n value: partBCorrect,\n },\n },\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\nconst validatePart = (model = {}, config = {}) => {\n const { choices } = model;\n const { minAnswerChoices = 2, maxAnswerChoices } = config;\n const reversedChoices = [...(choices || [])].reverse();\n const choicesErrors = {};\n let hasCorrectResponse = false;\n\n reversedChoices.forEach((choice, index) => {\n const { correct, value, label } = choice;\n\n if (correct) {\n hasCorrectResponse = true;\n }\n\n if (label === '' || label === '<div></div>') {\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\n const errors = {};\n const nbOfChoices = (choices || []).length;\n\n if (nbOfChoices < minAnswerChoices) {\n errors.answerChoicesError = `There should be at least ${minAnswerChoices} choices defined.`;\n } else if (nbOfChoices > maxAnswerChoices) {\n errors.answerChoicesError = `No more than ${maxAnswerChoices} choices should be defined.`;\n }\n\n if (!hasCorrectResponse) {\n errors.correctResponseError = 'No correct response defined.';\n }\n\n if (!isEmpty(choicesErrors)) {\n errors.choicesErrors = choicesErrors;\n }\n\n return errors;\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { partA, partB } = model || {};\n const { partA: partAConfig, partB: partBConfig } = config || {};\n\n const partAErrors = validatePart(partA, partAConfig);\n const partBErrors = validatePart(partB, partBConfig);\n\n return { partA: partAErrors, partB: partBErrors };\n};\n"],"file":"index.js"}
|
package/controller/package.json
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/ebsr-controller",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "7.0.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@pie-lib/
|
|
11
|
-
"@pie-lib/translator": "^2.3.0",
|
|
10
|
+
"@pie-lib/pie-toolbox": "1.0.5",
|
|
12
11
|
"lodash": "^4.17.15"
|
|
13
12
|
},
|
|
14
13
|
"author": "",
|
package/controller/src/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import defaults from './defaults';
|
|
2
|
-
import { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';
|
|
2
|
+
import { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/pie-toolbox/controller-utils';
|
|
3
3
|
import { isResponseCorrect } from './utils';
|
|
4
4
|
import get from 'lodash/get';
|
|
5
5
|
import isEmpty from 'lodash/isEmpty';
|
|
6
|
-
import Translator from '@pie-lib/translator';
|
|
6
|
+
import Translator from '@pie-lib/pie-toolbox/translator';
|
|
7
7
|
|
|
8
8
|
const { translator } = Translator;
|
|
9
9
|
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/ebsr",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": "pie-framework/pie-elements",
|
|
6
6
|
"publishConfig": {
|
|
7
7
|
"access": "public"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@pie-element/multiple-choice": "^
|
|
10
|
+
"@pie-element/multiple-choice": "^8.0.0",
|
|
11
11
|
"@pie-framework/pie-player-events": "^0.1.0",
|
|
12
12
|
"classnames": "^2.2.5",
|
|
13
13
|
"debug": "^4.1.1",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
},
|
|
16
16
|
"author": "pie framework developers",
|
|
17
17
|
"license": "ISC",
|
|
18
|
-
"gitHead": "
|
|
18
|
+
"gitHead": "bdd6cb249f497e3687fb175a9bcbc5420b99c496",
|
|
19
19
|
"scripts": {
|
|
20
20
|
"postpublish": "../../scripts/postpublish"
|
|
21
21
|
},
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { SessionChangedEvent } from '@pie-framework/pie-player-events';
|
|
3
3
|
import { isSessionComplete } from '..';
|
|
4
4
|
|
|
5
|
-
jest.mock('@pie-lib/math-rendering', () => ({ renderMath: jest.fn() }));
|
|
5
|
+
jest.mock('@pie-lib/pie-toolbox/math-rendering', () => ({ renderMath: jest.fn() }));
|
|
6
6
|
jest.mock('@pie-element/multiple-choice', () => jest.fn());
|
|
7
7
|
|
|
8
8
|
const PART_A = 'partA';
|