@pie-element/drag-in-the-blank 3.12.6 → 3.13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,47 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.13.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.13.0...@pie-element/drag-in-the-blank@3.13.1) (2022-02-04)
7
+
8
+ **Note:** Version bump only for package @pie-element/drag-in-the-blank
9
+
10
+
11
+
12
+
13
+
14
+ # [3.13.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.12.8...@pie-element/drag-in-the-blank@3.13.0) (2022-01-24)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * use preview prompt for prompt, rationale and teacher instructions to fix table rendering PD-1456 ([f330601](https://github.com/pie-framework/pie-elements/commit/f3306019a2d1c8ce3e2783823dfe9ef0a0394e4f))
20
+ * **drag-in-the-blank:** fix validation behavior PD-1404 ([02f3f5c](https://github.com/pie-framework/pie-elements/commit/02f3f5ca82b03d54e055a3d746027e8b5ac66790))
21
+
22
+
23
+ ### Features
24
+
25
+ * **drag-in-the-blank, inline-dropdown:** move rationale after the item content PD-1379 ([fd71c58](https://github.com/pie-framework/pie-elements/commit/fd71c5853bdd63b31a746241dd5649e5de051300))
26
+
27
+
28
+
29
+
30
+
31
+ ## [3.12.8](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.12.7...@pie-element/drag-in-the-blank@3.12.8) (2022-01-10)
32
+
33
+ **Note:** Version bump only for package @pie-element/drag-in-the-blank
34
+
35
+
36
+
37
+
38
+
39
+ ## [3.12.7](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.12.6...@pie-element/drag-in-the-blank@3.12.7) (2021-12-23)
40
+
41
+ **Note:** Version bump only for package @pie-element/drag-in-the-blank
42
+
43
+
44
+
45
+
46
+
6
47
  ## [3.12.5](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@3.12.4...@pie-element/drag-in-the-blank@3.12.5) (2021-12-13)
7
48
 
8
49
  **Note:** Version bump only for package @pie-element/drag-in-the-blank
@@ -3,6 +3,41 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.6.14](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.13...@pie-element/drag-in-the-blank-configure@3.6.14) (2022-02-04)
7
+
8
+ **Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
9
+
10
+
11
+
12
+
13
+
14
+ ## [3.6.13](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.12...@pie-element/drag-in-the-blank-configure@3.6.13) (2022-01-24)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **drag-in-the-blank:** fix validation behavior PD-1404 ([02f3f5c](https://github.com/pie-framework/pie-elements/commit/02f3f5ca82b03d54e055a3d746027e8b5ac66790))
20
+
21
+
22
+
23
+
24
+
25
+ ## [3.6.12](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.11...@pie-element/drag-in-the-blank-configure@3.6.12) (2022-01-10)
26
+
27
+ **Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
28
+
29
+
30
+
31
+
32
+
33
+ ## [3.6.11](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.10...@pie-element/drag-in-the-blank-configure@3.6.11) (2021-12-23)
34
+
35
+ **Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
36
+
37
+
38
+
39
+
40
+
6
41
  ## [3.6.9](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@3.6.8...@pie-element/drag-in-the-blank-configure@3.6.9) (2021-12-13)
7
42
 
8
43
  **Note:** Version bump only for package @pie-element/drag-in-the-blank-configure
@@ -115,6 +115,12 @@ var Choices = /*#__PURE__*/function (_React$Component) {
115
115
  open: false
116
116
  }
117
117
  });
118
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "rerenderMath", function () {
119
+ //eslint-disable-next-line
120
+ var domNode = _reactDom["default"].findDOMNode((0, _assertThisInitialized2["default"])(_this));
121
+
122
+ (0, _mathRendering.renderMath)(domNode);
123
+ });
118
124
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChoiceChanged", function (prevValue, val, key) {
119
125
  var _this$props = _this.props,
120
126
  onChange = _this$props.onChange,
@@ -122,42 +128,26 @@ var Choices = /*#__PURE__*/function (_React$Component) {
122
128
  var choices = model.choices,
123
129
  correctResponse = model.correctResponse,
124
130
  alternateResponses = model.alternateResponses;
125
- var exists = (choices || []).filter(function (c) {
126
- return c.value === val;
127
- }); // discard the new added choice if it is a duplicate
128
-
129
- if (prevValue === '' && exists.length) {
130
- var _newChoices = (choices || []).filter(function (c) {
131
- return c.id !== key;
132
- });
133
-
134
- onChange(_newChoices);
135
-
136
- _this.setState({
137
- dialog: {
138
- open: true,
139
- message: 'Identical answer choices are not allowed and will be discarded',
140
- onOk: function onOk() {
141
- _this.setState({
142
- dialog: {
143
- open: false
144
- }
145
- });
146
- }
147
- }
148
- });
149
-
150
- return;
151
- } // discard the change if the choice would be a duplicate to one that already exists
131
+ var duplicatedValue = (choices || []).find(function (c) {
132
+ return c.value === val && c.id !== key;
133
+ }); // discard the new added choice or the changes if the choice would be a duplicate to one that already exists
134
+
135
+ if (duplicatedValue) {
136
+ if (prevValue === '') {
137
+ // remove the new added choice from choices
138
+ var _newChoices = (choices || []).filter(function (c) {
139
+ return c.id !== key;
140
+ });
152
141
 
142
+ onChange(_newChoices);
143
+ }
153
144
 
154
- if (exists.length) {
155
145
  _this.setState({
156
146
  dialog: {
157
147
  open: true,
158
148
  message: 'Identical answer choices are not allowed and the changes will be discarded',
159
149
  onOk: function onOk() {
160
- _this.setState({
150
+ return _this.setState({
161
151
  dialog: {
162
152
  open: false
163
153
  }
@@ -274,12 +264,14 @@ var Choices = /*#__PURE__*/function (_React$Component) {
274
264
  }
275
265
 
276
266
  (0, _createClass2["default"])(Choices, [{
267
+ key: "componentDidMount",
268
+ value: function componentDidMount() {
269
+ this.rerenderMath();
270
+ }
271
+ }, {
277
272
  key: "componentDidUpdate",
278
273
  value: function componentDidUpdate() {
279
- //eslint-disable-next-line
280
- var domNode = _reactDom["default"].findDOMNode(this);
281
-
282
- (0, _mathRendering.renderMath)(domNode);
274
+ this.rerenderMath();
283
275
 
284
276
  if (this.focusedNodeRef) {
285
277
  this.focusedNodeRef.focus('end');
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/choices.jsx"],"names":["window","renMath","renderMath","InfoDialog","open","title","onOk","propTypes","PropTypes","bool","func","string","styles","theme","design","marginTop","spacing","unit","altChoices","alignItems","display","flexWrap","justifyContent","padding","marginBottom","Choices","dialog","prevValue","val","key","props","onChange","model","choices","correctResponse","alternateResponses","exists","filter","c","value","length","newChoices","id","setState","message","map","usedForResponse","Object","keys","forEach","responseKey","values","alternate","indexOf","alert","newChoicesWithoutTheEmptyOne","choice","focusedEl","oldChoices","duplicates","v","domNode","ReactDOM","findDOMNode","focusedNodeRef","focus","state","classes","toolbarOpts","visibleChoices","getVisibleChoices","addButton","onAddChoice","index","minWidth","zIndex","ref","prompt","video","disabled","audio","onChoiceChanged","undefined","onChoiceFocus","handleChoiceRemove","React","Component","object","isRequired","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 find from 'lodash/find';\nimport Button from '@material-ui/core/Button';\nimport Choice from './choice';\nimport { choiceIsEmpty } from './markupUtils';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogActions from '@material-ui/core/DialogActions';\n\nwindow.renMath = renderMath;\n\nconst InfoDialog = ({ open, title, onOk }) => (\n <Dialog open={open}>\n <DialogTitle>{title || ''}</DialogTitle>\n <DialogActions>\n {onOk && (\n <Button onClick={onOk} color=\"primary\">\n OK\n </Button>\n )}\n </DialogActions>\n </Dialog>\n);\n\nInfoDialog.propTypes = {\n open: PropTypes.bool,\n onOk: PropTypes.func,\n title: PropTypes.string\n};\n\nconst styles = theme => ({\n design: {\n marginTop: theme.spacing.unit * 2\n },\n altChoices: {\n alignItems: 'flex-start',\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-evenly',\n padding: '20px 0 0 0',\n '& > *': {\n marginBottom: '20px'\n }\n }\n});\n\nexport class Choices extends React.Component {\n static propTypes = {\n duplicates: PropTypes.bool,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n toolbarOpts: PropTypes.object\n };\n\n state = {\n dialog: {\n open: false\n }\n };\n\n componentDidUpdate() {\n //eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n\n if (this.focusedNodeRef) {\n this.focusedNodeRef.focus('end');\n }\n }\n\n onChoiceChanged = (prevValue, val, key) => {\n const { onChange, model } = this.props;\n const { choices, correctResponse, alternateResponses } = model;\n const exists = (choices || []).filter(c => c.value === val);\n\n // discard the new added choice if it is a duplicate\n if (prevValue === '' && exists.length) {\n const newChoices = (choices || []).filter(c => c.id !== key);\n\n onChange(newChoices);\n\n this.setState({\n dialog: {\n open: true,\n message:\n 'Identical answer choices are not allowed and will be discarded',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false\n }\n }\n );\n }\n }\n });\n\n return;\n }\n\n // discard the change if the choice would be a duplicate to one that already exists\n if(exists.length) {\n this.setState({\n dialog: {\n open: true,\n message: 'Identical answer choices are not allowed and the changes will be discarded',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false\n }\n }\n );\n }\n }\n });\n\n return;\n }\n\n const newChoices = choices\n ? choices.map(c => {\n if (c.id === key) {\n return { ...c, value: val };\n }\n\n return c;\n })\n : [];\n\n if (choiceIsEmpty({ value: val })) {\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) {\n Object.values(alternateResponses).forEach(alternate => {\n if (alternate.indexOf(key) >= 0) {\n usedForResponse = true;\n }\n });\n }\n\n if (usedForResponse) {\n alert('Answer choices cannot be blank.');\n } else {\n if (!choiceIsEmpty({ value: prevValue })) {\n // if the previous value was not empty, it means that the choice can be deleted\n const newChoicesWithoutTheEmptyOne = newChoices.filter(choice => choice.id !== key);\n\n onChange(newChoicesWithoutTheEmptyOne);\n } else {\n onChange(newChoices);\n }\n }\n } else {\n onChange(newChoices);\n }\n };\n\n onChoiceFocus = id => this.setState({\n focusedEl: id\n });\n\n onAddChoice = () => {\n const { model: { choices: oldChoices }, onChange } = this.props;\n\n this.setState({\n focusedEl: `${oldChoices.length}`\n }, () => {\n onChange([\n ...oldChoices,\n {\n id: `${oldChoices.length}`,\n value: ''\n }\n ]\n );\n });\n };\n\n handleChoiceRemove = id => {\n const { onChange, model: { choices } } = this.props;\n const newChoices = choices.filter(c => c.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 => !find(correctResponse, v => v === choice.id));\n };\n\n render() {\n const { focusedEl, dialog } = this.state;\n const {\n classes,\n duplicates,\n toolbarOpts\n } = this.props;\n const visibleChoices = this.getVisibleChoices() || [];\n\n return (\n <div className={classes.design}>\n <InfoDialog\n open={dialog.open}\n title={dialog.message}\n onOk={dialog.onOk}\n />\n <Button\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n onClick={this.onAddChoice}\n >\n Add Choice\n </Button>\n <div\n className={classes.altChoices}\n >\n {\n visibleChoices.map((c, index) => {\n if (focusedEl === c.id) {\n return (\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 markup={c.value}\n pluginProps={{\n video: {\n disabled: true\n },\n audio: {\n disabled: true\n }\n }}\n onChange={val => this.onChoiceChanged(c.value, val, c.id)}\n onDone={() => {\n this.setState({\n focusedEl: undefined\n });\n }}\n disableUnderline\n toolbarOpts={toolbarOpts}\n />\n </div>\n );\n }\n\n return (\n <Choice\n key={index}\n duplicates={duplicates}\n targetId=\"0\"\n choice={c}\n onClick={() => this.onChoiceFocus(c.id)}\n onRemoveChoice={() => this.handleChoiceRemove(c.id)}\n />\n );\n })\n }\n </div>\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":["window","renMath","renderMath","InfoDialog","open","title","onOk","propTypes","PropTypes","bool","func","string","styles","theme","design","marginTop","spacing","unit","altChoices","alignItems","display","flexWrap","justifyContent","padding","marginBottom","Choices","dialog","domNode","ReactDOM","findDOMNode","prevValue","val","key","props","onChange","model","choices","correctResponse","alternateResponses","duplicatedValue","find","c","value","id","newChoices","filter","setState","message","map","usedForResponse","Object","keys","forEach","responseKey","values","alternate","indexOf","alert","newChoicesWithoutTheEmptyOne","choice","focusedEl","oldChoices","length","duplicates","v","rerenderMath","focusedNodeRef","focus","state","classes","toolbarOpts","visibleChoices","getVisibleChoices","addButton","onAddChoice","index","minWidth","zIndex","ref","prompt","video","disabled","audio","onChoiceChanged","undefined","onChoiceFocus","handleChoiceRemove","React","Component","object","isRequired","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 find from 'lodash/find';\nimport Button from '@material-ui/core/Button';\nimport Choice from './choice';\nimport { choiceIsEmpty } from './markupUtils';\nimport { withStyles } from '@material-ui/core/styles';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogActions from '@material-ui/core/DialogActions';\n\nwindow.renMath = renderMath;\n\nconst InfoDialog = ({ open, title, onOk }) => (\n <Dialog open={open}>\n <DialogTitle>{title || ''}</DialogTitle>\n <DialogActions>\n {onOk && (\n <Button onClick={onOk} color=\"primary\">\n OK\n </Button>\n )}\n </DialogActions>\n </Dialog>\n);\n\nInfoDialog.propTypes = {\n open: PropTypes.bool,\n onOk: PropTypes.func,\n title: PropTypes.string\n};\n\nconst styles = theme => ({\n design: {\n marginTop: theme.spacing.unit * 2\n },\n altChoices: {\n alignItems: 'flex-start',\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-evenly',\n padding: '20px 0 0 0',\n '& > *': {\n marginBottom: '20px'\n }\n }\n});\n\nexport class Choices extends React.Component {\n static propTypes = {\n duplicates: PropTypes.bool,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n classes: PropTypes.object.isRequired,\n toolbarOpts: PropTypes.object\n };\n\n state = {\n dialog: {\n open: false\n }\n };\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 dialog: {\n open: true,\n message: 'Identical answer choices are not allowed and the changes will be discarded',\n onOk: () => this.setState({ dialog: { open: false }})\n }\n });\n\n return;\n }\n\n const newChoices = choices\n ? choices.map(c => {\n if (c.id === key) {\n return { ...c, value: val };\n }\n\n return c;\n })\n : [];\n\n if (choiceIsEmpty({ value: val })) {\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) {\n Object.values(alternateResponses).forEach(alternate => {\n if (alternate.indexOf(key) >= 0) {\n usedForResponse = true;\n }\n });\n }\n\n if (usedForResponse) {\n alert('Answer choices cannot be blank.');\n } else {\n if (!choiceIsEmpty({ value: prevValue })) {\n // if the previous value was not empty, it means that the choice can be deleted\n const newChoicesWithoutTheEmptyOne = newChoices.filter(choice => choice.id !== key);\n\n onChange(newChoicesWithoutTheEmptyOne);\n } else {\n onChange(newChoices);\n }\n }\n } else {\n onChange(newChoices);\n }\n };\n\n onChoiceFocus = id => this.setState({\n focusedEl: id\n });\n\n onAddChoice = () => {\n const { model: { choices: oldChoices }, onChange } = this.props;\n\n this.setState({\n focusedEl: `${oldChoices.length}`\n }, () => {\n onChange([\n ...oldChoices,\n {\n id: `${oldChoices.length}`,\n value: ''\n }\n ]\n );\n });\n };\n\n handleChoiceRemove = id => {\n const { onChange, model: { choices } } = this.props;\n const newChoices = choices.filter(c => c.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 => !find(correctResponse, v => v === choice.id));\n };\n\n render() {\n const { focusedEl, dialog } = this.state;\n const {\n classes,\n duplicates,\n toolbarOpts\n } = this.props;\n const visibleChoices = this.getVisibleChoices() || [];\n\n return (\n <div className={classes.design}>\n <InfoDialog\n open={dialog.open}\n title={dialog.message}\n onOk={dialog.onOk}\n />\n <Button\n className={classes.addButton}\n variant=\"contained\"\n color=\"primary\"\n onClick={this.onAddChoice}\n >\n Add Choice\n </Button>\n <div\n className={classes.altChoices}\n >\n {\n visibleChoices.map((c, index) => {\n if (focusedEl === c.id) {\n return (\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 markup={c.value}\n pluginProps={{\n video: {\n disabled: true\n },\n audio: {\n disabled: true\n }\n }}\n onChange={val => this.onChoiceChanged(c.value, val, c.id)}\n onDone={() => {\n this.setState({\n focusedEl: undefined\n });\n }}\n disableUnderline\n toolbarOpts={toolbarOpts}\n />\n </div>\n );\n }\n\n return (\n <Choice\n key={index}\n duplicates={duplicates}\n targetId=\"0\"\n choice={c}\n onClick={() => this.onChoiceFocus(c.id)}\n onRemoveChoice={() => this.handleChoiceRemove(c.id)}\n />\n );\n })\n }\n </div>\n </div>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Choices);\n\nexport default Styled;\n"],"file":"choices.js"}
@@ -15,12 +15,18 @@ var createElementFromHTML = function createElementFromHTML(htmlString) {
15
15
  var div = document.createElement('div');
16
16
  div.innerHTML = htmlString.trim();
17
17
  return div;
18
- };
18
+ }; // do not remove \t from \times, \triangle, \tan, \theta or \therefore
19
+
19
20
 
20
21
  exports.createElementFromHTML = createElementFromHTML;
22
+ var tSymbols = 'imes|riangle|an|heta|herefore'; // do not remove \n from \nthroot, \nparallel, \ncong, \napprox, \neq, \ne or \nsim
23
+
24
+ var nSymbols = 'throot|parallel|cong|approx|eq|e|sim'; // match all \t and \n that are not part of math symbols that starts with \t or \n
25
+
26
+ var matchTabAndNewLine = new RegExp("(\\t(?!".concat(tSymbols, "))|(\\n(?!").concat(nSymbols, "))|(\\\\t(?!").concat(tSymbols, "))|(\\\\n(?!").concat(nSymbols, "))"), 'g');
21
27
 
22
28
  var removeUnwantedCharacters = function removeUnwantedCharacters(markup) {
23
- return markup.replace(/(\t+(?!imes))|(\n)|(\\t+(?!imes))|(\\n)/g, '').replace(/\\"/g, '"').replace(/\\\//g, '/');
29
+ return markup.replace(matchTabAndNewLine, '').replace(/\\"/g, '"').replace(/\\\//g, '/');
24
30
  };
25
31
 
26
32
  exports.removeUnwantedCharacters = removeUnwantedCharacters;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/markupUtils.js"],"names":["createElementFromHTML","htmlString","div","document","createElement","innerHTML","trim","removeUnwantedCharacters","markup","replace","processMarkup","newMarkup","slateMarkup","choices","index","querySelectorAll","forEach","s","value","dataset","push","id","replaceWith","correctResponse","reduce","obj","c","REGEX","createSlateMarkup","match","g","correctId","correctChoice","find","choiceIsEmpty","choice","domEl","Array","from","tagName","childNodes","length","remove","newString"],"mappings":";;;;;;;;;AAAA;;AACA;;AAEO,IAAMA,qBAAqB,GAAG,SAAxBA,qBAAwB,CAAAC,UAAU,EAAI;AACjD,MAAMC,GAAG,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAZ;AAEAF,EAAAA,GAAG,CAACG,SAAJ,GAAgBJ,UAAU,CAACK,IAAX,EAAhB;AAEA,SAAOJ,GAAP;AACD,CANM;;;;AAQA,IAAMK,wBAAwB,GAAG,SAA3BA,wBAA2B,CAAAC,MAAM;AAAA,SAC5CA,MAAM,CACHC,OADH,CACW,0CADX,EACuD,EADvD,EAEGA,OAFH,CAEW,MAFX,EAEmB,GAFnB,EAEwBA,OAFxB,CAEgC,OAFhC,EAEyC,GAFzC,CAD4C;AAAA,CAAvC;;;;AAKA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAAAF,MAAM,EAAI;AACrC,MAAMG,SAAS,GAAGJ,wBAAwB,CAACC,MAAD,CAA1C;AACA,MAAMI,WAAW,GAAGZ,qBAAqB,CAACW,SAAD,CAAzC;AACA,MAAME,OAAO,GAAG,EAAhB;AACA,MAAIC,KAAK,GAAG,CAAZ;AAEAF,EAAAA,WAAW,CAACG,gBAAZ,CAA6B,iCAA7B,EAAgEC,OAAhE,CAAwE,UAAAC,CAAC,EAAI;AAC3E,QAAIC,KAAK,GAAGD,CAAC,CAACE,OAAF,CAAUD,KAAV,IAAmBD,CAAC,CAACE,OAAF,CAAUD,KAAV,CAAgBT,OAAhB,CAAwB,SAAxB,EAAmC,GAAnC,EAAwCH,IAAxC,EAA/B;;AAEA,QAAI,CAACY,KAAL,EAAY;AACVA,MAAAA,KAAK,GAAG,EAAR;AACD;;AAEDL,IAAAA,OAAO,CAACO,IAAR,CAAa;AACXF,MAAAA,KAAK,EAALA,KADW;AAEXG,MAAAA,EAAE,EAAEJ,CAAC,CAACE,OAAF,CAAUE;AAFH,KAAb;AAKAJ,IAAAA,CAAC,CAACK,WAAF,aAAmBR,KAAK,EAAxB;AACD,GAbD;AAeA,SAAO;AACLN,IAAAA,MAAM,EAAEI,WAAW,CAACP,SADf;AAELQ,IAAAA,OAAO,EAAEA,OAFJ;AAGLU,IAAAA,eAAe,EAAEV,OAAO,CAACW,MAAR,CAAe,UAACC,GAAD,EAAMC,CAAN,EAASZ,KAAT,EAAmB;AACjDW,MAAAA,GAAG,CAACX,KAAD,CAAH,GAAa,CAAC,6BAAYY,CAAC,CAACL,EAAd,CAAD,IAAsBK,CAAC,CAACL,EAAxB,IAA8B,EAA3C;AAEA,aAAOI,GAAP;AACD,KAJgB,EAId,EAJc;AAHZ,GAAP;AASD,CA9BM;;;AAgCP,IAAME,KAAK,GAAG,gBAAd;;AAEO,IAAMC,iBAAiB,GAAG,SAApBA,iBAAoB,CAACpB,MAAD,EAASK,OAAT,EAAkBU,eAAlB,EAAsC;AACrE,MAAMZ,SAAS,GAAGJ,wBAAwB,CAACC,MAAD,CAA1C;AACA,MAAIM,KAAK,GAAG,CAAZ;AAEA,SAAOH,SAAS,CAACF,OAAV,CAAkBkB,KAAlB,EAAyB,UAACE,KAAD,EAAQC,CAAR,EAAc;AAC5C,QAAMC,SAAS,GAAGR,eAAe,CAACO,CAAD,CAAjC;AACA,QAAIE,aAAa,GAAGnB,OAAO,CAACoB,IAAR,CAAa,UAAAP,CAAC;AAAA,aAAIA,CAAC,CAACL,EAAF,KAASU,SAAb;AAAA,KAAd,CAApB;;AAEA,QAAI,CAACC,aAAD,IAAkB,CAACA,aAAa,CAACd,KAArC,EAA4C;AAC1Cc,MAAAA,aAAa,GAAG;AACdX,QAAAA,EAAE,EAAE,EADU;AAEdH,QAAAA,KAAK,EAAE;AAFO,OAAhB;AAID;;AAED,wEAA0DJ,KAAK,EAA/D,0BAA+EkB,aAAa,CAACX,EAA7F,6BAAgH,wBAAOW,aAAa,CAACd,KAArB,CAAhH;AACD,GAZM,CAAP;AAaD,CAjBM;;;;AAmBA,IAAMgB,aAAa,GAAG,SAAhBA,aAAgB,CAAAC,MAAM,EAAI;AACrC,MAAIA,MAAJ,EAAY;AACV,wBAAuBA,MAAvB,CAAQjB,KAAR;AAAA,QAAQA,KAAR,8BAAgB,EAAhB;AACA,QAAMkB,KAAK,GAAGpC,qBAAqB,CAACkB,KAAD,CAAnC;AAEAmB,IAAAA,KAAK,CAACC,IAAN,CAAWF,KAAK,CAACrB,gBAAN,CAAuB,GAAvB,CAAX,EAAwCC,OAAxC,CAAgD,UAACoB,KAAD,EAAW;AACzD,UAAIA,KAAK,CAACG,OAAN,KAAkB,KAAlB,IAA2BH,KAAK,CAACI,UAAN,CAAiBC,MAAjB,KAA4B,CAA3D,EAA8D;AAC5DL,QAAAA,KAAK,CAACM,MAAN;AACD;AACF,KAJD;AAMA,QAAMC,SAAS,GAAGP,KAAK,CAAC/B,SAAN,CAAgBC,IAAhB,EAAlB;AAEA,WAAOqC,SAAS,KAAK,EAArB;AACD;;AAED,SAAO,KAAP;AACD,CAjBM","sourcesContent":["import escape from 'lodash/escape';\nimport isUndefined from 'lodash/isUndefined';\n\nexport const createElementFromHTML = htmlString => {\n const div = document.createElement('div');\n\n div.innerHTML = htmlString.trim();\n\n return div;\n};\n\nexport const removeUnwantedCharacters = markup =>\n markup\n .replace(/(\\t+(?!imes))|(\\n)|(\\\\t+(?!imes))|(\\\\n)/g, '')\n .replace(/\\\\\"/g, '\"').replace(/\\\\\\//g, '/');\n\nexport const processMarkup = markup => {\n const newMarkup = removeUnwantedCharacters(markup);\n const slateMarkup = createElementFromHTML(newMarkup);\n const choices = [];\n let index = 0;\n\n slateMarkup.querySelectorAll('[data-type=\"drag_in_the_blank\"]').forEach(s => {\n let value = s.dataset.value && s.dataset.value.replace(/&nbsp;/g, ' ').trim();\n\n if (!value) {\n value = '';\n }\n\n choices.push({\n value,\n id: s.dataset.id\n });\n\n s.replaceWith(`{{${index++}}}`);\n });\n\n return {\n markup: slateMarkup.innerHTML,\n choices: choices,\n correctResponse: choices.reduce((obj, c, index) => {\n obj[index] = !isUndefined(c.id) && c.id || '';\n\n return obj;\n }, {})\n };\n};\n\nconst REGEX = /\\{\\{(\\d+)\\}\\}/g;\n\nexport const createSlateMarkup = (markup, choices, correctResponse) => {\n const newMarkup = removeUnwantedCharacters(markup);\n let index = 0;\n\n return newMarkup.replace(REGEX, (match, g) => {\n const correctId = correctResponse[g];\n let correctChoice = choices.find(c => c.id === correctId);\n\n if (!correctChoice || !correctChoice.value) {\n correctChoice = {\n id: '',\n value: ''\n };\n }\n\n return `<span data-type=\"drag_in_the_blank\" data-index=\"${index++}\" data-id=\"${correctChoice.id}\" data-value=\"${escape(correctChoice.value)}\"></span>`;\n });\n};\n\nexport const choiceIsEmpty = choice => {\n if (choice) {\n const { value = '' } = choice;\n const domEl = createElementFromHTML(value);\n\n Array.from(domEl.querySelectorAll('*')).forEach((domEl) => {\n if (domEl.tagName !== 'IMG' && domEl.childNodes.length === 0) {\n domEl.remove();\n }\n });\n\n const newString = domEl.innerHTML.trim();\n\n return newString === '';\n }\n\n return false;\n};\n"],"file":"markupUtils.js"}
1
+ {"version":3,"sources":["../src/markupUtils.js"],"names":["createElementFromHTML","htmlString","div","document","createElement","innerHTML","trim","tSymbols","nSymbols","matchTabAndNewLine","RegExp","removeUnwantedCharacters","markup","replace","processMarkup","newMarkup","slateMarkup","choices","index","querySelectorAll","forEach","s","value","dataset","push","id","replaceWith","correctResponse","reduce","obj","c","REGEX","createSlateMarkup","match","g","correctId","correctChoice","find","choiceIsEmpty","choice","domEl","Array","from","tagName","childNodes","length","remove","newString"],"mappings":"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","sourcesContent":["import escape from 'lodash/escape';\nimport isUndefined from 'lodash/isUndefined';\n\nexport const createElementFromHTML = htmlString => {\n const div = document.createElement('div');\n\n div.innerHTML = htmlString.trim();\n\n return div;\n};\n\n// do not remove \\t from \\times, \\triangle, \\tan, \\theta or \\therefore\nconst tSymbols = 'imes|riangle|an|heta|herefore';\n// do not remove \\n from \\nthroot, \\nparallel, \\ncong, \\napprox, \\neq, \\ne or \\nsim\nconst nSymbols = 'throot|parallel|cong|approx|eq|e|sim';\n// match all \\t and \\n that are not part of math symbols that starts with \\t or \\n\nconst matchTabAndNewLine = new RegExp(`(\\\\t(?!${tSymbols}))|(\\\\n(?!${nSymbols}))|(\\\\\\\\t(?!${tSymbols}))|(\\\\\\\\n(?!${nSymbols}))`, 'g');\n\nexport const removeUnwantedCharacters = markup =>\n markup.replace(matchTabAndNewLine, '').replace(/\\\\\"/g, '\"').replace(/\\\\\\//g, '/');\n\nexport const processMarkup = markup => {\n const newMarkup = removeUnwantedCharacters(markup);\n const slateMarkup = createElementFromHTML(newMarkup);\n const choices = [];\n let index = 0;\n\n slateMarkup.querySelectorAll('[data-type=\"drag_in_the_blank\"]').forEach(s => {\n let value = s.dataset.value && s.dataset.value.replace(/&nbsp;/g, ' ').trim();\n\n if (!value) {\n value = '';\n }\n\n choices.push({\n value,\n id: s.dataset.id\n });\n\n s.replaceWith(`{{${index++}}}`);\n });\n\n return {\n markup: slateMarkup.innerHTML,\n choices: choices,\n correctResponse: choices.reduce((obj, c, index) => {\n obj[index] = !isUndefined(c.id) && c.id || '';\n\n return obj;\n }, {})\n };\n};\n\nconst REGEX = /\\{\\{(\\d+)\\}\\}/g;\n\nexport const createSlateMarkup = (markup, choices, correctResponse) => {\n const newMarkup = removeUnwantedCharacters(markup);\n let index = 0;\n\n return newMarkup.replace(REGEX, (match, g) => {\n const correctId = correctResponse[g];\n let correctChoice = choices.find(c => c.id === correctId);\n\n if (!correctChoice || !correctChoice.value) {\n correctChoice = {\n id: '',\n value: ''\n };\n }\n\n return `<span data-type=\"drag_in_the_blank\" data-index=\"${index++}\" data-id=\"${correctChoice.id}\" data-value=\"${escape(correctChoice.value)}\"></span>`;\n });\n};\n\nexport const choiceIsEmpty = choice => {\n if (choice) {\n const { value = '' } = choice;\n const domEl = createElementFromHTML(value);\n\n Array.from(domEl.querySelectorAll('*')).forEach((domEl) => {\n if (domEl.tagName !== 'IMG' && domEl.childNodes.length === 0) {\n domEl.remove();\n }\n });\n\n const newString = domEl.innerHTML.trim();\n\n return newString === '';\n }\n\n return false;\n};\n"],"file":"markupUtils.js"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/drag-in-the-blank-configure",
3
- "version": "3.6.10",
3
+ "version": "3.6.14",
4
4
  "private": true,
5
5
  "main": "lib/index.js",
6
6
  "module": "src/index.js",
@@ -8,9 +8,9 @@
8
8
  "@material-ui/core": "^3.9.2",
9
9
  "@material-ui/icons": "^3.0.1",
10
10
  "@pie-framework/pie-configure-events": "^1.2.0",
11
- "@pie-lib/config-ui": "^10.10.13",
11
+ "@pie-lib/config-ui": "^10.10.18",
12
12
  "@pie-lib/drag": "^1.1.52",
13
- "@pie-lib/editable-html": "^7.17.13",
13
+ "@pie-lib/editable-html": "^7.17.18",
14
14
  "@pie-lib/math-rendering": "^2.3.12",
15
15
  "debug": "^3.1.0",
16
16
  "lodash": "^4.17.15",
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "repository": "pie-framework/pie-elements",
7
- "version": "3.12.6",
7
+ "version": "3.13.1",
8
8
  "description": "",
9
9
  "scripts": {
10
10
  "test": "echo \"Error: no test specified\" && exit 1",
@@ -13,7 +13,7 @@
13
13
  "dependencies": {
14
14
  "@material-ui/core": "^3.9.2",
15
15
  "@pie-framework/pie-player-events": "^0.1.0",
16
- "@pie-lib/correct-answer-toggle": "^2.3.33",
16
+ "@pie-lib/correct-answer-toggle": "^2.3.34",
17
17
  "@pie-lib/mask-markup": "^1.11.4",
18
18
  "@pie-lib/math-rendering": "^2.3.12",
19
19
  "@pie-lib/render-ui": "^4.12.4",
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "author": "",
27
27
  "license": "ISC",
28
- "gitHead": "ff7c86a6e386b71b47fdd28890d5a977fff15e17",
28
+ "gitHead": "820dc9994e5f621018ca2c262f9a999996fd2079",
29
29
  "main": "lib/index.js",
30
30
  "module": "src/index.js"
31
31
  }