@pie-element/inline-dropdown 3.8.4 → 3.9.3

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,48 @@
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.9.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown@3.9.2...@pie-element/inline-dropdown@3.9.3) (2021-11-29)
7
+
8
+ **Note:** Version bump only for package @pie-element/inline-dropdown
9
+
10
+
11
+
12
+
13
+
14
+ ## [3.9.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown@3.9.1...@pie-element/inline-dropdown@3.9.2) (2021-10-18)
15
+
16
+ **Note:** Version bump only for package @pie-element/inline-dropdown
17
+
18
+
19
+
20
+
21
+
22
+ ## [3.9.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown@3.9.0...@pie-element/inline-dropdown@3.9.1) (2021-10-04)
23
+
24
+ **Note:** Version bump only for package @pie-element/inline-dropdown
25
+
26
+
27
+
28
+
29
+
30
+ # [3.9.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown@3.8.4...@pie-element/inline-dropdown@3.9.0) (2021-09-20)
31
+
32
+
33
+ ### Bug Fixes
34
+
35
+ * pie-lib updates ([e521c2f](https://github.com/pie-framework/pie-elements/commit/e521c2f1a44aa7f3e14f82a1cee05ceb484ed0a6))
36
+ * Updated pie-lib versions ([2fe4c5d](https://github.com/pie-framework/pie-elements/commit/2fe4c5d0be2d40f5fdb34815855695a7f1087f56))
37
+ * Updated pie-lib versions ([1c23830](https://github.com/pie-framework/pie-elements/commit/1c23830fc75d1de5f7bb3bb16de3c665ae5fa350))
38
+
39
+
40
+ ### Features
41
+
42
+ * **inline-dropdown:** add rationale at choice level PD-488 ([1d88366](https://github.com/pie-framework/pie-elements/commit/1d88366f857b90e4ffc5735fe3af78432aa8844c))
43
+
44
+
45
+
46
+
47
+
6
48
  ## [3.8.4](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown@3.8.3...@pie-element/inline-dropdown@3.8.4) (2021-09-01)
7
49
 
8
50
  **Note:** Version bump only for package @pie-element/inline-dropdown
@@ -3,6 +3,40 @@
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.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown-configure@3.6.1...@pie-element/inline-dropdown-configure@3.6.2) (2021-11-29)
7
+
8
+ **Note:** Version bump only for package @pie-element/inline-dropdown-configure
9
+
10
+
11
+
12
+
13
+
14
+ ## [3.6.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown-configure@3.6.0...@pie-element/inline-dropdown-configure@3.6.1) (2021-10-04)
15
+
16
+ **Note:** Version bump only for package @pie-element/inline-dropdown-configure
17
+
18
+
19
+
20
+
21
+
22
+ # [3.6.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown-configure@3.5.3...@pie-element/inline-dropdown-configure@3.6.0) (2021-09-20)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * pie-lib updates ([e521c2f](https://github.com/pie-framework/pie-elements/commit/e521c2f1a44aa7f3e14f82a1cee05ceb484ed0a6))
28
+ * Updated pie-lib versions ([2fe4c5d](https://github.com/pie-framework/pie-elements/commit/2fe4c5d0be2d40f5fdb34815855695a7f1087f56))
29
+ * Updated pie-lib versions ([1c23830](https://github.com/pie-framework/pie-elements/commit/1c23830fc75d1de5f7bb3bb16de3c665ae5fa350))
30
+
31
+
32
+ ### Features
33
+
34
+ * **inline-dropdown:** add rationale at choice level PD-488 ([1d88366](https://github.com/pie-framework/pie-elements/commit/1d88366f857b90e4ffc5735fe3af78432aa8844c))
35
+
36
+
37
+
38
+
39
+
6
40
  ## [3.5.3](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown-configure@3.5.2...@pie-element/inline-dropdown-configure@3.5.3) (2021-08-05)
7
41
 
8
42
 
@@ -15,6 +15,7 @@ var _default = {
15
15
  alternateResponse: {},
16
16
  promptEnabled: true,
17
17
  rationaleEnabled: true,
18
+ choiceRationaleEnabled: true,
18
19
  teacherInstructionsEnabled: true,
19
20
  studentInstructionsEnabled: true,
20
21
  toolbarEditorPosition: 'bottom'
@@ -40,6 +41,10 @@ var _default = {
40
41
  settings: true,
41
42
  label: 'Teacher Instructions'
42
43
  },
44
+ choiceRationale: {
45
+ settings: true,
46
+ label: 'Choice Rationale'
47
+ },
43
48
  toolbarEditorPosition: {
44
49
  settings: false,
45
50
  label: 'Toolbar Editor Position'
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/defaults.js"],"names":["model","disabled","mode","prompt","shuffle","markup","choices","alternateResponse","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","toolbarEditorPosition","configuration","settings","label","lockChoiceOrder","partialScoring","rationale","teacherInstructions"],"mappings":";;;;;;eAAe;AACbA,EAAAA,KAAK,EAAE;AACLC,IAAAA,QAAQ,EAAE,KADL;AAELC,IAAAA,IAAI,EAAE,QAFD;AAGLC,IAAAA,MAAM,EAAE,4CAHH;AAILC,IAAAA,OAAO,EAAE,IAJJ;AAKLC,IAAAA,MAAM,EAAE,EALH;AAMLC,IAAAA,OAAO,EAAE,EANJ;AAOLC,IAAAA,iBAAiB,EAAE,EAPd;AAQLC,IAAAA,aAAa,EAAE,IARV;AASLC,IAAAA,gBAAgB,EAAE,IATb;AAULC,IAAAA,0BAA0B,EAAE,IAVvB;AAWLC,IAAAA,0BAA0B,EAAE,IAXvB;AAYLC,IAAAA,qBAAqB,EAAE;AAZlB,GADM;AAebC,EAAAA,aAAa,EAAE;AACbV,IAAAA,MAAM,EAAE;AACNW,MAAAA,QAAQ,EAAE,IADJ;AAENC,MAAAA,KAAK,EAAE;AAFD,KADK;AAKbC,IAAAA,eAAe,EAAE;AACfF,MAAAA,QAAQ,EAAE,IADK;AAEfC,MAAAA,KAAK,EAAE;AAFQ,KALJ;AASbE,IAAAA,cAAc,EAAE;AACdH,MAAAA,QAAQ,EAAE,KADI;AAEdC,MAAAA,KAAK,EAAE;AAFO,KATH;AAabG,IAAAA,SAAS,EAAE;AACTJ,MAAAA,QAAQ,EAAE,IADD;AAETC,MAAAA,KAAK,EAAE;AAFE,KAbE;AAiBbI,IAAAA,mBAAmB,EAAE;AACnBL,MAAAA,QAAQ,EAAE,IADS;AAEnBC,MAAAA,KAAK,EAAE;AAFY,KAjBR;AAqBbH,IAAAA,qBAAqB,EAAC;AACpBE,MAAAA,QAAQ,EAAE,KADU;AAEpBC,MAAAA,KAAK,EAAE;AAFa;AArBT;AAfF,C","sourcesContent":["export default {\n model: {\n disabled: false,\n mode: 'gather',\n prompt: 'Use the dropdowns to complete the sentence',\n shuffle: true,\n markup: '',\n choices: {},\n alternateResponse: {},\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom'\n },\n configuration: {\n prompt: {\n settings: true,\n label: 'Prompt'\n },\n lockChoiceOrder: {\n settings: true,\n label: 'Lock Choice Order'\n },\n partialScoring: {\n settings: false,\n label: 'Allow Partial Scoring'\n },\n rationale: {\n settings: true,\n label: 'Rationale'\n },\n teacherInstructions: {\n settings: true,\n label: 'Teacher Instructions'\n },\n toolbarEditorPosition:{\n settings: false,\n label: 'Toolbar Editor Position'\n },\n }\n};\n"],"file":"defaults.js"}
1
+ {"version":3,"sources":["../src/defaults.js"],"names":["model","disabled","mode","prompt","shuffle","markup","choices","alternateResponse","promptEnabled","rationaleEnabled","choiceRationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","toolbarEditorPosition","configuration","settings","label","lockChoiceOrder","partialScoring","rationale","teacherInstructions","choiceRationale"],"mappings":";;;;;;eAAe;AACbA,EAAAA,KAAK,EAAE;AACLC,IAAAA,QAAQ,EAAE,KADL;AAELC,IAAAA,IAAI,EAAE,QAFD;AAGLC,IAAAA,MAAM,EAAE,4CAHH;AAILC,IAAAA,OAAO,EAAE,IAJJ;AAKLC,IAAAA,MAAM,EAAE,EALH;AAMLC,IAAAA,OAAO,EAAE,EANJ;AAOLC,IAAAA,iBAAiB,EAAE,EAPd;AAQLC,IAAAA,aAAa,EAAE,IARV;AASLC,IAAAA,gBAAgB,EAAE,IATb;AAULC,IAAAA,sBAAsB,EAAE,IAVnB;AAWLC,IAAAA,0BAA0B,EAAE,IAXvB;AAYLC,IAAAA,0BAA0B,EAAE,IAZvB;AAaLC,IAAAA,qBAAqB,EAAE;AAblB,GADM;AAgBbC,EAAAA,aAAa,EAAE;AACbX,IAAAA,MAAM,EAAE;AACNY,MAAAA,QAAQ,EAAE,IADJ;AAENC,MAAAA,KAAK,EAAE;AAFD,KADK;AAKbC,IAAAA,eAAe,EAAE;AACfF,MAAAA,QAAQ,EAAE,IADK;AAEfC,MAAAA,KAAK,EAAE;AAFQ,KALJ;AASbE,IAAAA,cAAc,EAAE;AACdH,MAAAA,QAAQ,EAAE,KADI;AAEdC,MAAAA,KAAK,EAAE;AAFO,KATH;AAabG,IAAAA,SAAS,EAAE;AACTJ,MAAAA,QAAQ,EAAE,IADD;AAETC,MAAAA,KAAK,EAAE;AAFE,KAbE;AAiBbI,IAAAA,mBAAmB,EAAE;AACnBL,MAAAA,QAAQ,EAAE,IADS;AAEnBC,MAAAA,KAAK,EAAE;AAFY,KAjBR;AAqBbK,IAAAA,eAAe,EAAE;AACfN,MAAAA,QAAQ,EAAE,IADK;AAEfC,MAAAA,KAAK,EAAE;AAFQ,KArBJ;AAyBbH,IAAAA,qBAAqB,EAAC;AACpBE,MAAAA,QAAQ,EAAE,KADU;AAEpBC,MAAAA,KAAK,EAAE;AAFa;AAzBT;AAhBF,C","sourcesContent":["export default {\n model: {\n disabled: false,\n mode: 'gather',\n prompt: 'Use the dropdowns to complete the sentence',\n shuffle: true,\n markup: '',\n choices: {},\n alternateResponse: {},\n promptEnabled: true,\n rationaleEnabled: true,\n choiceRationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n toolbarEditorPosition: 'bottom'\n },\n configuration: {\n prompt: {\n settings: true,\n label: 'Prompt'\n },\n lockChoiceOrder: {\n settings: true,\n label: 'Lock Choice Order'\n },\n partialScoring: {\n settings: false,\n label: 'Allow Partial Scoring'\n },\n rationale: {\n settings: true,\n label: 'Rationale'\n },\n teacherInstructions: {\n settings: true,\n label: 'Teacher Instructions'\n },\n choiceRationale: {\n settings: true,\n label: 'Choice Rationale'\n },\n toolbarEditorPosition:{\n settings: false,\n label: 'Toolbar Editor Position'\n },\n }\n};\n"],"file":"defaults.js"}
@@ -39,13 +39,13 @@ var _defaults2 = _interopRequireDefault(require("./defaults"));
39
39
 
40
40
  var _markupUtils = require("./markupUtils");
41
41
 
42
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
42
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
43
43
 
44
44
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
45
45
 
46
46
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
47
47
 
48
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
48
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
49
49
 
50
50
  var log = (0, _debug["default"])('multiple-choice:configure');
51
51
 
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
@@ -41,13 +41,17 @@ var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
41
41
 
42
42
  var _classnames2 = _interopRequireDefault(require("classnames"));
43
43
 
44
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
44
+ 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); }
45
+
46
+ 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; }
47
+
48
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
45
49
 
46
50
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
47
51
 
48
52
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
49
53
 
50
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
54
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
51
55
 
52
56
  var MenuItemComp = /*#__PURE__*/function (_React$Component) {
53
57
  (0, _inherits2["default"])(MenuItemComp, _React$Component);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/inline-dropdown-toolbar.jsx"],"names":["MenuItemComp","e","onRemoveChoice","props","preventDefault","stopPropagation","classes","correct","onClick","value","wrapper","valueHolder","__html","removeIcon","onRemoveClick","React","Component","PropTypes","object","isRequired","bool","func","string","MenuItem","background","borderBottom","boxSizing","display","cursor","lineHeight","padding","position","fontSize","fontStyle","transform","top","right","zIndex","wordBreak","findSlateNode","key","window","document","querySelector","createElementFromHTML","htmlString","div","createElement","innerHTML","trim","RespAreaToolbar","respAreaMarkup","setState","editorRef","finishEditing","val","node","onAddChoice","onlyText","textContent","data","get","newValue","index","onToolbarDone","onSelectChoice","update","toJSON","change","setNodeByKey","nextText","getNextText","moveFocusTo","moveAnchorTo","event","clickedInside","choices","onCheck","correctResponse","find","choice","length","removeNodeByKey","slateEditorRef","rootRef","slateEditor","inputRef","element","focus","domNode","domNodeRect","getBoundingClientRect","editor","closest","editorRect","left","toolbarStyle","height","width","ReactDOM","findDOMNode","state","filteredDefaultPlugins","DEFAULT_PLUGINS","filter","p","labelPlugins","audio","disabled","video","backgroundColor","onClickInside","itemBuilder","ref","respArea","alwaysVisible","showDone","doneOn","onKeyDown","onRespAreaChange","onDone","onBlur","focusInput","choicesHolder","map","label","array","shape","StyledRespAreaToolbar","minHeight","flexDirection","border"],"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 { withStyles } from '@material-ui/core/styles';\nimport isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport classnames from 'classnames';\nimport { DEFAULT_PLUGINS } from '@pie-lib/editable-html';\n\nclass MenuItemComp extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n correct: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n onRemoveChoice: PropTypes.func.isRequired,\n value: PropTypes.string.isRequired\n };\n\n onRemoveClick = e => {\n const { onRemoveChoice } = this.props;\n\n e.preventDefault();\n e.stopPropagation();\n\n onRemoveChoice();\n };\n\n render() {\n const { classes, correct, onClick, value } = this.props;\n\n return (\n <div className={classnames(classes.wrapper, { [classes.correct]: correct })} onClick={onClick}>\n <div\n className={classes.valueHolder}\n dangerouslySetInnerHTML={{\n __html: value\n }}\n />\n <i className={classes.removeIcon} onClick={this.onRemoveClick}>\n x\n </i>\n </div>\n );\n }\n}\n\nconst MenuItem = withStyles({\n wrapper: {\n background: '#fff',\n borderBottom: '1px solid black',\n boxSizing: 'border-box',\n display: 'block',\n cursor: 'pointer',\n lineHeight: '30px',\n padding: '10px 25px 10px 10px',\n position: 'relative'\n },\n correct: {\n background: '#C4DCFA'\n },\n removeIcon: {\n cursor: 'pointer',\n fontSize: '20px',\n fontStyle: 'normal',\n position: 'absolute',\n transform: 'translate(0, -50%)',\n top: '50%',\n right: '5px',\n zIndex: 3\n },\n valueHolder: {\n wordBreak: 'break-all'\n }\n})(MenuItemComp);\n\nconst findSlateNode = key => {\n return window.document.querySelector('[data-key=\"' + key + '\"]');\n};\n\nconst createElementFromHTML = htmlString => {\n const div = document.createElement('div');\n\n div.innerHTML = (htmlString || '').trim();\n\n return div;\n};\n\nexport class RespAreaToolbar extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n node: PropTypes.object,\n onDone: PropTypes.func,\n choices: PropTypes.array,\n onAddChoice: PropTypes.func.isRequired,\n onRemoveChoice: PropTypes.func.isRequired,\n onSelectChoice: PropTypes.func.isRequired,\n onToolbarDone: PropTypes.func.isRequired,\n value: PropTypes.shape({\n change: PropTypes.func.isRequired,\n document: PropTypes.shape({\n getNextText: PropTypes.func.isRequired\n })\n })\n };\n\n state = {\n respAreaMarkup: ''\n };\n\n componentDidMount() {\n const { node } = this.props;\n\n const domNode = findSlateNode(node.key);\n\n if (domNode) {\n //eslint-disable-next-line\n const domNodeRect = domNode.getBoundingClientRect();\n const editor = domNode.closest('[data-slate-editor]');\n const editorRect = editor.getBoundingClientRect();\n const top = domNodeRect.top - editorRect.top;\n const left = domNodeRect.left - editorRect.left;\n\n this.setState({\n toolbarStyle: {\n position: 'absolute',\n top: `${top + domNodeRect.height + 60}px`,\n left: `${left + 25}px`,\n width: domNodeRect.width\n }\n });\n }\n }\n\n componentDidUpdate() {\n //eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n }\n\n onRespAreaChange = respAreaMarkup => {\n this.setState({ respAreaMarkup });\n };\n\n onAddChoice = () => {\n if (this.editorRef) {\n this.editorRef.finishEditing();\n }\n };\n\n onDone = (val) => {\n const { node, onAddChoice } = this.props;\n const onlyText = createElementFromHTML(val).textContent.trim();\n\n if (!isEmpty(onlyText)) {\n onAddChoice(node.data.get('index'), val);\n }\n };\n\n onSelectChoice = (newValue, index) => {\n const { node, value, onToolbarDone, onSelectChoice } = this.props;\n const update = { ...node.data.toJSON(), value: newValue };\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n const nextText = value.document.getNextText(node.key);\n\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n\n onToolbarDone(change, false);\n\n onSelectChoice(index);\n };\n\n onRemoveChoice = (val, index) => {\n const { node, value, onToolbarDone, onRemoveChoice } = this.props;\n\n if (isEqual(val, node.data.get('value'))) {\n const update = { ...node.data.toJSON(), value: null };\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n onToolbarDone(change, false);\n }\n\n onRemoveChoice(index);\n };\n\n onKeyDown = event => {\n if (event.key === 'Enter') {\n this.onAddChoice();\n // Cancelling event\n return false;\n }\n };\n\n onBlur = () => {\n if (this.clickedInside) {\n this.clickedInside = false;\n return;\n }\n\n const { node, choices, onCheck, onToolbarDone, value } = this.props;\n const correctResponse = (choices || []).find(choice => choice.correct);\n\n this.onAddChoice();\n if (!choices || (choices && choices.length < 2) || !correctResponse) {\n onCheck(() => {\n const change = value.change();\n\n change.removeNodeByKey(node.get('key'));\n onToolbarDone(change, false);\n });\n }\n };\n\n onClickInside = () => {\n this.clickedInside = true;\n };\n\n focusInput = () => {\n // we need to focus the input so that math is saved even without pressing the green checkmark\n const slateEditorRef = this.editorRef && this.editorRef.rootRef && this.editorRef.rootRef.slateEditor;\n const inputRef = slateEditorRef && slateEditorRef.editorRef && slateEditorRef.editorRef.element;\n\n if (inputRef) {\n inputRef.focus();\n }\n };\n\n render() {\n const { classes, choices } = this.props;\n const { respAreaMarkup, toolbarStyle } = this.state;\n\n const filteredDefaultPlugins = (DEFAULT_PLUGINS || []).filter(p => p !== 'table' && p !== 'bulleted-list' && p !== 'numbered-list');\n const labelPlugins = {\n audio: { disabled: true },\n video: { disabled: true }\n };\n\n if (!toolbarStyle) {\n return null;\n }\n\n return (\n <div\n style={{\n ...toolbarStyle,\n backgroundColor: '#E0E1E6'\n }}\n onMouseDown={this.onClickInside}\n >\n <div className={classes.itemBuilder}>\n <EditableHtml\n ref={ref => {\n if (ref) {\n this.editorRef = ref;\n }\n }}\n autoFocus={true}\n autoSave\n className={classes.respArea}\n toolbarOpts={{\n position: 'top',\n alwaysVisible: false,\n showDone: false,\n doneOn: 'blur'\n }}\n markup={respAreaMarkup}\n onKeyDown={this.onKeyDown}\n onChange={this.onRespAreaChange}\n onDone={this.onDone}\n placeholder=\"Add Choice\"\n activePlugins={filteredDefaultPlugins}\n pluginProps={labelPlugins}\n onBlur={this.onBlur}\n />\n <i\n style={{\n cursor: 'pointer',\n fontSize: '20px',\n fontStyle: 'normal',\n position: 'absolute',\n top: '50%',\n right: '15px',\n transform: 'translate(0, -50%)'\n }}\n contentEditable={false}\n onMouseDown={() => this.focusInput()}\n onClick={() => this.onAddChoice()}\n >\n +\n </i>\n </div>\n {choices && (\n <div className={classes.choicesHolder}>\n {choices.map(({ label, correct }, index) => (\n <MenuItem\n key={index}\n onClick={() => this.onSelectChoice(label, index)}\n onRemoveChoice={() => this.onRemoveChoice(label, index)}\n value={label}\n correct={correct}\n />\n ))}\n </div>\n )}\n </div>\n );\n }\n}\n\nconst StyledRespAreaToolbar = withStyles({\n respArea: {\n backgroundColor: '#fff',\n '& [data-slate-editor=\"true\"]': {\n minHeight: 'initial !important'\n }\n },\n choicesHolder: {\n display: 'flex',\n flexDirection: 'column',\n '& > div:last-child': {\n border: 'none'\n }\n },\n itemBuilder: {\n padding: '8px',\n position: 'relative'\n }\n})(RespAreaToolbar);\n\nexport default StyledRespAreaToolbar;\n"],"file":"inline-dropdown-toolbar.js"}
1
+ {"version":3,"sources":["../src/inline-dropdown-toolbar.jsx"],"names":["MenuItemComp","e","onRemoveChoice","props","preventDefault","stopPropagation","classes","correct","onClick","value","wrapper","valueHolder","__html","removeIcon","onRemoveClick","React","Component","PropTypes","object","isRequired","bool","func","string","MenuItem","background","borderBottom","boxSizing","display","cursor","lineHeight","padding","position","fontSize","fontStyle","transform","top","right","zIndex","wordBreak","findSlateNode","key","window","document","querySelector","createElementFromHTML","htmlString","div","createElement","innerHTML","trim","RespAreaToolbar","respAreaMarkup","setState","editorRef","finishEditing","val","node","onAddChoice","onlyText","textContent","data","get","newValue","index","onToolbarDone","onSelectChoice","update","toJSON","change","setNodeByKey","nextText","getNextText","moveFocusTo","moveAnchorTo","event","clickedInside","choices","onCheck","correctResponse","find","choice","length","removeNodeByKey","slateEditorRef","rootRef","slateEditor","inputRef","element","focus","domNode","domNodeRect","getBoundingClientRect","editor","closest","editorRect","left","toolbarStyle","height","width","ReactDOM","findDOMNode","state","filteredDefaultPlugins","DEFAULT_PLUGINS","filter","p","labelPlugins","audio","disabled","video","backgroundColor","onClickInside","itemBuilder","ref","respArea","alwaysVisible","showDone","doneOn","onKeyDown","onRespAreaChange","onDone","onBlur","focusInput","choicesHolder","map","label","array","shape","StyledRespAreaToolbar","minHeight","flexDirection","border"],"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 { withStyles } from '@material-ui/core/styles';\nimport isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport classnames from 'classnames';\nimport { DEFAULT_PLUGINS } from '@pie-lib/editable-html';\n\nclass MenuItemComp extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n correct: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n onRemoveChoice: PropTypes.func.isRequired,\n value: PropTypes.string.isRequired\n };\n\n onRemoveClick = e => {\n const { onRemoveChoice } = this.props;\n\n e.preventDefault();\n e.stopPropagation();\n\n onRemoveChoice();\n };\n\n render() {\n const { classes, correct, onClick, value } = this.props;\n\n return (\n <div className={classnames(classes.wrapper, { [classes.correct]: correct })} onClick={onClick}>\n <div\n className={classes.valueHolder}\n dangerouslySetInnerHTML={{\n __html: value\n }}\n />\n <i className={classes.removeIcon} onClick={this.onRemoveClick}>\n x\n </i>\n </div>\n );\n }\n}\n\nconst MenuItem = withStyles({\n wrapper: {\n background: '#fff',\n borderBottom: '1px solid black',\n boxSizing: 'border-box',\n display: 'block',\n cursor: 'pointer',\n lineHeight: '30px',\n padding: '10px 25px 10px 10px',\n position: 'relative'\n },\n correct: {\n background: '#C4DCFA'\n },\n removeIcon: {\n cursor: 'pointer',\n fontSize: '20px',\n fontStyle: 'normal',\n position: 'absolute',\n transform: 'translate(0, -50%)',\n top: '50%',\n right: '5px',\n zIndex: 3\n },\n valueHolder: {\n wordBreak: 'break-all'\n }\n})(MenuItemComp);\n\nconst findSlateNode = key => {\n return window.document.querySelector('[data-key=\"' + key + '\"]');\n};\n\nconst createElementFromHTML = htmlString => {\n const div = document.createElement('div');\n\n div.innerHTML = (htmlString || '').trim();\n\n return div;\n};\n\nexport class RespAreaToolbar extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n node: PropTypes.object,\n onDone: PropTypes.func,\n choices: PropTypes.array,\n onAddChoice: PropTypes.func.isRequired,\n onRemoveChoice: PropTypes.func.isRequired,\n onSelectChoice: PropTypes.func.isRequired,\n onToolbarDone: PropTypes.func.isRequired,\n value: PropTypes.shape({\n change: PropTypes.func.isRequired,\n document: PropTypes.shape({\n getNextText: PropTypes.func.isRequired\n })\n })\n };\n\n state = {\n respAreaMarkup: ''\n };\n\n componentDidMount() {\n const { node } = this.props;\n\n const domNode = findSlateNode(node.key);\n\n if (domNode) {\n //eslint-disable-next-line\n const domNodeRect = domNode.getBoundingClientRect();\n const editor = domNode.closest('[data-slate-editor]');\n const editorRect = editor.getBoundingClientRect();\n const top = domNodeRect.top - editorRect.top;\n const left = domNodeRect.left - editorRect.left;\n\n this.setState({\n toolbarStyle: {\n position: 'absolute',\n top: `${top + domNodeRect.height + 60}px`,\n left: `${left + 25}px`,\n width: domNodeRect.width\n }\n });\n }\n }\n\n componentDidUpdate() {\n //eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n }\n\n onRespAreaChange = respAreaMarkup => {\n this.setState({ respAreaMarkup });\n };\n\n onAddChoice = () => {\n if (this.editorRef) {\n this.editorRef.finishEditing();\n }\n };\n\n onDone = (val) => {\n const { node, onAddChoice } = this.props;\n const onlyText = createElementFromHTML(val).textContent.trim();\n\n if (!isEmpty(onlyText)) {\n onAddChoice(node.data.get('index'), val);\n }\n };\n\n onSelectChoice = (newValue, index) => {\n const { node, value, onToolbarDone, onSelectChoice } = this.props;\n const update = { ...node.data.toJSON(), value: newValue };\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n const nextText = value.document.getNextText(node.key);\n\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n\n onToolbarDone(change, false);\n\n onSelectChoice(index);\n };\n\n onRemoveChoice = (val, index) => {\n const { node, value, onToolbarDone, onRemoveChoice } = this.props;\n\n if (isEqual(val, node.data.get('value'))) {\n const update = { ...node.data.toJSON(), value: null };\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n onToolbarDone(change, false);\n }\n\n onRemoveChoice(index);\n };\n\n onKeyDown = event => {\n if (event.key === 'Enter') {\n this.onAddChoice();\n // Cancelling event\n return false;\n }\n };\n\n onBlur = () => {\n if (this.clickedInside) {\n this.clickedInside = false;\n return;\n }\n\n const { node, choices, onCheck, onToolbarDone, value } = this.props;\n const correctResponse = (choices || []).find(choice => choice.correct);\n\n this.onAddChoice();\n if (!choices || (choices && choices.length < 2) || !correctResponse) {\n onCheck(() => {\n const change = value.change();\n\n change.removeNodeByKey(node.get('key'));\n onToolbarDone(change, false);\n });\n }\n };\n\n onClickInside = () => {\n this.clickedInside = true;\n };\n\n focusInput = () => {\n // we need to focus the input so that math is saved even without pressing the green checkmark\n const slateEditorRef = this.editorRef && this.editorRef.rootRef && this.editorRef.rootRef.slateEditor;\n const inputRef = slateEditorRef && slateEditorRef.editorRef && slateEditorRef.editorRef.element;\n\n if (inputRef) {\n inputRef.focus();\n }\n };\n\n render() {\n const { classes, choices } = this.props;\n const { respAreaMarkup, toolbarStyle } = this.state;\n\n const filteredDefaultPlugins = (DEFAULT_PLUGINS || []).filter(p => p !== 'table' && p !== 'bulleted-list' && p !== 'numbered-list');\n const labelPlugins = {\n audio: { disabled: true },\n video: { disabled: true }\n };\n\n if (!toolbarStyle) {\n return null;\n }\n\n return (\n <div\n style={{\n ...toolbarStyle,\n backgroundColor: '#E0E1E6'\n }}\n onMouseDown={this.onClickInside}\n >\n <div className={classes.itemBuilder}>\n <EditableHtml\n ref={ref => {\n if (ref) {\n this.editorRef = ref;\n }\n }}\n autoFocus={true}\n autoSave\n className={classes.respArea}\n toolbarOpts={{\n position: 'top',\n alwaysVisible: false,\n showDone: false,\n doneOn: 'blur'\n }}\n markup={respAreaMarkup}\n onKeyDown={this.onKeyDown}\n onChange={this.onRespAreaChange}\n onDone={this.onDone}\n placeholder=\"Add Choice\"\n activePlugins={filteredDefaultPlugins}\n pluginProps={labelPlugins}\n onBlur={this.onBlur}\n />\n <i\n style={{\n cursor: 'pointer',\n fontSize: '20px',\n fontStyle: 'normal',\n position: 'absolute',\n top: '50%',\n right: '15px',\n transform: 'translate(0, -50%)'\n }}\n contentEditable={false}\n onMouseDown={() => this.focusInput()}\n onClick={() => this.onAddChoice()}\n >\n +\n </i>\n </div>\n {choices && (\n <div className={classes.choicesHolder}>\n {choices.map(({ label, correct }, index) => (\n <MenuItem\n key={index}\n onClick={() => this.onSelectChoice(label, index)}\n onRemoveChoice={() => this.onRemoveChoice(label, index)}\n value={label}\n correct={correct}\n />\n ))}\n </div>\n )}\n </div>\n );\n }\n}\n\nconst StyledRespAreaToolbar = withStyles({\n respArea: {\n backgroundColor: '#fff',\n '& [data-slate-editor=\"true\"]': {\n minHeight: 'initial !important'\n }\n },\n choicesHolder: {\n display: 'flex',\n flexDirection: 'column',\n '& > div:last-child': {\n border: 'none'\n }\n },\n itemBuilder: {\n padding: '8px',\n position: 'relative'\n }\n})(RespAreaToolbar);\n\nexport default StyledRespAreaToolbar;\n"],"file":"inline-dropdown-toolbar.js"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
-
5
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
4
 
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
@@ -57,17 +57,29 @@ var _DialogActions = _interopRequireDefault(require("@material-ui/core/DialogAct
57
57
 
58
58
  var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
59
59
 
60
+ var _ExpansionPanel = _interopRequireDefault(require("@material-ui/core/ExpansionPanel"));
61
+
62
+ var _ExpansionPanelSummary = _interopRequireDefault(require("@material-ui/core/ExpansionPanelSummary"));
63
+
64
+ var _ExpansionPanelDetails = _interopRequireDefault(require("@material-ui/core/ExpansionPanelDetails"));
65
+
66
+ var _ExpandMore = _interopRequireDefault(require("@material-ui/icons/ExpandMore"));
67
+
60
68
  var _inlineDropdownToolbar = _interopRequireDefault(require("./inline-dropdown-toolbar"));
61
69
 
62
70
  var _max = _interopRequireDefault(require("lodash/max"));
63
71
 
64
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
72
+ 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); }
73
+
74
+ 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; }
75
+
76
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
65
77
 
66
78
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
67
79
 
68
80
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
69
81
 
70
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
82
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
71
83
 
72
84
  var toggle = _configUi.settings.toggle,
73
85
  Panel = _configUi.settings.Panel;
@@ -133,6 +145,16 @@ var styles = function styles(theme) {
133
145
  fontSize: '16px',
134
146
  lineHeight: '19px',
135
147
  color: '#495B8F'
148
+ },
149
+ rationaleLabel: {
150
+ display: 'flex',
151
+ whiteSpace: 'break-spaces'
152
+ },
153
+ rationaleChoices: {
154
+ marginTop: '16px'
155
+ },
156
+ panelDetails: {
157
+ display: 'block'
136
158
  }
137
159
  };
138
160
  };
@@ -183,6 +205,15 @@ var Main = /*#__PURE__*/function (_React$Component) {
183
205
  rationale: rationale
184
206
  });
185
207
  });
208
+ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChoiceRationaleChanged", function (index, choice) {
209
+ var model = _this.props.model;
210
+ var indexOfChoice = model.choices && model.choices[index] && model.choices[index].findIndex(function (elem) {
211
+ return elem.label === choice.label && elem.value === choice.value;
212
+ });
213
+ model.choices[index] && model.choices[index].splice(indexOfChoice, 1, choice);
214
+
215
+ _this.onModelChange(model);
216
+ });
186
217
  (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onTeacherInstructionsChanged", function (teacherInstructions) {
187
218
  _this.onModelChange({
188
219
  teacherInstructions: teacherInstructions
@@ -395,13 +426,52 @@ var Main = /*#__PURE__*/function (_React$Component) {
395
426
  lockChoiceOrder = _ref2$lockChoiceOrder === void 0 ? {} : _ref2$lockChoiceOrder,
396
427
  _ref2$rationale = _ref2.rationale,
397
428
  rationale = _ref2$rationale === void 0 ? {} : _ref2$rationale,
429
+ _ref2$choiceRationale = _ref2.choiceRationale,
430
+ choiceRationale = _ref2$choiceRationale === void 0 ? {} : _ref2$choiceRationale,
398
431
  _ref2$teacherInstruct = _ref2.teacherInstructions,
399
432
  teacherInstructions = _ref2$teacherInstruct === void 0 ? {} : _ref2$teacherInstruct;
400
433
 
401
434
  var _ref3 = model || {},
402
435
  rationaleEnabled = _ref3.rationaleEnabled,
436
+ choiceRationaleEnabled = _ref3.choiceRationaleEnabled,
403
437
  promptEnabled = _ref3.promptEnabled,
404
- teacherInstructionsEnabled = _ref3.teacherInstructionsEnabled;
438
+ teacherInstructionsEnabled = _ref3.teacherInstructionsEnabled,
439
+ choices = _ref3.choices;
440
+
441
+ var renderChoiceRationale = function renderChoiceRationale() {
442
+ return (Object.keys(choices) || []).map(function (key) {
443
+ return /*#__PURE__*/_react["default"].createElement("div", {
444
+ key: key,
445
+ className: classes.rationaleChoices
446
+ }, /*#__PURE__*/_react["default"].createElement(_ExpansionPanel["default"], null, /*#__PURE__*/_react["default"].createElement(_ExpansionPanelSummary["default"], {
447
+ expandIcon: /*#__PURE__*/_react["default"].createElement(_ExpandMore["default"], null)
448
+ }, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
449
+ className: classes.text
450
+ }, "Rationale for response area #".concat(parseInt(key) + 1))), /*#__PURE__*/_react["default"].createElement(_ExpansionPanelDetails["default"], {
451
+ className: classes.panelDetails
452
+ }, (choices[key] || []).map(function (choice) {
453
+ return /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
454
+ key: choice.label,
455
+ label: /*#__PURE__*/_react["default"].createElement("span", {
456
+ className: classes.rationaleLabel,
457
+ dangerouslySetInnerHTML: {
458
+ __html: "".concat(rationale.label, " for ").concat(choice.label, " (").concat(choice.correct ? 'correct' : 'incorrect', ")")
459
+ }
460
+ }),
461
+ className: classes.promptHolder
462
+ }, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
463
+ className: classes.prompt,
464
+ markup: choice.rationale || '',
465
+ onChange: function onChange(c) {
466
+ return _this2.onChoiceRationaleChanged(key, _objectSpread(_objectSpread({}, choice), {}, {
467
+ rationale: c
468
+ }));
469
+ },
470
+ imageSupport: imageSupport
471
+ }));
472
+ }))));
473
+ });
474
+ };
405
475
 
406
476
  var toolbarOpts = {};
407
477
 
@@ -435,6 +505,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
435
505
  Properties: {
436
506
  teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
437
507
  rationaleEnabled: rationale.settings && toggle(rationale.label),
508
+ choiceRationaleEnabled: choiceRationale.settings && toggle(choiceRationale.label),
438
509
  promptEnabled: prompt.settings && toggle(prompt.label)
439
510
  }
440
511
  }
@@ -513,7 +584,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
513
584
  onBlur: this.onBlur,
514
585
  disabled: false,
515
586
  highlightShape: false
516
- }))));
587
+ }), /*#__PURE__*/_react["default"].createElement("br", null), choiceRationaleEnabled && renderChoiceRationale())));
517
588
  }
518
589
  }]);
519
590
  return Main;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/main.jsx"],"names":["toggle","settings","Panel","InfoDialog","open","onCancel","onOk","title","propTypes","PropTypes","bool","func","string","styles","theme","promptHolder","width","paddingBottom","spacing","unit","marginBottom","prompt","paddingTop","markup","minHeight","design","choiceConfiguration","switchElement","justifyContent","margin","addButton","text","fontFamily","fontSize","lineHeight","color","createElementFromHTML","htmlString","div","document","createElement","innerHTML","trim","prepareVal","html","tmp","value","textContent","innerText","Main","dialog","newVal","props","onModelChanged","model","onModelChange","rationale","teacherInstructions","slateMarkup","callback","setState","message","respAreaChoices","state","domMarkup","allRespAreas","querySelectorAll","allChoices","forEach","el","dataset","index","existingRespAreaChoices","obj","choices","key","newRespAreaChoices","shouldWarn","newChoices","length","find","c","correct","remove","label","r","map","parseInt","filter","val","isNaN","push","respIndex","splice","selectedIndex","ch","nProps","newState","domNode","ReactDOM","findDOMNode","classes","configuration","onConfigurationChanged","imageSupport","partialScoring","lockChoiceOrder","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","toolbarOpts","toolbarEditorPosition","position","Settings","Properties","onTeacherInstructionsChanged","onPromptChanged","onRationaleChanged","ALL_PLUGINS","type","options","duplicates","respAreaToolbar","node","onToolbarDone","onAddChoice","onCheck","onRemoveChoice","data","get","onSelectChoice","onChange","onBlur","React","Component","object","isRequired","disableSidePanel","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 { renderMath } from '@pie-lib/math-rendering';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqual from 'lodash/isEqual';\nimport isUndefined from 'lodash/isUndefined';\nimport isEmpty from 'lodash/isEmpty';\nimport reduce from 'lodash/reduce';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Typography from '@material-ui/core/Typography';\n\nimport InlineDropdownToolbar from './inline-dropdown-toolbar';\nimport max from 'lodash/max';\n\nconst { toggle, Panel } = settings;\n\nconst InfoDialog = ({ open, onCancel, onOk, title }) => (\n <Dialog open={open}>\n <DialogTitle>{title}</DialogTitle>\n <DialogActions>\n {onOk && (\n <Button onClick={onOk} color=\"primary\">\n OK\n </Button>\n )}\n {onCancel && (\n <Button onClick={onCancel} color=\"primary\">\n Cancel\n </Button>\n )}\n </DialogActions>\n </Dialog>\n);\n\nInfoDialog.propTypes = {\n open: PropTypes.bool,\n onCancel: PropTypes.func,\n onOk: PropTypes.func,\n title: PropTypes.string\n};\n\nconst styles = theme => ({\n promptHolder: {\n width: '100%',\n paddingBottom: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2\n },\n prompt: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%'\n },\n markup: {\n minHeight: '100px',\n paddingTop: theme.spacing.unit * 2,\n width: '100%',\n '& [data-slate-editor=\"true\"]': {\n minHeight: '100px'\n }\n },\n design: {\n paddingTop: theme.spacing.unit * 3\n },\n choiceConfiguration: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2\n },\n switchElement: {\n justifyContent: 'space-between',\n margin: 0\n },\n addButton: {\n float: 'right'\n },\n text: {\n fontFamily: 'Cerebri Sans',\n fontSize: '16px',\n lineHeight: '19px',\n color: '#495B8F'\n }\n});\n\nconst createElementFromHTML = htmlString => {\n const div = document.createElement('div');\n\n div.innerHTML = (htmlString || '').trim();\n\n return div;\n};\n\nconst prepareVal = html => {\n const tmp = document.createElement('DIV');\n\n tmp.innerHTML = html;\n\n const value = tmp.textContent || tmp.innerText || '';\n\n return value.trim();\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 };\n\n state = {\n dialog: {\n open: false\n }\n };\n\n componentDidMount() {\n const {\n model: { choices }\n } = this.props;\n\n this.setState({ respAreaChoices: cloneDeep(choices) });\n }\n\n UNSAFE_componentWillReceiveProps(nProps) {\n const newState = {};\n\n if (\n !isEqual(nProps.model.choices, this.props.model.choices) ||\n !isEqual(nProps.model.choices, this.state.respAreaChoices)\n ) {\n newState.respAreaChoices = cloneDeep(nProps.model.choices);\n }\n\n if (!isEmpty(newState)) {\n this.setState(newState);\n }\n }\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.onModelChange({ prompt });\n };\n\n onRationaleChanged = rationale => {\n this.onModelChange({ rationale });\n };\n\n onTeacherInstructionsChanged = teacherInstructions => {\n this.onModelChange({ teacherInstructions });\n };\n\n onMarkupChanged = slateMarkup => {\n this.onModelChange({ slateMarkup });\n };\n\n onCheck = callback => {\n this.setState({\n dialog: {\n open: true,\n message:\n 'Response areas with under 2 options or with no correct answers will be discarded',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false\n }\n },\n callback\n );\n },\n onCancel: () =>\n this.setState({\n dialog: {\n open: false\n }\n })\n }\n });\n };\n\n onChange = markup => {\n const { respAreaChoices } = this.state;\n const domMarkup = createElementFromHTML(markup);\n const allRespAreas = domMarkup.querySelectorAll(\n '[data-type=\"inline_dropdown\"]'\n );\n\n const allChoices = {};\n\n allRespAreas.forEach(el => {\n allChoices[el.dataset.index] = el.dataset.value || '';\n });\n\n const existingRespAreaChoices = reduce(\n respAreaChoices,\n (obj, choices, key) => {\n if (!isUndefined(allChoices[key])) {\n obj[key] = respAreaChoices[key];\n }\n\n return obj;\n },\n {}\n );\n\n const newRespAreaChoices = {};\n let shouldWarn = false;\n\n allRespAreas.forEach((el, index) => {\n const newChoices = existingRespAreaChoices[el.dataset.index] || [];\n\n if (newChoices.length < 2 || !newChoices.find(c => c.correct)) {\n el.remove();\n shouldWarn = true;\n } else {\n newRespAreaChoices[index] =\n existingRespAreaChoices[el.dataset.index] || [];\n el.dataset.index = index;\n }\n });\n\n if (shouldWarn) {\n this.setState({\n dialog: {\n open: true,\n message:\n 'Response areas with under 2 options or with no correct answers will be discarded',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false\n }\n },\n () =>\n this.onModelChange({\n choices: cloneDeep(newRespAreaChoices),\n slateMarkup: domMarkup.innerHTML\n })\n );\n },\n onCancel: () =>\n this.setState({\n dialog: {\n open: false\n }\n })\n }\n });\n } else {\n this.onModelChange({\n choices: cloneDeep(newRespAreaChoices),\n slateMarkup: domMarkup.innerHTML\n });\n }\n };\n\n onAddChoice = (index, label) => {\n const { respAreaChoices } = this.state;\n\n if (!respAreaChoices[index]) {\n respAreaChoices[index] = [];\n }\n\n if (\n (respAreaChoices[index] || []).find(\n r => prepareVal(r.label) === prepareVal(label)\n )\n ) {\n this.setState({\n dialog: {\n open: true,\n message: 'Duplicate answers are not allowed.',\n onOk: () => {\n this.setState({\n dialog: {\n open: false\n }\n });\n }\n }\n });\n\n return;\n }\n\n const value = (respAreaChoices[index] && max(respAreaChoices[index].map(c => parseInt(c.value)).filter(val => !isNaN(val)))) || 0;\n\n respAreaChoices[index].push({\n label,\n value: `${value + 1}`,\n correct: false\n });\n\n this.onModelChange({ choices: cloneDeep(respAreaChoices) });\n };\n\n onRemoveChoice = (respIndex, index) => {\n const { respAreaChoices } = this.state;\n\n respAreaChoices[respIndex].splice(index, 1);\n\n this.onModelChange({ choices: cloneDeep(respAreaChoices) });\n };\n\n onSelectChoice = (respIndex, selectedIndex) => {\n const { respAreaChoices } = this.state;\n\n respAreaChoices[respIndex] = respAreaChoices[respIndex].map(\n (ch, index) => ({ ...ch, correct: index === selectedIndex })\n );\n\n this.onModelChange({ choices: cloneDeep(respAreaChoices) });\n };\n\n render() {\n const { dialog } = this.state;\n const {\n classes,\n model,\n configuration,\n onConfigurationChanged,\n imageSupport\n } = this.props;\n const {\n prompt = {},\n partialScoring = {},\n lockChoiceOrder = {},\n rationale = {},\n teacherInstructions = {}\n } = configuration || {};\n const { rationaleEnabled, promptEnabled, teacherInstructionsEnabled } =\n model || {};\n\n const toolbarOpts = {};\n\n switch (model.toolbarEditorPosition) {\n case 'top':\n toolbarOpts.position = 'top';\n break;\n default:\n toolbarOpts.position = 'bottom';\n break;\n }\n\n return (\n <div className={classes.design}>\n <layout.ConfigLayout\n settings={\n <Panel\n model={model}\n configuration={configuration}\n onChangeModel={model => this.onModelChange(model)}\n onChangeConfiguration={configuration =>\n onConfigurationChanged(configuration, true)\n }\n groups={{\n Settings: {\n partialScoring:\n partialScoring.settings && toggle(partialScoring.label),\n lockChoiceOrder:\n lockChoiceOrder.settings && toggle(lockChoiceOrder.label)\n },\n Properties: {\n teacherInstructionsEnabled:\n teacherInstructions.settings &&\n toggle(teacherInstructions.label),\n rationaleEnabled:\n rationale.settings && toggle(rationale.label),\n promptEnabled: prompt.settings && toggle(prompt.label)\n }\n }}\n />\n }\n >\n <div>\n {teacherInstructionsEnabled && (\n <InputContainer\n label={teacherInstructions.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.teacherInstructions || ''}\n onChange={this.onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer\n label={prompt.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={this.onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n disableUnderline\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n\n {rationaleEnabled && (\n <InputContainer\n label={rationale.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.rationale || ''}\n onChange={this.onRationaleChanged}\n imageSupport={imageSupport}\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n\n <Typography className={classes.text}>\n Define Template, Choices, and Correct Responses\n </Typography>\n <InfoDialog\n open={dialog.open}\n title={dialog.message}\n onCancel={dialog.onCancel}\n onOk={dialog.onOk}\n />\n <EditableHtml\n activePlugins={ALL_PLUGINS}\n toolbarOpts={{ position: 'top' }}\n responseAreaProps={{\n type: 'inline-dropdown',\n options: {\n duplicates: true\n },\n respAreaToolbar: (node, value, onToolbarDone) => {\n const { respAreaChoices } = this.state;\n\n return () => (\n <InlineDropdownToolbar\n onAddChoice={this.onAddChoice}\n onCheck={this.onCheck}\n onRemoveChoice={index =>\n this.onRemoveChoice(node.data.get('index'), index)\n }\n onSelectChoice={index =>\n this.onSelectChoice(node.data.get('index'), index)\n }\n node={node}\n value={value}\n onToolbarDone={onToolbarDone}\n choices={respAreaChoices[node.data.get('index')]}\n />\n );\n }\n }}\n className={classes.markup}\n markup={model.slateMarkup || ''}\n onChange={this.onChange}\n imageSupport={imageSupport}\n onBlur={this.onBlur}\n disabled={false}\n highlightShape={false}\n />\n </div>\n </layout.ConfigLayout>\n </div>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Main);\n\nexport default Styled;\n"],"file":"main.js"}
1
+ {"version":3,"sources":["../src/main.jsx"],"names":["toggle","settings","Panel","InfoDialog","open","onCancel","onOk","title","propTypes","PropTypes","bool","func","string","styles","theme","promptHolder","width","paddingBottom","spacing","unit","marginBottom","prompt","paddingTop","markup","minHeight","design","choiceConfiguration","switchElement","justifyContent","margin","addButton","text","fontFamily","fontSize","lineHeight","color","rationaleLabel","display","whiteSpace","rationaleChoices","marginTop","panelDetails","createElementFromHTML","htmlString","div","document","createElement","innerHTML","trim","prepareVal","html","tmp","value","textContent","innerText","Main","dialog","newVal","props","onModelChanged","model","onModelChange","rationale","index","choice","indexOfChoice","choices","findIndex","elem","label","splice","teacherInstructions","slateMarkup","callback","setState","message","respAreaChoices","state","domMarkup","allRespAreas","querySelectorAll","allChoices","forEach","el","dataset","existingRespAreaChoices","obj","key","newRespAreaChoices","shouldWarn","newChoices","length","find","c","correct","remove","r","map","parseInt","filter","val","isNaN","push","respIndex","selectedIndex","ch","nProps","newState","domNode","ReactDOM","findDOMNode","classes","configuration","onConfigurationChanged","imageSupport","partialScoring","lockChoiceOrder","choiceRationale","rationaleEnabled","choiceRationaleEnabled","promptEnabled","teacherInstructionsEnabled","renderChoiceRationale","Object","keys","__html","onChoiceRationaleChanged","toolbarOpts","toolbarEditorPosition","position","Settings","Properties","onTeacherInstructionsChanged","onPromptChanged","onRationaleChanged","ALL_PLUGINS","type","options","duplicates","respAreaToolbar","node","onToolbarDone","onAddChoice","onCheck","onRemoveChoice","data","get","onSelectChoice","onChange","onBlur","React","Component","object","isRequired","disableSidePanel","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 { renderMath } from '@pie-lib/math-rendering';\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqual from 'lodash/isEqual';\nimport isUndefined from 'lodash/isUndefined';\nimport isEmpty from 'lodash/isEmpty';\nimport reduce from 'lodash/reduce';\nimport { withStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport Typography from '@material-ui/core/Typography';\nimport ExpansionPanel from '@material-ui/core/ExpansionPanel';\nimport ExpansionPanelSummary from '@material-ui/core/ExpansionPanelSummary';\nimport ExpansionPanelDetails from '@material-ui/core/ExpansionPanelDetails';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport InlineDropdownToolbar from './inline-dropdown-toolbar';\nimport max from 'lodash/max';\n\nconst { toggle, Panel } = settings;\n\nconst InfoDialog = ({ open, onCancel, onOk, title }) => (\n <Dialog open={open}>\n <DialogTitle>{title}</DialogTitle>\n <DialogActions>\n {onOk && (\n <Button onClick={onOk} color=\"primary\">\n OK\n </Button>\n )}\n {onCancel && (\n <Button onClick={onCancel} color=\"primary\">\n Cancel\n </Button>\n )}\n </DialogActions>\n </Dialog>\n);\n\nInfoDialog.propTypes = {\n open: PropTypes.bool,\n onCancel: PropTypes.func,\n onOk: PropTypes.func,\n title: PropTypes.string\n};\n\nconst styles = theme => ({\n promptHolder: {\n width: '100%',\n paddingBottom: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2\n },\n prompt: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%'\n },\n markup: {\n minHeight: '100px',\n paddingTop: theme.spacing.unit * 2,\n width: '100%',\n '& [data-slate-editor=\"true\"]': {\n minHeight: '100px'\n }\n },\n design: {\n paddingTop: theme.spacing.unit * 3\n },\n choiceConfiguration: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2\n },\n switchElement: {\n justifyContent: 'space-between',\n margin: 0\n },\n addButton: {\n float: 'right'\n },\n text: {\n fontFamily: 'Cerebri Sans',\n fontSize: '16px',\n lineHeight: '19px',\n color: '#495B8F'\n },\n rationaleLabel: {\n display: 'flex',\n whiteSpace: 'break-spaces'\n },\n rationaleChoices: {\n marginTop: '16px'\n },\n panelDetails: {\n display: 'block'\n }\n});\n\nconst createElementFromHTML = htmlString => {\n const div = document.createElement('div');\n\n div.innerHTML = (htmlString || '').trim();\n\n return div;\n};\n\nconst prepareVal = html => {\n const tmp = document.createElement('DIV');\n\n tmp.innerHTML = html;\n\n const value = tmp.textContent || tmp.innerText || '';\n\n return value.trim();\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 };\n\n state = {\n dialog: {\n open: false\n }\n };\n\n componentDidMount() {\n const {\n model: { choices }\n } = this.props;\n\n this.setState({ respAreaChoices: cloneDeep(choices) });\n }\n\n UNSAFE_componentWillReceiveProps(nProps) {\n const newState = {};\n\n if (\n !isEqual(nProps.model.choices, this.props.model.choices) ||\n !isEqual(nProps.model.choices, this.state.respAreaChoices)\n ) {\n newState.respAreaChoices = cloneDeep(nProps.model.choices);\n }\n\n if (!isEmpty(newState)) {\n this.setState(newState);\n }\n }\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.onModelChange({ prompt });\n };\n\n onRationaleChanged = rationale => {\n this.onModelChange({ rationale });\n };\n\n onChoiceRationaleChanged = (index, choice) => {\n const { model } = this.props;\n const indexOfChoice = model.choices && model.choices[index] && model.choices[index]\n .findIndex(elem => elem.label === choice.label && elem.value === choice.value);\n\n model.choices[index] && model.choices[index].splice(indexOfChoice, 1, choice);\n\n this.onModelChange(model);\n };\n\n onTeacherInstructionsChanged = teacherInstructions => {\n this.onModelChange({ teacherInstructions });\n };\n\n onMarkupChanged = slateMarkup => {\n this.onModelChange({ slateMarkup });\n };\n\n onCheck = callback => {\n this.setState({\n dialog: {\n open: true,\n message:\n 'Response areas with under 2 options or with no correct answers will be discarded',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false\n }\n },\n callback\n );\n },\n onCancel: () =>\n this.setState({\n dialog: {\n open: false\n }\n })\n }\n });\n };\n\n onChange = markup => {\n const { respAreaChoices } = this.state;\n const domMarkup = createElementFromHTML(markup);\n const allRespAreas = domMarkup.querySelectorAll(\n '[data-type=\"inline_dropdown\"]'\n );\n\n const allChoices = {};\n\n allRespAreas.forEach(el => {\n allChoices[el.dataset.index] = el.dataset.value || '';\n });\n\n const existingRespAreaChoices = reduce(\n respAreaChoices,\n (obj, choices, key) => {\n if (!isUndefined(allChoices[key])) {\n obj[key] = respAreaChoices[key];\n }\n\n return obj;\n },\n {}\n );\n\n const newRespAreaChoices = {};\n let shouldWarn = false;\n\n allRespAreas.forEach((el, index) => {\n const newChoices = existingRespAreaChoices[el.dataset.index] || [];\n\n if (newChoices.length < 2 || !newChoices.find(c => c.correct)) {\n el.remove();\n shouldWarn = true;\n } else {\n newRespAreaChoices[index] =\n existingRespAreaChoices[el.dataset.index] || [];\n el.dataset.index = index;\n }\n });\n\n if (shouldWarn) {\n this.setState({\n dialog: {\n open: true,\n message:\n 'Response areas with under 2 options or with no correct answers will be discarded',\n onOk: () => {\n this.setState(\n {\n dialog: {\n open: false\n }\n },\n () =>\n this.onModelChange({\n choices: cloneDeep(newRespAreaChoices),\n slateMarkup: domMarkup.innerHTML\n })\n );\n },\n onCancel: () =>\n this.setState({\n dialog: {\n open: false\n }\n })\n }\n });\n } else {\n this.onModelChange({\n choices: cloneDeep(newRespAreaChoices),\n slateMarkup: domMarkup.innerHTML\n });\n }\n };\n\n onAddChoice = (index, label) => {\n const { respAreaChoices } = this.state;\n\n if (!respAreaChoices[index]) {\n respAreaChoices[index] = [];\n }\n\n if (\n (respAreaChoices[index] || []).find(\n r => prepareVal(r.label) === prepareVal(label)\n )\n ) {\n this.setState({\n dialog: {\n open: true,\n message: 'Duplicate answers are not allowed.',\n onOk: () => {\n this.setState({\n dialog: {\n open: false\n }\n });\n }\n }\n });\n\n return;\n }\n\n const value = (respAreaChoices[index] && max(respAreaChoices[index].map(c => parseInt(c.value)).filter(val => !isNaN(val)))) || 0;\n\n respAreaChoices[index].push({\n label,\n value: `${value + 1}`,\n correct: false\n });\n\n this.onModelChange({ choices: cloneDeep(respAreaChoices) });\n };\n\n onRemoveChoice = (respIndex, index) => {\n const { respAreaChoices } = this.state;\n\n respAreaChoices[respIndex].splice(index, 1);\n\n this.onModelChange({ choices: cloneDeep(respAreaChoices) });\n };\n\n onSelectChoice = (respIndex, selectedIndex) => {\n const { respAreaChoices } = this.state;\n\n respAreaChoices[respIndex] = respAreaChoices[respIndex].map(\n (ch, index) => ({ ...ch, correct: index === selectedIndex })\n );\n\n this.onModelChange({ choices: cloneDeep(respAreaChoices) });\n };\n\n render() {\n const { dialog } = this.state;\n const {\n classes,\n model,\n configuration,\n onConfigurationChanged,\n imageSupport\n } = this.props;\n const {\n prompt = {},\n partialScoring = {},\n lockChoiceOrder = {},\n rationale = {},\n choiceRationale = {},\n teacherInstructions = {}\n } = configuration || {};\n const {\n rationaleEnabled,\n choiceRationaleEnabled,\n promptEnabled,\n teacherInstructionsEnabled,\n choices\n } =\n model || {};\n\n const renderChoiceRationale = () => (Object.keys(choices) || []).map(key =>\n <div key={key} className={classes.rationaleChoices}>\n <ExpansionPanel>\n <ExpansionPanelSummary expandIcon={<ExpandMoreIcon/>}>\n <Typography className={classes.text}>\n {`Rationale for response area #${parseInt(key) + 1}`}\n </Typography>\n </ExpansionPanelSummary>\n <ExpansionPanelDetails className={classes.panelDetails}>\n {(choices[key] || []).map(choice =>\n <InputContainer\n key={choice.label}\n label={\n <span\n className={classes.rationaleLabel}\n dangerouslySetInnerHTML={{\n __html:\n `${rationale.label} for ${choice.label} (${choice.correct ? 'correct' : 'incorrect'})`\n }}\n />\n }\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={choice.rationale || ''}\n onChange={c =>\n this.onChoiceRationaleChanged(key, {\n ...choice,\n rationale: c\n })\n }\n imageSupport={imageSupport}\n />\n </InputContainer>\n )}\n </ExpansionPanelDetails>\n </ExpansionPanel>\n </div>\n )\n\n const toolbarOpts = {};\n\n switch (model.toolbarEditorPosition) {\n case 'top':\n toolbarOpts.position = 'top';\n break;\n default:\n toolbarOpts.position = 'bottom';\n break;\n }\n\n return (\n <div className={classes.design}>\n <layout.ConfigLayout\n settings={\n <Panel\n model={model}\n configuration={configuration}\n onChangeModel={model => this.onModelChange(model)}\n onChangeConfiguration={configuration =>\n onConfigurationChanged(configuration, true)\n }\n groups={{\n Settings: {\n partialScoring:\n partialScoring.settings && toggle(partialScoring.label),\n lockChoiceOrder:\n lockChoiceOrder.settings && toggle(lockChoiceOrder.label)\n },\n Properties: {\n teacherInstructionsEnabled:\n teacherInstructions.settings &&\n toggle(teacherInstructions.label),\n rationaleEnabled:\n rationale.settings && toggle(rationale.label),\n choiceRationaleEnabled:\n choiceRationale.settings && toggle(choiceRationale.label),\n promptEnabled: prompt.settings && toggle(prompt.label)\n }\n }}\n />\n }\n >\n <div>\n {teacherInstructionsEnabled && (\n <InputContainer\n label={teacherInstructions.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.teacherInstructions || ''}\n onChange={this.onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer\n label={prompt.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={this.onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n disableUnderline\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n\n {rationaleEnabled && (\n <InputContainer\n label={rationale.label}\n className={classes.promptHolder}\n >\n <EditableHtml\n className={classes.prompt}\n markup={model.rationale || ''}\n onChange={this.onRationaleChanged}\n imageSupport={imageSupport}\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n\n <Typography className={classes.text}>\n Define Template, Choices, and Correct Responses\n </Typography>\n <InfoDialog\n open={dialog.open}\n title={dialog.message}\n onCancel={dialog.onCancel}\n onOk={dialog.onOk}\n />\n <EditableHtml\n activePlugins={ALL_PLUGINS}\n toolbarOpts={{ position: 'top' }}\n responseAreaProps={{\n type: 'inline-dropdown',\n options: {\n duplicates: true\n },\n respAreaToolbar: (node, value, onToolbarDone) => {\n const { respAreaChoices } = this.state;\n\n return () => (\n <InlineDropdownToolbar\n onAddChoice={this.onAddChoice}\n onCheck={this.onCheck}\n onRemoveChoice={index =>\n this.onRemoveChoice(node.data.get('index'), index)\n }\n onSelectChoice={index =>\n this.onSelectChoice(node.data.get('index'), index)\n }\n node={node}\n value={value}\n onToolbarDone={onToolbarDone}\n choices={respAreaChoices[node.data.get('index')]}\n />\n );\n }\n }}\n className={classes.markup}\n markup={model.slateMarkup || ''}\n onChange={this.onChange}\n imageSupport={imageSupport}\n onBlur={this.onBlur}\n disabled={false}\n highlightShape={false}\n />\n <br />\n {choiceRationaleEnabled && renderChoiceRationale()}\n </div>\n </layout.ConfigLayout>\n </div>\n );\n }\n}\n\nconst Styled = withStyles(styles)(Main);\n\nexport default Styled;\n"],"file":"main.js"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pie-element/inline-dropdown-configure",
3
- "version": "3.5.3",
3
+ "version": "3.6.2",
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.2",
12
- "@pie-lib/editable-html": "^7.17.2",
13
- "@pie-lib/math-rendering": "^2.3.8",
11
+ "@pie-lib/config-ui": "^10.10.12",
12
+ "@pie-lib/editable-html": "^7.17.12",
13
+ "@pie-lib/math-rendering": "^2.3.12",
14
14
  "classnames": "^2.2.6",
15
15
  "debug": "^3.1.0",
16
16
  "lodash": "^4.17.15",
@@ -3,6 +3,17 @@
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.3.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown-controller@3.2.17...@pie-element/inline-dropdown-controller@3.3.0) (2021-09-20)
7
+
8
+
9
+ ### Features
10
+
11
+ * **inline-dropdown:** add rationale at choice level PD-488 ([1d88366](https://github.com/pie-framework/pie-elements/commit/1d88366f857b90e4ffc5735fe3af78432aa8844c))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [3.2.17](https://github.com/pie-framework/pie-elements/compare/@pie-element/inline-dropdown-controller@3.2.15...@pie-element/inline-dropdown-controller@3.2.17) (2021-08-05)
7
18
 
8
19
 
@@ -25,7 +25,7 @@ var _controllerUtils = require("@pie-lib/controller-utils");
25
25
 
26
26
  var _utils = require("./utils");
27
27
 
28
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
28
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
29
29
 
30
30
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
31
31
 
@@ -42,7 +42,8 @@ var normalize = function normalize(question) {
42
42
  promptEnabled: true,
43
43
  rationaleEnabled: true,
44
44
  teacherInstructionsEnabled: true,
45
- studentInstructionsEnabled: true
45
+ studentInstructionsEnabled: true,
46
+ choiceRationaleEnabled: true
46
47
  }, question);
47
48
  };
48
49
  /**
@@ -59,7 +60,7 @@ exports.normalize = normalize;
59
60
  function model(question, session, env, updateSession) {
60
61
  return new Promise( /*#__PURE__*/function () {
61
62
  var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(resolve) {
62
- var normalizedQuestion, _ref2, _ref2$value, value, choices, feedback, allCorrectResponses, respAreaLength, correctResponses, _loop, i, _ret, lockChoiceOrder, keys, _i, key, teacherInstructions, rationale, out;
63
+ var normalizedQuestion, _ref2, _ref2$value, value, choices, feedback, allCorrectResponses, respAreaLength, correctResponses, _loop, i, _ret, lockChoiceOrder, keys, _i, key, teacherInstructions, rationale, choicesWillNullRationales, out;
63
64
 
64
65
  return _regenerator["default"].wrap(function _callee$(_context) {
65
66
  while (1) {
@@ -165,13 +166,23 @@ function model(question, session, env, updateSession) {
165
166
  case 29:
166
167
  teacherInstructions = null;
167
168
  rationale = null;
169
+ choicesWillNullRationales = (Object.keys(choices) || []).reduce(function (acc, currentValue) {
170
+ acc[currentValue] = (choices[currentValue] || []).map(function (choice) {
171
+ return _objectSpread(_objectSpread({}, choice), {}, {
172
+ rationale: null
173
+ });
174
+ });
175
+ return acc;
176
+ }, {});
168
177
 
169
178
  if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
170
179
  rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
171
180
  teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
181
+ choices = normalizedQuestion.choiceRationaleEnabled ? normalizedQuestion.choices : choicesWillNullRationales;
172
182
  } else {
173
183
  rationale = null;
174
184
  teacherInstructions = null;
185
+ choices = choicesWillNullRationales;
175
186
  }
176
187
 
177
188
  out = {
@@ -187,7 +198,7 @@ function model(question, session, env, updateSession) {
187
198
  };
188
199
  resolve(out);
189
200
 
190
- case 34:
201
+ case 35:
191
202
  case "end":
192
203
  return _context.stop();
193
204
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["getFeedback","correct","normalize","question","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","model","session","env","updateSession","Promise","resolve","normalizedQuestion","value","choices","obj","area","key","choice","feedback","mode","allCorrectResponses","respAreaLength","Object","keys","length","correctResponses","i","result","answer","correctChoice","isCorrect","lockChoiceOrder","teacherInstructions","rationale","role","out","disabled","prompt","markup","responseCorrect","getScore","undefined","config","maxScore","correctCount","total","str","toFixed","parseFloat","outcome","score","empty","partialScoringEnabled","partialScoring","enabled","Math","floor","createCorrectResponseSession","forEach","correctChoices","filter","c","id"],"mappings":"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","sourcesContent":["import map from 'lodash/map';\nimport reduce from 'lodash/reduce';\nimport isEmpty from 'lodash/isEmpty';\nimport {\n lockChoices,\n getShuffledChoices,\n partialScoring,\n} from '@pie-lib/controller-utils';\n\nimport { getAllCorrectResponses } from './utils';\n\nconst getFeedback = (correct) => {\n if (correct) {\n return 'correct';\n }\n\n return 'incorrect';\n};\n\nexport const normalize = (question) => ({\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\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 const { value = {} } = session || {};\n let choices = reduce(\n normalizedQuestion.choices,\n (obj, area, key) => {\n obj[key] = map(area, (choice) => choice);\n\n return obj;\n },\n {}\n );\n\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n const allCorrectResponses = getAllCorrectResponses(normalizedQuestion);\n const respAreaLength = Object.keys(allCorrectResponses).length;\n let correctResponses = 0;\n\n for (let i = 0; i < respAreaLength; i++) {\n const result = reduce(\n allCorrectResponses,\n (obj, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n const isCorrect =\n answer && correctChoice && correctChoice === answer;\n\n obj.feedback[key] = getFeedback(isCorrect);\n\n if (isCorrect) {\n obj.correctResponses += 1;\n }\n\n return obj;\n },\n { correctResponses: 0, feedback: {} }\n );\n\n if (result.correctResponses >= correctResponses) {\n correctResponses = result.correctResponses;\n feedback = result.feedback;\n }\n\n if (result.correctResponses === respAreaLength) {\n break;\n }\n }\n }\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n const keys = Object.keys(choices);\n let i;\n\n for (i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n choices[key] = await getShuffledChoices(\n choices[key],\n session,\n updateSession,\n 'value'\n );\n }\n }\n\n let teacherInstructions = null;\n let rationale = null;\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n rationale = normalizedQuestion.rationaleEnabled\n ? normalizedQuestion.rationale\n : null;\n teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n rationale = null;\n teacherInstructions = null;\n }\n\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n prompt: normalizedQuestion.promptEnabled\n ? normalizedQuestion.prompt\n : null,\n markup: normalizedQuestion.markup,\n choices,\n feedback,\n\n responseCorrect:\n env.mode === 'evaluate'\n ? getScore(normalizedQuestion, session) === 1\n : undefined,\n rationale,\n teacherInstructions,\n };\n\n resolve(out);\n });\n}\n\nexport const getScore = (config, session) => {\n const { value = {} } = session || {};\n const maxScore =\n config && config.choices ? Object.keys(config.choices).length : 0;\n const allCorrectResponses = getAllCorrectResponses(config);\n let correctCount = 0;\n\n for (let i = 0; i < maxScore; i++) {\n const result = reduce(\n allCorrectResponses,\n (total, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n\n if (correctChoice && answer && correctChoice === 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 = (correctCount / maxScore).toFixed(2);\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 if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const score = getScore(model, session);\n\n resolve({\n score: partialScoringEnabled ? score : Math.floor(score),\n empty: false,\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { choices } = question;\n const value = {};\n\n if (choices) {\n Object.keys(choices).forEach((key, i) => {\n const correctChoices =\n choices[key] && choices[key].filter((c) => c.correct);\n\n value[i] = correctChoices && correctChoices[0].value;\n });\n }\n\n resolve({\n id: '1',\n value,\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["getFeedback","correct","normalize","question","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","choiceRationaleEnabled","model","session","env","updateSession","Promise","resolve","normalizedQuestion","value","choices","obj","area","key","choice","feedback","mode","allCorrectResponses","respAreaLength","Object","keys","length","correctResponses","i","result","answer","correctChoice","isCorrect","lockChoiceOrder","teacherInstructions","rationale","choicesWillNullRationales","reduce","acc","currentValue","map","role","out","disabled","prompt","markup","responseCorrect","getScore","undefined","config","maxScore","correctCount","total","str","toFixed","parseFloat","outcome","score","empty","partialScoringEnabled","partialScoring","enabled","Math","floor","createCorrectResponseSession","forEach","correctChoices","filter","c","id"],"mappings":"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","sourcesContent":["import map from 'lodash/map';\nimport reduce from 'lodash/reduce';\nimport isEmpty from 'lodash/isEmpty';\nimport {\n lockChoices,\n getShuffledChoices,\n partialScoring,\n} from '@pie-lib/controller-utils';\n\nimport { getAllCorrectResponses } from './utils';\n\nconst getFeedback = (correct) => {\n if (correct) {\n return 'correct';\n }\n\n return 'incorrect';\n};\n\nexport const normalize = (question) => ({\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n choiceRationaleEnabled: true,\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 const { value = {} } = session || {};\n let choices = reduce(\n normalizedQuestion.choices,\n (obj, area, key) => {\n obj[key] = map(area, (choice) => choice);\n\n return obj;\n },\n {}\n );\n\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n const allCorrectResponses = getAllCorrectResponses(normalizedQuestion);\n const respAreaLength = Object.keys(allCorrectResponses).length;\n let correctResponses = 0;\n\n for (let i = 0; i < respAreaLength; i++) {\n const result = reduce(\n allCorrectResponses,\n (obj, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n const isCorrect =\n answer && correctChoice && correctChoice === answer;\n\n obj.feedback[key] = getFeedback(isCorrect);\n\n if (isCorrect) {\n obj.correctResponses += 1;\n }\n\n return obj;\n },\n { correctResponses: 0, feedback: {} }\n );\n\n if (result.correctResponses >= correctResponses) {\n correctResponses = result.correctResponses;\n feedback = result.feedback;\n }\n\n if (result.correctResponses === respAreaLength) {\n break;\n }\n }\n }\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n const keys = Object.keys(choices);\n let i;\n\n for (i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n choices[key] = await getShuffledChoices(\n choices[key],\n session,\n updateSession,\n 'value'\n );\n }\n }\n\n let teacherInstructions = null;\n let rationale = null;\n\n const choicesWillNullRationales = (Object.keys(choices) || []).reduce((acc, currentValue) => {\n acc[currentValue] = (choices[currentValue] || []).map(choice => ({ ...choice, rationale: null }));\n\n return acc;\n }, {});\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n rationale = normalizedQuestion.rationaleEnabled\n ? normalizedQuestion.rationale\n : null;\n teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n\n choices = normalizedQuestion.choiceRationaleEnabled\n ? normalizedQuestion.choices\n : choicesWillNullRationales;\n\n } else {\n rationale = null;\n teacherInstructions = null;\n choices = choicesWillNullRationales;\n }\n\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n prompt: normalizedQuestion.promptEnabled\n ? normalizedQuestion.prompt\n : null,\n markup: normalizedQuestion.markup,\n choices,\n feedback,\n\n responseCorrect:\n env.mode === 'evaluate'\n ? getScore(normalizedQuestion, session) === 1\n : undefined,\n rationale,\n teacherInstructions\n };\n\n resolve(out);\n });\n}\n\nexport const getScore = (config, session) => {\n const { value = {} } = session || {};\n const maxScore =\n config && config.choices ? Object.keys(config.choices).length : 0;\n const allCorrectResponses = getAllCorrectResponses(config);\n let correctCount = 0;\n\n for (let i = 0; i < maxScore; i++) {\n const result = reduce(\n allCorrectResponses,\n (total, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n\n if (correctChoice && answer && correctChoice === 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 = (correctCount / maxScore).toFixed(2);\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 if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const score = getScore(model, session);\n\n resolve({\n score: partialScoringEnabled ? score : Math.floor(score),\n empty: false,\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { choices } = question;\n const value = {};\n\n if (choices) {\n Object.keys(choices).forEach((key, i) => {\n const correctChoices =\n choices[key] && choices[key].filter((c) => c.correct);\n\n value[i] = correctChoices && correctChoices[0].value;\n });\n }\n\n resolve({\n id: '1',\n value,\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"file":"index.js"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/inline-dropdown-controller",
3
3
  "private": true,
4
- "version": "3.2.17",
4
+ "version": "3.3.0",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -83,6 +83,22 @@
83
83
  }
84
84
  }
85
85
  },
86
+ "choiceRationale": {
87
+ "title": "ConfigureProp",
88
+ "type": "object",
89
+ "properties": {
90
+ "settings": {
91
+ "description": "Indicates if the item has to be displayed in the Settings Panel",
92
+ "type": "boolean",
93
+ "title": "settings"
94
+ },
95
+ "label": {
96
+ "description": "Indicates the label for the item that has to be displayed in the Settings Panel",
97
+ "type": "string",
98
+ "title": "label"
99
+ }
100
+ }
101
+ },
86
102
  "scoringType": {
87
103
  "title": "ConfigureProp",
88
104
  "type": "object",
@@ -62,6 +62,18 @@ Indicates if the item has to be displayed in the Settings Panel
62
62
 
63
63
  Indicates the label for the item that has to be displayed in the Settings Panel
64
64
 
65
+ # `choiceRationale` (object)
66
+
67
+ Properties of the `choiceRationale` object:
68
+
69
+ ## `settings` (boolean)
70
+
71
+ Indicates if the item has to be displayed in the Settings Panel
72
+
73
+ ## `label` (string)
74
+
75
+ Indicates the label for the item that has to be displayed in the Settings Panel
76
+
65
77
  # `scoringType` (object)
66
78
 
67
79
  Properties of the `scoringType` object:
@@ -13,55 +13,65 @@ exports.model = (id, element) => ({
13
13
  {
14
14
  label: 'cow ',
15
15
  value: '0',
16
- correct: true
16
+ correct: true,
17
+ rationale: 'rationale cow'
17
18
  },
18
19
  {
19
20
  label: 'dog ',
20
21
  value: '1',
21
- correct: false
22
+ correct: false,
23
+ rationale: 'rationale dog'
22
24
  },
23
25
  {
24
26
  label: 'cat ',
25
27
  value: '2',
26
- correct: false
28
+ correct: false,
29
+ rationale: 'rationale car'
27
30
  }
28
31
  ],
29
32
  '1': [
30
33
  {
31
34
  label: 'over ',
32
35
  value: '0',
33
- correct: true
36
+ correct: true,
37
+ rationale: 'rationale over'
34
38
  },
35
39
  {
36
40
  label: 'under ',
37
41
  value: '1',
38
- correct: false
42
+ correct: false,
43
+ rationale: 'rationale under'
39
44
  },
40
45
  {
41
46
  label: 'across ',
42
47
  value: '2',
43
- correct: false
48
+ correct: false,
49
+ rationale: 'rationale across'
44
50
  }
45
51
  ],
46
52
  '2': [
47
53
  {
48
54
  label: 'moon ',
49
55
  value: '0',
50
- correct: true
56
+ correct: true,
57
+ rationale: 'rationale moon'
51
58
  },
52
59
  {
53
60
  label: 'sun',
54
61
  value: '2',
55
- correct: false
62
+ correct: false,
63
+ rationale: 'rationale sun'
56
64
  },
57
65
  {
58
66
  label: 'house ',
59
67
  value: '3',
60
- correct: false
68
+ correct: false,
69
+ rationale: 'rationale house'
61
70
  }
62
71
  ]
63
72
  },
64
73
  alternateResponse: {
65
74
  '2': ['2']
66
- }
75
+ },
76
+ choiceRationaleEnabled: false
67
77
  });
@@ -28,6 +28,11 @@
28
28
  "description": "Indicates if choice is correct",
29
29
  "type": "boolean",
30
30
  "title": "correct"
31
+ },
32
+ "rationale": {
33
+ "description": "Rationale for the choice",
34
+ "type": "string",
35
+ "title": "rationale"
31
36
  }
32
37
  },
33
38
  "required": [
@@ -107,6 +112,11 @@
107
112
  "type": "boolean",
108
113
  "title": "rationaleEnabled"
109
114
  },
115
+ "choiceRationaleEnabled": {
116
+ "description": "Indicates if Choice Level Rationales are enabled",
117
+ "type": "boolean",
118
+ "title": "choiceRationaleEnabled"
119
+ },
110
120
  "studentInstructionsEnabled": {
111
121
  "description": "Indicates if Student Instructions are enabled",
112
122
  "type": "boolean",
@@ -140,6 +150,7 @@
140
150
  },
141
151
  "required": [
142
152
  "alternateResponses",
153
+ "choiceRationaleEnabled",
143
154
  "choices",
144
155
  "element",
145
156
  "id",
@@ -187,6 +198,11 @@
187
198
  "description": "Indicates if choice is correct",
188
199
  "type": "boolean",
189
200
  "title": "correct"
201
+ },
202
+ "rationale": {
203
+ "description": "Rationale for the choice",
204
+ "type": "string",
205
+ "title": "rationale"
190
206
  }
191
207
  },
192
208
  "required": [
@@ -56,6 +56,10 @@ Indicates teacher instructions
56
56
 
57
57
  Indicates if Rationale are enabled
58
58
 
59
+ # `choiceRationaleEnabled` (boolean, required)
60
+
61
+ Indicates if Choice Level Rationales are enabled
62
+
59
63
  # `studentInstructionsEnabled` (boolean, required)
60
64
 
61
65
  Indicates if Student Instructions are enabled
@@ -115,4 +119,8 @@ The label of the choice
115
119
 
116
120
  ### `correct` (boolean)
117
121
 
118
- Indicates if choice is correct
122
+ Indicates if choice is correct
123
+
124
+ ### `rationale` (string)
125
+
126
+ Rationale for the choice
package/lib/index.js CHANGED
@@ -35,7 +35,7 @@ var _inlineDropdown = _interopRequireDefault(require("./inline-dropdown"));
35
35
 
36
36
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
37
37
 
38
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
38
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
39
39
 
40
40
  var RootInlineDropdown = /*#__PURE__*/function (_HTMLElement) {
41
41
  (0, _inherits2["default"])(RootInlineDropdown, _HTMLElement);
@@ -41,9 +41,11 @@ var _mathRendering = require("@pie-lib/math-rendering");
41
41
 
42
42
  var _styles = require("@material-ui/core/styles");
43
43
 
44
+ var _classnames = _interopRequireDefault(require("classnames"));
45
+
44
46
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
45
47
 
46
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
48
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
47
49
 
48
50
  var InlineDropdown = /*#__PURE__*/function (_React$Component) {
49
51
  (0, _inherits2["default"])(InlineDropdown, _React$Component);
@@ -97,8 +99,20 @@ var InlineDropdown = /*#__PURE__*/function (_React$Component) {
97
99
  prompt = _this$props.prompt,
98
100
  mode = _this$props.mode,
99
101
  rationale = _this$props.rationale,
100
- teacherInstructions = _this$props.teacherInstructions;
102
+ teacherInstructions = _this$props.teacherInstructions,
103
+ choices = _this$props.choices;
101
104
  var showCorrectAnswerToggle = mode === 'evaluate';
105
+ var choiceRationalesHaveText = false;
106
+ var choiceRationales = (Object.keys(choices) || []).map(function (key) {
107
+ return (choices[key] || []).reduce(function (acc, currentValue) {
108
+ if (currentValue.rationale && (0, _renderUi.hasText)(currentValue.rationale)) {
109
+ choiceRationalesHaveText = true;
110
+ acc.push(currentValue);
111
+ }
112
+
113
+ return acc;
114
+ }, []);
115
+ });
102
116
  return /*#__PURE__*/_react["default"].createElement("div", {
103
117
  className: classes.mainContainer
104
118
  }, teacherInstructions && (0, _renderUi.hasText)(teacherInstructions) && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
@@ -118,7 +132,9 @@ var InlineDropdown = /*#__PURE__*/function (_React$Component) {
118
132
  dangerouslySetInnerHTML: {
119
133
  __html: prompt
120
134
  }
121
- }), /*#__PURE__*/_react["default"].createElement("br", null)), rationale && (0, _renderUi.hasText)(rationale) && /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
135
+ }), /*#__PURE__*/_react["default"].createElement("br", null)), /*#__PURE__*/_react["default"].createElement(_maskMarkup.InlineDropdown, (0, _extends2["default"])({}, this.props, {
136
+ showCorrectAnswer: showCorrectAnswer
137
+ })), rationale && (0, _renderUi.hasText)(rationale) && /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
122
138
  labels: {
123
139
  hidden: 'Show Rationale',
124
140
  visible: 'Hide Rationale'
@@ -127,9 +143,30 @@ var InlineDropdown = /*#__PURE__*/function (_React$Component) {
127
143
  dangerouslySetInnerHTML: {
128
144
  __html: rationale
129
145
  }
130
- })), /*#__PURE__*/_react["default"].createElement(_maskMarkup.InlineDropdown, (0, _extends2["default"])({}, this.props, {
131
- showCorrectAnswer: showCorrectAnswer
132
- })));
146
+ })), choiceRationalesHaveText && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("br", null), /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
147
+ labels: {
148
+ hidden: 'Show Rationale for choices',
149
+ visible: 'Hide Rationale for choices'
150
+ }
151
+ }, /*#__PURE__*/_react["default"].createElement("div", null, choiceRationales.map(function (choices, index) {
152
+ return /*#__PURE__*/_react["default"].createElement("div", {
153
+ key: index
154
+ }, choices && choices.length > 0 && choices.map(function (choice) {
155
+ return /*#__PURE__*/_react["default"].createElement("div", {
156
+ className: classes.choiceRationale,
157
+ key: choice.label
158
+ }, /*#__PURE__*/_react["default"].createElement("div", {
159
+ className: (0, _classnames["default"])(classes.choiceRationaleLabel, choice.correct ? 'correct' : 'incorrect'),
160
+ dangerouslySetInnerHTML: {
161
+ __html: "".concat(choice.label, ": ")
162
+ }
163
+ }), /*#__PURE__*/_react["default"].createElement("div", {
164
+ dangerouslySetInnerHTML: {
165
+ __html: choice.rationale
166
+ }
167
+ }));
168
+ }), choices && choices.length > 0 && /*#__PURE__*/_react["default"].createElement("br", null));
169
+ })))));
133
170
  }
134
171
  }]);
135
172
  return InlineDropdown;
@@ -159,6 +196,19 @@ var styles = function styles(theme) {
159
196
  color: _renderUi.color.text(),
160
197
  backgroundColor: _renderUi.color.background(),
161
198
  padding: theme.spacing.unit
199
+ },
200
+ choiceRationale: {
201
+ display: 'flex',
202
+ whiteSpace: 'break-spaces'
203
+ },
204
+ choiceRationaleLabel: {
205
+ display: 'flex',
206
+ '&.correct': {
207
+ color: _renderUi.color.correct()
208
+ },
209
+ '&.incorrect': {
210
+ color: _renderUi.color.incorrect()
211
+ }
162
212
  }
163
213
  };
164
214
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/inline-dropdown.jsx"],"names":["InlineDropdown","showCorrectAnswer","setState","state","nextProps","feedback","domNode","ReactDOM","findDOMNode","props","classes","prompt","mode","rationale","teacherInstructions","showCorrectAnswerToggle","mainContainer","hidden","visible","__html","toggleShowCorrect","React","Component","PropTypes","object","string","disabled","bool","markup","choices","value","onChange","func","styles","theme","color","text","backgroundColor","background","padding","spacing","unit"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { InlineDropdown as DropDown } from '@pie-lib/mask-markup';\nimport { color, Collapsible, hasText } from '@pie-lib/render-ui';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { withStyles } from '@material-ui/core/styles';\n\nexport class InlineDropdown extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n prompt: PropTypes.string,\n disabled: PropTypes.bool,\n markup: PropTypes.string,\n mode: PropTypes.string,\n rationale: PropTypes.string,\n teacherInstructions: PropTypes.string,\n choices: 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 UNSAFE_componentWillReceiveProps(nextProps) {\n if (isEmpty(nextProps.feedback)) {\n this.setState({ showCorrectAnswer: false });\n }\n }\n\n componentDidUpdate() {\n // eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n }\n\n toggleShowCorrect = () => {\n this.setState({ showCorrectAnswer: !this.state.showCorrectAnswer });\n };\n\n render() {\n const { showCorrectAnswer } = this.state;\n const { classes, prompt, mode, rationale, teacherInstructions } = this.props;\n const showCorrectAnswerToggle = mode === 'evaluate';\n\n return (\n <div className={classes.mainContainer}>\n {\n teacherInstructions && hasText(teacherInstructions) && (\n <React.Fragment>\n <Collapsible\n labels={{ hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions' }}\n >\n <div dangerouslySetInnerHTML={{ __html: teacherInstructions }}/>\n </Collapsible>\n <br />\n </React.Fragment>\n )\n }\n\n <CorrectAnswerToggle\n show={showCorrectAnswerToggle}\n toggled={showCorrectAnswer}\n onToggle={this.toggleShowCorrect}\n />\n {showCorrectAnswerToggle && <br />}\n\n {prompt && (\n <React.Fragment>\n <div dangerouslySetInnerHTML={{ __html: prompt }}/>\n <br />\n </React.Fragment>\n )}\n {\n rationale && hasText(rationale) && (\n <Collapsible\n labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }}\n >\n <div dangerouslySetInnerHTML={{ __html: rationale }}/>\n </Collapsible>\n )\n }\n <DropDown\n {...this.props}\n showCorrectAnswer={showCorrectAnswer}\n />\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n mainContainer: {\n color: color.text(),\n backgroundColor: color.background(),\n padding: theme.spacing.unit\n }\n});\n\nexport default withStyles(styles)(InlineDropdown);\n"],"file":"inline-dropdown.js"}
1
+ {"version":3,"sources":["../src/inline-dropdown.jsx"],"names":["InlineDropdown","showCorrectAnswer","setState","state","nextProps","feedback","domNode","ReactDOM","findDOMNode","props","classes","prompt","mode","rationale","teacherInstructions","choices","showCorrectAnswerToggle","choiceRationalesHaveText","choiceRationales","Object","keys","map","key","reduce","acc","currentValue","push","mainContainer","hidden","visible","__html","toggleShowCorrect","index","length","choice","choiceRationale","label","choiceRationaleLabel","correct","React","Component","PropTypes","object","string","disabled","bool","markup","value","onChange","func","styles","theme","color","text","backgroundColor","background","padding","spacing","unit","display","whiteSpace","incorrect"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { InlineDropdown as DropDown } from '@pie-lib/mask-markup';\nimport { color, Collapsible, hasText } from '@pie-lib/render-ui';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\n\nexport class InlineDropdown extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n prompt: PropTypes.string,\n disabled: PropTypes.bool,\n markup: PropTypes.string,\n mode: PropTypes.string,\n rationale: PropTypes.string,\n teacherInstructions: PropTypes.string,\n choices: 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 UNSAFE_componentWillReceiveProps(nextProps) {\n if (isEmpty(nextProps.feedback)) {\n this.setState({ showCorrectAnswer: false });\n }\n }\n\n componentDidUpdate() {\n // eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n }\n\n toggleShowCorrect = () => {\n this.setState({ showCorrectAnswer: !this.state.showCorrectAnswer });\n };\n\n render() {\n const { showCorrectAnswer } = this.state;\n const { classes, prompt, mode, rationale, teacherInstructions, choices } = this.props;\n const showCorrectAnswerToggle = mode === 'evaluate';\n let choiceRationalesHaveText = false;\n\n const choiceRationales = (Object.keys(choices) || []).map(key => (choices[key] || [])\n .reduce((acc, currentValue) => {\n if (currentValue.rationale && hasText(currentValue.rationale)) {\n choiceRationalesHaveText = true;\n\n acc.push(currentValue);\n }\n return acc;\n }, []));\n\n return (\n <div className={classes.mainContainer}>\n {\n teacherInstructions && hasText(teacherInstructions) && (\n <React.Fragment>\n <Collapsible\n labels={{ hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions' }}\n >\n <div dangerouslySetInnerHTML={{ __html: teacherInstructions }}/>\n </Collapsible>\n <br />\n </React.Fragment>\n )\n }\n\n <CorrectAnswerToggle\n show={showCorrectAnswerToggle}\n toggled={showCorrectAnswer}\n onToggle={this.toggleShowCorrect}\n />\n {showCorrectAnswerToggle && <br />}\n\n {prompt && (\n <React.Fragment>\n <div dangerouslySetInnerHTML={{ __html: prompt }}/>\n <br />\n </React.Fragment>\n )}\n <DropDown\n {...this.props}\n showCorrectAnswer={showCorrectAnswer}\n />\n {rationale && hasText(rationale) && (\n <Collapsible\n labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }}\n >\n <div dangerouslySetInnerHTML={{ __html: rationale }}/>\n </Collapsible>\n )}\n {choiceRationalesHaveText && (\n <React.Fragment>\n <br />\n <Collapsible labels={{hidden: 'Show Rationale for choices', visible: 'Hide Rationale for choices'}}>\n <div>\n {choiceRationales.map((choices, index) =>\n <div key={index}>\n {choices && choices.length > 0 && choices.map( choice =>\n <div className={classes.choiceRationale} key={choice.label}>\n <div\n className={classNames(classes.choiceRationaleLabel, choice.correct ? 'correct' : 'incorrect')}\n dangerouslySetInnerHTML={{ __html: `${choice.label}: ` }}\n />\n <div dangerouslySetInnerHTML={{ __html: choice.rationale }}/>\n </div>\n )}\n {choices && choices.length > 0 && <br />}\n </div>\n )}\n </div>\n </Collapsible>\n </React.Fragment>\n )}\n </div>\n );\n }\n}\n\nconst styles = (theme) => ({\n mainContainer: {\n color: color.text(),\n backgroundColor: color.background(),\n padding: theme.spacing.unit\n },\n choiceRationale: {\n display: 'flex',\n whiteSpace: 'break-spaces'\n },\n choiceRationaleLabel: {\n display: 'flex',\n '&.correct': {\n color: color.correct()\n },\n '&.incorrect': {\n color: color.incorrect()\n }\n }\n});\n\nexport default withStyles(styles)(InlineDropdown);\n"],"file":"inline-dropdown.js"}
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "repository": "pie-framework/pie-elements",
7
- "version": "3.8.4",
7
+ "version": "3.9.3",
8
8
  "description": "",
9
9
  "scripts": {
10
10
  "test": "echo \"Error: no test specified\" && exit 1",
@@ -13,10 +13,10 @@
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.29",
17
- "@pie-lib/mask-markup": "^1.10.20",
18
- "@pie-lib/math-rendering": "^2.3.9",
19
- "@pie-lib/render-ui": "^4.12.0",
16
+ "@pie-lib/correct-answer-toggle": "^2.3.32",
17
+ "@pie-lib/mask-markup": "^1.11.3",
18
+ "@pie-lib/math-rendering": "^2.3.12",
19
+ "@pie-lib/render-ui": "^4.12.3",
20
20
  "classnames": "^2.2.5",
21
21
  "lodash": "^4.17.10",
22
22
  "prop-types": "^15.6.1",
@@ -25,7 +25,7 @@
25
25
  },
26
26
  "author": "",
27
27
  "license": "ISC",
28
- "gitHead": "0df28892922b8611038d5dd69ff0d6c8ce5806a3",
28
+ "gitHead": "25d4d90078b237c54893757434bb09258812b803",
29
29
  "main": "lib/index.js",
30
30
  "module": "src/index.js"
31
31
  }