@pie-element/explicit-constructed-response 10.0.0-beta.0 → 10.0.0-beta.1
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 +0 -11
- package/configure/CHANGELOG.md +0 -11
- package/configure/lib/alternateSection.js +8 -2
- package/configure/lib/alternateSection.js.map +1 -1
- package/configure/lib/ecr-toolbar.js +16 -18
- package/configure/lib/ecr-toolbar.js.map +1 -1
- package/configure/lib/main.js +12 -12
- package/configure/lib/main.js.map +1 -1
- package/configure/package.json +3 -3
- package/controller/CHANGELOG.md +0 -11
- package/controller/lib/index.js +3 -0
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +3 -3
- package/package.json +7 -7
package/CHANGELOG.md
CHANGED
|
@@ -3,17 +3,6 @@
|
|
|
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.3.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response@9.3.2...@pie-element/explicit-constructed-response@9.3.3) (2025-11-27)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
### Bug Fixes
|
|
10
|
-
|
|
11
|
-
* bump libs PD-5274, PD-5211, PD-5248 ([7610b25](https://github.com/pie-framework/pie-elements/commit/7610b25423956b6492f33322513b3430051fca77))
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
6
|
## [9.3.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response@9.3.1...@pie-element/explicit-constructed-response@9.3.2) (2025-10-22)
|
|
18
7
|
|
|
19
8
|
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,17 +3,6 @@
|
|
|
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
|
-
## [8.3.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-configure@8.3.2...@pie-element/explicit-constructed-response-configure@8.3.3) (2025-11-27)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
### Bug Fixes
|
|
10
|
-
|
|
11
|
-
* bump libs PD-5274, PD-5211, PD-5248 ([7610b25](https://github.com/pie-framework/pie-elements/commit/7610b25423956b6492f33322513b3430051fca77))
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
6
|
## [8.3.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-configure@8.3.1...@pie-element/explicit-constructed-response-configure@8.3.2) (2025-10-22)
|
|
18
7
|
|
|
19
8
|
|
|
@@ -19,7 +19,7 @@ var _Select = _interopRequireDefault(require("@mui/material/Select"));
|
|
|
19
19
|
var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
|
|
20
20
|
var _styles = require("@mui/material/styles");
|
|
21
21
|
var _max = _interopRequireDefault(require("lodash/max"));
|
|
22
|
-
var
|
|
22
|
+
var _editableHtmlTipTap = _interopRequireDefault(require("@pie-lib/editable-html-tip-tap"));
|
|
23
23
|
var _markupUtils = require("./markupUtils");
|
|
24
24
|
const DesignContainer = (0, _styles.styled)('div')(({
|
|
25
25
|
theme
|
|
@@ -38,7 +38,7 @@ const AltChoices = (0, _styles.styled)('div')(({
|
|
|
38
38
|
width: '100%'
|
|
39
39
|
}
|
|
40
40
|
}));
|
|
41
|
-
const StyledEditableHtml = (0, _styles.styled)(
|
|
41
|
+
const StyledEditableHtml = (0, _styles.styled)(_editableHtmlTipTap.default)(({
|
|
42
42
|
theme,
|
|
43
43
|
hasError
|
|
44
44
|
}) => ({
|
|
@@ -107,6 +107,11 @@ class Choice extends _react.default.Component {
|
|
|
107
107
|
});
|
|
108
108
|
this.updateText(strippedValue);
|
|
109
109
|
});
|
|
110
|
+
(0, _defineProperty2.default)(this, "onKeyDown", event => {
|
|
111
|
+
if (event.key === 'Enter') {
|
|
112
|
+
return true;
|
|
113
|
+
}
|
|
114
|
+
});
|
|
110
115
|
}
|
|
111
116
|
UNSAFE_componentWillReceiveProps(nextProps) {
|
|
112
117
|
if (nextProps.markup) {
|
|
@@ -133,6 +138,7 @@ class Choice extends _react.default.Component {
|
|
|
133
138
|
hasError: !!error,
|
|
134
139
|
disableUnderline: true,
|
|
135
140
|
onChange: this.onChange,
|
|
141
|
+
onKeyDown: this.onKeyDown,
|
|
136
142
|
markup: value || '',
|
|
137
143
|
activePlugins: ['languageCharacters'],
|
|
138
144
|
pluginProps: pluginProps,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alternateSection.js","names":["_react","_interopRequireDefault","require","_propTypes","_debounce","_isEqual","_Button","_Delete","_IconButton","_MenuItem","_Select","_TextField","_styles","_max","_editableHtml","_markupUtils","DesignContainer","styled","theme","marginBottom","spacing","AltChoices","alignItems","flexDirection","display","paddingTop","width","StyledEditableHtml","EditableHtml","hasError","flex","marginRight","border","palette","error","main","borderRadius","StyledDeleteButton","IconButton","fill","grey","SelectContainer","justifyContent","RightContainer","LengthField","TextField","borderBottomColor","divider","text","primary","ErrorText","fontSize","typography","color","ChoiceWrapper","Choice","React","Component","constructor","args","_defineProperty2","default","value","props","markup","debounce","onChange","e","strippedValue","stripHtmlTags","setState","updateText","UNSAFE_componentWillReceiveProps","nextProps","render","state","onDelete","spellCheck","showMaxLength","pluginProps","inputProps","maxLength","createElement","Fragment","_extends2","disableUnderline","activePlugins","languageCharactersProps","language","autoWidthToolbar","toolbarOpts","minWidth","isHidden","characters","disabled","onClick","size","exports","PropTypes","string","func","isRequired","bool","object","AlternateSection","choices","isEqual","onSelect","selectChoices","target","find","c","length","label","max","map","parseInt","filter","id","isNaN","choice","index","choiceChanged","lengthChanged","labelLengthsArr","decodeHTML","newLength","Math","getAdjustedLength","choiceRemoved","event","numberValue","minLength","getChoicesMaxLength","updateChoicesIfNeeded","componentDidMount","errors","variant","displayEmpty","handleSelect","readOnly","MenuProps","transitionDuration","enter","exit","key","type","min","changeLength","onAddChoice","val","onChoiceChanged","onRemoveChoice","array","number","_default"],"sources":["../src/alternateSection.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash/debounce';\nimport isEqual from 'lodash/isEqual';\nimport Button from '@mui/material/Button';\nimport Delete from '@mui/icons-material/Delete';\nimport IconButton from '@mui/material/IconButton';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport TextField from '@mui/material/TextField';\nimport { styled } from '@mui/material/styles';\nimport max from 'lodash/max';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { stripHtmlTags, getAdjustedLength, decodeHTML } from './markupUtils';\n\nconst DesignContainer = styled('div')(({ theme }) => ({\n marginBottom: theme.spacing(0.5),\n}));\n\nconst AltChoices = styled('div')(({ theme }) => ({\n alignItems: 'flex-start',\n flexDirection: 'column',\n display: 'flex',\n paddingTop: theme.spacing(2.5),\n '& > *': {\n marginBottom: theme.spacing(2.5),\n width: '100%',\n },\n}));\n\nconst StyledEditableHtml = styled(EditableHtml)(({ theme, hasError }) => ({\n flex: '1',\n marginRight: theme.spacing(2.5),\n ...(hasError && {\n border: `2px solid ${theme.palette.error.main}`,\n borderRadius: '6px',\n }),\n}));\n\nconst StyledDeleteButton = styled(IconButton)(({ theme }) => ({\n '& svg': {\n fill: theme.palette.grey[600],\n },\n}));\n\nconst SelectContainer = styled('div')({\n alignItems: 'flex-end',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n});\n\nconst RightContainer = styled('div')({\n alignItems: 'center',\n display: 'flex',\n});\n\nconst LengthField = styled(TextField)(({ theme }) => ({\n width: '230px',\n marginRight: theme.spacing(2.5),\n '& .MuiInput-underline:before': {\n borderBottomColor: theme.palette.divider,\n },\n '& .MuiInput-underline:hover:not(.Mui-disabled):before': {\n borderBottomColor: theme.palette.text.primary,\n },\n '& .MuiInput-underline:after': {\n borderBottomColor: theme.palette.primary.main,\n },\n}));\n\nconst ErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing(0.5),\n}));\n\nconst ChoiceWrapper = styled('div')({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'space-between',\n});\n\nexport class Choice extends React.Component {\n static propTypes = {\n error: PropTypes.string,\n markup: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n value: PropTypes.string,\n spellCheck: PropTypes.bool,\n showMaxLength: PropTypes.bool,\n pluginProps: PropTypes.object,\n };\n\n state = {\n value: this.props.markup,\n };\n\n updateText = debounce(this.props.onChange, 300);\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.markup) {\n this.setState({ value: nextProps.markup });\n }\n }\n\n onChange = (e) => {\n const strippedValue = stripHtmlTags(e);\n this.setState({ value: strippedValue });\n this.updateText(strippedValue);\n };\n\n render() {\n const { value } = this.state;\n const { onDelete, spellCheck, error, showMaxLength, pluginProps } = this.props;\n const inputProps = showMaxLength ? {} : { maxLength: 25 };\n\n return (\n <React.Fragment>\n <ChoiceWrapper>\n <StyledEditableHtml\n hasError={!!error}\n disableUnderline\n onChange={this.onChange}\n markup={value || ''}\n activePlugins={['languageCharacters']}\n pluginProps={pluginProps}\n languageCharactersProps={[{ language: 'spanish' }]}\n spellCheck={spellCheck}\n autoWidthToolbar\n toolbarOpts={{\n minWidth: 'auto',\n isHidden: !!pluginProps?.characters?.disabled,\n }}\n {...inputProps}\n />\n <StyledDeleteButton\n aria-label=\"delete\"\n onClick={onDelete}\n size=\"large\">\n <Delete />\n </StyledDeleteButton>\n </ChoiceWrapper>\n {error && <ErrorText>{error}</ErrorText>}\n </React.Fragment>\n );\n }\n}\n\nexport class AlternateSection extends React.Component {\n static propTypes = {\n choices: PropTypes.array,\n selectChoices: PropTypes.array.isRequired,\n errors: PropTypes.object,\n onSelect: PropTypes.func.isRequired,\n choiceChanged: PropTypes.func.isRequired,\n lengthChanged: PropTypes.func,\n choiceRemoved: PropTypes.func.isRequired,\n value: PropTypes.string,\n maxLength: PropTypes.number,\n showMaxLength: PropTypes.bool,\n spellCheck: PropTypes.bool,\n pluginProps: PropTypes.object,\n };\n\n state = {};\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.updateChoicesIfNeeded(nextProps);\n }\n\n componentDidMount() {\n this.updateChoicesIfNeeded(this.props);\n }\n\n updateChoicesIfNeeded = (props) => {\n if (\n !this.state.choices ||\n !isEqual(props.choices, this.state.choices) ||\n !isEqual(props.choices, this.props.choices)\n ) {\n this.setState({\n choices: props.choices,\n });\n }\n };\n\n handleSelect = (e) => {\n const { onSelect, selectChoices } = this.props;\n const { value } = e.target;\n\n onSelect(selectChoices.find((c) => c.value === value));\n };\n\n onAddChoice = () => {\n const { choices } = this.state;\n\n if (choices.length && choices[choices.length - 1].label !== '') {\n const value = max(choices.map((c) => parseInt(c.value)).filter((id) => !isNaN(id))) || 0;\n\n this.setState({\n choices: [\n ...choices,\n {\n value: `${value + 1}`,\n label: '',\n },\n ],\n });\n }\n };\n\n onChoiceChanged = (choice, value, index) => {\n const { choiceChanged, lengthChanged, maxLength, choices } = this.props;\n\n const labelLengthsArr = choices.map((choice) => decodeHTML(choice.label || '').length);\n labelLengthsArr[index] = decodeHTML(value).length;\n\n const newLength = Math.max(...labelLengthsArr);\n\n choiceChanged({\n ...choice,\n label: value,\n });\n\n if (newLength > maxLength || newLength + 10 <= maxLength) {\n lengthChanged(getAdjustedLength(newLength));\n }\n };\n\n onRemoveChoice = (choice) => {\n const { choiceRemoved } = this.props;\n\n choiceRemoved(choice.value);\n };\n\n getChoicesMaxLength = () => {\n const { choices } = this.state;\n\n if (!choices) {\n return 1;\n }\n\n const labelLengthsArr = choices.map((choice) => decodeHTML(choice.label || '').length);\n\n return Math.max(...labelLengthsArr);\n };\n\n changeLength = (event) => {\n const { lengthChanged } = this.props;\n const numberValue = parseInt(event.target.value, 10);\n const minLength = this.getChoicesMaxLength();\n\n if (numberValue && numberValue >= minLength && numberValue <= minLength + 10) {\n lengthChanged(numberValue);\n }\n };\n\n render() {\n const { selectChoices, maxLength, showMaxLength, value, spellCheck, errors, pluginProps } = this.props;\n const { choices } = this.state;\n const minLength = this.getChoicesMaxLength();\n\n return (\n <DesignContainer>\n <SelectContainer>\n <Select\n variant=\"standard\"\n displayEmpty\n onChange={this.handleSelect}\n value={value || ''}\n readOnly={showMaxLength}\n MenuProps={{\n transitionDuration: { enter: 225, exit: 195 }\n }}\n >\n <MenuItem value=\"\">\n <em>{value ? 'Remove selection' : 'Select a response'}</em>\n </MenuItem>\n {selectChoices.map((c, index) => (\n <MenuItem key={index} value={c?.value}>\n {decodeHTML(c?.label)}\n </MenuItem>\n ))}\n </Select>\n\n {choices && choices.length > 0 && (\n <RightContainer>\n {maxLength && showMaxLength && (\n <LengthField\n variant=\"standard\"\n label=\"Maximum length (characters)\"\n type=\"number\"\n inputProps={{\n min: minLength,\n max: minLength + 10,\n }}\n value={maxLength}\n onChange={this.changeLength}\n />\n )}\n <Button variant=\"contained\" color=\"primary\" onClick={this.onAddChoice}>\n Add\n </Button>\n </RightContainer>\n )}\n </SelectContainer>\n {errors && errors[0] && <ErrorText>{errors[0]}</ErrorText>}\n\n <AltChoices>\n {choices &&\n choices.map(\n (c, index) =>\n index > 0 && (\n <Choice\n key={index}\n markup={c.label}\n onChange={(val) => this.onChoiceChanged(c, val, index)}\n onDelete={() => this.onRemoveChoice(c)}\n spellCheck={spellCheck}\n error={errors && errors[index]}\n showMaxLength={showMaxLength}\n pluginProps={pluginProps}\n />\n ),\n )}\n </AltChoices>\n </DesignContainer>\n );\n }\n}\n\nexport default AlternateSection;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"alternateSection.js","names":["_react","_interopRequireDefault","require","_propTypes","_debounce","_isEqual","_Button","_Delete","_IconButton","_MenuItem","_Select","_TextField","_styles","_max","_editableHtmlTipTap","_markupUtils","DesignContainer","styled","theme","marginBottom","spacing","AltChoices","alignItems","flexDirection","display","paddingTop","width","StyledEditableHtml","EditableHtml","hasError","flex","marginRight","border","palette","error","main","borderRadius","StyledDeleteButton","IconButton","fill","grey","SelectContainer","justifyContent","RightContainer","LengthField","TextField","borderBottomColor","divider","text","primary","ErrorText","fontSize","typography","color","ChoiceWrapper","Choice","React","Component","constructor","args","_defineProperty2","default","value","props","markup","debounce","onChange","e","strippedValue","stripHtmlTags","setState","updateText","event","key","UNSAFE_componentWillReceiveProps","nextProps","render","state","onDelete","spellCheck","showMaxLength","pluginProps","inputProps","maxLength","createElement","Fragment","_extends2","disableUnderline","onKeyDown","activePlugins","languageCharactersProps","language","autoWidthToolbar","toolbarOpts","minWidth","isHidden","characters","disabled","onClick","size","exports","PropTypes","string","func","isRequired","bool","object","AlternateSection","choices","isEqual","onSelect","selectChoices","target","find","c","length","label","max","map","parseInt","filter","id","isNaN","choice","index","choiceChanged","lengthChanged","labelLengthsArr","decodeHTML","newLength","Math","getAdjustedLength","choiceRemoved","numberValue","minLength","getChoicesMaxLength","updateChoicesIfNeeded","componentDidMount","errors","variant","displayEmpty","handleSelect","readOnly","MenuProps","transitionDuration","enter","exit","type","min","changeLength","onAddChoice","val","onChoiceChanged","onRemoveChoice","array","number","_default"],"sources":["../src/alternateSection.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport debounce from 'lodash/debounce';\nimport isEqual from 'lodash/isEqual';\nimport Button from '@mui/material/Button';\nimport Delete from '@mui/icons-material/Delete';\nimport IconButton from '@mui/material/IconButton';\nimport MenuItem from '@mui/material/MenuItem';\nimport Select from '@mui/material/Select';\nimport TextField from '@mui/material/TextField';\nimport { styled } from '@mui/material/styles';\nimport max from 'lodash/max';\nimport EditableHtml from '@pie-lib/editable-html-tip-tap';\nimport { stripHtmlTags, getAdjustedLength, decodeHTML } from './markupUtils';\n\nconst DesignContainer = styled('div')(({ theme }) => ({\n marginBottom: theme.spacing(0.5),\n}));\n\nconst AltChoices = styled('div')(({ theme }) => ({\n alignItems: 'flex-start',\n flexDirection: 'column',\n display: 'flex',\n paddingTop: theme.spacing(2.5),\n '& > *': {\n marginBottom: theme.spacing(2.5),\n width: '100%',\n },\n}));\n\nconst StyledEditableHtml = styled(EditableHtml)(({ theme, hasError }) => ({\n flex: '1',\n marginRight: theme.spacing(2.5),\n ...(hasError && {\n border: `2px solid ${theme.palette.error.main}`,\n borderRadius: '6px',\n }),\n}));\n\nconst StyledDeleteButton = styled(IconButton)(({ theme }) => ({\n '& svg': {\n fill: theme.palette.grey[600],\n },\n}));\n\nconst SelectContainer = styled('div')({\n alignItems: 'flex-end',\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n});\n\nconst RightContainer = styled('div')({\n alignItems: 'center',\n display: 'flex',\n});\n\nconst LengthField = styled(TextField)(({ theme }) => ({\n width: '230px',\n marginRight: theme.spacing(2.5),\n '& .MuiInput-underline:before': {\n borderBottomColor: theme.palette.divider,\n },\n '& .MuiInput-underline:hover:not(.Mui-disabled):before': {\n borderBottomColor: theme.palette.text.primary,\n },\n '& .MuiInput-underline:after': {\n borderBottomColor: theme.palette.primary.main,\n },\n}));\n\nconst ErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing(0.5),\n}));\n\nconst ChoiceWrapper = styled('div')({\n alignItems: 'center',\n display: 'flex',\n justifyContent: 'space-between',\n});\n\nexport class Choice extends React.Component {\n static propTypes = {\n error: PropTypes.string,\n markup: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n onDelete: PropTypes.func.isRequired,\n value: PropTypes.string,\n spellCheck: PropTypes.bool,\n showMaxLength: PropTypes.bool,\n pluginProps: PropTypes.object,\n };\n\n state = {\n value: this.props.markup,\n };\n\n updateText = debounce(this.props.onChange, 300);\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n if (nextProps.markup) {\n this.setState({ value: nextProps.markup });\n }\n }\n\n onChange = (e) => {\n const strippedValue = stripHtmlTags(e);\n this.setState({ value: strippedValue });\n this.updateText(strippedValue);\n };\n\n onKeyDown = (event) => {\n if (event.key === 'Enter') {\n return true;\n }\n };\n\n render() {\n const { value } = this.state;\n const { onDelete, spellCheck, error, showMaxLength, pluginProps } = this.props;\n const inputProps = showMaxLength ? {} : { maxLength: 25 };\n\n return (\n <React.Fragment>\n <ChoiceWrapper>\n <StyledEditableHtml\n hasError={!!error}\n disableUnderline\n onChange={this.onChange}\n onKeyDown={this.onKeyDown}\n markup={value || ''}\n activePlugins={['languageCharacters']}\n pluginProps={pluginProps}\n languageCharactersProps={[{ language: 'spanish' }]}\n spellCheck={spellCheck}\n autoWidthToolbar\n toolbarOpts={{\n minWidth: 'auto',\n isHidden: !!pluginProps?.characters?.disabled,\n }}\n {...inputProps}\n />\n <StyledDeleteButton\n aria-label=\"delete\"\n onClick={onDelete}\n size=\"large\">\n <Delete />\n </StyledDeleteButton>\n </ChoiceWrapper>\n {error && <ErrorText>{error}</ErrorText>}\n </React.Fragment>\n );\n }\n}\n\nexport class AlternateSection extends React.Component {\n static propTypes = {\n choices: PropTypes.array,\n selectChoices: PropTypes.array.isRequired,\n errors: PropTypes.object,\n onSelect: PropTypes.func.isRequired,\n choiceChanged: PropTypes.func.isRequired,\n lengthChanged: PropTypes.func,\n choiceRemoved: PropTypes.func.isRequired,\n value: PropTypes.string,\n maxLength: PropTypes.number,\n showMaxLength: PropTypes.bool,\n spellCheck: PropTypes.bool,\n pluginProps: PropTypes.object,\n };\n\n state = {};\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.updateChoicesIfNeeded(nextProps);\n }\n\n componentDidMount() {\n this.updateChoicesIfNeeded(this.props);\n }\n\n updateChoicesIfNeeded = (props) => {\n if (\n !this.state.choices ||\n !isEqual(props.choices, this.state.choices) ||\n !isEqual(props.choices, this.props.choices)\n ) {\n this.setState({\n choices: props.choices,\n });\n }\n };\n\n handleSelect = (e) => {\n const { onSelect, selectChoices } = this.props;\n const { value } = e.target;\n\n onSelect(selectChoices.find((c) => c.value === value));\n };\n\n onAddChoice = () => {\n const { choices } = this.state;\n\n if (choices.length && choices[choices.length - 1].label !== '') {\n const value = max(choices.map((c) => parseInt(c.value)).filter((id) => !isNaN(id))) || 0;\n\n this.setState({\n choices: [\n ...choices,\n {\n value: `${value + 1}`,\n label: '',\n },\n ],\n });\n }\n };\n\n onChoiceChanged = (choice, value, index) => {\n const { choiceChanged, lengthChanged, maxLength, choices } = this.props;\n\n const labelLengthsArr = choices.map((choice) => decodeHTML(choice.label || '').length);\n labelLengthsArr[index] = decodeHTML(value).length;\n\n const newLength = Math.max(...labelLengthsArr);\n\n choiceChanged({\n ...choice,\n label: value,\n });\n\n if (newLength > maxLength || newLength + 10 <= maxLength) {\n lengthChanged(getAdjustedLength(newLength));\n }\n };\n\n onRemoveChoice = (choice) => {\n const { choiceRemoved } = this.props;\n\n choiceRemoved(choice.value);\n };\n\n getChoicesMaxLength = () => {\n const { choices } = this.state;\n\n if (!choices) {\n return 1;\n }\n\n const labelLengthsArr = choices.map((choice) => decodeHTML(choice.label || '').length);\n\n return Math.max(...labelLengthsArr);\n };\n\n changeLength = (event) => {\n const { lengthChanged } = this.props;\n const numberValue = parseInt(event.target.value, 10);\n const minLength = this.getChoicesMaxLength();\n\n if (numberValue && numberValue >= minLength && numberValue <= minLength + 10) {\n lengthChanged(numberValue);\n }\n };\n\n render() {\n const { selectChoices, maxLength, showMaxLength, value, spellCheck, errors, pluginProps } = this.props;\n const { choices } = this.state;\n const minLength = this.getChoicesMaxLength();\n\n return (\n <DesignContainer>\n <SelectContainer>\n <Select\n variant=\"standard\"\n displayEmpty\n onChange={this.handleSelect}\n value={value || ''}\n readOnly={showMaxLength}\n MenuProps={{\n transitionDuration: { enter: 225, exit: 195 }\n }}\n >\n <MenuItem value=\"\">\n <em>{value ? 'Remove selection' : 'Select a response'}</em>\n </MenuItem>\n {selectChoices.map((c, index) => (\n <MenuItem key={index} value={c?.value}>\n {decodeHTML(c?.label)}\n </MenuItem>\n ))}\n </Select>\n\n {choices && choices.length > 0 && (\n <RightContainer>\n {maxLength && showMaxLength && (\n <LengthField\n variant=\"standard\"\n label=\"Maximum length (characters)\"\n type=\"number\"\n inputProps={{\n min: minLength,\n max: minLength + 10,\n }}\n value={maxLength}\n onChange={this.changeLength}\n />\n )}\n <Button variant=\"contained\" color=\"primary\" onClick={this.onAddChoice}>\n Add\n </Button>\n </RightContainer>\n )}\n </SelectContainer>\n {errors && errors[0] && <ErrorText>{errors[0]}</ErrorText>}\n\n <AltChoices>\n {choices &&\n choices.map(\n (c, index) =>\n index > 0 && (\n <Choice\n key={index}\n markup={c.label}\n onChange={(val) => this.onChoiceChanged(c, val, index)}\n onDelete={() => this.onRemoveChoice(c)}\n spellCheck={spellCheck}\n error={errors && errors[index]}\n showMaxLength={showMaxLength}\n pluginProps={pluginProps}\n />\n ),\n )}\n </AltChoices>\n </DesignContainer>\n );\n }\n}\n\nexport default AlternateSection;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -10,12 +10,12 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
10
10
|
var _react = _interopRequireDefault(require("react"));
|
|
11
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
12
|
var _styles = require("@mui/material/styles");
|
|
13
|
-
var
|
|
13
|
+
var _editableHtmlTipTap = _interopRequireDefault(require("@pie-lib/editable-html-tip-tap"));
|
|
14
14
|
var _markupUtils = require("./markupUtils");
|
|
15
15
|
const findSlateNode = key => {
|
|
16
16
|
return window.document.querySelector('[data-key="' + key + '"]');
|
|
17
17
|
};
|
|
18
|
-
const StyledEditableHtml = (0, _styles.styled)(
|
|
18
|
+
const StyledEditableHtml = (0, _styles.styled)(_editableHtmlTipTap.default)(({
|
|
19
19
|
theme
|
|
20
20
|
}) => ({
|
|
21
21
|
backgroundColor: theme.palette.common.white,
|
|
@@ -32,7 +32,7 @@ class ECRToolbar extends _react.default.Component {
|
|
|
32
32
|
(0, _defineProperty2.default)(this, "onDone", markup => {
|
|
33
33
|
const {
|
|
34
34
|
node,
|
|
35
|
-
|
|
35
|
+
editor,
|
|
36
36
|
onToolbarDone,
|
|
37
37
|
onChangeResponse
|
|
38
38
|
} = this.props;
|
|
@@ -40,16 +40,10 @@ class ECRToolbar extends _react.default.Component {
|
|
|
40
40
|
this.setState({
|
|
41
41
|
markup: sanitizedMarkup
|
|
42
42
|
});
|
|
43
|
-
|
|
44
|
-
...node.data.toJSON(),
|
|
43
|
+
editor.commands.updateAttributes('explicit_constructed_response', {
|
|
45
44
|
value: sanitizedMarkup
|
|
46
|
-
};
|
|
47
|
-
const change = value.change().setNodeByKey(node.key, {
|
|
48
|
-
data: updatedData
|
|
49
45
|
});
|
|
50
|
-
|
|
51
|
-
change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);
|
|
52
|
-
onToolbarDone(change, true);
|
|
46
|
+
onToolbarDone(true);
|
|
53
47
|
onChangeResponse(sanitizedMarkup);
|
|
54
48
|
});
|
|
55
49
|
(0, _defineProperty2.default)(this, "onRespAreaChange", respAreaMarkup => {
|
|
@@ -59,7 +53,7 @@ class ECRToolbar extends _react.default.Component {
|
|
|
59
53
|
});
|
|
60
54
|
(0, _defineProperty2.default)(this, "onKeyDown", event => {
|
|
61
55
|
if (event.key === 'Enter') {
|
|
62
|
-
return
|
|
56
|
+
return true;
|
|
63
57
|
}
|
|
64
58
|
});
|
|
65
59
|
(0, _defineProperty2.default)(this, "onBlur", () => {
|
|
@@ -71,14 +65,15 @@ class ECRToolbar extends _react.default.Component {
|
|
|
71
65
|
componentDidMount() {
|
|
72
66
|
const {
|
|
73
67
|
correctChoice,
|
|
74
|
-
node
|
|
68
|
+
node,
|
|
69
|
+
editor
|
|
75
70
|
} = this.props;
|
|
76
71
|
const choice = correctChoice || {};
|
|
77
|
-
const domNode =
|
|
78
|
-
if (domNode) {
|
|
72
|
+
const domNode = editor.view.nodeDOM(editor.state.selection.from);
|
|
73
|
+
if (domNode?.nodeType === 1) {
|
|
79
74
|
//eslint-disable-next-line
|
|
80
75
|
const domNodeRect = domNode.getBoundingClientRect();
|
|
81
|
-
const editor = domNode.closest('
|
|
76
|
+
const editor = domNode.closest('.tiptap');
|
|
82
77
|
const editorRect = editor.getBoundingClientRect();
|
|
83
78
|
const top = domNodeRect.top - editorRect.top;
|
|
84
79
|
const left = domNodeRect.left - editorRect.left;
|
|
@@ -86,8 +81,10 @@ class ECRToolbar extends _react.default.Component {
|
|
|
86
81
|
markup: choice.label,
|
|
87
82
|
toolbarStyle: {
|
|
88
83
|
position: 'absolute',
|
|
89
|
-
top: `${top + domNodeRect.height + 17}px`,
|
|
90
|
-
|
|
84
|
+
// top: `${top + domNodeRect.height + 17}px`,
|
|
85
|
+
top: 0,
|
|
86
|
+
// left: `${left + 20}px`,
|
|
87
|
+
left: 0,
|
|
91
88
|
width: `${domNodeRect.width - 4}px`
|
|
92
89
|
}
|
|
93
90
|
});
|
|
@@ -158,6 +155,7 @@ exports.ECRToolbar = ECRToolbar;
|
|
|
158
155
|
getNextText: _propTypes.default.func.isRequired
|
|
159
156
|
})
|
|
160
157
|
}),
|
|
158
|
+
editor: _propTypes.default.object,
|
|
161
159
|
maxLengthPerChoiceEnabled: _propTypes.default.bool,
|
|
162
160
|
pluginProps: _propTypes.default.object,
|
|
163
161
|
spellCheck: _propTypes.default.bool
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecr-toolbar.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_editableHtml","_markupUtils","findSlateNode","key","window","document","querySelector","StyledEditableHtml","styled","EditableHtml","theme","backgroundColor","palette","common","white","outline","lineHeight","ECRToolbar","React","Component","constructor","args","_defineProperty2","default","markup","toolbarStyle","node","value","onToolbarDone","onChangeResponse","props","sanitizedMarkup","stripHtmlTags","setState","updatedData","data","toJSON","change","setNodeByKey","nextText","getNextText","moveFocusTo","moveAnchorTo","respAreaMarkup","event","clickedInside","componentDidMount","correctChoice","choice","domNode","domNodeRect","getBoundingClientRect","editor","closest","editorRect","top","left","label","position","height","width","render","maxLengthPerChoiceEnabled","pluginProps","spellCheck","state","inputProps","maxLength","createElement","style","_extends2","autoFocus","disableUnderline","onChange","preventDone","onRespAreaChange","onDone","val","onBlur","e","relatedTarget","onKeyDown","activePlugins","languageCharactersProps","language","minHeight","maxHeight","autoWidthToolbar","toolbarOpts","minWidth","isHidden","characters","disabled","exports","PropTypes","object","func","isRequired","shape","bool","_default"],"sources":["../src/ecr-toolbar.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { stripHtmlTags } from './markupUtils';\n\nconst findSlateNode = (key) => {\n return window.document.querySelector('[data-key=\"' + key + '\"]');\n};\n\nconst StyledEditableHtml = styled(EditableHtml)(({ theme }) => ({\n backgroundColor: theme.palette.common.white,\n outline: 'none',\n lineHeight: '15px',\n}));\n\nexport class ECRToolbar extends React.Component {\n static propTypes = {\n correctChoice: PropTypes.object,\n node: PropTypes.object,\n onDone: PropTypes.func,\n onChangeResponse: PropTypes.func.isRequired,\n onToolbarDone: PropTypes.func.isRequired,\n value: PropTypes.shape({\n change: PropTypes.func.isRequired,\n document: PropTypes.shape({\n getNextText: PropTypes.func.isRequired,\n }),\n }),\n maxLengthPerChoiceEnabled: PropTypes.bool,\n pluginProps: PropTypes.object,\n spellCheck: PropTypes.bool,\n };\n\n state = {\n markup: '',\n toolbarStyle: {},\n };\n\n componentDidMount() {\n const { correctChoice, node } = this.props;\n const choice = correctChoice || {};\n\n const domNode = findSlateNode(node.key);\n\n if (domNode) {\n //eslint-disable-next-line\n const domNodeRect = domNode.getBoundingClientRect();\n const editor = domNode.closest('[data-slate-editor]');\n const editorRect = editor.getBoundingClientRect();\n const top = domNodeRect.top - editorRect.top;\n const left = domNodeRect.left - editorRect.left;\n\n this.setState({\n markup: choice.label,\n toolbarStyle: {\n position: 'absolute',\n top: `${top + domNodeRect.height + 17}px`,\n left: `${left + 20}px`,\n width: `${domNodeRect.width - 4}px`,\n },\n });\n }\n }\n\n onDone = (markup) => {\n const { node, value, onToolbarDone, onChangeResponse } = this.props;\n const sanitizedMarkup = stripHtmlTags(markup);\n this.setState({ markup: sanitizedMarkup });\n\n const updatedData = { ...node.data.toJSON(), value: sanitizedMarkup };\n const change = value.change().setNodeByKey(node.key, { data: updatedData });\n const nextText = value.document.getNextText(node.key);\n\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n onToolbarDone(change, true);\n onChangeResponse(sanitizedMarkup);\n };\n\n onRespAreaChange = (respAreaMarkup) => {\n this.setState({ respAreaMarkup });\n };\n\n onKeyDown = (event) => {\n if (event.key === 'Enter') {\n return false;\n }\n };\n\n onBlur = () => {\n if (this.clickedInside) {\n this.clickedInside = false;\n }\n };\n\n render() {\n const { maxLengthPerChoiceEnabled, pluginProps, spellCheck } = this.props;\n const { markup, toolbarStyle } = this.state;\n const inputProps = maxLengthPerChoiceEnabled ? {} : { maxLength: 25 };\n\n return (\n <div style={toolbarStyle}>\n <StyledEditableHtml\n autoFocus={true}\n disableUnderline\n onChange={(respAreaMarkup) => {\n if (this.preventDone) {\n return;\n }\n this.onRespAreaChange(respAreaMarkup);\n }}\n onDone={(val) => {\n if (this.preventDone) {\n return;\n }\n this.onDone(val);\n }}\n onBlur={(e) => {\n this.preventDone = e.relatedTarget && e.relatedTarget.closest('.insert-character-dialog');\n this.onBlur(e);\n }}\n onKeyDown={this.onKeyDown}\n markup={markup || ''}\n activePlugins={['languageCharacters']}\n pluginProps={pluginProps}\n languageCharactersProps={[{ language: 'spanish' }]}\n minHeight={'15px'}\n maxHeight={'15px'}\n spellCheck={spellCheck}\n autoWidthToolbar\n toolbarOpts={{\n minWidth: 'auto',\n isHidden: !!pluginProps?.characters?.disabled,\n }}\n {...inputProps}\n />\n </div>\n );\n }\n}\n\nexport default ECRToolbar;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ecr-toolbar.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_editableHtmlTipTap","_markupUtils","findSlateNode","key","window","document","querySelector","StyledEditableHtml","styled","EditableHtml","theme","backgroundColor","palette","common","white","outline","lineHeight","ECRToolbar","React","Component","constructor","args","_defineProperty2","default","markup","toolbarStyle","node","editor","onToolbarDone","onChangeResponse","props","sanitizedMarkup","stripHtmlTags","setState","commands","updateAttributes","value","respAreaMarkup","event","clickedInside","componentDidMount","correctChoice","choice","domNode","view","nodeDOM","state","selection","from","nodeType","domNodeRect","getBoundingClientRect","closest","editorRect","top","left","label","position","width","render","maxLengthPerChoiceEnabled","pluginProps","spellCheck","inputProps","maxLength","createElement","style","_extends2","autoFocus","disableUnderline","onChange","preventDone","onRespAreaChange","onDone","val","onBlur","e","relatedTarget","onKeyDown","activePlugins","languageCharactersProps","language","minHeight","maxHeight","autoWidthToolbar","toolbarOpts","minWidth","isHidden","characters","disabled","exports","PropTypes","object","func","isRequired","shape","change","getNextText","bool","_default"],"sources":["../src/ecr-toolbar.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport EditableHtml from '@pie-lib/editable-html-tip-tap';\nimport { stripHtmlTags } from './markupUtils';\n\nconst findSlateNode = (key) => {\n return window.document.querySelector('[data-key=\"' + key + '\"]');\n};\n\nconst StyledEditableHtml = styled(EditableHtml)(({ theme }) => ({\n backgroundColor: theme.palette.common.white,\n outline: 'none',\n lineHeight: '15px',\n}));\n\nexport class ECRToolbar extends React.Component {\n static propTypes = {\n correctChoice: PropTypes.object,\n node: PropTypes.object,\n onDone: PropTypes.func,\n onChangeResponse: PropTypes.func.isRequired,\n onToolbarDone: PropTypes.func.isRequired,\n value: PropTypes.shape({\n change: PropTypes.func.isRequired,\n document: PropTypes.shape({\n getNextText: PropTypes.func.isRequired,\n }),\n }),\n editor: PropTypes.object,\n maxLengthPerChoiceEnabled: PropTypes.bool,\n pluginProps: PropTypes.object,\n spellCheck: PropTypes.bool,\n };\n\n state = {\n markup: '',\n toolbarStyle: {},\n };\n\n componentDidMount() {\n const { correctChoice, node, editor } = this.props;\n const choice = correctChoice || {};\n\n const domNode = editor.view.nodeDOM(editor.state.selection.from);\n\n if (domNode?.nodeType === 1) {\n //eslint-disable-next-line\n const domNodeRect = domNode.getBoundingClientRect();\n const editor = domNode.closest('.tiptap');\n const editorRect = editor.getBoundingClientRect();\n const top = domNodeRect.top - editorRect.top;\n const left = domNodeRect.left - editorRect.left;\n\n this.setState({\n markup: choice.label,\n toolbarStyle: {\n position: 'absolute',\n // top: `${top + domNodeRect.height + 17}px`,\n top: 0,\n // left: `${left + 20}px`,\n left: 0,\n width: `${domNodeRect.width - 4}px`,\n },\n });\n }\n }\n\n onDone = (markup) => {\n const { node, editor, onToolbarDone, onChangeResponse } = this.props;\n const sanitizedMarkup = stripHtmlTags(markup);\n this.setState({ markup: sanitizedMarkup });\n\n editor.commands.updateAttributes('explicit_constructed_response', { value: sanitizedMarkup });\n\n onToolbarDone(true);\n onChangeResponse(sanitizedMarkup);\n };\n\n onRespAreaChange = (respAreaMarkup) => {\n this.setState({ respAreaMarkup });\n };\n\n onKeyDown = (event) => {\n if (event.key === 'Enter') {\n return true;\n }\n };\n\n onBlur = () => {\n if (this.clickedInside) {\n this.clickedInside = false;\n }\n };\n\n render() {\n const { maxLengthPerChoiceEnabled, pluginProps, spellCheck } = this.props;\n const { markup, toolbarStyle } = this.state;\n const inputProps = maxLengthPerChoiceEnabled ? {} : { maxLength: 25 };\n\n return (\n <div style={toolbarStyle}>\n <StyledEditableHtml\n autoFocus={true}\n disableUnderline\n onChange={(respAreaMarkup) => {\n if (this.preventDone) {\n return;\n }\n this.onRespAreaChange(respAreaMarkup);\n }}\n onDone={(val) => {\n if (this.preventDone) {\n return;\n }\n this.onDone(val);\n }}\n onBlur={(e) => {\n this.preventDone = e.relatedTarget && e.relatedTarget.closest('.insert-character-dialog');\n this.onBlur(e);\n }}\n onKeyDown={this.onKeyDown}\n markup={markup || ''}\n activePlugins={['languageCharacters']}\n pluginProps={pluginProps}\n languageCharactersProps={[{ language: 'spanish' }]}\n minHeight={'15px'}\n maxHeight={'15px'}\n spellCheck={spellCheck}\n autoWidthToolbar\n toolbarOpts={{\n minWidth: 'auto',\n isHidden: !!pluginProps?.characters?.disabled,\n }}\n {...inputProps}\n />\n </div>\n );\n }\n}\n\nexport default ECRToolbar;\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,mBAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AAEA,MAAMK,aAAa,GAAIC,GAAG,IAAK;EAC7B,OAAOC,MAAM,CAACC,QAAQ,CAACC,aAAa,CAAC,aAAa,GAAGH,GAAG,GAAG,IAAI,CAAC;AAClE,CAAC;AAED,MAAMI,kBAAkB,GAAG,IAAAC,cAAM,EAACC,2BAAY,CAAC,CAAC,CAAC;EAAEC;AAAM,CAAC,MAAM;EAC9DC,eAAe,EAAED,KAAK,CAACE,OAAO,CAACC,MAAM,CAACC,KAAK;EAC3CC,OAAO,EAAE,MAAM;EACfC,UAAU,EAAE;AACd,CAAC,CAAC,CAAC;AAEI,MAAMC,UAAU,SAASC,cAAK,CAACC,SAAS,CAAC;EAAAC,YAAA,GAAAC,IAAA;IAAA,SAAAA,IAAA;IAAA,IAAAC,gBAAA,CAAAC,OAAA,iBAmBtC;MACNC,MAAM,EAAE,EAAE;MACVC,YAAY,EAAE,CAAC;IACjB,CAAC;IAAA,IAAAH,gBAAA,CAAAC,OAAA,kBA8BSC,MAAM,IAAK;MACnB,MAAM;QAAEE,IAAI;QAAEC,MAAM;QAAEC,aAAa;QAAEC;MAAiB,CAAC,GAAG,IAAI,CAACC,KAAK;MACpE,MAAMC,eAAe,GAAG,IAAAC,0BAAa,EAACR,MAAM,CAAC;MAC7C,IAAI,CAACS,QAAQ,CAAC;QAAET,MAAM,EAAEO;MAAgB,CAAC,CAAC;MAE1CJ,MAAM,CAACO,QAAQ,CAACC,gBAAgB,CAAC,+BAA+B,EAAE;QAAEC,KAAK,EAAEL;MAAgB,CAAC,CAAC;MAE7FH,aAAa,CAAC,IAAI,CAAC;MACnBC,gBAAgB,CAACE,eAAe,CAAC;IACnC,CAAC;IAAA,IAAAT,gBAAA,CAAAC,OAAA,4BAEmBc,cAAc,IAAK;MACrC,IAAI,CAACJ,QAAQ,CAAC;QAAEI;MAAe,CAAC,CAAC;IACnC,CAAC;IAAA,IAAAf,gBAAA,CAAAC,OAAA,qBAEYe,KAAK,IAAK;MACrB,IAAIA,KAAK,CAACnC,GAAG,KAAK,OAAO,EAAE;QACzB,OAAO,IAAI;MACb;IACF,CAAC;IAAA,IAAAmB,gBAAA,CAAAC,OAAA,kBAEQ,MAAM;MACb,IAAI,IAAI,CAACgB,aAAa,EAAE;QACtB,IAAI,CAACA,aAAa,GAAG,KAAK;MAC5B;IACF,CAAC;EAAA;EArDDC,iBAAiBA,CAAA,EAAG;IAClB,MAAM;MAAEC,aAAa;MAAEf,IAAI;MAAEC;IAAO,CAAC,GAAG,IAAI,CAACG,KAAK;IAClD,MAAMY,MAAM,GAAGD,aAAa,IAAI,CAAC,CAAC;IAElC,MAAME,OAAO,GAAGhB,MAAM,CAACiB,IAAI,CAACC,OAAO,CAAClB,MAAM,CAACmB,KAAK,CAACC,SAAS,CAACC,IAAI,CAAC;IAEhE,IAAIL,OAAO,EAAEM,QAAQ,KAAK,CAAC,EAAE;MAC3B;MACA,MAAMC,WAAW,GAAGP,OAAO,CAACQ,qBAAqB,CAAC,CAAC;MACnD,MAAMxB,MAAM,GAAGgB,OAAO,CAACS,OAAO,CAAC,SAAS,CAAC;MACzC,MAAMC,UAAU,GAAG1B,MAAM,CAACwB,qBAAqB,CAAC,CAAC;MACjD,MAAMG,GAAG,GAAGJ,WAAW,CAACI,GAAG,GAAGD,UAAU,CAACC,GAAG;MAC5C,MAAMC,IAAI,GAAGL,WAAW,CAACK,IAAI,GAAGF,UAAU,CAACE,IAAI;MAE/C,IAAI,CAACtB,QAAQ,CAAC;QACZT,MAAM,EAAEkB,MAAM,CAACc,KAAK;QACpB/B,YAAY,EAAE;UACZgC,QAAQ,EAAE,UAAU;UACpB;UACAH,GAAG,EAAE,CAAC;UACN;UACAC,IAAI,EAAE,CAAC;UACPG,KAAK,EAAE,GAAGR,WAAW,CAACQ,KAAK,GAAG,CAAC;QACjC;MACF,CAAC,CAAC;IACJ;EACF;EA6BAC,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,yBAAyB;MAAEC,WAAW;MAAEC;IAAW,CAAC,GAAG,IAAI,CAAChC,KAAK;IACzE,MAAM;MAAEN,MAAM;MAAEC;IAAa,CAAC,GAAG,IAAI,CAACqB,KAAK;IAC3C,MAAMiB,UAAU,GAAGH,yBAAyB,GAAG,CAAC,CAAC,GAAG;MAAEI,SAAS,EAAE;IAAG,CAAC;IAErE,oBACErE,MAAA,CAAA4B,OAAA,CAAA0C,aAAA;MAAKC,KAAK,EAAEzC;IAAa,gBACvB9B,MAAA,CAAA4B,OAAA,CAAA0C,aAAA,CAAC1D,kBAAkB,MAAA4D,SAAA,CAAA5C,OAAA;MACjB6C,SAAS,EAAE,IAAK;MAChBC,gBAAgB;MAChBC,QAAQ,EAAGjC,cAAc,IAAK;QAC5B,IAAI,IAAI,CAACkC,WAAW,EAAE;UACpB;QACF;QACA,IAAI,CAACC,gBAAgB,CAACnC,cAAc,CAAC;MACvC,CAAE;MACFoC,MAAM,EAAGC,GAAG,IAAK;QACf,IAAI,IAAI,CAACH,WAAW,EAAE;UACpB;QACF;QACA,IAAI,CAACE,MAAM,CAACC,GAAG,CAAC;MAClB,CAAE;MACFC,MAAM,EAAGC,CAAC,IAAK;QACb,IAAI,CAACL,WAAW,GAAGK,CAAC,CAACC,aAAa,IAAID,CAAC,CAACC,aAAa,CAACzB,OAAO,CAAC,0BAA0B,CAAC;QACzF,IAAI,CAACuB,MAAM,CAACC,CAAC,CAAC;MAChB,CAAE;MACFE,SAAS,EAAE,IAAI,CAACA,SAAU;MAC1BtD,MAAM,EAAEA,MAAM,IAAI,EAAG;MACrBuD,aAAa,EAAE,CAAC,oBAAoB,CAAE;MACtClB,WAAW,EAAEA,WAAY;MACzBmB,uBAAuB,EAAE,CAAC;QAAEC,QAAQ,EAAE;MAAU,CAAC,CAAE;MACnDC,SAAS,EAAE,MAAO;MAClBC,SAAS,EAAE,MAAO;MAClBrB,UAAU,EAAEA,UAAW;MACvBsB,gBAAgB;MAChBC,WAAW,EAAE;QACXC,QAAQ,EAAE,MAAM;QAChBC,QAAQ,EAAE,CAAC,CAAC1B,WAAW,EAAE2B,UAAU,EAAEC;MACvC;IAAE,GACE1B,UAAU,CACf,CACE,CAAC;EAEV;AACF;AAAC2B,OAAA,CAAAzE,UAAA,GAAAA,UAAA;AAAA,IAAAK,gBAAA,CAAAC,OAAA,EA3HYN,UAAU,eACF;EACjBwB,aAAa,EAAEkD,kBAAS,CAACC,MAAM;EAC/BlE,IAAI,EAAEiE,kBAAS,CAACC,MAAM;EACtBnB,MAAM,EAAEkB,kBAAS,CAACE,IAAI;EACtBhE,gBAAgB,EAAE8D,kBAAS,CAACE,IAAI,CAACC,UAAU;EAC3ClE,aAAa,EAAE+D,kBAAS,CAACE,IAAI,CAACC,UAAU;EACxC1D,KAAK,EAAEuD,kBAAS,CAACI,KAAK,CAAC;IACrBC,MAAM,EAAEL,kBAAS,CAACE,IAAI,CAACC,UAAU;IACjCzF,QAAQ,EAAEsF,kBAAS,CAACI,KAAK,CAAC;MACxBE,WAAW,EAAEN,kBAAS,CAACE,IAAI,CAACC;IAC9B,CAAC;EACH,CAAC,CAAC;EACFnE,MAAM,EAAEgE,kBAAS,CAACC,MAAM;EACxBhC,yBAAyB,EAAE+B,kBAAS,CAACO,IAAI;EACzCrC,WAAW,EAAE8B,kBAAS,CAACC,MAAM;EAC7B9B,UAAU,EAAE6B,kBAAS,CAACO;AACxB,CAAC;AAAA,IAAAC,QAAA,GAAAT,OAAA,CAAAnE,OAAA,GA4GYN,UAAU","ignoreList":[]}
|
package/configure/lib/main.js
CHANGED
|
@@ -12,7 +12,7 @@ var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
|
12
12
|
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
13
13
|
var _pick = _interopRequireDefault(require("lodash/pick"));
|
|
14
14
|
var _throttle = _interopRequireDefault(require("lodash/throttle"));
|
|
15
|
-
var
|
|
15
|
+
var _editableHtmlTipTap = _interopRequireWildcard(require("@pie-lib/editable-html-tip-tap"));
|
|
16
16
|
var _configUi = require("@pie-lib/config-ui");
|
|
17
17
|
var _styles = require("@mui/material/styles");
|
|
18
18
|
var _Typography = _interopRequireDefault(require("@mui/material/Typography"));
|
|
@@ -36,7 +36,7 @@ const PromptHolder = (0, _styles.styled)(_configUi.InputContainer)(({
|
|
|
36
36
|
marginTop: theme.spacing(2),
|
|
37
37
|
marginBottom: theme.spacing(2)
|
|
38
38
|
}));
|
|
39
|
-
const MarkupContainer = (0, _styles.styled)(
|
|
39
|
+
const MarkupContainer = (0, _styles.styled)(_editableHtmlTipTap.default)(({
|
|
40
40
|
theme
|
|
41
41
|
}) => ({
|
|
42
42
|
minHeight: '100px',
|
|
@@ -149,7 +149,7 @@ class Main extends _react.default.Component {
|
|
|
149
149
|
maxLengthPerChoice
|
|
150
150
|
} = model;
|
|
151
151
|
const newValLength = (0, _markupUtils.decodeHTML)(newVal || '').length;
|
|
152
|
-
if (!choices[index]) {
|
|
152
|
+
if (!choices[index] || !choices[index].length) {
|
|
153
153
|
choices[index] = [{
|
|
154
154
|
label: newVal || '',
|
|
155
155
|
value: '0'
|
|
@@ -221,7 +221,7 @@ class Main extends _react.default.Component {
|
|
|
221
221
|
const newChoices = choices ? (0, _cloneDeep.default)(choices) : {};
|
|
222
222
|
const newCachedChoices = cachedChoices ? (0, _cloneDeep.default)(cachedChoices) : {};
|
|
223
223
|
nodes.forEach(node => {
|
|
224
|
-
const keyForNode = node.
|
|
224
|
+
const keyForNode = node.index;
|
|
225
225
|
if (!newChoices[keyForNode] && newCachedChoices[keyForNode]) {
|
|
226
226
|
Object.assign(newChoices, (0, _pick.default)(newCachedChoices, keyForNode));
|
|
227
227
|
if (Object.prototype.hasOwnProperty.call(newCachedChoices, keyForNode)) {
|
|
@@ -363,7 +363,7 @@ class Main extends _react.default.Component {
|
|
|
363
363
|
})
|
|
364
364
|
}, teacherInstructionsEnabled && /*#__PURE__*/_react.default.createElement(PromptHolder, {
|
|
365
365
|
label: teacherInstructions.label
|
|
366
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
366
|
+
}, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
|
|
367
367
|
className: "prompt",
|
|
368
368
|
markup: model.teacherInstructions || '',
|
|
369
369
|
onChange: this.onTeacherInstructionsChanged,
|
|
@@ -385,7 +385,7 @@ class Main extends _react.default.Component {
|
|
|
385
385
|
autoWidthToolbar: true
|
|
386
386
|
}), teacherInstructionsError && /*#__PURE__*/_react.default.createElement(ErrorText, null, teacherInstructionsError)), promptEnabled && /*#__PURE__*/_react.default.createElement(PromptHolder, {
|
|
387
387
|
label: prompt.label
|
|
388
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
388
|
+
}, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
|
|
389
389
|
className: "prompt",
|
|
390
390
|
markup: model.prompt,
|
|
391
391
|
onChange: this.onPromptChanged,
|
|
@@ -420,7 +420,7 @@ class Main extends _react.default.Component {
|
|
|
420
420
|
marginLeft: '8px'
|
|
421
421
|
}
|
|
422
422
|
}))), /*#__PURE__*/_react.default.createElement(MarkupContainer, {
|
|
423
|
-
activePlugins:
|
|
423
|
+
activePlugins: _editableHtmlTipTap.ALL_PLUGINS,
|
|
424
424
|
toolbarOpts: {
|
|
425
425
|
position: 'top'
|
|
426
426
|
},
|
|
@@ -432,15 +432,15 @@ class Main extends _react.default.Component {
|
|
|
432
432
|
duplicates: true
|
|
433
433
|
},
|
|
434
434
|
maxResponseAreas: maxResponseAreas,
|
|
435
|
-
respAreaToolbar: (node,
|
|
435
|
+
respAreaToolbar: (node, editor, onToolbarDone) => {
|
|
436
436
|
const {
|
|
437
437
|
model
|
|
438
438
|
} = this.props;
|
|
439
|
-
const correctChoice = (model.choices[node.
|
|
439
|
+
const correctChoice = (model.choices[node.attrs.index] || [])[0];
|
|
440
440
|
return () => /*#__PURE__*/_react.default.createElement(_ecrToolbar.default, {
|
|
441
|
-
onChangeResponse: newVal => this.onChangeResponse(node.
|
|
441
|
+
onChangeResponse: newVal => this.onChangeResponse(node.attrs.index, newVal),
|
|
442
442
|
node: node,
|
|
443
|
-
|
|
443
|
+
editor: editor,
|
|
444
444
|
onToolbarDone: onToolbarDone,
|
|
445
445
|
correctChoice: correctChoice,
|
|
446
446
|
maxLengthPerChoiceEnabled: maxLengthPerChoiceEnabled,
|
|
@@ -476,7 +476,7 @@ class Main extends _react.default.Component {
|
|
|
476
476
|
pluginProps: getPluginProps(responseAreaInputConfiguration?.inputConfiguration)
|
|
477
477
|
}), rationaleEnabled && /*#__PURE__*/_react.default.createElement(PromptHolder, {
|
|
478
478
|
label: rationale.label
|
|
479
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
479
|
+
}, /*#__PURE__*/_react.default.createElement(_editableHtmlTipTap.default, {
|
|
480
480
|
className: "prompt",
|
|
481
481
|
markup: model.rationale || '',
|
|
482
482
|
onChange: this.onRationaleChanged,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","names":["_react","_interopRequireDefault","require","_propTypes","_cloneDeep","_isEmpty","_pick","_throttle","_editableHtml","_interopRequireWildcard","_configUi","_styles","_Typography","_Info","_Tooltip","_ecrToolbar","_alternateResponses","_markupUtils","_utils","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","toggle","Panel","dropdown","settings","PromptHolder","styled","InputContainer","theme","width","paddingTop","spacing","marginTop","marginBottom","MarkupContainer","EditableHtml","minHeight","StyledText","Typography","fontSize","typography","StyledTooltip","Tooltip","whiteSpace","maxWidth","ErrorText","color","palette","error","main","FlexContainer","display","alignItems","ResponseHeader","createElementFromHTML","htmlString","div","document","createElement","innerHTML","trim","Main","React","Component","constructor","args","_defineProperty2","newVal","props","onModelChanged","model","prompt","rationale","teacherInstructions","slateMarkup","choices","maxLengthPerChoice","index","newValLength","decodeHTML","length","label","value","nbOfMissingChoices","Array","fill","splice","getAdjustedLength","markup","domMarkup","allRespAreas","querySelectorAll","allChoices","updatedMaxLengthPerChoice","forEach","el","newChoices","cloneDeep","dataset","callback","setState","cachedChoices","undefined","throttle","nodes","state","newCachedChoices","node","keyForNode","data","assign","pick","prototype","trailing","leading","componentDidMount","undefinedLengths","values","choice","labelLengthsArr","map","Math","max","render","configuration","onConfigurationChanged","imageSupport","uploadSoundSupport","baseInputConfiguration","contentDimensions","maxImageWidth","maxImageHeight","maxResponseAreas","partialScoring","playerSpellCheck","template","settingsPanelDisabled","spellCheck","editSource","withRubric","mathMlOptions","language","languageChoices","spanishButton","responseAreaInputConfiguration","errors","extraCSSRules","maxLengthPerChoiceEnabled","promptEnabled","rationaleEnabled","spellCheckEnabled","teacherInstructionsEnabled","toolbarEditorPosition","choicesErrors","promptError","rationaleError","responseAreas","responseAreasError","teacherInstructionsError","validationMessage","generateValidationMessage","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","panelSettings","enabled","options","panelProperties","playerSpellCheckEnabled","rubricEnabled","getPluginProps","layout","ConfigLayout","dimensions","hideSettings","onChangeModel","onModelChange","onChangeConfiguration","groups","Settings","Properties","className","onChange","onTeacherInstructionsChanged","nonEmpty","pluginProps","inputConfiguration","languageCharactersProps","autoWidthToolbar","onPromptChanged","disableUnderline","component","disableFocusListener","disableTouchListener","placement","title","style","marginLeft","activePlugins","ALL_PLUGINS","responseAreaProps","type","duplicates","respAreaToolbar","onToolbarDone","correctChoice","onChangeResponse","onHandleAreaChange","disableImageAlignmentButtons","onBlur","disabled","highlightShape","isEmpty","onResponsesChanged","onLengthChange","onLengthChanged","onRationaleChanged","exports","PropTypes","object","isRequired","disableSidePanel","bool","func","shape","add","delete","_default"],"sources":["../src/main.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEmpty from 'lodash/isEmpty';\nimport pick from 'lodash/pick';\nimport throttle from 'lodash/throttle';\nimport EditableHtml, { ALL_PLUGINS } from '@pie-lib/editable-html';\nimport { InputContainer, layout, settings } from '@pie-lib/config-ui';\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport Info from '@mui/icons-material/Info';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport ECRToolbar from './ecr-toolbar';\nimport AlternateResponses from './alternateResponses';\nimport { decodeHTML, getAdjustedLength } from './markupUtils';\nimport { generateValidationMessage } from './utils';\n\nconst { toggle, Panel, dropdown } = settings;\n\nconst PromptHolder = styled(InputContainer)(({ theme }) => ({\n width: '100%',\n paddingTop: theme.spacing(1),\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n}));\n\nconst MarkupContainer = styled(EditableHtml)(({ theme }) => ({\n minHeight: '100px',\n paddingTop: theme.spacing(1),\n width: '100%',\n '& [data-slate-editor=\"true\"]': {\n minHeight: '100px',\n },\n}));\n\nconst StyledText = styled(Typography)(({ theme }) => ({\n fontSize: theme.typography.fontSize + 2,\n}));\n\nconst StyledTooltip = styled(Tooltip)(({ theme }) => ({\n '& .MuiTooltip-tooltip': {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n}));\n\nconst ErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing(1),\n}));\n\nconst FlexContainer = styled('div')({\n display: 'flex',\n alignItems: 'center',\n});\n\nconst ResponseHeader = styled(Typography)(({ theme }) => ({\n fontSize: theme.typography.fontSize + 2,\n marginTop: theme.spacing(3),\n marginBottom: theme.spacing(1),\n}));\n\nconst createElementFromHTML = (htmlString) => {\n const div = document.createElement('div');\n div.innerHTML = htmlString.trim();\n\n return div;\n};\n\nexport class Main extends React.Component {\n static propTypes = {\n configuration: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n disableSidePanel: PropTypes.bool,\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.object,\n };\n\n state = {};\n\n componentDidMount() {\n const {\n model: { slateMarkup, choices, maxLengthPerChoice = [] },\n onModelChanged,\n } = this.props;\n const undefinedLengths = !maxLengthPerChoice.length;\n\n this.setState({ markup: slateMarkup });\n\n // calculate maxLengthPerChoice array if it is not defined or defined incorrectly\n Object.values(choices).forEach((choice, index) => {\n const labelLengthsArr = choice.map((choice) => decodeHTML(choice.label || '').length);\n const length = Math.max(...labelLengthsArr);\n\n if (\n undefinedLengths ||\n !maxLengthPerChoice[index] ||\n maxLengthPerChoice[index] < length ||\n maxLengthPerChoice[index] > length + 10\n ) {\n maxLengthPerChoice[index] = getAdjustedLength(length);\n }\n });\n\n onModelChanged({ ...this.props.model, maxLengthPerChoice });\n }\n\n onModelChange = (newVal) => {\n this.props.onModelChanged({ ...this.props.model, ...newVal });\n };\n\n onPromptChanged = (prompt) => {\n this.props.onModelChanged({ ...this.props.model, prompt });\n };\n\n onRationaleChanged = (rationale) => {\n this.props.onModelChanged({ ...this.props.model, rationale });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({ ...model, teacherInstructions });\n };\n\n onMarkupChanged = (slateMarkup) => {\n this.props.onModelChanged({ ...this.props.model, slateMarkup });\n };\n\n onResponsesChanged = (choices) => {\n this.props.onModelChanged({ ...this.props.model, choices });\n };\n\n onLengthChanged = (maxLengthPerChoice) => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({ ...model, maxLengthPerChoice });\n };\n\n onChangeResponse = (index, newVal) => {\n const { model, onModelChanged } = this.props;\n const { choices } = model;\n let { maxLengthPerChoice } = model;\n const newValLength = decodeHTML(newVal || '').length;\n\n if (!choices[index]) {\n choices[index] = [{ label: newVal || '', value: '0' }];\n\n // add default values for missing choices up to the new index position\n const nbOfMissingChoices = index > maxLengthPerChoice.length ? index - maxLengthPerChoice.length : 0;\n\n maxLengthPerChoice = [...maxLengthPerChoice, ...Array(nbOfMissingChoices).fill(1)];\n\n maxLengthPerChoice.splice(index, 0, getAdjustedLength(newValLength));\n } else {\n choices[index][0].label = newVal || '';\n\n if (\n maxLengthPerChoice &&\n (maxLengthPerChoice[index] < newValLength || maxLengthPerChoice[index] > newValLength + 10)\n ) {\n maxLengthPerChoice[index] = getAdjustedLength(newValLength);\n }\n }\n\n onModelChanged({ ...model, choices, maxLengthPerChoice });\n };\n\n onChange = (markup) => {\n const {\n model: { choices, maxLengthPerChoice },\n onModelChanged,\n } = this.props;\n const domMarkup = createElementFromHTML(markup);\n const allRespAreas = domMarkup.querySelectorAll('[data-type=\"explicit_constructed_response\"]');\n\n const allChoices = {};\n const updatedMaxLengthPerChoice = [];\n\n allRespAreas.forEach((el, index) => {\n const newChoices = cloneDeep(choices[el.dataset.index]);\n\n if (newChoices) {\n newChoices[0] = {\n label: el.dataset.value || '',\n value: '0',\n };\n\n updatedMaxLengthPerChoice[index] = maxLengthPerChoice[el.dataset.index];\n }\n\n allChoices[index] = newChoices;\n el.dataset.index = index;\n });\n\n const callback = () =>\n onModelChanged({\n ...this.props.model,\n choices: allChoices,\n slateMarkup: domMarkup.innerHTML,\n maxLengthPerChoice: updatedMaxLengthPerChoice,\n });\n\n this.setState({ cachedChoices: undefined }, callback);\n };\n\n onHandleAreaChange = throttle(\n (nodes) => {\n const {\n model: { choices },\n onModelChanged,\n } = this.props;\n const { cachedChoices } = this.state;\n\n if (!nodes) {\n return;\n }\n\n const newChoices = choices ? cloneDeep(choices) : {};\n const newCachedChoices = cachedChoices ? cloneDeep(cachedChoices) : {};\n\n nodes.forEach((node) => {\n const keyForNode = node.data.get('index');\n\n if (!newChoices[keyForNode] && newCachedChoices[keyForNode]) {\n Object.assign(newChoices, pick(newCachedChoices, keyForNode));\n\n if (Object.prototype.hasOwnProperty.call(newCachedChoices, keyForNode)) {\n delete newCachedChoices[keyForNode];\n }\n } else {\n Object.assign(newCachedChoices, pick(newChoices, keyForNode));\n\n if (Object.prototype.hasOwnProperty.call(newChoices, keyForNode)) {\n delete newChoices[keyForNode];\n }\n }\n });\n\n const callback = () => onModelChanged({ ...this.props.model, choices: newChoices });\n\n this.setState({ cachedChoices: newCachedChoices }, callback);\n },\n 500,\n { trailing: false, leading: true },\n );\n\n render() {\n const { model, configuration, onConfigurationChanged, imageSupport, uploadSoundSupport } = this.props;\n\n const {\n baseInputConfiguration = {},\n contentDimensions = {},\n maxImageWidth = {},\n maxImageHeight = {},\n maxLengthPerChoice = {},\n maxResponseAreas,\n partialScoring = {},\n playerSpellCheck = {},\n prompt = {},\n rationale = {},\n template = {},\n settingsPanelDisabled,\n spellCheck = {},\n editSource = {},\n teacherInstructions = {},\n withRubric = {},\n mathMlOptions = {},\n language = {},\n languageChoices = {},\n spanishButton = {},\n responseAreaInputConfiguration = {},\n } = configuration || {};\n const {\n errors,\n extraCSSRules,\n maxLengthPerChoiceEnabled,\n promptEnabled,\n rationaleEnabled,\n spellCheckEnabled,\n teacherInstructionsEnabled,\n toolbarEditorPosition,\n } = model || {};\n\n const {\n choices: choicesErrors = {},\n prompt: promptError,\n rationale: rationaleError,\n responseAreas: responseAreasError,\n teacherInstructions: teacherInstructionsError,\n } = errors || {};\n const validationMessage = generateValidationMessage(configuration);\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n const panelSettings = {\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n maxLengthPerChoiceEnabled: maxLengthPerChoice.settings && toggle(maxLengthPerChoice.label),\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n 'responseAreaInputConfiguration.inputConfiguration.characters.disabled':\n spanishButton.settings && toggle(spanishButton.label, true),\n };\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n playerSpellCheckEnabled: playerSpellCheck.settings && toggle(playerSpellCheck.label),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n 'editSource.enabled': editSource?.settings && toggle(editSource.label, true),\n };\n\n const getPluginProps = (props = {}) => ({\n ...baseInputConfiguration,\n ...props,\n });\n return (\n <layout.ConfigLayout\n extraCSSRules={extraCSSRules}\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n configuration={configuration}\n onChangeModel={(model) => this.onModelChange(model)}\n onChangeConfiguration={(configuration) => onConfigurationChanged(configuration, true)}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n {teacherInstructionsEnabled && (\n <PromptHolder label={teacherInstructions.label}>\n <EditableHtml\n className=\"prompt\"\n markup={model.teacherInstructions || ''}\n onChange={this.onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={teacherInstructionsError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(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 autoWidthToolbar\n />\n {teacherInstructionsError && <ErrorText>{teacherInstructionsError}</ErrorText>}\n </PromptHolder>\n )}\n\n {promptEnabled && (\n <PromptHolder label={prompt.label}>\n <EditableHtml\n className=\"prompt\"\n markup={model.prompt}\n onChange={this.onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n disableUnderline\n error={promptError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(prompt?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n autoWidthToolbar\n />\n {promptError && <ErrorText>{promptError}</ErrorText>}\n </PromptHolder>\n )}\n\n <FlexContainer>\n <StyledText component=\"div\">\n Define Template, Choices, and Correct Responses\n </StyledText>\n <StyledTooltip\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ marginLeft: '8px' }} />\n </StyledTooltip>\n </FlexContainer>\n\n <MarkupContainer\n activePlugins={ALL_PLUGINS}\n toolbarOpts={{ position: 'top' }}\n spellCheck={spellCheckEnabled}\n pluginProps={getPluginProps(template?.inputConfiguration)}\n responseAreaProps={{\n type: 'explicit-constructed-response',\n options: {\n duplicates: true,\n },\n maxResponseAreas: maxResponseAreas,\n respAreaToolbar: (node, value, onToolbarDone) => {\n const { model } = this.props;\n const correctChoice = (model.choices[node.data.get('index')] || [])[0];\n return () => (\n <ECRToolbar\n onChangeResponse={(newVal) => this.onChangeResponse(node.data.get('index'), newVal)}\n node={node}\n value={value}\n onToolbarDone={onToolbarDone}\n correctChoice={correctChoice}\n maxLengthPerChoiceEnabled={maxLengthPerChoiceEnabled}\n pluginProps={getPluginProps(responseAreaInputConfiguration?.inputConfiguration)}\n />\n );\n },\n error: () => choicesErrors,\n onHandleAreaChange: this.onHandleAreaChange,\n }}\n markup={model.slateMarkup}\n onChange={this.onChange}\n imageSupport={imageSupport}\n disableImageAlignmentButtons={true}\n onBlur={this.onBlur}\n disabled={false}\n highlightShape={false}\n error={responseAreasError}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n autoWidthToolbar\n />\n {responseAreasError && <ErrorText>{responseAreasError}</ErrorText>}\n\n {!isEmpty(model.choices) && (\n <ResponseHeader>\n {`Define Alternates ${maxLengthPerChoiceEnabled ? 'and Character Limits' : ''}`}\n </ResponseHeader>\n )}\n <AlternateResponses\n model={model}\n onChange={this.onResponsesChanged}\n onLengthChange={this.onLengthChanged}\n maxLengthPerChoiceEnabled={maxLengthPerChoiceEnabled}\n spellCheck={spellCheckEnabled}\n choicesErrors={choicesErrors}\n pluginProps={getPluginProps(responseAreaInputConfiguration?.inputConfiguration)}\n />\n\n {rationaleEnabled && (\n <PromptHolder label={rationale.label}>\n <EditableHtml\n className=\"prompt\"\n markup={model.rationale || ''}\n onChange={this.onRationaleChanged}\n imageSupport={imageSupport}\n error={rationaleError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(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 autoWidthToolbar\n />\n {rationaleError && <ErrorText>{rationaleError}</ErrorText>}\n </PromptHolder>\n )}\n </layout.ConfigLayout>\n );\n }\n}\n\nexport default Main;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"main.js","names":["_react","_interopRequireDefault","require","_propTypes","_cloneDeep","_isEmpty","_pick","_throttle","_editableHtmlTipTap","_interopRequireWildcard","_configUi","_styles","_Typography","_Info","_Tooltip","_ecrToolbar","_alternateResponses","_markupUtils","_utils","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","toggle","Panel","dropdown","settings","PromptHolder","styled","InputContainer","theme","width","paddingTop","spacing","marginTop","marginBottom","MarkupContainer","EditableHtml","minHeight","StyledText","Typography","fontSize","typography","StyledTooltip","Tooltip","whiteSpace","maxWidth","ErrorText","color","palette","error","main","FlexContainer","display","alignItems","ResponseHeader","createElementFromHTML","htmlString","div","document","createElement","innerHTML","trim","Main","React","Component","constructor","args","_defineProperty2","newVal","props","onModelChanged","model","prompt","rationale","teacherInstructions","slateMarkup","choices","maxLengthPerChoice","index","newValLength","decodeHTML","length","label","value","nbOfMissingChoices","Array","fill","splice","getAdjustedLength","markup","domMarkup","allRespAreas","querySelectorAll","allChoices","updatedMaxLengthPerChoice","forEach","el","newChoices","cloneDeep","dataset","callback","setState","cachedChoices","undefined","throttle","nodes","state","newCachedChoices","node","keyForNode","assign","pick","prototype","trailing","leading","componentDidMount","undefinedLengths","values","choice","labelLengthsArr","map","Math","max","render","configuration","onConfigurationChanged","imageSupport","uploadSoundSupport","baseInputConfiguration","contentDimensions","maxImageWidth","maxImageHeight","maxResponseAreas","partialScoring","playerSpellCheck","template","settingsPanelDisabled","spellCheck","editSource","withRubric","mathMlOptions","language","languageChoices","spanishButton","responseAreaInputConfiguration","errors","extraCSSRules","maxLengthPerChoiceEnabled","promptEnabled","rationaleEnabled","spellCheckEnabled","teacherInstructionsEnabled","toolbarEditorPosition","choicesErrors","promptError","rationaleError","responseAreas","responseAreasError","teacherInstructionsError","validationMessage","generateValidationMessage","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","panelSettings","enabled","options","panelProperties","playerSpellCheckEnabled","rubricEnabled","getPluginProps","layout","ConfigLayout","dimensions","hideSettings","onChangeModel","onModelChange","onChangeConfiguration","groups","Settings","Properties","className","onChange","onTeacherInstructionsChanged","nonEmpty","pluginProps","inputConfiguration","languageCharactersProps","autoWidthToolbar","onPromptChanged","disableUnderline","component","disableFocusListener","disableTouchListener","placement","title","style","marginLeft","activePlugins","ALL_PLUGINS","responseAreaProps","type","duplicates","respAreaToolbar","editor","onToolbarDone","correctChoice","attrs","onChangeResponse","onHandleAreaChange","disableImageAlignmentButtons","onBlur","disabled","highlightShape","isEmpty","onResponsesChanged","onLengthChange","onLengthChanged","onRationaleChanged","exports","PropTypes","object","isRequired","disableSidePanel","bool","func","shape","add","delete","_default"],"sources":["../src/main.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEmpty from 'lodash/isEmpty';\nimport pick from 'lodash/pick';\nimport throttle from 'lodash/throttle';\nimport EditableHtml, { ALL_PLUGINS } from '@pie-lib/editable-html-tip-tap';\nimport { InputContainer, layout, settings } from '@pie-lib/config-ui';\nimport { styled } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport Info from '@mui/icons-material/Info';\nimport Tooltip from '@mui/material/Tooltip';\n\nimport ECRToolbar from './ecr-toolbar';\nimport AlternateResponses from './alternateResponses';\nimport { decodeHTML, getAdjustedLength } from './markupUtils';\nimport { generateValidationMessage } from './utils';\n\nconst { toggle, Panel, dropdown } = settings;\n\nconst PromptHolder = styled(InputContainer)(({ theme }) => ({\n width: '100%',\n paddingTop: theme.spacing(1),\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n}));\n\nconst MarkupContainer = styled(EditableHtml)(({ theme }) => ({\n minHeight: '100px',\n paddingTop: theme.spacing(1),\n width: '100%',\n '& [data-slate-editor=\"true\"]': {\n minHeight: '100px',\n },\n}));\n\nconst StyledText = styled(Typography)(({ theme }) => ({\n fontSize: theme.typography.fontSize + 2,\n}));\n\nconst StyledTooltip = styled(Tooltip)(({ theme }) => ({\n '& .MuiTooltip-tooltip': {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n}));\n\nconst ErrorText = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing(1),\n}));\n\nconst FlexContainer = styled('div')({\n display: 'flex',\n alignItems: 'center',\n});\n\nconst ResponseHeader = styled(Typography)(({ theme }) => ({\n fontSize: theme.typography.fontSize + 2,\n marginTop: theme.spacing(3),\n marginBottom: theme.spacing(1),\n}));\n\nconst createElementFromHTML = (htmlString) => {\n const div = document.createElement('div');\n div.innerHTML = htmlString.trim();\n\n return div;\n};\n\nexport class Main extends React.Component {\n static propTypes = {\n configuration: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n disableSidePanel: PropTypes.bool,\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.object,\n };\n\n state = {};\n\n componentDidMount() {\n const {\n model: { slateMarkup, choices, maxLengthPerChoice = [] },\n onModelChanged,\n } = this.props;\n const undefinedLengths = !maxLengthPerChoice.length;\n\n this.setState({ markup: slateMarkup });\n\n // calculate maxLengthPerChoice array if it is not defined or defined incorrectly\n Object.values(choices).forEach((choice, index) => {\n const labelLengthsArr = choice.map((choice) => decodeHTML(choice.label || '').length);\n const length = Math.max(...labelLengthsArr);\n\n if (\n undefinedLengths ||\n !maxLengthPerChoice[index] ||\n maxLengthPerChoice[index] < length ||\n maxLengthPerChoice[index] > length + 10\n ) {\n maxLengthPerChoice[index] = getAdjustedLength(length);\n }\n });\n\n onModelChanged({ ...this.props.model, maxLengthPerChoice });\n }\n\n onModelChange = (newVal) => {\n this.props.onModelChanged({ ...this.props.model, ...newVal });\n };\n\n onPromptChanged = (prompt) => {\n this.props.onModelChanged({ ...this.props.model, prompt });\n };\n\n onRationaleChanged = (rationale) => {\n this.props.onModelChanged({ ...this.props.model, rationale });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({ ...model, teacherInstructions });\n };\n\n onMarkupChanged = (slateMarkup) => {\n this.props.onModelChanged({ ...this.props.model, slateMarkup });\n };\n\n onResponsesChanged = (choices) => {\n this.props.onModelChanged({ ...this.props.model, choices });\n };\n\n onLengthChanged = (maxLengthPerChoice) => {\n const { model, onModelChanged } = this.props;\n\n onModelChanged({ ...model, maxLengthPerChoice });\n };\n\n onChangeResponse = (index, newVal) => {\n const { model, onModelChanged } = this.props;\n const { choices } = model;\n let { maxLengthPerChoice } = model;\n const newValLength = decodeHTML(newVal || '').length;\n\n if (!choices[index] || !choices[index].length) {\n choices[index] = [{ label: newVal || '', value: '0' }];\n\n // add default values for missing choices up to the new index position\n const nbOfMissingChoices = index > maxLengthPerChoice.length ? index - maxLengthPerChoice.length : 0;\n\n maxLengthPerChoice = [...maxLengthPerChoice, ...Array(nbOfMissingChoices).fill(1)];\n\n maxLengthPerChoice.splice(index, 0, getAdjustedLength(newValLength));\n } else {\n choices[index][0].label = newVal || '';\n\n if (\n maxLengthPerChoice &&\n (maxLengthPerChoice[index] < newValLength || maxLengthPerChoice[index] > newValLength + 10)\n ) {\n maxLengthPerChoice[index] = getAdjustedLength(newValLength);\n }\n }\n\n onModelChanged({ ...model, choices, maxLengthPerChoice });\n };\n\n onChange = (markup) => {\n const {\n model: { choices, maxLengthPerChoice },\n onModelChanged,\n } = this.props;\n const domMarkup = createElementFromHTML(markup);\n const allRespAreas = domMarkup.querySelectorAll('[data-type=\"explicit_constructed_response\"]');\n\n const allChoices = {};\n const updatedMaxLengthPerChoice = [];\n\n allRespAreas.forEach((el, index) => {\n const newChoices = cloneDeep(choices[el.dataset.index]);\n\n if (newChoices) {\n newChoices[0] = {\n label: el.dataset.value || '',\n value: '0',\n };\n\n updatedMaxLengthPerChoice[index] = maxLengthPerChoice[el.dataset.index];\n }\n\n allChoices[index] = newChoices;\n el.dataset.index = index;\n });\n\n const callback = () =>\n onModelChanged({\n ...this.props.model,\n choices: allChoices,\n slateMarkup: domMarkup.innerHTML,\n maxLengthPerChoice: updatedMaxLengthPerChoice,\n });\n\n this.setState({ cachedChoices: undefined }, callback);\n };\n\n onHandleAreaChange = throttle(\n (nodes) => {\n const {\n model: { choices },\n onModelChanged,\n } = this.props;\n const { cachedChoices } = this.state;\n\n if (!nodes) {\n return;\n }\n\n const newChoices = choices ? cloneDeep(choices) : {};\n const newCachedChoices = cachedChoices ? cloneDeep(cachedChoices) : {};\n\n nodes.forEach((node) => {\n const keyForNode = node.index;\n\n if (!newChoices[keyForNode] && newCachedChoices[keyForNode]) {\n Object.assign(newChoices, pick(newCachedChoices, keyForNode));\n\n if (Object.prototype.hasOwnProperty.call(newCachedChoices, keyForNode)) {\n delete newCachedChoices[keyForNode];\n }\n } else {\n Object.assign(newCachedChoices, pick(newChoices, keyForNode));\n\n if (Object.prototype.hasOwnProperty.call(newChoices, keyForNode)) {\n delete newChoices[keyForNode];\n }\n }\n });\n\n const callback = () => onModelChanged({ ...this.props.model, choices: newChoices });\n\n this.setState({ cachedChoices: newCachedChoices }, callback);\n },\n 500,\n { trailing: false, leading: true },\n );\n\n render() {\n const { model, configuration, onConfigurationChanged, imageSupport, uploadSoundSupport } = this.props;\n\n const {\n baseInputConfiguration = {},\n contentDimensions = {},\n maxImageWidth = {},\n maxImageHeight = {},\n maxLengthPerChoice = {},\n maxResponseAreas,\n partialScoring = {},\n playerSpellCheck = {},\n prompt = {},\n rationale = {},\n template = {},\n settingsPanelDisabled,\n spellCheck = {},\n editSource = {},\n teacherInstructions = {},\n withRubric = {},\n mathMlOptions = {},\n language = {},\n languageChoices = {},\n spanishButton = {},\n responseAreaInputConfiguration = {},\n } = configuration || {};\n const {\n errors,\n extraCSSRules,\n maxLengthPerChoiceEnabled,\n promptEnabled,\n rationaleEnabled,\n spellCheckEnabled,\n teacherInstructionsEnabled,\n toolbarEditorPosition,\n } = model || {};\n\n const {\n choices: choicesErrors = {},\n prompt: promptError,\n rationale: rationaleError,\n responseAreas: responseAreasError,\n teacherInstructions: teacherInstructionsError,\n } = errors || {};\n const validationMessage = generateValidationMessage(configuration);\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n const panelSettings = {\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n maxLengthPerChoiceEnabled: maxLengthPerChoice.settings && toggle(maxLengthPerChoice.label),\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n 'responseAreaInputConfiguration.inputConfiguration.characters.disabled':\n spanishButton.settings && toggle(spanishButton.label, true),\n };\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n playerSpellCheckEnabled: playerSpellCheck.settings && toggle(playerSpellCheck.label),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n 'editSource.enabled': editSource?.settings && toggle(editSource.label, true),\n };\n\n const getPluginProps = (props = {}) => ({\n ...baseInputConfiguration,\n ...props,\n });\n return (\n <layout.ConfigLayout\n extraCSSRules={extraCSSRules}\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n configuration={configuration}\n onChangeModel={(model) => this.onModelChange(model)}\n onChangeConfiguration={(configuration) => onConfigurationChanged(configuration, true)}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n {teacherInstructionsEnabled && (\n <PromptHolder label={teacherInstructions.label}>\n <EditableHtml\n className=\"prompt\"\n markup={model.teacherInstructions || ''}\n onChange={this.onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={teacherInstructionsError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(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 autoWidthToolbar\n />\n {teacherInstructionsError && <ErrorText>{teacherInstructionsError}</ErrorText>}\n </PromptHolder>\n )}\n\n {promptEnabled && (\n <PromptHolder label={prompt.label}>\n <EditableHtml\n className=\"prompt\"\n markup={model.prompt}\n onChange={this.onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n disableUnderline\n error={promptError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(prompt?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n autoWidthToolbar\n />\n {promptError && <ErrorText>{promptError}</ErrorText>}\n </PromptHolder>\n )}\n\n <FlexContainer>\n <StyledText component=\"div\">\n Define Template, Choices, and Correct Responses\n </StyledText>\n <StyledTooltip\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ marginLeft: '8px' }} />\n </StyledTooltip>\n </FlexContainer>\n\n <MarkupContainer\n activePlugins={ALL_PLUGINS}\n toolbarOpts={{ position: 'top' }}\n spellCheck={spellCheckEnabled}\n pluginProps={getPluginProps(template?.inputConfiguration)}\n responseAreaProps={{\n type: 'explicit-constructed-response',\n options: {\n duplicates: true,\n },\n maxResponseAreas: maxResponseAreas,\n respAreaToolbar: (node, editor, onToolbarDone) => {\n const { model } = this.props;\n const correctChoice = (model.choices[node.attrs.index] || [])[0];\n return () => (\n <ECRToolbar\n onChangeResponse={(newVal) => this.onChangeResponse(node.attrs.index, newVal)}\n node={node}\n editor={editor}\n onToolbarDone={onToolbarDone}\n correctChoice={correctChoice}\n maxLengthPerChoiceEnabled={maxLengthPerChoiceEnabled}\n pluginProps={getPluginProps(responseAreaInputConfiguration?.inputConfiguration)}\n />\n );\n },\n error: () => choicesErrors,\n onHandleAreaChange: this.onHandleAreaChange,\n }}\n markup={model.slateMarkup}\n onChange={this.onChange}\n imageSupport={imageSupport}\n disableImageAlignmentButtons={true}\n onBlur={this.onBlur}\n disabled={false}\n highlightShape={false}\n error={responseAreasError}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n autoWidthToolbar\n />\n {responseAreasError && <ErrorText>{responseAreasError}</ErrorText>}\n\n {!isEmpty(model.choices) && (\n <ResponseHeader>\n {`Define Alternates ${maxLengthPerChoiceEnabled ? 'and Character Limits' : ''}`}\n </ResponseHeader>\n )}\n <AlternateResponses\n model={model}\n onChange={this.onResponsesChanged}\n onLengthChange={this.onLengthChanged}\n maxLengthPerChoiceEnabled={maxLengthPerChoiceEnabled}\n spellCheck={spellCheckEnabled}\n choicesErrors={choicesErrors}\n pluginProps={getPluginProps(responseAreaInputConfiguration?.inputConfiguration)}\n />\n\n {rationaleEnabled && (\n <PromptHolder label={rationale.label}>\n <EditableHtml\n className=\"prompt\"\n markup={model.rationale || ''}\n onChange={this.onRationaleChanged}\n imageSupport={imageSupport}\n error={rationaleError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(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 autoWidthToolbar\n />\n {rationaleError && <ErrorText>{rationaleError}</ErrorText>}\n </PromptHolder>\n )}\n </layout.ConfigLayout>\n );\n }\n}\n\nexport default Main;\n"],"mappings":"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","ignoreList":[]}
|
package/configure/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/explicit-constructed-response-configure",
|
|
3
|
-
"version": "9.0.0-beta.
|
|
3
|
+
"version": "9.0.0-beta.1",
|
|
4
4
|
"private": true,
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"modue": "src/index.js",
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
"@mui/icons-material": "^7.3.4",
|
|
11
11
|
"@mui/material": "^7.3.4",
|
|
12
12
|
"@pie-framework/pie-configure-events": "^1.3.0",
|
|
13
|
-
"@pie-lib/config-ui": "
|
|
14
|
-
"@pie-lib/editable-html": "
|
|
13
|
+
"@pie-lib/config-ui": "12.1.0-next.5",
|
|
14
|
+
"@pie-lib/editable-html-tip-tap": "1.1.0-next.5",
|
|
15
15
|
"classnames": "^2.2.6",
|
|
16
16
|
"debug": "^3.1.0",
|
|
17
17
|
"lodash": "^4.17.15",
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,17 +3,6 @@
|
|
|
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
|
-
## [6.3.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-controller@6.3.2...@pie-element/explicit-constructed-response-controller@6.3.3) (2025-11-27)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
### Bug Fixes
|
|
10
|
-
|
|
11
|
-
* bump libs PD-5274, PD-5211, PD-5248 ([7610b25](https://github.com/pie-framework/pie-elements/commit/7610b25423956b6492f33322513b3430051fca77))
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
6
|
## [6.3.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/explicit-constructed-response-controller@6.3.1...@pie-element/explicit-constructed-response-controller@6.3.2) (2025-10-22)
|
|
18
7
|
|
|
19
8
|
|
package/controller/lib/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_debug","_interopRequireDefault","require","_map","_reduce","_find","_isEmpty","_he","_controllerUtils","_translator","_defaults","translator","Translator","log","debug","prepareChoice","mode","defaultFeedback","choice","out","label","value","correct","feedbackType","feedback","type","exports","getFeedback","getAdjustedLength","length","decodeHtmlEntities","str","replace","normalize","question","defaults","model","session","env","choices","Object","keys","forEach","key","map","item","index","normalizedQuestion","assign","incorrect","prepareChoiceFn","reduce","obj","area","respArea","chosenValue","val","isEmpty","find","c","prepareVal","showNote","values","some","note","t","lng","language","maxLengthPerChoice","maxLengthPerChoiceEnabled","undefinedLengths","labelLengthsArr","Math","max","disabled","displayType","role","markup","playerSpellCheckEnabled","prompt","promptEnabled","rationale","responseCorrect","getScore","undefined","teacherInstructions","responseAreaInputConfiguration","extraCSSRules","rationaleEnabled","teacherInstructionsEnabled","html","decodeHTML","getInnerText","trim","config","responseAreas","match","maxScore","correctCount","total","toFixed","parseFloat","outcome","Promise","resolve","partialScoringEnabled","partialScoring","enabled","score","empty","createCorrectResponseSession","i","id","replaceAll","decode","getContent","validate","maxResponseAreas","allChoicesErrors","errors","field","required","entries","reversedChoices","reverse","choicesErrors","identicalAnswer","slice","nbOfResponseAreas"],"sources":["../src/index.js"],"sourcesContent":["import debug from 'debug';\nimport map from 'lodash/map';\nimport reduce from 'lodash/reduce';\nimport find from 'lodash/find';\nimport isEmpty from 'lodash/isEmpty';\nimport { decode } from 'he';\nimport { partialScoring } from '@pie-lib/controller-utils';\nimport Translator from '@pie-lib/translator';\nimport defaults from './defaults';\n\nconst { translator } = Translator;\n\nconst log = debug('explicit-constructed-response:controller');\n\nexport const prepareChoice = (mode, defaultFeedback) => (choice) => {\n const out = {\n label: choice.label,\n value: choice.value,\n };\n\n if (mode === 'evaluate') {\n out.correct = true;\n\n const feedbackType = (choice.feedback && choice.feedback.type) || 'none';\n\n if (feedbackType === 'default') {\n out.feedback = defaultFeedback['correct'];\n } else if (feedbackType === 'custom') {\n out.feedback = choice.feedback.value;\n }\n }\n\n return out;\n};\n\nconst getFeedback = (value) => {\n if (value) {\n return 'correct';\n }\n\n return 'incorrect';\n};\n\n// also used in configure/src/markupUtils.js\nconst getAdjustedLength = (length) => {\n if (length <= 2) {\n return length + 2;\n }\n\n if (length <= 4) {\n return length + 3;\n }\n\n if (length <= 6) {\n return length + 4;\n }\n\n return length + 5;\n};\n\n// we can't use the dom parser here because it is not available in the node environment\nconst decodeHtmlEntities = (str) => {\n if (!str) return '';\n return str\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n .replace(/'|'/g, '\\'')\n .replace(/&/g, '&');\n};\n\nexport const normalize = (question) => ({ ...defaults, ...question });\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n */\nexport async function model(question, session, env) {\n // this was added to treat an exception, when the model has choices without\n // the \"value\" property like: { label: 'test' }\n if (question.choices) {\n Object.keys(question.choices).forEach((key) => {\n question.choices[key] = (question.choices[key] || []).map((item, index) => {\n if (!item.value) {\n log('Choice does not contain \"value\" property, which is required.', item);\n return { value: `${index}`, ...item };\n }\n\n return item;\n });\n });\n }\n\n const normalizedQuestion = normalize(question);\n const defaultFeedback = Object.assign(\n { correct: 'Correct', incorrect: 'Incorrect' },\n normalizedQuestion.defaultFeedback,\n );\n const prepareChoiceFn = prepareChoice(env.mode, defaultFeedback);\n const choices = reduce(\n normalizedQuestion.choices,\n (obj, area, key) => {\n obj[key] = map(area, prepareChoiceFn);\n\n return obj;\n },\n {},\n );\n\n const { value = {} } = session || {};\n const feedback =\n env.mode === 'evaluate'\n ? reduce(\n normalizedQuestion.choices,\n (obj, respArea, key) => {\n const chosenValue = value && value[key];\n const val =\n !isEmpty(chosenValue) && find(respArea, (c) => prepareVal(c.label) === prepareVal(chosenValue));\n\n obj[key] = getFeedback(val);\n\n return obj;\n },\n {},\n )\n : {};\n\n // check if at least one choice has an alternate\n const showNote = Object.values(choices).some((choice) => choice?.length > 1);\n const note =\n normalizedQuestion.note ||\n translator.t('common:commonCorrectAnswerWithAlternates', { lng: normalizedQuestion.language });\n\n const { maxLengthPerChoice = [], maxLengthPerChoiceEnabled } = normalizedQuestion;\n const undefinedLengths = !maxLengthPerChoice.length;\n\n // calculate maxLengthPerChoice array if it is not defined or defined incorrectly\n Object.values(choices).forEach((choice, index) => {\n const labelLengthsArr = (choice || []).map((choice) => decodeHtmlEntities(choice.label || '').length);\n const length = Math.max(...labelLengthsArr);\n\n if (\n undefinedLengths ||\n !maxLengthPerChoice[index] ||\n maxLengthPerChoice[index] < length ||\n maxLengthPerChoice[index] > length + 10\n ) {\n maxLengthPerChoice[index] = getAdjustedLength(length);\n }\n });\n\n const out = {\n choices,\n disabled: env.mode !== 'gather',\n displayType: normalizedQuestion.displayType,\n mode: env.mode,\n role: env.role,\n feedback,\n language: normalizedQuestion.language,\n markup: normalizedQuestion.markup,\n maxLengthPerChoice,\n maxLengthPerChoiceEnabled,\n note,\n playerSpellCheckEnabled: normalizedQuestion.playerSpellCheckEnabled,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : defaults.prompt,\n rationale: defaults.rationale,\n responseCorrect: env.mode === 'evaluate' ? getScore(normalizedQuestion, session) === 1 : undefined,\n showNote,\n teacherInstructions: defaults.teacherInstructions,\n responseAreaInputConfiguration: normalizedQuestion.responseAreaInputConfiguration,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : defaults.rationale;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : defaults.teacherInstructions;\n }\n\n return out;\n}\n\nexport const prepareVal = (html) => {\n return decodeHTML(getInnerText(html).trim());\n};\n\nexport const getScore = (config, session) => {\n const { value } = session || {};\n\n if (!session || isEmpty(session) || !value) {\n return 0;\n }\n\n const responseAreas = config.markup && config.markup.match(/\\{\\{(.+?)\\}\\}/g);\n const maxScore = responseAreas ? responseAreas.length : 0;\n const correctCount = reduce(\n config.choices,\n (total, respArea, key) => {\n const chosenValue = value && value[key];\n\n if (isEmpty(chosenValue) || !find(respArea, (c) => prepareVal(c.label) === prepareVal(chosenValue))) {\n return total;\n }\n\n return total + 1;\n },\n 0,\n );\n\n const str = maxScore ? (correctCount / maxScore).toFixed(2) : 0;\n\n return parseFloat(str);\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 =\n * false. the value in `env` will override the value in `model`.\n * @param {Object} model - the main model\n * @param {boolean} model.partialScoring - is partial scoring enabled (if undefined set to to true)\n * @param {*} session\n * @param {Object} env\n * @param {boolean} env.partialScoring - is partial scoring enabled (if undefined default to true) This overrides\n * `model.partialScoring`.\n */\nexport function outcome(model, session, env = {}) {\n return new Promise((resolve) => {\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const score = getScore(model, session);\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0, empty: isEmpty(session) });\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;\n const value = {};\n\n Object.keys(choices).forEach((key, i) => {\n value[i] = choices[key][0].label;\n });\n\n resolve({ id: '1', value });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\n// const getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\nconst getInnerText = (html) => {\n if (typeof html !== 'string') {\n return '';\n }\n if (typeof html.replaceAll === 'function') {\n return html.replaceAll(/<[^>]*>/g, '');\n } else {\n // Polyfill for replaceAll using replace and a global regex\n return html.replace(/<[^>]*>/g, '');\n }\n};\n\nconst decodeHTML = (html) => decode(html);\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { choices, markup } = model;\n const { maxResponseAreas } = config;\n const allChoicesErrors = {};\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n Object.entries(choices || {}).forEach(([key, values]) => {\n const reversedChoices = [...(values || [])].reverse();\n const choicesErrors = {};\n\n reversedChoices.forEach((choice, index) => {\n const { value, label } = choice;\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 if (!isEmpty(choicesErrors)) {\n allChoicesErrors[key] = choicesErrors;\n }\n });\n\n const nbOfResponseAreas = (markup.match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreas = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreas = 'There should be at least 1 response area defined.';\n }\n\n if (!isEmpty(allChoicesErrors)) {\n errors.choices = allChoicesErrors;\n }\n\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_debug","_interopRequireDefault","require","_map","_reduce","_find","_isEmpty","_he","_controllerUtils","_translator","_defaults","translator","Translator","log","debug","prepareChoice","mode","defaultFeedback","choice","out","label","value","correct","feedbackType","feedback","type","exports","getFeedback","getAdjustedLength","length","Math","abs","Infinity","decodeHtmlEntities","str","replace","normalize","question","defaults","model","session","env","choices","Object","keys","forEach","key","map","item","index","normalizedQuestion","assign","incorrect","prepareChoiceFn","reduce","obj","area","respArea","chosenValue","val","isEmpty","find","c","prepareVal","showNote","values","some","note","t","lng","language","maxLengthPerChoice","maxLengthPerChoiceEnabled","undefinedLengths","labelLengthsArr","max","disabled","displayType","role","markup","playerSpellCheckEnabled","prompt","promptEnabled","rationale","responseCorrect","getScore","undefined","teacherInstructions","responseAreaInputConfiguration","extraCSSRules","rationaleEnabled","teacherInstructionsEnabled","html","decodeHTML","getInnerText","trim","config","responseAreas","match","maxScore","correctCount","total","toFixed","parseFloat","outcome","Promise","resolve","partialScoringEnabled","partialScoring","enabled","score","empty","createCorrectResponseSession","i","id","replaceAll","decode","getContent","validate","maxResponseAreas","allChoicesErrors","errors","field","required","entries","reversedChoices","reverse","choicesErrors","identicalAnswer","slice","nbOfResponseAreas"],"sources":["../src/index.js"],"sourcesContent":["import debug from 'debug';\nimport map from 'lodash/map';\nimport reduce from 'lodash/reduce';\nimport find from 'lodash/find';\nimport isEmpty from 'lodash/isEmpty';\nimport { decode } from 'he';\nimport { partialScoring } from '@pie-lib/controller-utils';\nimport Translator from '@pie-lib/translator';\nimport defaults from './defaults';\n\nconst { translator } = Translator;\n\nconst log = debug('explicit-constructed-response:controller');\n\nexport const prepareChoice = (mode, defaultFeedback) => (choice) => {\n const out = {\n label: choice.label,\n value: choice.value,\n };\n\n if (mode === 'evaluate') {\n out.correct = true;\n\n const feedbackType = (choice.feedback && choice.feedback.type) || 'none';\n\n if (feedbackType === 'default') {\n out.feedback = defaultFeedback['correct'];\n } else if (feedbackType === 'custom') {\n out.feedback = choice.feedback.value;\n }\n }\n\n return out;\n};\n\nconst getFeedback = (value) => {\n if (value) {\n return 'correct';\n }\n\n return 'incorrect';\n};\n\n// also used in configure/src/markupUtils.js\nconst getAdjustedLength = (length) => {\n if (Math.abs(length) === Infinity) {\n return 2;\n }\n\n if (length <= 2) {\n return length + 2;\n }\n\n if (length <= 4) {\n return length + 3;\n }\n\n if (length <= 6) {\n return length + 4;\n }\n\n return length + 5;\n};\n\n// we can't use the dom parser here because it is not available in the node environment\nconst decodeHtmlEntities = (str) => {\n if (!str) return '';\n return str\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n .replace(/'|'/g, '\\'')\n .replace(/&/g, '&');\n};\n\nexport const normalize = (question) => ({ ...defaults, ...question });\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n */\nexport async function model(question, session, env) {\n // this was added to treat an exception, when the model has choices without\n // the \"value\" property like: { label: 'test' }\n if (question.choices) {\n Object.keys(question.choices).forEach((key) => {\n question.choices[key] = (question.choices[key] || []).map((item, index) => {\n if (!item.value) {\n log('Choice does not contain \"value\" property, which is required.', item);\n return { value: `${index}`, ...item };\n }\n\n return item;\n });\n });\n }\n\n const normalizedQuestion = normalize(question);\n const defaultFeedback = Object.assign(\n { correct: 'Correct', incorrect: 'Incorrect' },\n normalizedQuestion.defaultFeedback,\n );\n const prepareChoiceFn = prepareChoice(env.mode, defaultFeedback);\n const choices = reduce(\n normalizedQuestion.choices,\n (obj, area, key) => {\n obj[key] = map(area, prepareChoiceFn);\n\n return obj;\n },\n {},\n );\n\n const { value = {} } = session || {};\n const feedback =\n env.mode === 'evaluate'\n ? reduce(\n normalizedQuestion.choices,\n (obj, respArea, key) => {\n const chosenValue = value && value[key];\n const val =\n !isEmpty(chosenValue) && find(respArea, (c) => prepareVal(c.label) === prepareVal(chosenValue));\n\n obj[key] = getFeedback(val);\n\n return obj;\n },\n {},\n )\n : {};\n\n // check if at least one choice has an alternate\n const showNote = Object.values(choices).some((choice) => choice?.length > 1);\n const note =\n normalizedQuestion.note ||\n translator.t('common:commonCorrectAnswerWithAlternates', { lng: normalizedQuestion.language });\n\n const { maxLengthPerChoice = [], maxLengthPerChoiceEnabled } = normalizedQuestion;\n const undefinedLengths = !maxLengthPerChoice.length;\n\n // calculate maxLengthPerChoice array if it is not defined or defined incorrectly\n Object.values(choices).forEach((choice, index) => {\n const labelLengthsArr = (choice || []).map((choice) => decodeHtmlEntities(choice.label || '').length);\n const length = Math.max(...labelLengthsArr);\n\n if (\n undefinedLengths ||\n !maxLengthPerChoice[index] ||\n maxLengthPerChoice[index] < length ||\n maxLengthPerChoice[index] > length + 10\n ) {\n maxLengthPerChoice[index] = getAdjustedLength(length);\n }\n });\n\n const out = {\n choices,\n disabled: env.mode !== 'gather',\n displayType: normalizedQuestion.displayType,\n mode: env.mode,\n role: env.role,\n feedback,\n language: normalizedQuestion.language,\n markup: normalizedQuestion.markup,\n maxLengthPerChoice,\n maxLengthPerChoiceEnabled,\n note,\n playerSpellCheckEnabled: normalizedQuestion.playerSpellCheckEnabled,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : defaults.prompt,\n rationale: defaults.rationale,\n responseCorrect: env.mode === 'evaluate' ? getScore(normalizedQuestion, session) === 1 : undefined,\n showNote,\n teacherInstructions: defaults.teacherInstructions,\n responseAreaInputConfiguration: normalizedQuestion.responseAreaInputConfiguration,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : defaults.rationale;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : defaults.teacherInstructions;\n }\n\n return out;\n}\n\nexport const prepareVal = (html) => {\n return decodeHTML(getInnerText(html).trim());\n};\n\nexport const getScore = (config, session) => {\n const { value } = session || {};\n\n if (!session || isEmpty(session) || !value) {\n return 0;\n }\n\n const responseAreas = config.markup && config.markup.match(/\\{\\{(.+?)\\}\\}/g);\n const maxScore = responseAreas ? responseAreas.length : 0;\n const correctCount = reduce(\n config.choices,\n (total, respArea, key) => {\n const chosenValue = value && value[key];\n\n if (isEmpty(chosenValue) || !find(respArea, (c) => prepareVal(c.label) === prepareVal(chosenValue))) {\n return total;\n }\n\n return total + 1;\n },\n 0,\n );\n\n const str = maxScore ? (correctCount / maxScore).toFixed(2) : 0;\n\n return parseFloat(str);\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 =\n * false. the value in `env` will override the value in `model`.\n * @param {Object} model - the main model\n * @param {boolean} model.partialScoring - is partial scoring enabled (if undefined set to to true)\n * @param {*} session\n * @param {Object} env\n * @param {boolean} env.partialScoring - is partial scoring enabled (if undefined default to true) This overrides\n * `model.partialScoring`.\n */\nexport function outcome(model, session, env = {}) {\n return new Promise((resolve) => {\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const score = getScore(model, session);\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0, empty: isEmpty(session) });\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;\n const value = {};\n\n Object.keys(choices).forEach((key, i) => {\n value[i] = choices[key][0].label;\n });\n\n resolve({ id: '1', value });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\n// const getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\nconst getInnerText = (html) => {\n if (typeof html !== 'string') {\n return '';\n }\n if (typeof html.replaceAll === 'function') {\n return html.replaceAll(/<[^>]*>/g, '');\n } else {\n // Polyfill for replaceAll using replace and a global regex\n return html.replace(/<[^>]*>/g, '');\n }\n};\n\nconst decodeHTML = (html) => decode(html);\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { choices, markup } = model;\n const { maxResponseAreas } = config;\n const allChoicesErrors = {};\n const errors = {};\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n Object.entries(choices || {}).forEach(([key, values]) => {\n const reversedChoices = [...(values || [])].reverse();\n const choicesErrors = {};\n\n reversedChoices.forEach((choice, index) => {\n const { value, label } = choice;\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 if (!isEmpty(choicesErrors)) {\n allChoicesErrors[key] = choicesErrors;\n }\n });\n\n const nbOfResponseAreas = (markup.match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreas = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreas = 'There should be at least 1 response area defined.';\n }\n\n if (!isEmpty(allChoicesErrors)) {\n errors.choices = allChoicesErrors;\n }\n\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}
|
package/controller/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/explicit-constructed-response-controller",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "7.0.0-beta.
|
|
4
|
+
"version": "7.0.0-beta.1",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
8
8
|
"author": "",
|
|
9
9
|
"license": "ISC",
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@pie-lib/controller-utils": "
|
|
12
|
-
"@pie-lib/translator": "
|
|
11
|
+
"@pie-lib/controller-utils": "1.1.0-next.4",
|
|
12
|
+
"@pie-lib/translator": "3.1.0-next.4",
|
|
13
13
|
"debug": "^3.1.0",
|
|
14
14
|
"he": "^1.2.0",
|
|
15
15
|
"lodash": "^4.17.15",
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"repository": "pie-framework/pie-elements",
|
|
7
|
-
"version": "10.0.0-beta.
|
|
7
|
+
"version": "10.0.0-beta.1",
|
|
8
8
|
"description": "",
|
|
9
9
|
"scripts": {
|
|
10
10
|
"postpublish": "../../scripts/postpublish"
|
|
@@ -15,11 +15,11 @@
|
|
|
15
15
|
"@mui/icons-material": "^7.3.4",
|
|
16
16
|
"@mui/material": "^7.3.4",
|
|
17
17
|
"@pie-framework/pie-player-events": "^0.1.0",
|
|
18
|
-
"@pie-lib/correct-answer-toggle": "
|
|
19
|
-
"@pie-lib/mask-markup": "1.
|
|
20
|
-
"@pie-lib/math-rendering": "
|
|
21
|
-
"@pie-lib/render-ui": "
|
|
22
|
-
"@pie-lib/translator": "
|
|
18
|
+
"@pie-lib/correct-answer-toggle": "3.1.0-next.5",
|
|
19
|
+
"@pie-lib/mask-markup": "2.1.0-next.5",
|
|
20
|
+
"@pie-lib/math-rendering": "4.1.0-next.4",
|
|
21
|
+
"@pie-lib/render-ui": "5.1.0-next.5",
|
|
22
|
+
"@pie-lib/translator": "3.1.0-next.4",
|
|
23
23
|
"classnames": "^2.2.5",
|
|
24
24
|
"he": "^1.2.0",
|
|
25
25
|
"lodash": "^4.17.10",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"author": "",
|
|
31
31
|
"license": "ISC",
|
|
32
|
-
"gitHead": "
|
|
32
|
+
"gitHead": "38eb4b4700ca4eaad440566dfc50623ff8876a92",
|
|
33
33
|
"main": "lib/index.js",
|
|
34
34
|
"module": "src/index.js"
|
|
35
35
|
}
|