@pie-element/drag-in-the-blank 6.13.2-next.5 → 6.13.2-next.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/configure/lib/choices.js +4 -4
- package/configure/lib/choices.js.map +1 -1
- package/configure/lib/main.js +14 -8
- package/configure/lib/main.js.map +1 -1
- package/configure/package.json +4 -1
- package/controller/lib/index.js +1 -1
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/main.js +5 -5
- package/lib/main.js.map +1 -1
- package/package.json +7 -3
package/configure/lib/choices.js
CHANGED
|
@@ -29,11 +29,11 @@ var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
|
29
29
|
|
|
30
30
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
31
31
|
|
|
32
|
-
var _editableHtml = require("@pie-lib/
|
|
32
|
+
var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
|
|
33
33
|
|
|
34
|
-
var _mathRendering = require("@pie-lib/
|
|
34
|
+
var _mathRendering = require("@pie-lib/math-rendering");
|
|
35
35
|
|
|
36
|
-
var _configUi = require("@pie-lib/
|
|
36
|
+
var _configUi = require("@pie-lib/config-ui");
|
|
37
37
|
|
|
38
38
|
var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
|
|
39
39
|
|
|
@@ -300,7 +300,7 @@ var Choices = /*#__PURE__*/function (_React$Component) {
|
|
|
300
300
|
minWidth: '100%',
|
|
301
301
|
zIndex: '100'
|
|
302
302
|
}
|
|
303
|
-
}, /*#__PURE__*/_react["default"].createElement(_editableHtml
|
|
303
|
+
}, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
|
|
304
304
|
ref: function ref(_ref) {
|
|
305
305
|
return _this2.focusedNodeRef = _ref;
|
|
306
306
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/choices.jsx"],"names":["styles","theme","design","display","flexDirection","marginBottom","spacing","unit","addButton","marginLeft","altChoices","alignItems","flexWrap","justifyContent","marginTop","margin","errorText","fontSize","typography","color","palette","error","main","paddingBottom","Choices","warning","open","domNode","ReactDOM","findDOMNode","prevValue","val","key","props","onChange","model","choices","correctResponse","alternateResponses","duplicatedValue","find","c","value","id","newChoices","filter","setState","text","map","choice","usedForResponse","Object","keys","forEach","responseKey","values","alternate","indexOf","newChoicesWithoutTheEmptyOne","focusedEl","oldChoices","length","duplicates","includes","rerenderMath","focusedNodeRef","focus","state","classes","mathMlOptions","maxChoices","toolbarOpts","uploadSoundSupport","imageSupport","pluginProps","maxImageWidth","maxImageHeight","maxLength","visibleChoices","getVisibleChoices","onAddChoice","index","minWidth","zIndex","ref","prompt","language","preventDone","onChoiceChanged","undefined","e","inInInsertCharacter","relatedTarget","closest","onChoiceFocus","onChoiceRemove","React","Component","PropTypes","bool","string","object","isRequired","func","number","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { EditableHtml } from '@pie-lib/pie-toolbox/editable-html';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\nimport { AlertDialog } from '@pie-lib/pie-toolbox/config-ui';\nimport Button from '@material-ui/core/Button';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Choice from './choice';\nimport { choiceIsEmpty } from './markupUtils';\n\nconst styles = (theme) => ({\n design: {\n display: 'flex',\n flexDirection: 'column',\n marginBottom: theme.spacing.unit * 1.5,\n },\n addButton: {\n marginLeft: 'auto',\n },\n altChoices: {\n alignItems: 'flex-start',\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-evenly',\n marginTop: theme.spacing.unit,\n\n '& > *': {\n margin: theme.spacing.unit,\n },\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingBottom: theme.spacing.unit * 2,\n },\n});\n\nexport class Choices extends React.Component {\n static propTypes = {\n duplicates: PropTypes.bool,\n error: PropTypes.string,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n toolbarOpts: PropTypes.object,\n pluginProps: PropTypes.object,\n maxChoices: PropTypes.number,\n uploadSoundSupport: PropTypes.object,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number,\n maxLength: PropTypes.number\n };\n\n state = { warning: { open: false } };\n preventDone = false;\n\n componentDidMount() {\n this.rerenderMath();\n }\n\n componentDidUpdate() {\n this.rerenderMath();\n\n if (this.focusedNodeRef) {\n this.focusedNodeRef.focus('end');\n }\n }\n\n rerenderMath = () => {\n //eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n };\n\n onChoiceChanged = (prevValue, val, key) => {\n const { onChange, model } = this.props;\n const { choices, correctResponse, alternateResponses } = model;\n const duplicatedValue = (choices || []).find((c) => c.value === val && c.id !== key);\n\n // discard the new added choice or the changes if the choice would be a duplicate to one that already exists\n if (duplicatedValue) {\n if (prevValue === '') {\n // remove the new added choice from choices\n const newChoices = (choices || []).filter((c) => c.id !== key);\n\n onChange(newChoices);\n }\n\n this.setState({\n warning: {\n open: true,\n text: 'Identical answer choices are not allowed and the changes will be discarded.',\n },\n });\n\n return;\n }\n\n const newChoices = choices?.map((choice) => (choice.id === key ? { ...choice, value: val } : choice)) || [];\n\n if (!choiceIsEmpty({ value: val })) {\n onChange(newChoices);\n\n return;\n }\n\n // if the edited content is empty, its usage has to be searched in the correct response definitions\n let usedForResponse = false;\n\n if (correctResponse) {\n Object.keys(correctResponse).forEach((responseKey) => {\n if (correctResponse[responseKey] === key) {\n usedForResponse = true;\n }\n });\n }\n\n if (alternateResponses && !usedForResponse) {\n Object.values(alternateResponses).forEach((alternate) => {\n if (alternate.indexOf(key) >= 0) {\n usedForResponse = true;\n }\n });\n }\n\n if (usedForResponse) {\n this.setState({\n warning: {\n open: true,\n text: 'Answer choices cannot be blank and the changes will be discarded.',\n },\n });\n\n return;\n }\n\n const newChoicesWithoutTheEmptyOne = newChoices.filter((choice) => choice.id !== key);\n\n onChange(newChoicesWithoutTheEmptyOne);\n\n this.setState({\n warning: {\n open: true,\n text: 'Answer choices cannot be blank.',\n },\n });\n };\n\n onChoiceFocus = (id) =>\n this.setState({\n focusedEl: id,\n });\n\n onAddChoice = () => {\n const {\n model: { choices: oldChoices },\n onChange,\n } = this.props;\n\n this.setState(\n {\n focusedEl: `${oldChoices.length}`,\n },\n () => {\n onChange([\n ...oldChoices,\n {\n id: `${oldChoices.length}`,\n value: '',\n },\n ]);\n },\n );\n };\n\n onChoiceRemove = (id) => {\n const {\n onChange,\n model: { choices },\n } = this.props;\n const newChoices = (choices || []).filter((choice) => choice.id !== id);\n\n onChange(newChoices);\n };\n\n getVisibleChoices = () => {\n const {\n duplicates,\n model: { choices, correctResponse },\n } = this.props;\n\n if (!choices) {\n return [];\n }\n\n if (duplicates) {\n return choices;\n }\n\n // if duplicates not allowed, remove the choices that are used to define the correct response\n return choices.filter(\n (choice) => !(correctResponse && Object.values(correctResponse).includes(choice.id))\n );\n };\n\n render() {\n const { focusedEl, warning } = this.state;\n const {\n classes,\n duplicates,\n error,\n mathMlOptions = {},\n maxChoices,\n model: { choices },\n toolbarOpts,\n uploadSoundSupport,\n imageSupport = {},\n pluginProps = {},\n maxImageWidth,\n maxImageHeight,\n maxLength,\n } = this.props;\n const visibleChoices = this.getVisibleChoices() || [];\n return (\n <div className={classes.design}>\n <Button\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n onClick={this.onAddChoice}\n disabled={maxChoices && choices && maxChoices === choices.length}\n >\n Add Choice\n </Button>\n\n <div className={classes.altChoices}>\n {visibleChoices.map((choice, index) =>\n focusedEl === choice.id ? (\n <div\n key={index}\n style={{\n minWidth: '100%',\n zIndex: '100',\n }}\n >\n <EditableHtml\n ref={(ref) => (this.focusedNodeRef = ref)}\n className={classes.prompt}\n imageSupport={imageSupport}\n markup={choice.value}\n pluginProps={pluginProps}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n onChange={(val) => {\n if (this.preventDone) {\n return;\n }\n\n this.onChoiceChanged(choice.value, val, choice.id);\n }}\n onDone={() => {\n if (this.preventDone) {\n return;\n }\n\n this.setState({\n focusedEl: undefined,\n });\n }}\n onBlur={(e) => {\n const inInInsertCharacter = e.relatedTarget && e.relatedTarget.closest('.insert-character-dialog');\n\n this.preventDone = inInInsertCharacter;\n }}\n disableUnderline\n toolbarOpts={toolbarOpts}\n uploadSoundSupport={uploadSoundSupport}\n mathMlOptions={mathMlOptions}\n maxImageHeight={maxImageHeight}\n maxImageWidth={maxImageWidth}\n charactersLimit={maxLength}\n />\n </div>\n ) : (\n <Choice\n key={index}\n duplicates={duplicates}\n targetId=\"0\"\n choice={choice}\n error={error}\n onClick={() => this.onChoiceFocus(choice.id)}\n onRemoveChoice={() => this.onChoiceRemove(choice.id)}\n />\n ),\n )}\n </div>\n {error && <div className={classes.errorText}>{error}</div>}\n\n <AlertDialog\n open={warning.open}\n title=\"Warning\"\n text={warning.text}\n onConfirm={() => this.setState({ warning: { open: false } })}\n />\n </div>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Choices);\n\nexport default Styled;\n"],"file":"choices.js"}
|
|
1
|
+
{"version":3,"sources":["../src/choices.jsx"],"names":["styles","theme","design","display","flexDirection","marginBottom","spacing","unit","addButton","marginLeft","altChoices","alignItems","flexWrap","justifyContent","marginTop","margin","errorText","fontSize","typography","color","palette","error","main","paddingBottom","Choices","warning","open","domNode","ReactDOM","findDOMNode","prevValue","val","key","props","onChange","model","choices","correctResponse","alternateResponses","duplicatedValue","find","c","value","id","newChoices","filter","setState","text","map","choice","usedForResponse","Object","keys","forEach","responseKey","values","alternate","indexOf","newChoicesWithoutTheEmptyOne","focusedEl","oldChoices","length","duplicates","includes","rerenderMath","focusedNodeRef","focus","state","classes","mathMlOptions","maxChoices","toolbarOpts","uploadSoundSupport","imageSupport","pluginProps","maxImageWidth","maxImageHeight","maxLength","visibleChoices","getVisibleChoices","onAddChoice","index","minWidth","zIndex","ref","prompt","language","preventDone","onChoiceChanged","undefined","e","inInInsertCharacter","relatedTarget","closest","onChoiceFocus","onChoiceRemove","React","Component","PropTypes","bool","string","object","isRequired","func","number","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport Button from '@material-ui/core/Button';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Choice from './choice';\nimport { choiceIsEmpty } from './markupUtils';\n\nconst styles = (theme) => ({\n design: {\n display: 'flex',\n flexDirection: 'column',\n marginBottom: theme.spacing.unit * 1.5,\n },\n addButton: {\n marginLeft: 'auto',\n },\n altChoices: {\n alignItems: 'flex-start',\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-evenly',\n marginTop: theme.spacing.unit,\n\n '& > *': {\n margin: theme.spacing.unit,\n },\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingBottom: theme.spacing.unit * 2,\n },\n});\n\nexport class Choices extends React.Component {\n static propTypes = {\n duplicates: PropTypes.bool,\n error: PropTypes.string,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n toolbarOpts: PropTypes.object,\n pluginProps: PropTypes.object,\n maxChoices: PropTypes.number,\n uploadSoundSupport: PropTypes.object,\n maxImageWidth: PropTypes.number,\n maxImageHeight: PropTypes.number,\n maxLength: PropTypes.number,\n };\n\n state = { warning: { open: false } };\n preventDone = false;\n\n componentDidMount() {\n this.rerenderMath();\n }\n\n componentDidUpdate() {\n this.rerenderMath();\n\n if (this.focusedNodeRef) {\n this.focusedNodeRef.focus('end');\n }\n }\n\n rerenderMath = () => {\n //eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n };\n\n onChoiceChanged = (prevValue, val, key) => {\n const { onChange, model } = this.props;\n const { choices, correctResponse, alternateResponses } = model;\n const duplicatedValue = (choices || []).find((c) => c.value === val && c.id !== key);\n\n // discard the new added choice or the changes if the choice would be a duplicate to one that already exists\n if (duplicatedValue) {\n if (prevValue === '') {\n // remove the new added choice from choices\n const newChoices = (choices || []).filter((c) => c.id !== key);\n\n onChange(newChoices);\n }\n\n this.setState({\n warning: {\n open: true,\n text: 'Identical answer choices are not allowed and the changes will be discarded.',\n },\n });\n\n return;\n }\n\n const newChoices = choices?.map((choice) => (choice.id === key ? { ...choice, value: val } : choice)) || [];\n\n if (!choiceIsEmpty({ value: val })) {\n onChange(newChoices);\n\n return;\n }\n\n // if the edited content is empty, its usage has to be searched in the correct response definitions\n let usedForResponse = false;\n\n if (correctResponse) {\n Object.keys(correctResponse).forEach((responseKey) => {\n if (correctResponse[responseKey] === key) {\n usedForResponse = true;\n }\n });\n }\n\n if (alternateResponses && !usedForResponse) {\n Object.values(alternateResponses).forEach((alternate) => {\n if (alternate.indexOf(key) >= 0) {\n usedForResponse = true;\n }\n });\n }\n\n if (usedForResponse) {\n this.setState({\n warning: {\n open: true,\n text: 'Answer choices cannot be blank and the changes will be discarded.',\n },\n });\n\n return;\n }\n\n const newChoicesWithoutTheEmptyOne = newChoices.filter((choice) => choice.id !== key);\n\n onChange(newChoicesWithoutTheEmptyOne);\n\n this.setState({\n warning: {\n open: true,\n text: 'Answer choices cannot be blank.',\n },\n });\n };\n\n onChoiceFocus = (id) =>\n this.setState({\n focusedEl: id,\n });\n\n onAddChoice = () => {\n const {\n model: { choices: oldChoices },\n onChange,\n } = this.props;\n\n this.setState(\n {\n focusedEl: `${oldChoices.length}`,\n },\n () => {\n onChange([\n ...oldChoices,\n {\n id: `${oldChoices.length}`,\n value: '',\n },\n ]);\n },\n );\n };\n\n onChoiceRemove = (id) => {\n const {\n onChange,\n model: { choices },\n } = this.props;\n const newChoices = (choices || []).filter((choice) => choice.id !== id);\n\n onChange(newChoices);\n };\n\n getVisibleChoices = () => {\n const {\n duplicates,\n model: { choices, correctResponse },\n } = this.props;\n\n if (!choices) {\n return [];\n }\n\n if (duplicates) {\n return choices;\n }\n\n // if duplicates not allowed, remove the choices that are used to define the correct response\n return choices.filter((choice) => !(correctResponse && Object.values(correctResponse).includes(choice.id)));\n };\n\n render() {\n const { focusedEl, warning } = this.state;\n const {\n classes,\n duplicates,\n error,\n mathMlOptions = {},\n maxChoices,\n model: { choices },\n toolbarOpts,\n uploadSoundSupport,\n imageSupport = {},\n pluginProps = {},\n maxImageWidth,\n maxImageHeight,\n maxLength,\n } = this.props;\n const visibleChoices = this.getVisibleChoices() || [];\n return (\n <div className={classes.design}>\n <Button\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n onClick={this.onAddChoice}\n disabled={maxChoices && choices && maxChoices === choices.length}\n >\n Add Choice\n </Button>\n\n <div className={classes.altChoices}>\n {visibleChoices.map((choice, index) =>\n focusedEl === choice.id ? (\n <div\n key={index}\n style={{\n minWidth: '100%',\n zIndex: '100',\n }}\n >\n <EditableHtml\n ref={(ref) => (this.focusedNodeRef = ref)}\n className={classes.prompt}\n imageSupport={imageSupport}\n markup={choice.value}\n pluginProps={pluginProps}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n onChange={(val) => {\n if (this.preventDone) {\n return;\n }\n\n this.onChoiceChanged(choice.value, val, choice.id);\n }}\n onDone={() => {\n if (this.preventDone) {\n return;\n }\n\n this.setState({\n focusedEl: undefined,\n });\n }}\n onBlur={(e) => {\n const inInInsertCharacter = e.relatedTarget && e.relatedTarget.closest('.insert-character-dialog');\n\n this.preventDone = inInInsertCharacter;\n }}\n disableUnderline\n toolbarOpts={toolbarOpts}\n uploadSoundSupport={uploadSoundSupport}\n mathMlOptions={mathMlOptions}\n maxImageHeight={maxImageHeight}\n maxImageWidth={maxImageWidth}\n charactersLimit={maxLength}\n />\n </div>\n ) : (\n <Choice\n key={index}\n duplicates={duplicates}\n targetId=\"0\"\n choice={choice}\n error={error}\n onClick={() => this.onChoiceFocus(choice.id)}\n onRemoveChoice={() => this.onChoiceRemove(choice.id)}\n />\n ),\n )}\n </div>\n {error && <div className={classes.errorText}>{error}</div>}\n\n <AlertDialog\n open={warning.open}\n title=\"Warning\"\n text={warning.text}\n onConfirm={() => this.setState({ warning: { open: false } })}\n />\n </div>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Choices);\n\nexport default Styled;\n"],"file":"choices.js"}
|
package/configure/lib/main.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
+
|
|
5
7
|
Object.defineProperty(exports, "__esModule", {
|
|
6
8
|
value: true
|
|
7
9
|
});
|
|
@@ -27,13 +29,13 @@ var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
|
27
29
|
|
|
28
30
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
29
31
|
|
|
30
|
-
var _editableHtml = require("@pie-lib/
|
|
32
|
+
var _editableHtml = _interopRequireWildcard(require("@pie-lib/editable-html"));
|
|
31
33
|
|
|
32
|
-
var _configUi = require("@pie-lib/
|
|
34
|
+
var _configUi = require("@pie-lib/config-ui");
|
|
33
35
|
|
|
34
|
-
var _drag = require("@pie-lib/
|
|
36
|
+
var _drag = require("@pie-lib/drag");
|
|
35
37
|
|
|
36
|
-
var _mathRendering = require("@pie-lib/
|
|
38
|
+
var _mathRendering = require("@pie-lib/math-rendering");
|
|
37
39
|
|
|
38
40
|
var _styles = require("@material-ui/core/styles");
|
|
39
41
|
|
|
@@ -49,6 +51,10 @@ var _markupUtils = require("./markupUtils");
|
|
|
49
51
|
|
|
50
52
|
var _utils = require("../utils");
|
|
51
53
|
|
|
54
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
55
|
+
|
|
56
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
57
|
+
|
|
52
58
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
53
59
|
|
|
54
60
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
@@ -280,7 +286,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
280
286
|
}, teacherInstructionsEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
281
287
|
label: teacherInstructions.label,
|
|
282
288
|
className: classes.promptHolder
|
|
283
|
-
}, /*#__PURE__*/_react["default"].createElement(_editableHtml
|
|
289
|
+
}, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
|
|
284
290
|
className: classes.prompt,
|
|
285
291
|
markup: model.teacherInstructions || '',
|
|
286
292
|
onChange: this.onTeacherInstructionsChanged,
|
|
@@ -304,7 +310,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
304
310
|
}, teacherInstructionsError)), promptEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
305
311
|
label: prompt.label,
|
|
306
312
|
className: classes.promptHolder
|
|
307
|
-
}, /*#__PURE__*/_react["default"].createElement(_editableHtml
|
|
313
|
+
}, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
|
|
308
314
|
className: classes.prompt,
|
|
309
315
|
markup: model.prompt,
|
|
310
316
|
onChange: this.onPromptChanged,
|
|
@@ -345,7 +351,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
345
351
|
style: {
|
|
346
352
|
marginLeft: '5px'
|
|
347
353
|
}
|
|
348
|
-
}))), /*#__PURE__*/_react["default"].createElement(_editableHtml
|
|
354
|
+
}))), /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
|
|
349
355
|
activePlugins: _editableHtml.ALL_PLUGINS,
|
|
350
356
|
responseAreaProps: {
|
|
351
357
|
type: 'drag-in-the-blank',
|
|
@@ -393,7 +399,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
393
399
|
}), rationaleEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
394
400
|
label: rationale.label,
|
|
395
401
|
className: classes.promptHolder
|
|
396
|
-
}, /*#__PURE__*/_react["default"].createElement(_editableHtml
|
|
402
|
+
}, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
|
|
397
403
|
className: classes.prompt,
|
|
398
404
|
markup: model.rationale || '',
|
|
399
405
|
onChange: this.onRationaleChanged,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/main.jsx"],"names":["dropdown","settings","toggle","Panel","styles","theme","promptHolder","width","paddingTop","spacing","unit","marginBottom","markup","minHeight","paddingBottom","choiceConfiguration","text","fontSize","typography","tooltip","whiteSpace","maxWidth","errorText","color","palette","error","main","flexContainer","display","alignItems","Main","newVal","props","onModelChanged","model","prompt","rationale","teacherInstructions","slateMarkup","choices","correctResponse","domNode","ReactDOM","findDOMNode","classes","configuration","onConfigurationChanged","imageSupport","uploadSoundSupport","addChoice","baseInputConfiguration","contentDimensions","duplicates","partialScoring","lockChoiceOrder","choicesPosition","spellCheck","settingsPanelDisabled","maxChoices","maxResponseAreas","maxImageWidth","maxImageHeight","withRubric","mathMlOptions","language","languageChoices","maxLength","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","spellCheckEnabled","toolbarEditorPosition","errors","extraCSSRules","choicesError","correctResponseError","promptError","rationaleError","responseAreasError","teacherInstructionsError","validationMessage","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","panelSettings","label","enabled","options","panelProperties","rubricEnabled","getPluginProps","Object","assign","onModelChange","Settings","Properties","onTeacherInstructionsChanged","inputConfiguration","onPromptChanged","marginLeft","ALL_PLUGINS","type","onMarkupChanged","onResponsesChanged","choice","onRationaleChanged","React","Component","PropTypes","object","isRequired","disableSidePanel","bool","func","shape","add","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { EditableHtml, ALL_PLUGINS } from '@pie-lib/pie-toolbox/editable-html';\nimport { InputContainer, layout, settings } from '@pie-lib/pie-toolbox/config-ui';\nimport { withDragContext } from '@pie-lib/pie-toolbox/drag';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Info from '@material-ui/icons/Info';\nimport Tooltip from '@material-ui/core/Tooltip';\n\nimport Choices from './choices';\nimport { createSlateMarkup } from './markupUtils';\nimport { generateValidationMessage } from '../utils';\n\nconst { dropdown, toggle, Panel } = settings;\n\nconst styles = (theme) => ({\n promptHolder: {\n width: '100%',\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n markup: {\n minHeight: '235px',\n paddingTop: theme.spacing.unit,\n paddingBottom: theme.spacing.unit * 2,\n width: '100%',\n '& [data-slate-editor=\"true\"]': {\n minHeight: '235px',\n },\n },\n choiceConfiguration: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n text: {\n fontSize: theme.typography.fontSize + 2,\n },\n tooltip: {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\n },\n flexContainer: {\n display: 'flex',\n alignItems: 'center',\n },\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 classes: PropTypes.object.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 componentDidUpdate() {\n // eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n }\n\n onModelChange = (newVal) => {\n this.props.onModelChanged({\n ...this.props.model,\n ...newVal,\n });\n };\n\n onPromptChanged = (prompt) => {\n this.props.onModelChanged({\n ...this.props.model,\n prompt,\n });\n };\n\n onRationaleChanged = (rationale) => {\n this.props.onModelChanged({\n ...this.props.model,\n rationale,\n });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n this.props.onModelChanged({\n ...this.props.model,\n teacherInstructions,\n });\n };\n\n onMarkupChanged = (slateMarkup) => {\n this.props.onModelChanged({\n ...this.props.model,\n slateMarkup,\n });\n };\n\n onResponsesChanged = (choices) => {\n const {\n model: { correctResponse, markup },\n } = this.props;\n const slateMarkup = createSlateMarkup(markup, choices, correctResponse);\n\n this.props.onModelChanged({\n ...this.props.model,\n slateMarkup,\n choices,\n });\n };\n\n render() {\n const { classes, model, configuration, onConfigurationChanged, imageSupport, uploadSoundSupport } = this.props;\n const {\n addChoice = {},\n baseInputConfiguration = {},\n contentDimensions = {},\n duplicates = {},\n prompt = {},\n partialScoring = {},\n lockChoiceOrder = {},\n rationale = {},\n teacherInstructions = {},\n choicesPosition = {},\n spellCheck = {},\n settingsPanelDisabled,\n maxChoices,\n maxResponseAreas,\n maxImageWidth = {},\n maxImageHeight = {},\n withRubric = {},\n mathMlOptions = {},\n language = {},\n languageChoices = {},\n maxLength = {},\n } = configuration || {};\n const {\n rationaleEnabled,\n promptEnabled,\n teacherInstructionsEnabled,\n spellCheckEnabled,\n toolbarEditorPosition,\n errors,\n extraCSSRules,\n } = model || {};\n\n const {\n choicesError,\n correctResponseError,\n prompt: promptError,\n rationale: rationaleError,\n 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 duplicates: duplicates.settings && toggle(duplicates.label),\n lockChoiceOrder: lockChoiceOrder.settings && toggle(lockChoiceOrder.label),\n choicesPosition: choicesPosition.settings && dropdown(choicesPosition.label, ['above', 'below', 'left', 'right']),\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n };\n\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n const getPluginProps = (props) => {\n return Object.assign(\n {\n ...baseInputConfiguration,\n },\n props || {},\n );\n };\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 <InputContainer label={teacherInstructions.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.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 />\n {teacherInstructionsError && <div className={classes.errorText}>{teacherInstructionsError}</div>}\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer label={prompt.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={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 />\n {promptError && <div className={classes.errorText}>{promptError}</div>}\n </InputContainer>\n )}\n\n <div className={classes.flexContainer}>\n <Typography className={classes.text} component={'div'}>\n Define Template, Choices, and Correct Responses\n </Typography>\n <Tooltip\n classes={{ tooltip: classes.tooltip }}\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ marginLeft: '5px' }} />\n </Tooltip>\n </div>\n\n <EditableHtml\n activePlugins={ALL_PLUGINS}\n responseAreaProps={{\n type: 'drag-in-the-blank',\n options: {\n duplicates: model.duplicates,\n },\n maxResponseAreas: maxResponseAreas,\n }}\n pluginProps={getPluginProps()}\n className={classes.markup}\n markup={model.slateMarkup}\n onChange={this.onMarkupChanged}\n imageSupport={imageSupport}\n disableImageAlignmentButtons={true}\n nonEmpty={false}\n disableUnderline\n error={responseAreasError || correctResponseError}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {responseAreasError && <div className={classes.errorText}>{responseAreasError}</div>}\n {correctResponseError && <div className={classes.errorText}>{correctResponseError}</div>}\n\n <Choices\n model={model}\n imageSupport={imageSupport}\n duplicates={model.duplicates}\n error={choicesError}\n onChange={this.onResponsesChanged}\n toolbarOpts={toolbarOpts}\n maxChoices={maxChoices}\n uploadSoundSupport={uploadSoundSupport}\n mathMlOptions={mathMlOptions}\n pluginProps={getPluginProps(addChoice?.inputConfiguration)}\n maxImageWidth={(maxImageWidth && maxImageWidth.choice) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.choice) || defaultImageMaxHeight}\n maxLength={maxLength}\n />\n\n {rationaleEnabled && (\n <InputContainer label={rationale.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.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 />\n {rationaleError && <div className={classes.errorText}>{rationaleError}</div>}\n </InputContainer>\n )}\n </layout.ConfigLayout>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Main);\n\nexport default withDragContext(Styled);\n"],"file":"main.js"}
|
|
1
|
+
{"version":3,"sources":["../src/main.jsx"],"names":["dropdown","settings","toggle","Panel","styles","theme","promptHolder","width","paddingTop","spacing","unit","marginBottom","markup","minHeight","paddingBottom","choiceConfiguration","text","fontSize","typography","tooltip","whiteSpace","maxWidth","errorText","color","palette","error","main","flexContainer","display","alignItems","Main","newVal","props","onModelChanged","model","prompt","rationale","teacherInstructions","slateMarkup","choices","correctResponse","domNode","ReactDOM","findDOMNode","classes","configuration","onConfigurationChanged","imageSupport","uploadSoundSupport","addChoice","baseInputConfiguration","contentDimensions","duplicates","partialScoring","lockChoiceOrder","choicesPosition","spellCheck","settingsPanelDisabled","maxChoices","maxResponseAreas","maxImageWidth","maxImageHeight","withRubric","mathMlOptions","language","languageChoices","maxLength","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","spellCheckEnabled","toolbarEditorPosition","errors","extraCSSRules","choicesError","correctResponseError","promptError","rationaleError","responseAreasError","teacherInstructionsError","validationMessage","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","panelSettings","label","enabled","options","panelProperties","rubricEnabled","getPluginProps","Object","assign","onModelChange","Settings","Properties","onTeacherInstructionsChanged","inputConfiguration","onPromptChanged","marginLeft","ALL_PLUGINS","type","onMarkupChanged","onResponsesChanged","choice","onRationaleChanged","React","Component","PropTypes","object","isRequired","disableSidePanel","bool","func","shape","add","Styled"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport EditableHtml, { ALL_PLUGINS } from '@pie-lib/editable-html';\nimport { InputContainer, layout, settings } from '@pie-lib/config-ui';\nimport { withDragContext } from '@pie-lib/drag';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Info from '@material-ui/icons/Info';\nimport Tooltip from '@material-ui/core/Tooltip';\n\nimport Choices from './choices';\nimport { createSlateMarkup } from './markupUtils';\nimport { generateValidationMessage } from '../utils';\n\nconst { dropdown, toggle, Panel } = settings;\n\nconst styles = (theme) => ({\n promptHolder: {\n width: '100%',\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n markup: {\n minHeight: '235px',\n paddingTop: theme.spacing.unit,\n paddingBottom: theme.spacing.unit * 2,\n width: '100%',\n '& [data-slate-editor=\"true\"]': {\n minHeight: '235px',\n },\n },\n choiceConfiguration: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n text: {\n fontSize: theme.typography.fontSize + 2,\n },\n tooltip: {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\n },\n flexContainer: {\n display: 'flex',\n alignItems: 'center',\n },\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 classes: PropTypes.object.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 componentDidUpdate() {\n // eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n }\n\n onModelChange = (newVal) => {\n this.props.onModelChanged({\n ...this.props.model,\n ...newVal,\n });\n };\n\n onPromptChanged = (prompt) => {\n this.props.onModelChanged({\n ...this.props.model,\n prompt,\n });\n };\n\n onRationaleChanged = (rationale) => {\n this.props.onModelChanged({\n ...this.props.model,\n rationale,\n });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n this.props.onModelChanged({\n ...this.props.model,\n teacherInstructions,\n });\n };\n\n onMarkupChanged = (slateMarkup) => {\n this.props.onModelChanged({\n ...this.props.model,\n slateMarkup,\n });\n };\n\n onResponsesChanged = (choices) => {\n const {\n model: { correctResponse, markup },\n } = this.props;\n const slateMarkup = createSlateMarkup(markup, choices, correctResponse);\n\n this.props.onModelChanged({\n ...this.props.model,\n slateMarkup,\n choices,\n });\n };\n\n render() {\n const { classes, model, configuration, onConfigurationChanged, imageSupport, uploadSoundSupport } = this.props;\n const {\n addChoice = {},\n baseInputConfiguration = {},\n contentDimensions = {},\n duplicates = {},\n prompt = {},\n partialScoring = {},\n lockChoiceOrder = {},\n rationale = {},\n teacherInstructions = {},\n choicesPosition = {},\n spellCheck = {},\n settingsPanelDisabled,\n maxChoices,\n maxResponseAreas,\n maxImageWidth = {},\n maxImageHeight = {},\n withRubric = {},\n mathMlOptions = {},\n language = {},\n languageChoices = {},\n maxLength = {},\n } = configuration || {};\n const {\n rationaleEnabled,\n promptEnabled,\n teacherInstructionsEnabled,\n spellCheckEnabled,\n toolbarEditorPosition,\n errors,\n extraCSSRules,\n } = model || {};\n\n const {\n choicesError,\n correctResponseError,\n prompt: promptError,\n rationale: rationaleError,\n 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 duplicates: duplicates.settings && toggle(duplicates.label),\n lockChoiceOrder: lockChoiceOrder.settings && toggle(lockChoiceOrder.label),\n choicesPosition: choicesPosition.settings && dropdown(choicesPosition.label, ['above', 'below', 'left', 'right']),\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n };\n\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n const getPluginProps = (props) => {\n return Object.assign(\n {\n ...baseInputConfiguration,\n },\n props || {},\n );\n };\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 <InputContainer label={teacherInstructions.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.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 />\n {teacherInstructionsError && <div className={classes.errorText}>{teacherInstructionsError}</div>}\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer label={prompt.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={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 />\n {promptError && <div className={classes.errorText}>{promptError}</div>}\n </InputContainer>\n )}\n\n <div className={classes.flexContainer}>\n <Typography className={classes.text} component={'div'}>\n Define Template, Choices, and Correct Responses\n </Typography>\n <Tooltip\n classes={{ tooltip: classes.tooltip }}\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ marginLeft: '5px' }} />\n </Tooltip>\n </div>\n\n <EditableHtml\n activePlugins={ALL_PLUGINS}\n responseAreaProps={{\n type: 'drag-in-the-blank',\n options: {\n duplicates: model.duplicates,\n },\n maxResponseAreas: maxResponseAreas,\n }}\n pluginProps={getPluginProps()}\n className={classes.markup}\n markup={model.slateMarkup}\n onChange={this.onMarkupChanged}\n imageSupport={imageSupport}\n disableImageAlignmentButtons={true}\n nonEmpty={false}\n disableUnderline\n error={responseAreasError || correctResponseError}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {responseAreasError && <div className={classes.errorText}>{responseAreasError}</div>}\n {correctResponseError && <div className={classes.errorText}>{correctResponseError}</div>}\n\n <Choices\n model={model}\n imageSupport={imageSupport}\n duplicates={model.duplicates}\n error={choicesError}\n onChange={this.onResponsesChanged}\n toolbarOpts={toolbarOpts}\n maxChoices={maxChoices}\n uploadSoundSupport={uploadSoundSupport}\n mathMlOptions={mathMlOptions}\n pluginProps={getPluginProps(addChoice?.inputConfiguration)}\n maxImageWidth={(maxImageWidth && maxImageWidth.choice) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.choice) || defaultImageMaxHeight}\n maxLength={maxLength}\n />\n\n {rationaleEnabled && (\n <InputContainer label={rationale.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.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 />\n {rationaleError && <div className={classes.errorText}>{rationaleError}</div>}\n </InputContainer>\n )}\n </layout.ConfigLayout>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Main);\n\nexport default withDragContext(Styled);\n"],"file":"main.js"}
|
package/configure/package.json
CHANGED
|
@@ -8,7 +8,10 @@
|
|
|
8
8
|
"@material-ui/core": "^3.9.2",
|
|
9
9
|
"@material-ui/icons": "^3.0.1",
|
|
10
10
|
"@pie-framework/pie-configure-events": "^1.3.0",
|
|
11
|
-
"@pie-lib/
|
|
11
|
+
"@pie-lib/editable-html": "^11.11.0",
|
|
12
|
+
"@pie-lib/config-ui": "^11.19.0",
|
|
13
|
+
"@pie-lib/math-rendering": "^3.12.0",
|
|
14
|
+
"@pie-lib/drag": "^2.12.0",
|
|
12
15
|
"debug": "^3.1.0",
|
|
13
16
|
"lodash": "^4.17.15",
|
|
14
17
|
"prop-types": "^15.6.2",
|
package/controller/lib/index.js
CHANGED
|
@@ -21,7 +21,7 @@ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
|
21
21
|
|
|
22
22
|
var _utils = require("./utils");
|
|
23
23
|
|
|
24
|
-
var _controllerUtils = require("@pie-lib/
|
|
24
|
+
var _controllerUtils = require("@pie-lib/controller-utils");
|
|
25
25
|
|
|
26
26
|
var _defaults = _interopRequireDefault(require("./defaults"));
|
|
27
27
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["normalize","question","defaults","model","session","env","updateSession","Promise","resolve","normalizedQuestion","feedback","mode","responses","allCorrectResponses","possibleResponses","numberOfPossibleResponses","correctResponses","undefined","value","i","result","Object","keys","reduce","obj","key","choices","answer","filter","choice","lockChoiceOrder","shouldIncludeCorrectResponse","out","prompt","promptEnabled","disabled","responseCorrect","getScore","correctResponse","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","config","maxScore","length","correctCount","total","str","toFixed","parseFloat","outcome","partialScoringEnabled","partialScoring","enabled","score","empty","createCorrectResponseSession","id","getInnerText","html","replaceAll","getContent","replace","validate","markup","minChoices","maxChoices","maxResponseAreas","errors","forEach","field","required","nbOfResponseAreas","match","nbOfChoices","emptyResponseAreas","values","response","correctResponseError","responseAreasError","choicesError"],"mappings":"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","sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { getAllCorrectResponses, choiceIsEmpty } from './utils';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\nimport defaults from './defaults';\n\nexport const normalize = (question) => ({\n ...defaults,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async (resolve) => {\n const normalizedQuestion = normalize(question);\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n const responses = getAllCorrectResponses(normalizedQuestion) || {};\n const allCorrectResponses = responses.possibleResponses;\n const numberOfPossibleResponses = responses.numberOfPossibleResponses || 0;\n let correctResponses = undefined;\n const { value } = session || {};\n\n for (let i = 0; i < numberOfPossibleResponses; i++) {\n const result = Object.keys(allCorrectResponses).reduce(\n (obj, key) => {\n const choices = allCorrectResponses[key];\n const answer = (value && value[key]) || '';\n\n obj.feedback[key] = choices[i] === answer;\n\n if (obj.feedback[key]) {\n obj.correctResponses += 1;\n }\n\n return obj;\n },\n { correctResponses: 0, feedback: {} },\n );\n\n if (correctResponses === undefined || result.correctResponses > correctResponses) {\n correctResponses = result.correctResponses;\n feedback = result.feedback;\n }\n }\n }\n\n let choices = normalizedQuestion.choices && normalizedQuestion.choices.filter((choice) => !choiceIsEmpty(choice));\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'id');\n }\n\n const shouldIncludeCorrectResponse = env.mode === 'evaluate';\n\n const out = {\n ...normalizedQuestion,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n choices,\n feedback,\n mode: env.mode,\n disabled: env.mode !== 'gather',\n responseCorrect: shouldIncludeCorrectResponse ? getScore(normalizedQuestion, session) === 1 : undefined,\n correctResponse: shouldIncludeCorrectResponse ? normalizedQuestion.correctResponse : undefined,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n}\n\nexport const getScore = (config, session) => {\n const responses = getAllCorrectResponses(config);\n const allCorrectResponses = responses.possibleResponses;\n const maxScore = Object.keys(config.correctResponse).length;\n const numberOfPossibleResponses = responses.numberOfPossibleResponses || 0;\n let correctCount = 0;\n const { value } = session || {};\n\n for (let i = 0; i < numberOfPossibleResponses; i++) {\n const result = Object.keys(allCorrectResponses).reduce(\n (total, key) => {\n const choices = allCorrectResponses[key];\n const answer = (value && value[key]) || '';\n\n if (choices[i] === answer) {\n return total;\n }\n\n return total - 1;\n },\n maxScore,\n );\n\n if (result > correctCount) {\n correctCount = result;\n }\n\n if (result === maxScore) {\n break;\n }\n }\n\n const str = maxScore ? (correctCount / maxScore).toFixed(2) : 0;\n\n return parseFloat(str);\n};\n\n/**\n *\n * The score is partial by default for checkbox mode, allOrNothing for radio mode.\n * To disable partial scoring for checkbox mode you either set model.partialScoring = false or env.partialScoring =\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({\n score: partialScoringEnabled ? score : score === 1 ? 1 : 0,\n empty: !session || isEmpty(session),\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n resolve({\n value: question.correctResponse,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { choices, correctResponse, markup } = model;\n const { minChoices = 2, maxChoices, maxResponseAreas } = config;\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 const nbOfResponseAreas = ((markup || '').match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n const nbOfChoices = (choices || []).length;\n const emptyResponseAreas = Object.values(correctResponse)?.filter((response) => !response);\n\n if (emptyResponseAreas.length) {\n errors.correctResponseError = 'There should be a choice defined for each response area.';\n }\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreasError = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreasError = 'There should be at least 1 response area defined.';\n }\n\n if (nbOfChoices < minChoices) {\n errors.choicesError = `There should be at least ${minChoices} tokens defined.`;\n } else if (nbOfChoices > maxChoices) {\n errors.choicesError = `No more than ${maxChoices} tokens should be defined.`;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["normalize","question","defaults","model","session","env","updateSession","Promise","resolve","normalizedQuestion","feedback","mode","responses","allCorrectResponses","possibleResponses","numberOfPossibleResponses","correctResponses","undefined","value","i","result","Object","keys","reduce","obj","key","choices","answer","filter","choice","lockChoiceOrder","shouldIncludeCorrectResponse","out","prompt","promptEnabled","disabled","responseCorrect","getScore","correctResponse","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","config","maxScore","length","correctCount","total","str","toFixed","parseFloat","outcome","partialScoringEnabled","partialScoring","enabled","score","empty","createCorrectResponseSession","id","getInnerText","html","replaceAll","getContent","replace","validate","markup","minChoices","maxChoices","maxResponseAreas","errors","forEach","field","required","nbOfResponseAreas","match","nbOfChoices","emptyResponseAreas","values","response","correctResponseError","responseAreasError","choicesError"],"mappings":"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","sourcesContent":["import isEmpty from 'lodash/isEmpty';\nimport { getAllCorrectResponses, choiceIsEmpty } from './utils';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport defaults from './defaults';\n\nexport const normalize = (question) => ({\n ...defaults,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async (resolve) => {\n const normalizedQuestion = normalize(question);\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n const responses = getAllCorrectResponses(normalizedQuestion) || {};\n const allCorrectResponses = responses.possibleResponses;\n const numberOfPossibleResponses = responses.numberOfPossibleResponses || 0;\n let correctResponses = undefined;\n const { value } = session || {};\n\n for (let i = 0; i < numberOfPossibleResponses; i++) {\n const result = Object.keys(allCorrectResponses).reduce(\n (obj, key) => {\n const choices = allCorrectResponses[key];\n const answer = (value && value[key]) || '';\n\n obj.feedback[key] = choices[i] === answer;\n\n if (obj.feedback[key]) {\n obj.correctResponses += 1;\n }\n\n return obj;\n },\n { correctResponses: 0, feedback: {} },\n );\n\n if (correctResponses === undefined || result.correctResponses > correctResponses) {\n correctResponses = result.correctResponses;\n feedback = result.feedback;\n }\n }\n }\n\n let choices = normalizedQuestion.choices && normalizedQuestion.choices.filter((choice) => !choiceIsEmpty(choice));\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n choices = await getShuffledChoices(choices, session, updateSession, 'id');\n }\n\n const shouldIncludeCorrectResponse = env.mode === 'evaluate';\n\n const out = {\n ...normalizedQuestion,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n choices,\n feedback,\n mode: env.mode,\n disabled: env.mode !== 'gather',\n responseCorrect: shouldIncludeCorrectResponse ? getScore(normalizedQuestion, session) === 1 : undefined,\n correctResponse: shouldIncludeCorrectResponse ? normalizedQuestion.correctResponse : undefined,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n}\n\nexport const getScore = (config, session) => {\n const responses = getAllCorrectResponses(config);\n const allCorrectResponses = responses.possibleResponses;\n const maxScore = Object.keys(config.correctResponse).length;\n const numberOfPossibleResponses = responses.numberOfPossibleResponses || 0;\n let correctCount = 0;\n const { value } = session || {};\n\n for (let i = 0; i < numberOfPossibleResponses; i++) {\n const result = Object.keys(allCorrectResponses).reduce((total, key) => {\n const choices = allCorrectResponses[key];\n const answer = (value && value[key]) || '';\n\n if (choices[i] === answer) {\n return total;\n }\n\n return total - 1;\n }, maxScore);\n\n if (result > correctCount) {\n correctCount = result;\n }\n\n if (result === maxScore) {\n break;\n }\n }\n\n const str = maxScore ? (correctCount / maxScore).toFixed(2) : 0;\n\n return parseFloat(str);\n};\n\n/**\n *\n * The score is partial by default for checkbox mode, allOrNothing for radio mode.\n * To disable partial scoring for checkbox mode you either set model.partialScoring = false or env.partialScoring =\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({\n score: partialScoringEnabled ? score : score === 1 ? 1 : 0,\n empty: !session || isEmpty(session),\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n resolve({\n value: question.correctResponse,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { choices, correctResponse, markup } = model;\n const { minChoices = 2, maxChoices, maxResponseAreas } = config;\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 const nbOfResponseAreas = ((markup || '').match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n const nbOfChoices = (choices || []).length;\n const emptyResponseAreas = Object.values(correctResponse)?.filter((response) => !response);\n\n if (emptyResponseAreas.length) {\n errors.correctResponseError = 'There should be a choice defined for each response area.';\n }\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreasError = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreasError = 'There should be at least 1 response area defined.';\n }\n\n if (nbOfChoices < minChoices) {\n errors.choicesError = `There should be at least ${minChoices} tokens defined.`;\n } else if (nbOfChoices > maxChoices) {\n errors.choicesError = `No more than ${maxChoices} tokens should be defined.`;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/package.json
CHANGED
package/lib/index.js
CHANGED
|
@@ -27,9 +27,9 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
27
27
|
|
|
28
28
|
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
29
29
|
|
|
30
|
-
var _mathRendering = require("@pie-lib/
|
|
30
|
+
var _mathRendering = require("@pie-lib/math-rendering");
|
|
31
31
|
|
|
32
|
-
var _renderUi = require("@pie-lib/
|
|
32
|
+
var _renderUi = require("@pie-lib/render-ui");
|
|
33
33
|
|
|
34
34
|
var _piePlayerEvents = require("@pie-framework/pie-player-events");
|
|
35
35
|
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["isComplete","session","model","audioComplete","elementContext","autoplayAudioEnabled","completeAudioEnabled","audio","querySelector","isInsidePrompt","closest","value","Object","values","some","DragInTheBlank","_model","_session","elem","React","createElement","Main","onChange","changeSession","ReactDOM","render","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","selector","dispatchChangedEvent","_render","_audioInitialized","m","ModelSetEvent","s","info","document","id","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","observer","MutationObserver","mutationsList","forEach","mutation","type","_createAudioInfoToast","container","enableAudio","play","removeChild","removeEventListener","setTimeout","paused","addEventListener","handlePlaying","audioStartTime","Date","getTime","handleEnded","audioEndTime","waitTime","_audio","_handlePlaying","_handleEnded","_enableAudio","disconnect","observe","childList","subtree","HTMLElement"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/pie-toolbox/render-ui';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport Main from './main';\n\nexport const isComplete = (session, model, audioComplete, elementContext) => {\n const { autoplayAudioEnabled, completeAudioEnabled } = model || {};\n\n if (autoplayAudioEnabled && completeAudioEnabled && !audioComplete) {\n if (elementContext) {\n const audio = elementContext.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n // only require audio completion if audio exists and is inside the prompt\n if (audio && isInsidePrompt) {\n return false;\n }\n }\n }\n\n if (!session || !session.value) {\n return false;\n }\n\n return Object.values(session.value || {}).some((value) => !!value);\n};\n\nexport default class DragInTheBlank extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = null;\n this._audioInitialized = false;\n this.audioComplete = false;\n }\n\n set model(m) {\n this._model = m;\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), isComplete(this._session, this._model, this.audioComplete, this), !!this._model));\n // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio\n this._audioInitialized = false;\n this._render();\n }\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n _render = () => {\n if (this._model && this._session) {\n let elem = React.createElement(Main, {\n model: this._model,\n value: this._session.value,\n onChange: this.changeSession,\n });\n\n ReactDOM.render(elem, this, () => {\n renderMath(this);\n });\n }\n };\n\n dispatchChangedEvent = () => {\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), isComplete(this._session, this._model, this.audioComplete, this)));\n };\n\n changeSession = (value) => {\n this.session.value = value;\n this.session.selector = 'Mouse';\n\n this.dispatchChangedEvent();\n this._render();\n };\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width:'100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer'\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n this._render();\n\n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n //timestamp when auto-played audio started playing\n this._session.audioStartTime = this._session.audioStartTime || new Date().getTime();\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n //timestamp when auto-played audio completed playing\n this._session.audioEndTime = this._session.audioEndTime || new Date().getTime();\n\n let { audioStartTime, audioEndTime, waitTime } = this._session;\n if(!waitTime && audioStartTime && audioEndTime) {\n // waitTime is elapsed time the user waited for auto-played audio to finish\n this._session.waitTime = (audioEndTime - audioStartTime);\n }\n\n this.audioComplete = true;\n this.dispatchChangedEvent();\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n }\n}\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["isComplete","session","model","audioComplete","elementContext","autoplayAudioEnabled","completeAudioEnabled","audio","querySelector","isInsidePrompt","closest","value","Object","values","some","DragInTheBlank","_model","_session","elem","React","createElement","Main","onChange","changeSession","ReactDOM","render","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","selector","dispatchChangedEvent","_render","_audioInitialized","m","ModelSetEvent","s","info","document","id","assign","style","position","top","width","height","display","justifyContent","alignItems","background","zIndex","cursor","img","src","EnableAudioAutoplayImage","alt","appendChild","observer","MutationObserver","mutationsList","forEach","mutation","type","_createAudioInfoToast","container","enableAudio","play","removeChild","removeEventListener","setTimeout","paused","addEventListener","handlePlaying","audioStartTime","Date","getTime","handleEnded","audioEndTime","waitTime","_audio","_handlePlaying","_handleEnded","_enableAudio","disconnect","observe","childList","subtree","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEO,IAAMA,UAAU,GAAG,SAAbA,UAAa,CAACC,OAAD,EAAUC,KAAV,EAAiBC,aAAjB,EAAgCC,cAAhC,EAAmD;AAC3E,aAAuDF,KAAK,IAAI,EAAhE;AAAA,MAAQG,oBAAR,QAAQA,oBAAR;AAAA,MAA8BC,oBAA9B,QAA8BA,oBAA9B;;AAEA,MAAID,oBAAoB,IAAIC,oBAAxB,IAAgD,CAACH,aAArD,EAAoE;AAClE,QAAIC,cAAJ,EAAoB;AAClB,UAAMG,KAAK,GAAGH,cAAc,CAACI,aAAf,CAA6B,OAA7B,CAAd;AACA,UAAMC,cAAc,GAAGF,KAAK,IAAIA,KAAK,CAACG,OAAN,CAAc,iBAAd,CAAhC,CAFkB,CAIlB;;AACA,UAAIH,KAAK,IAAIE,cAAb,EAA6B;AAC3B,eAAO,KAAP;AACD;AACF;AACF;;AAED,MAAI,CAACR,OAAD,IAAY,CAACA,OAAO,CAACU,KAAzB,EAAgC;AAC9B,WAAO,KAAP;AACD;;AAED,SAAOC,MAAM,CAACC,MAAP,CAAcZ,OAAO,CAACU,KAAR,IAAiB,EAA/B,EAAmCG,IAAnC,CAAwC,UAACH,KAAD;AAAA,WAAW,CAAC,CAACA,KAAb;AAAA,GAAxC,CAAP;AACD,CApBM;;;;IAsBcI,c;;;;;AACnB,4BAAc;AAAA;;AAAA;AACZ;AADY,gGAyBJ,YAAM;AACd,UAAI,MAAKC,MAAL,IAAe,MAAKC,QAAxB,EAAkC;AAChC,YAAIC,IAAI,gBAAGC,kBAAMC,aAAN,CAAoBC,gBAApB,EAA0B;AACnCnB,UAAAA,KAAK,EAAE,MAAKc,MADuB;AAEnCL,UAAAA,KAAK,EAAE,MAAKM,QAAL,CAAcN,KAFc;AAGnCW,UAAAA,QAAQ,EAAE,MAAKC;AAHoB,SAA1B,CAAX;;AAMAC,6BAASC,MAAT,CAAgBP,IAAhB,kDAA4B,YAAM;AAChC;AACD,SAFD;AAGD;AACF,KArCa;AAAA,6GAuCS,YAAM;AAC3B,YAAKQ,aAAL,CAAmB,IAAIC,oCAAJ,CAAwB,MAAKC,OAAL,CAAaC,WAAb,EAAxB,EAAoD7B,UAAU,CAAC,MAAKiB,QAAN,EAAgB,MAAKD,MAArB,EAA6B,MAAKb,aAAlC,iDAA9D,CAAnB;AACD,KAzCa;AAAA,sGA2CE,UAACQ,KAAD,EAAW;AACzB,YAAKV,OAAL,CAAaU,KAAb,GAAqBA,KAArB;AACA,YAAKV,OAAL,CAAa6B,QAAb,GAAwB,OAAxB;;AAEA,YAAKC,oBAAL;;AACA,YAAKC,OAAL;AACD,KAjDa;AAEZ,UAAKhB,MAAL,GAAc,IAAd;AACA,UAAKC,QAAL,GAAgB,IAAhB;AACA,UAAKgB,iBAAL,GAAyB,KAAzB;AACA,UAAK9B,aAAL,GAAqB,KAArB;AALY;AAMb;;;;SAED,aAAU+B,CAAV,EAAa;AACX,WAAKlB,MAAL,GAAckB,CAAd;AACA,WAAKR,aAAL,CAAmB,IAAIS,8BAAJ,CAAkB,KAAKP,OAAL,CAAaC,WAAb,EAAlB,EAA8C7B,UAAU,CAAC,KAAKiB,QAAN,EAAgB,KAAKD,MAArB,EAA6B,KAAKb,aAAlC,EAAiD,IAAjD,CAAxD,EAAgH,CAAC,CAAC,KAAKa,MAAvH,CAAnB,EAFW,CAGX;;AACA,WAAKiB,iBAAL,GAAyB,KAAzB;;AACA,WAAKD,OAAL;AACD;;;SAOD,eAAc;AACZ,aAAO,KAAKf,QAAZ;AACD,K;SAPD,aAAYmB,CAAZ,EAAe;AACb,WAAKnB,QAAL,GAAgBmB,CAAhB;;AACA,WAAKJ,OAAL;AACD;;;WAgCD,iCAAwB;AACtB,UAAMK,IAAI,GAAGC,QAAQ,CAAClB,aAAT,CAAuB,KAAvB,CAAb;AACAiB,MAAAA,IAAI,CAACE,EAAL,GAAU,iBAAV;AAEA3B,MAAAA,MAAM,CAAC4B,MAAP,CAAcH,IAAI,CAACI,KAAnB,EAA0B;AACxBC,QAAAA,QAAQ,EAAE,UADc;AAExBC,QAAAA,GAAG,EAAE,CAFmB;AAGxBC,QAAAA,KAAK,EAAE,MAHiB;AAIxBC,QAAAA,MAAM,EAAE,MAJgB;AAKxBC,QAAAA,OAAO,EAAE,MALe;AAMxBC,QAAAA,cAAc,EAAE,QANQ;AAOxBC,QAAAA,UAAU,EAAE,QAPY;AAQxBC,QAAAA,UAAU,EAAE,OARY;AASxBC,QAAAA,MAAM,EAAE,MATgB;AAUxBC,QAAAA,MAAM,EAAE;AAVgB,OAA1B;AAaA,UAAMC,GAAG,GAAGd,QAAQ,CAAClB,aAAT,CAAuB,KAAvB,CAAZ;AACAgC,MAAAA,GAAG,CAACC,GAAJ,GAAUC,kCAAV;AACAF,MAAAA,GAAG,CAACG,GAAJ,GAAU,yCAAV;AACAH,MAAAA,GAAG,CAACR,KAAJ,GAAY,GAAZ;AACAQ,MAAAA,GAAG,CAACP,MAAJ,GAAa,GAAb;AAEAR,MAAAA,IAAI,CAACmB,WAAL,CAAiBJ,GAAjB;AACA,aAAOf,IAAP;AACD;;;WAED,6BAAoB;AAAA;;AAClB,WAAKL,OAAL,GADkB,CAGlB;AACA;AACA;;;AACA,UAAMyB,QAAQ,GAAG,IAAIC,gBAAJ,CAAqB,UAACC,aAAD,EAAgBF,QAAhB,EAA6B;AACjEE,QAAAA,aAAa,CAACC,OAAd,CAAsB,UAACC,QAAD,EAAc;AAClC,cAAIA,QAAQ,CAACC,IAAT,KAAkB,WAAtB,EAAmC;AACjC,gBAAI,MAAI,CAAC7B,iBAAT,EAA4B;;AAC5B,gBAAM1B,KAAK,GAAG,MAAI,CAACC,aAAL,CAAmB,OAAnB,CAAd;;AACA,gBAAMC,cAAc,GAAGF,KAAK,IAAIA,KAAK,CAACG,OAAN,CAAc,iBAAd,CAAhC;AAEA,gBAAI,CAAC,MAAI,CAACM,MAAV,EAAkB;AAClB,gBAAI,CAAC,MAAI,CAACA,MAAL,CAAYX,oBAAjB,EAAuC;AACvC,gBAAIE,KAAK,IAAI,CAACE,cAAd,EAA8B;AAC9B,gBAAI,CAACF,KAAL,EAAY;;AAEZ,gBAAM8B,IAAI,GAAG,MAAI,CAAC0B,qBAAL,EAAb;;AACA,gBAAMC,SAAS,GAAG,MAAI,CAACxD,aAAL,CAAmB,iBAAnB,CAAlB;;AACA,gBAAMyD,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxB,kBAAI,MAAI,CAACzD,aAAL,CAAmB,kBAAnB,CAAJ,EAA4C;AAC1CD,gBAAAA,KAAK,CAAC2D,IAAN;AACAF,gBAAAA,SAAS,CAACG,WAAV,CAAsB9B,IAAtB;AACD;;AAEDC,cAAAA,QAAQ,CAAC8B,mBAAT,CAA6B,OAA7B,EAAsCH,WAAtC;AACD,aAPD,CAZiC,CAqBjC;AACA;;;AACAI,YAAAA,UAAU,CAAC,YAAM;AACf,kBAAI9D,KAAK,CAAC+D,MAAN,IAAgB,CAAC,MAAI,CAAC9D,aAAL,CAAmB,kBAAnB,CAArB,EAA6D;AAC3D;AACAwD,gBAAAA,SAAS,CAACR,WAAV,CAAsBnB,IAAtB;AACAC,gBAAAA,QAAQ,CAACiC,gBAAT,CAA0B,OAA1B,EAAmCN,WAAnC;AACD,eAJD,MAIO;AACL3B,gBAAAA,QAAQ,CAAC8B,mBAAT,CAA6B,OAA7B,EAAsCH,WAAtC;AACD;AACF,aARS,EAQP,GARO,CAAV,CAvBiC,CAiCjC;;AACA,gBAAMO,aAAa,GAAG,SAAhBA,aAAgB,GAAM;AAC1B;AACA,cAAA,MAAI,CAACvD,QAAL,CAAcwD,cAAd,GAA+B,MAAI,CAACxD,QAAL,CAAcwD,cAAd,IAAgC,IAAIC,IAAJ,GAAWC,OAAX,EAA/D;;AAEA,kBAAMtC,IAAI,GAAG,MAAI,CAAC7B,aAAL,CAAmB,kBAAnB,CAAb;;AACA,kBAAI6B,IAAJ,EAAU;AACR2B,gBAAAA,SAAS,CAACG,WAAV,CAAsB9B,IAAtB;AACD;;AAED9B,cAAAA,KAAK,CAAC6D,mBAAN,CAA0B,SAA1B,EAAqCI,aAArC;AACD,aAVD;;AAYAjE,YAAAA,KAAK,CAACgE,gBAAN,CAAuB,SAAvB,EAAkCC,aAAlC,EA9CiC,CAgDjC;;AACA,gBAAMI,WAAW,GAAG,SAAdA,WAAc,GAAM;AACxB;AACA,cAAA,MAAI,CAAC3D,QAAL,CAAc4D,YAAd,GAA6B,MAAI,CAAC5D,QAAL,CAAc4D,YAAd,IAA8B,IAAIH,IAAJ,GAAWC,OAAX,EAA3D;AAEA,oCAAiD,MAAI,CAAC1D,QAAtD;AAAA,kBAAMwD,cAAN,mBAAMA,cAAN;AAAA,kBAAsBI,YAAtB,mBAAsBA,YAAtB;AAAA,kBAAoCC,QAApC,mBAAoCA,QAApC;;AACA,kBAAI,CAACA,QAAD,IAAaL,cAAb,IAA+BI,YAAnC,EAAiD;AAC/C;AACA,gBAAA,MAAI,CAAC5D,QAAL,CAAc6D,QAAd,GAAyBD,YAAY,GAAGJ,cAAxC;AACD;;AAED,cAAA,MAAI,CAACtE,aAAL,GAAqB,IAArB;;AACA,cAAA,MAAI,CAAC4B,oBAAL;;AACAxB,cAAAA,KAAK,CAAC6D,mBAAN,CAA0B,OAA1B,EAAmCQ,WAAnC;AACD,aAbD;;AAeArE,YAAAA,KAAK,CAACgE,gBAAN,CAAuB,OAAvB,EAAgCK,WAAhC,EAhEiC,CAkEjC;;AACA,YAAA,MAAI,CAACG,MAAL,GAAcxE,KAAd;AACA,YAAA,MAAI,CAACyE,cAAL,GAAsBR,aAAtB;AACA,YAAA,MAAI,CAACS,YAAL,GAAoBL,WAApB;AACA,YAAA,MAAI,CAACM,YAAL,GAAoBjB,WAApB,CAtEiC,CAuEjC;;AACA,YAAA,MAAI,CAAChC,iBAAL,GAAyB,IAAzB;AAEAwB,YAAAA,QAAQ,CAAC0B,UAAT;AACD;AACF,SA7ED;AA8ED,OA/EgB,CAAjB;AAiFA1B,MAAAA,QAAQ,CAAC2B,OAAT,CAAiB,IAAjB,EAAuB;AAAEC,QAAAA,SAAS,EAAE,IAAb;AAAmBC,QAAAA,OAAO,EAAE;AAA5B,OAAvB;AACD;;;WAED,gCAAuB;AACrBhD,MAAAA,QAAQ,CAAC8B,mBAAT,CAA6B,OAA7B,EAAsC,KAAKc,YAA3C;;AAEA,UAAI,KAAKH,MAAT,EAAiB;AACf,aAAKA,MAAL,CAAYX,mBAAZ,CAAgC,SAAhC,EAA2C,KAAKY,cAAhD;;AACA,aAAKD,MAAL,CAAYX,mBAAZ,CAAgC,OAAhC,EAAyC,KAAKa,YAA9C;;AACA,aAAKF,MAAL,GAAc,IAAd;AACD;AACF;;;kDAjLyCQ,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { EnableAudioAutoplayImage } from '@pie-lib/render-ui';\nimport { ModelSetEvent, SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport Main from './main';\n\nexport const isComplete = (session, model, audioComplete, elementContext) => {\n const { autoplayAudioEnabled, completeAudioEnabled } = model || {};\n\n if (autoplayAudioEnabled && completeAudioEnabled && !audioComplete) {\n if (elementContext) {\n const audio = elementContext.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n // only require audio completion if audio exists and is inside the prompt\n if (audio && isInsidePrompt) {\n return false;\n }\n }\n }\n\n if (!session || !session.value) {\n return false;\n }\n\n return Object.values(session.value || {}).some((value) => !!value);\n};\n\nexport default class DragInTheBlank extends HTMLElement {\n constructor() {\n super();\n this._model = null;\n this._session = null;\n this._audioInitialized = false;\n this.audioComplete = false;\n }\n\n set model(m) {\n this._model = m;\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), isComplete(this._session, this._model, this.audioComplete, this), !!this._model));\n // reset the audioInitialized to false since the model changed, and we might need to reinitialize the audio\n this._audioInitialized = false;\n this._render();\n }\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n _render = () => {\n if (this._model && this._session) {\n let elem = React.createElement(Main, {\n model: this._model,\n value: this._session.value,\n onChange: this.changeSession,\n });\n\n ReactDOM.render(elem, this, () => {\n renderMath(this);\n });\n }\n };\n\n dispatchChangedEvent = () => {\n this.dispatchEvent(new SessionChangedEvent(this.tagName.toLowerCase(), isComplete(this._session, this._model, this.audioComplete, this)));\n };\n\n changeSession = (value) => {\n this.session.value = value;\n this.session.selector = 'Mouse';\n\n this.dispatchChangedEvent();\n this._render();\n };\n\n _createAudioInfoToast() {\n const info = document.createElement('div');\n info.id = 'play-audio-info';\n\n Object.assign(info.style, {\n position: 'absolute',\n top: 0,\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'white',\n zIndex: '1000',\n cursor: 'pointer',\n });\n\n const img = document.createElement('img');\n img.src = EnableAudioAutoplayImage;\n img.alt = 'Click anywhere to enable audio autoplay';\n img.width = 500;\n img.height = 300;\n\n info.appendChild(img);\n return info;\n }\n\n connectedCallback() {\n this._render();\n\n // Observation: audio in Chrome will have the autoplay attribute,\n // while other browsers will not have the autoplay attribute and will need a user interaction to play the audio\n // This workaround fixes the issue of audio being cached and played on any user interaction in Safari and Firefox\n const observer = new MutationObserver((mutationsList, observer) => {\n mutationsList.forEach((mutation) => {\n if (mutation.type === 'childList') {\n if (this._audioInitialized) return;\n const audio = this.querySelector('audio');\n const isInsidePrompt = audio && audio.closest('#preview-prompt');\n\n if (!this._model) return;\n if (!this._model.autoplayAudioEnabled) return;\n if (audio && !isInsidePrompt) return;\n if (!audio) return;\n\n const info = this._createAudioInfoToast();\n const container = this.querySelector('#main-container');\n const enableAudio = () => {\n if (this.querySelector('#play-audio-info')) {\n audio.play();\n container.removeChild(info);\n }\n\n document.removeEventListener('click', enableAudio);\n };\n\n // if the audio is paused, it means the user has not interacted with the page yet and the audio will not play\n // FIX FOR SAFARI: play with a slight delay to check if autoplay was blocked\n setTimeout(() => {\n if (audio.paused && !this.querySelector('#play-audio-info')) {\n // add info message as a toast to enable audio playback\n container.appendChild(info);\n document.addEventListener('click', enableAudio);\n } else {\n document.removeEventListener('click', enableAudio);\n }\n }, 500);\n\n // we need to listen for the playing event to remove the toast in case the audio plays because of re-rendering\n const handlePlaying = () => {\n //timestamp when auto-played audio started playing\n this._session.audioStartTime = this._session.audioStartTime || new Date().getTime();\n\n const info = this.querySelector('#play-audio-info');\n if (info) {\n container.removeChild(info);\n }\n\n audio.removeEventListener('playing', handlePlaying);\n };\n\n audio.addEventListener('playing', handlePlaying);\n\n // we need to listen for the ended event to update the isComplete state\n const handleEnded = () => {\n //timestamp when auto-played audio completed playing\n this._session.audioEndTime = this._session.audioEndTime || new Date().getTime();\n\n let { audioStartTime, audioEndTime, waitTime } = this._session;\n if (!waitTime && audioStartTime && audioEndTime) {\n // waitTime is elapsed time the user waited for auto-played audio to finish\n this._session.waitTime = audioEndTime - audioStartTime;\n }\n\n this.audioComplete = true;\n this.dispatchChangedEvent();\n audio.removeEventListener('ended', handleEnded);\n };\n\n audio.addEventListener('ended', handleEnded);\n\n // store references to remove later\n this._audio = audio;\n this._handlePlaying = handlePlaying;\n this._handleEnded = handleEnded;\n this._enableAudio = enableAudio;\n // set to true to prevent multiple initializations\n this._audioInitialized = true;\n\n observer.disconnect();\n }\n });\n });\n\n observer.observe(this, { childList: true, subtree: true });\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this._enableAudio);\n\n if (this._audio) {\n this._audio.removeEventListener('playing', this._handlePlaying);\n this._audio.removeEventListener('ended', this._handleEnded);\n this._audio = null;\n }\n }\n}\n"],"file":"index.js"}
|
package/lib/main.js
CHANGED
|
@@ -27,13 +27,13 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
27
27
|
|
|
28
28
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
29
29
|
|
|
30
|
-
var _correctAnswerToggle = require("@pie-lib/
|
|
30
|
+
var _correctAnswerToggle = _interopRequireDefault(require("@pie-lib/correct-answer-toggle"));
|
|
31
31
|
|
|
32
|
-
var _maskMarkup = require("@pie-lib/
|
|
32
|
+
var _maskMarkup = require("@pie-lib/mask-markup");
|
|
33
33
|
|
|
34
|
-
var _drag = require("@pie-lib/
|
|
34
|
+
var _drag = require("@pie-lib/drag");
|
|
35
35
|
|
|
36
|
-
var _renderUi = require("@pie-lib/
|
|
36
|
+
var _renderUi = require("@pie-lib/render-ui");
|
|
37
37
|
|
|
38
38
|
var _styles = require("@material-ui/core/styles");
|
|
39
39
|
|
|
@@ -126,7 +126,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
126
126
|
prompt: prompt,
|
|
127
127
|
autoplayAudioEnabled: autoplayAudioEnabled,
|
|
128
128
|
customAudioButton: customAudioButton
|
|
129
|
-
}), /*#__PURE__*/_react["default"].createElement(_correctAnswerToggle
|
|
129
|
+
}), /*#__PURE__*/_react["default"].createElement(_correctAnswerToggle["default"], {
|
|
130
130
|
show: showCorrectAnswerToggle,
|
|
131
131
|
toggled: showCorrectAnswer,
|
|
132
132
|
onToggle: this.toggleShowCorrect,
|
package/lib/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/main.js"],"names":["DraggableDragInTheBlank","DragInTheBlank","Main","showCorrectAnswer","setState","state","nextProps","nextModel","model","correctResponse","props","onChange","value","classes","extraCSSRules","prompt","mode","language","fontSizeFactor","autoplayAudioEnabled","customAudioButton","modelWithValue","showCorrectAnswerToggle","showRationale","rationale","showTeacherInstructions","teacherInstructions","mainContainer","collapsible","hidden","visible","toggleShowCorrect","React","Component","PropTypes","object","feedback","func","styles","theme","color","text","backgroundColor","background","position","marginBottom","spacing","unit","marginTop"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAEA,IAAMA,uBAAuB,GAAG,2BAAgBC,0BAAhB,CAAhC;;IAEaC,I;;;;;;;;;;;;;;;8FAaH;AACNC,MAAAA,iBAAiB,EAAE;AADb,K;0GAIY,YAAM;AACxB,YAAKC,QAAL,CAAc;AAAED,QAAAA,iBAAiB,EAAE,CAAC,MAAKE,KAAL,CAAWF;AAAjC,OAAd;AACD,K;;;;;;WAED,0CAAiCG,SAAjC,EAA4C;AAC1C,UAAeC,SAAf,GAA6BD,SAA7B,CAAQE,KAAR;;AAEA,
|
|
1
|
+
{"version":3,"sources":["../src/main.js"],"names":["DraggableDragInTheBlank","DragInTheBlank","Main","showCorrectAnswer","setState","state","nextProps","nextModel","model","correctResponse","props","onChange","value","classes","extraCSSRules","prompt","mode","language","fontSizeFactor","autoplayAudioEnabled","customAudioButton","modelWithValue","showCorrectAnswerToggle","showRationale","rationale","showTeacherInstructions","teacherInstructions","mainContainer","collapsible","hidden","visible","toggleShowCorrect","React","Component","PropTypes","object","feedback","func","styles","theme","color","text","backgroundColor","background","position","marginBottom","spacing","unit","marginTop"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { DragInTheBlank } from '@pie-lib/mask-markup';\nimport { withDragContext } from '@pie-lib/drag';\nimport { color, Collapsible, hasText, hasMedia, PreviewPrompt, UiLayout } from '@pie-lib/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst DraggableDragInTheBlank = withDragContext(DragInTheBlank);\n\nexport class Main extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n model: PropTypes.object,\n value: PropTypes.object,\n feedback: PropTypes.object,\n onChange: PropTypes.func,\n };\n\n static defaultProps = {\n value: {},\n };\n\n state = {\n showCorrectAnswer: false,\n };\n\n toggleShowCorrect = () => {\n this.setState({ showCorrectAnswer: !this.state.showCorrectAnswer });\n };\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n const { model: nextModel } = nextProps;\n\n if (nextModel && !nextModel.correctResponse && this.state.showCorrectAnswer !== false) {\n this.setState({ showCorrectAnswer: false });\n }\n }\n\n render() {\n const { showCorrectAnswer } = this.state;\n const { model, onChange, value, classes } = this.props;\n const { extraCSSRules, prompt, mode, language, fontSizeFactor, autoplayAudioEnabled, customAudioButton } = model;\n const modelWithValue = { ...model, value };\n const showCorrectAnswerToggle = mode === 'evaluate';\n\n const showRationale = model.rationale && (hasText(model.rationale) || hasMedia(model.rationale));\n const showTeacherInstructions =\n model.teacherInstructions && (hasText(model.teacherInstructions) || hasMedia(model.teacherInstructions));\n\n return (\n <UiLayout\n extraCSSRules={extraCSSRules}\n id={'main-container'}\n className={classes.mainContainer}\n fontSizeFactor={fontSizeFactor}\n >\n {showTeacherInstructions && (\n <Collapsible\n className={classes.collapsible}\n labels={{ hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions' }}\n >\n <PreviewPrompt prompt={model.teacherInstructions} />\n </Collapsible>\n )}\n\n {prompt && (\n <PreviewPrompt\n className=\"prompt\"\n prompt={prompt}\n autoplayAudioEnabled={autoplayAudioEnabled}\n customAudioButton={customAudioButton}\n />\n )}\n\n <CorrectAnswerToggle\n show={showCorrectAnswerToggle}\n toggled={showCorrectAnswer}\n onToggle={this.toggleShowCorrect}\n language={language}\n />\n\n <DraggableDragInTheBlank {...modelWithValue} onChange={onChange} showCorrectAnswer={showCorrectAnswer} />\n\n {showRationale && (\n <Collapsible className={classes.rationale} labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }}>\n <PreviewPrompt prompt={model.rationale} />\n </Collapsible>\n )}\n </UiLayout>\n );\n }\n}\n\nconst styles = (theme) => ({\n mainContainer: {\n color: color.text(),\n backgroundColor: color.background(),\n '& tr > td': {\n color: color.text(),\n },\n position: 'relative',\n },\n collapsible: {\n marginBottom: theme.spacing.unit * 2,\n },\n rationale: {\n marginTop: theme.spacing.unit * 2,\n },\n});\n\nexport default withStyles(styles)(Main);\n"],"file":"main.js"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"repository": "pie-framework/pie-elements",
|
|
7
|
-
"version": "6.13.2-next.
|
|
7
|
+
"version": "6.13.2-next.72+bb2d58615",
|
|
8
8
|
"description": "",
|
|
9
9
|
"scripts": {
|
|
10
10
|
"postpublish": "../../scripts/postpublish"
|
|
@@ -12,7 +12,11 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@material-ui/core": "^3.9.2",
|
|
14
14
|
"@pie-framework/pie-player-events": "^0.1.0",
|
|
15
|
-
"@pie-lib/
|
|
15
|
+
"@pie-lib/correct-answer-toggle": "^2.15.0",
|
|
16
|
+
"@pie-lib/drag": "^2.12.0",
|
|
17
|
+
"@pie-lib/mask-markup": "^1.23.0",
|
|
18
|
+
"@pie-lib/math-rendering": "^3.12.0",
|
|
19
|
+
"@pie-lib/render-ui": "^4.25.0",
|
|
16
20
|
"classnames": "^2.2.5",
|
|
17
21
|
"lodash": "^4.17.10",
|
|
18
22
|
"prop-types": "^15.6.1",
|
|
@@ -21,7 +25,7 @@
|
|
|
21
25
|
},
|
|
22
26
|
"author": "",
|
|
23
27
|
"license": "ISC",
|
|
24
|
-
"gitHead": "
|
|
28
|
+
"gitHead": "bb2d58615291cb18ae4b0c5f3113c1309056ce62",
|
|
25
29
|
"main": "lib/index.js",
|
|
26
30
|
"module": "src/index.js"
|
|
27
31
|
}
|