@instructure/quiz-core 20.4.2-rc.1 → 20.4.2-rc.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.
Files changed (41) hide show
  1. package/es/common/components/resources/quiz/instructions/Instructions.js +17 -18
  2. package/es/common/components/resources/quiz/instructions/styles.js +21 -0
  3. package/es/common/components/resources/quiz/instructions/theme.js +4 -2
  4. package/es/common/components/resources/quiz/title/Title.js +15 -18
  5. package/es/common/components/resources/quiz/title/styles.js +19 -0
  6. package/es/common/components/resources/quiz/title/theme.js +4 -2
  7. package/es/common/components/resources/quizSessionResult/Header/index.js +22 -29
  8. package/es/common/components/resources/quizSessionResult/Header/styles.js +29 -0
  9. package/es/common/components/resources/quizSessionResult/Header/theme.js +4 -2
  10. package/es/common/components/resources/quizSessionResult/Info/index.js +43 -53
  11. package/es/common/components/resources/quizSessionResult/Info/styles.js +61 -0
  12. package/es/common/components/resources/quizSessionResult/Info/theme.js +4 -2
  13. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/index.js +1 -0
  14. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/presenter.js +40 -0
  15. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/styles.js +17 -0
  16. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/theme.js +11 -0
  17. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +2 -1
  18. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +59 -17
  19. package/es/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/theme.js +7 -2
  20. package/es/reporting/components/resources/NewQuizAndItemAnalysis/propTypes.js +2 -1
  21. package/lib/common/components/resources/quiz/instructions/Instructions.js +15 -22
  22. package/lib/common/components/resources/quiz/instructions/styles.js +29 -0
  23. package/lib/common/components/resources/quiz/instructions/theme.js +6 -3
  24. package/lib/common/components/resources/quiz/title/Title.js +15 -23
  25. package/lib/common/components/resources/quiz/title/styles.js +27 -0
  26. package/lib/common/components/resources/quiz/title/theme.js +6 -3
  27. package/lib/common/components/resources/quizSessionResult/Header/index.js +21 -31
  28. package/lib/common/components/resources/quizSessionResult/Header/styles.js +37 -0
  29. package/lib/common/components/resources/quizSessionResult/Header/theme.js +6 -3
  30. package/lib/common/components/resources/quizSessionResult/Info/index.js +42 -55
  31. package/lib/common/components/resources/quizSessionResult/Info/styles.js +69 -0
  32. package/lib/common/components/resources/quizSessionResult/Info/theme.js +6 -3
  33. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/index.js +13 -0
  34. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/presenter.js +55 -0
  35. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/styles.js +25 -0
  36. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/BlankIcon/theme.js +19 -0
  37. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/index.js +2 -1
  38. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/presenter.js +60 -17
  39. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/NewItemAnalysis/theme.js +7 -2
  40. package/lib/reporting/components/resources/NewQuizAndItemAnalysis/propTypes.js +2 -1
  41. package/package.json +9 -9
@@ -2,8 +2,6 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
6
-
7
5
  Object.defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
@@ -19,14 +17,12 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits
19
17
 
20
18
  var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
21
19
 
22
- var _react = _interopRequireWildcard(require("react"));
20
+ var _react = require("react");
23
21
 
24
22
  var _propTypes = _interopRequireDefault(require("prop-types"));
25
23
 
26
24
  var _reactImmutableProptypes = _interopRequireDefault(require("react-immutable-proptypes"));
27
25
 
28
- var _classnames = _interopRequireDefault(require("classnames"));
29
-
30
26
  var _uiA11yContent = require("@instructure/ui-a11y-content");
31
27
 
32
28
  var _uiAlerts = require("@instructure/ui-alerts");
@@ -39,7 +35,7 @@ var _uiHeading = require("@instructure/ui-heading");
39
35
 
40
36
  var _uiView = require("@instructure/ui-view");
41
37
 
42
- var _uiThemeable = require("@instructure/ui-themeable");
38
+ var _emotion = require("@instructure/emotion");
43
39
 
44
40
  var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
45
41
 
@@ -51,26 +47,14 @@ var _index = _interopRequireDefault(require("../../../shared/FormattedDuration/i
51
47
 
52
48
  var _formatTimespan = require("../../../../util/formatTimespan.js");
53
49
 
50
+ var _styles = _interopRequireDefault(require("./styles.js"));
51
+
54
52
  var _theme = _interopRequireDefault(require("./theme.js"));
55
53
 
56
54
  var _dec, _class, _class2, _temp;
57
55
 
58
- var styles = {
59
- componentId: 'fhrSa',
60
- template: function template(theme) {
61
- return "\n\n.fhrSa_ekHz{align-items:center;display:flex;flex-direction:row;justify-content:center;margin-top:".concat(theme.alertWrapperMargin || 'inherit', "}\n\n.fhrSa_bANW{flex-grow:1;max-width:33rem}\n\n.fhrSa_gasz{margin:none;padding:none}\n\n.fhrSa_pypk,.fhrSa_gasz{align-items:center;display:flex;justify-content:center}\n\n.fhrSa_pypk{align-self:center;flex-wrap:wrap}\n\n.fhrSa_bCqi{flex-wrap:wrap;justify-content:flex-start}\n\n.fhrSa_frHB,.fhrSa_bCqi{align-items:center;display:flex;flex:1 1 auto}\n\n.fhrSa_frHB{height:150px;margin:").concat(theme.scoreMargin || 'inherit', ";width:150px;z-index:").concat(theme.scoreZIndex || 'inherit', "}\n\n.fhrSa_fkZg{font-size:").concat(theme.scorePercentageFontSize || 'inherit', ";font-weight:").concat(theme.scorePercentageFontWeight || 'inherit', "}\n\n.fhrSa_vsBM{flex:1 1 auto;margin:").concat(theme.infoWrapperMargin || 'inherit', ";padding-left:").concat(theme.inforWrapperPadding || 'inherit', "}");
62
- },
63
- 'alertWrapper': 'fhrSa_ekHz',
64
- 'alertWidth': 'fhrSa_bANW',
65
- 'wrapper': 'fhrSa_gasz',
66
- 'info': 'fhrSa_pypk',
67
- 'scoreStats': 'fhrSa_bCqi',
68
- 'score': 'fhrSa_frHB',
69
- 'scorePercentage': 'fhrSa_fkZg',
70
- 'infoWrapper': 'fhrSa_vsBM'
71
- };
72
56
  var unknownPercentageValue = 'UNKNOWN_PERCENTAGE';
73
- var Info = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_withI18nSupport) {
57
+ var Info = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.default), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_withI18nSupport) {
74
58
  (0, _inherits2.default)(Info, _withI18nSupport);
75
59
 
76
60
  var _super = (0, _createSuper2.default)(Info);
@@ -105,8 +89,8 @@ var Info = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_cl
105
89
  default: '?',
106
90
  description: 'placeholder for an unknown percentage value'
107
91
  }) : this.formatPercentMax2FractionDigits(valueNow);
108
- return /*#__PURE__*/_react.default.createElement("div", {
109
- className: styles.scorePercentage,
92
+ return (0, _emotion.jsx)("div", {
93
+ css: this.props.styles.scorePercentage,
110
94
  "data-automation": "sdk-quiz-score-percentage"
111
95
  }, valueToShow);
112
96
  }
@@ -124,7 +108,7 @@ var Info = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_cl
124
108
 
125
109
  if (quizSessionResult.isLoaded() && quizSessionResult.autogradingFailed()) {
126
110
  var msg = (0, _formatMessage.default)('There was a grading problem. Please inform your instructor.');
127
- alerts.push( /*#__PURE__*/_react.default.createElement(_uiAlerts.Alert, {
111
+ alerts.push((0, _emotion.jsx)(_uiAlerts.Alert, {
128
112
  key: "autograding_failed",
129
113
  variant: "warning"
130
114
  }, msg));
@@ -134,17 +118,17 @@ var Info = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_cl
134
118
  var ungradedText = (0, _formatMessage.default)("{\n count, plural,\n one {# question requires grading}\n other {# questions require grading}\n }", {
135
119
  count: ungradedCount
136
120
  });
137
- alerts.push( /*#__PURE__*/_react.default.createElement(_uiAlerts.Alert, {
121
+ alerts.push((0, _emotion.jsx)(_uiAlerts.Alert, {
138
122
  key: "manual_grading",
139
123
  variant: "info"
140
124
  }, ungradedText));
141
125
  }
142
126
 
143
127
  if (alerts.length) {
144
- return /*#__PURE__*/_react.default.createElement("div", {
145
- className: styles.alertWrapper
146
- }, /*#__PURE__*/_react.default.createElement("div", {
147
- className: styles.alertWidth,
128
+ return (0, _emotion.jsx)("div", {
129
+ css: this.props.styles.alertWrapper
130
+ }, (0, _emotion.jsx)("div", {
131
+ css: this.props.styles.alertWidth,
148
132
  "data-automation": "sdk-results-requires-grading"
149
133
  }, alerts));
150
134
  }
@@ -157,23 +141,23 @@ var Info = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_cl
157
141
  var alt = (0, _formatMessage.default)('Grade for this attempt: { grade }', {
158
142
  grade: letterGrade
159
143
  });
160
- return /*#__PURE__*/_react.default.createElement(_uiA11yContent.AccessibleContent, {
144
+ return (0, _emotion.jsx)(_uiA11yContent.AccessibleContent, {
161
145
  alt: alt
162
- }, /*#__PURE__*/_react.default.createElement(_uiView.View, {
146
+ }, (0, _emotion.jsx)(_uiView.View, {
163
147
  as: "div"
164
- }, /*#__PURE__*/_react.default.createElement(_uiText.Text, {
148
+ }, (0, _emotion.jsx)(_uiText.Text, {
165
149
  size: "xx-large",
166
150
  weight: "bold",
167
151
  color: "primary"
168
- }, letterGrade)), /*#__PURE__*/_react.default.createElement(_uiText.Text, {
152
+ }, letterGrade)), (0, _emotion.jsx)(_uiText.Text, {
169
153
  color: "secondary"
170
154
  }, gradeText));
171
155
  }
172
156
  }, {
173
157
  key: "renderScoreStats",
174
158
  value: function renderScoreStats() {
175
- return /*#__PURE__*/_react.default.createElement("div", {
176
- className: styles.scoreStats
159
+ return (0, _emotion.jsx)("div", {
160
+ css: this.props.styles.scoreStats
177
161
  }, this.renderProgress(), this.renderPointsDisplay());
178
162
  }
179
163
  }, {
@@ -183,10 +167,10 @@ var Info = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_cl
183
167
  return null;
184
168
  }
185
169
 
186
- return /*#__PURE__*/_react.default.createElement("div", {
187
- className: styles.score,
170
+ return (0, _emotion.jsx)("div", {
171
+ css: this.props.styles.score,
188
172
  "data-automation": "sdk-info-score"
189
- }, /*#__PURE__*/_react.default.createElement(_uiProgress.ProgressCircle, {
173
+ }, (0, _emotion.jsx)(_uiProgress.ProgressCircle, {
190
174
  shouldAnimateOnMount: true,
191
175
  size: "large",
192
176
  screenReaderLabel: (0, _formatMessage.default)('Your Score'),
@@ -199,16 +183,16 @@ var Info = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_cl
199
183
  }, {
200
184
  key: "renderPointsDisplay",
201
185
  value: function renderPointsDisplay() {
202
- return /*#__PURE__*/_react.default.createElement("div", {
203
- className: styles.infoWrapper
204
- }, /*#__PURE__*/_react.default.createElement(_uiA11yContent.AccessibleContent, {
186
+ return (0, _emotion.jsx)("div", {
187
+ css: this.props.styles.infoWrapper
188
+ }, (0, _emotion.jsx)(_uiA11yContent.AccessibleContent, {
205
189
  alt: this.pointsText
206
- }, /*#__PURE__*/_react.default.createElement(_uiText.Text, {
190
+ }, (0, _emotion.jsx)(_uiText.Text, {
207
191
  as: "div",
208
192
  color: "primary",
209
193
  size: "xx-large",
210
194
  weight: "bold"
211
- }, this.mainPointsText), /*#__PURE__*/_react.default.createElement(_uiText.Text, {
195
+ }, this.mainPointsText), (0, _emotion.jsx)(_uiText.Text, {
212
196
  color: "secondary"
213
197
  }, this.subPointsText)));
214
198
  }
@@ -219,29 +203,30 @@ var Info = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_cl
219
203
  var alt = (0, _formatMessage.default)('Time for this attempt: { time }', {
220
204
  time: (0, _formatTimespan.formatTime)(this.props.quizSession.elapsedTime)
221
205
  });
222
- return /*#__PURE__*/_react.default.createElement(_uiA11yContent.AccessibleContent, {
206
+ return (0, _emotion.jsx)(_uiA11yContent.AccessibleContent, {
223
207
  alt: alt
224
- }, /*#__PURE__*/_react.default.createElement(_uiView.View, {
208
+ }, (0, _emotion.jsx)(_uiView.View, {
225
209
  as: "div"
226
- }, /*#__PURE__*/_react.default.createElement(_index.default, {
210
+ }, (0, _emotion.jsx)(_index.default, {
227
211
  fontSize: "xx-large",
228
212
  fontWeight: "bold",
229
213
  seconds: this.props.quizSession.elapsedTime
230
- })), /*#__PURE__*/_react.default.createElement(_uiText.Text, {
214
+ })), (0, _emotion.jsx)(_uiText.Text, {
231
215
  color: "secondary"
232
216
  }, attemptText));
233
217
  }
234
218
  }, {
235
219
  key: "render",
236
220
  value: function render() {
237
- return /*#__PURE__*/_react.default.createElement("div", null, this.renderAlert(), /*#__PURE__*/_react.default.createElement("div", {
238
- className: styles.wrapper
239
- }, /*#__PURE__*/_react.default.createElement("div", {
240
- className: (0, _classnames.default)('fs-mask', styles.info)
241
- }, /*#__PURE__*/_react.default.createElement(_uiA11yContent.ScreenReaderContent, null, /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
221
+ return (0, _emotion.jsx)("div", null, this.renderAlert(), (0, _emotion.jsx)("div", {
222
+ css: this.props.styles.wrapper
223
+ }, (0, _emotion.jsx)("div", {
224
+ css: this.props.styles.info,
225
+ className: "fs-mask"
226
+ }, (0, _emotion.jsx)(_uiA11yContent.ScreenReaderContent, null, (0, _emotion.jsx)(_uiHeading.Heading, {
242
227
  level: "h2"
243
- }, (0, _formatMessage.default)('Assessment Statistics'))), this.props.restrictQuantitativeData ? this.renderLetterGrade() : this.renderScoreStats(), /*#__PURE__*/_react.default.createElement("div", {
244
- className: styles.infoWrapper
228
+ }, (0, _formatMessage.default)('Assessment Statistics'))), this.props.restrictQuantitativeData ? this.renderLetterGrade() : this.renderScoreStats(), (0, _emotion.jsx)("div", {
229
+ css: this.props.styles.infoWrapper
245
230
  }, this.renderTime()))));
246
231
  }
247
232
  }, {
@@ -346,7 +331,9 @@ var Info = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_cl
346
331
  quizSession: _reactImmutableProptypes.default.record.isRequired,
347
332
  quizSessionResult: _reactImmutableProptypes.default.record.isRequired,
348
333
  restrictQuantitativeData: _propTypes.default.bool,
349
- sessionItemResults: _reactImmutableProptypes.default.list.isRequired
334
+ sessionItemResults: _reactImmutableProptypes.default.list.isRequired,
335
+ // eslint-disable-next-line react/require-default-props,react/forbid-prop-types
336
+ styles: _propTypes.default.object
350
337
  }, _class2.defaultProps = {
351
338
  gradingScheme: [],
352
339
  restrictQuantitativeData: false
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var generateStyle = function generateStyle(componentTheme) {
9
+ return {
10
+ alertWrapper: {
11
+ display: 'flex',
12
+ flexDirection: 'row',
13
+ alignItems: 'center',
14
+ justifyContent: 'center',
15
+ marginTop: componentTheme.alertWrapperMargin
16
+ },
17
+ alertWidth: {
18
+ flexGrow: 1,
19
+ maxWidth: '33rem,'
20
+ },
21
+ wrapper: {
22
+ padding: 'none',
23
+ margin: 'none',
24
+ display: 'flex',
25
+ alignItems: 'center',
26
+ justifyContent: 'center'
27
+ },
28
+ info: {
29
+ alignSelf: 'center',
30
+ display: 'flex',
31
+ flexWrap: 'wrap',
32
+ alignItems: 'center',
33
+ justifyContent: 'center'
34
+ },
35
+ scoreStats: {
36
+ display: 'flex',
37
+ flexWrap: 'wrap',
38
+ alignItems: 'center',
39
+ justifyContent: 'flex-start',
40
+ flex: '1 1 auto'
41
+ },
42
+ score: {
43
+ display: 'flex',
44
+ alignItems: 'center',
45
+ flex: '1 1 auto',
46
+ margin: componentTheme.scoreMargin,
47
+ height: '150px',
48
+ width: '150px',
49
+
50
+ /*
51
+ progress modal sets a -1 z-index on its content
52
+ and this raises it above the app background
53
+ */
54
+ zIndex: componentTheme.scoreZIndex
55
+ },
56
+ scorePercentage: {
57
+ fontSize: componentTheme.scorePercentageFontSize,
58
+ fontWeight: componentTheme.scorePercentageFontWeight
59
+ },
60
+ infoWrapper: {
61
+ flex: '1 1 auto',
62
+ margin: componentTheme.infoWrapperMargin,
63
+ paddingLeft: componentTheme.inforWrapperPadding
64
+ }
65
+ };
66
+ };
67
+
68
+ var _default = generateStyle;
69
+ exports.default = _default;
@@ -3,9 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = generator;
6
+ exports.default = void 0;
7
7
 
8
- function generator(_ref) {
8
+ var generateComponentTheme = function generateComponentTheme(_ref) {
9
9
  var spacing = _ref.spacing,
10
10
  typography = _ref.typography;
11
11
  return {
@@ -17,4 +17,7 @@ function generator(_ref) {
17
17
  infoWrapperMargin: spacing.small,
18
18
  inforWrapperPadding: spacing.small
19
19
  };
20
- }
20
+ };
21
+
22
+ var _default = generateComponentTheme;
23
+ exports.default = _default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _presenter.BlankIcon;
10
+ }
11
+ });
12
+
13
+ var _presenter = require("./presenter.js");
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.BlankIcon = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
+
16
+ var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
17
+
18
+ var _react = require("react");
19
+
20
+ var _emotion = require("@instructure/emotion");
21
+
22
+ var _styles = _interopRequireDefault(require("./styles.js"));
23
+
24
+ var _theme = _interopRequireDefault(require("./theme.js"));
25
+
26
+ var _propTypes = _interopRequireDefault(require("prop-types"));
27
+
28
+ var _dec, _class, _class2, _temp;
29
+
30
+ var BlankIcon = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.default), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
31
+ (0, _inherits2.default)(BlankIcon, _Component);
32
+
33
+ var _super = (0, _createSuper2.default)(BlankIcon);
34
+
35
+ function BlankIcon() {
36
+ (0, _classCallCheck2.default)(this, BlankIcon);
37
+ return _super.apply(this, arguments);
38
+ }
39
+
40
+ (0, _createClass2.default)(BlankIcon, [{
41
+ key: "render",
42
+ value: function render() {
43
+ var number = this.props.number;
44
+ return (0, _emotion.jsx)("span", {
45
+ css: this.props.styles.blankSpace
46
+ }, number);
47
+ }
48
+ }]);
49
+ BlankIcon.displayName = "BlankIcon";
50
+ return BlankIcon;
51
+ }(_react.Component), _class2.propTypes = {
52
+ number: _propTypes.default.number.isRequired,
53
+ styles: _propTypes.default.object
54
+ }.isRequired, _temp)) || _class);
55
+ exports.BlankIcon = BlankIcon;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var generateStyle = function generateStyle(componentTheme) {
9
+ return {
10
+ blankSpace: {
11
+ display: 'inline-flex',
12
+ justifyContent: 'center',
13
+ alignItems: 'center',
14
+ height: componentTheme.blankHeight,
15
+ minWidth: componentTheme.blankMinWidth,
16
+ verticalAlign: 'middle',
17
+ border: "1px solid ".concat(componentTheme.blankBorderColor),
18
+ borderRadius: componentTheme.blankBorderRadius,
19
+ padding: '2px 2px'
20
+ }
21
+ };
22
+ };
23
+
24
+ var _default = generateStyle;
25
+ exports.default = _default;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var generateComponentTheme = function generateComponentTheme(_ref) {
9
+ var colors = _ref.colors;
10
+ return {
11
+ blankBorderColor: colors.tiara,
12
+ blankBorderRadius: '14px',
13
+ blankMinWidth: '20px',
14
+ blankHeight: '20px'
15
+ };
16
+ };
17
+
18
+ var _default = generateComponentTheme;
19
+ exports.default = _default;
@@ -23,7 +23,8 @@ function mapStateToProps(_state) {
23
23
  categorizationEnabled: (0, _featureCheck.featureOn)('ia_categorization_afs'),
24
24
  trueFalseEnabled: (0, _featureCheck.featureOn)('ia_true_false_afs'),
25
25
  choiceEnabled: (0, _featureCheck.featureOn)('ia_choice_afs'),
26
- multiAnswerEnabled: (0, _featureCheck.featureOn)('ia_multi_answer_afs')
26
+ multiAnswerEnabled: (0, _featureCheck.featureOn)('ia_multi_answer_afs'),
27
+ fillInTheBlankEnabled: (0, _featureCheck.featureOn)('ia_rich_fill_blank_afs')
27
28
  }
28
29
  };
29
30
  }
@@ -59,24 +59,30 @@ var _rceChecker = require("../../../../../common/util/rceChecker.js");
59
59
 
60
60
  var _quizInteractions = require("@instructure/quiz-interactions");
61
61
 
62
+ var _quizCommon = require("@instructure/quiz-common");
63
+
62
64
  var _dec, _class, _class2, _temp;
63
65
 
64
66
  var styles = {
65
- componentId: 'ewlJT',
67
+ componentId: 'eObAE',
66
68
  template: function template(theme) {
67
- return "\n\n.ewlJT_eKXQ{padding:".concat(theme.cardWrapperPadding || 'inherit', "}\n\n.ewlJT_bwlc{gap:24px;justify-content:space-between;position:relative;row-gap:32px}\n\n.ewlJT_bwlc,.ewlJT_bqdH{align-items:flex-start;display:flex;flex-direction:row;flex-wrap:wrap}\n\n.ewlJT_bqdH{row-gap:24px}\n\n.ewlJT_NpIG{position:absolute;right:").concat(theme.viewPaddingRight || 'inherit', ";top:0}\n\n.ewlJT_eoBe{font-size:").concat(theme.metricNumberContextFontSize || 'inherit', ";font-weight:").concat(theme.metricNumberContextFontWeight || 'inherit', "}\n\n.ewlJT_fFDJ{display:none}\n\n.ewlJT_fxkJ{margin-top:-8px}\n\n.ewlJT_esVF{min-height:48px}\n\n.ewlJT_eTZq{position:relative}\n\n.ewlJT_eTZq:after{background:linear-gradient(180deg,hsla(0,0%,100%,0),#fff);content:\"\";height:48px;left:0;position:absolute;top:0;width:100%}\n\n.ewlJT_cVld{max-width:100%;width:calc(25% + 350px)}");
69
+ return "\n\n.eObAE_eKXQ{padding:".concat(theme.cardWrapperPadding || 'inherit', "}\n\n.eObAE_bwlc{gap:24px;justify-content:space-between;position:relative;row-gap:32px}\n\n.eObAE_bwlc,.eObAE_bqdH{align-items:flex-start;display:flex;flex-direction:row;flex-wrap:wrap}\n\n.eObAE_bqdH{row-gap:24px}\n\n.eObAE_eTaq{align-items:center;border:1px solid ").concat(theme.blankBorderColor || 'inherit', ";border-radius:").concat(theme.blankBorderRadius || 'inherit', ";display:inline-flex;height:").concat(theme.blankHeight || 'inherit', ";justify-content:center;min-width:").concat(theme.blankMinWidth || 'inherit', ";padding:2px 2px;vertical-align:middle}\n\n.eObAE_NpIG{position:absolute;right:").concat(theme.viewPaddingRight || 'inherit', ";top:0}\n\n.eObAE_eoBe{font-size:").concat(theme.metricNumberContextFontSize || 'inherit', ";font-weight:").concat(theme.metricNumberContextFontWeight || 'inherit', "}\n\n.eObAE_fFDJ{display:none}\n\n.eObAE_fxkJ{margin-top:-8px}\n\n.eObAE_esVF{min-height:48px}\n\n.eObAE_eTZq{position:relative}\n\n.eObAE_eTZq:after{background:linear-gradient(180deg,hsla(0,0%,100%,0),#fff);content:\"\";height:48px;left:0;position:absolute;top:0;width:100%}\n\n.eObAE_cVld{max-width:100%;width:calc(25% + 350px)}");
68
70
  },
69
- 'cardWrapper': 'ewlJT_eKXQ',
70
- 'itemCardInnerContainer': 'ewlJT_bwlc',
71
- 'metricsContainer': 'ewlJT_bqdH',
72
- 'itemCardToggleButtonWrapper': 'ewlJT_NpIG',
73
- 'metricNumberContext': 'ewlJT_eoBe',
74
- 'hiddenMetrics': 'ewlJT_fFDJ',
75
- 'itemBodyToggleButtonWrapper': 'ewlJT_fxkJ',
76
- 'itemBody': 'ewlJT_esVF',
77
- 'hiddenItemBody': 'ewlJT_eTZq',
78
- 'answerFrequencySummaryContainer': 'ewlJT_cVld'
71
+ 'cardWrapper': 'eObAE_eKXQ',
72
+ 'itemCardInnerContainer': 'eObAE_bwlc',
73
+ 'metricsContainer': 'eObAE_bqdH',
74
+ 'blankSpace': 'eObAE_eTaq',
75
+ 'itemCardToggleButtonWrapper': 'eObAE_NpIG',
76
+ 'metricNumberContext': 'eObAE_eoBe',
77
+ 'hiddenMetrics': 'eObAE_fFDJ',
78
+ 'itemBodyToggleButtonWrapper': 'eObAE_fxkJ',
79
+ 'itemBody': 'eObAE_esVF',
80
+ 'hiddenItemBody': 'eObAE_eTZq',
81
+ 'answerFrequencySummaryContainer': 'eObAE_cVld'
79
82
  };
83
+ var parser = new DOMParser();
84
+ var parsererrorElement = 'parsererror';
85
+ var parseType = 'text/html';
80
86
  var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles), _dec(_class = (_temp = _class2 = /*#__PURE__*/function (_Component) {
81
87
  (0, _inherits2.default)(NewItemAnalysis, _Component);
82
88
 
@@ -148,6 +154,34 @@ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
148
154
  }, _this.mapInteractionTypeToTranslation(interactionType));
149
155
  };
150
156
 
157
+ _this.isBlank = function (element) {
158
+ if (element.textContent) return false;
159
+ if (!element.hasAttribute('id')) return false;
160
+ var regex = new RegExp('^blank_.+$');
161
+ return regex.test(element.getAttribute('id'));
162
+ };
163
+
164
+ _this.enhanceItemBody = function (itemBody) {
165
+ var tempDoc = parser.parseFromString(itemBody, parseType);
166
+ var errorNode = tempDoc.querySelector(parsererrorElement);
167
+
168
+ if (errorNode) {
169
+ // eslint-disable-next-line no-console
170
+ console.error('Parsing failed: ', errorNode);
171
+ return itemBody;
172
+ }
173
+
174
+ Array.from(tempDoc.querySelectorAll('span')).filter(function (span) {
175
+ return _this.isBlank(span);
176
+ }).forEach(function (span, index) {
177
+ var newSpan = span.cloneNode();
178
+ newSpan.setAttribute('class', styles.blankSpace);
179
+ newSpan.innerHTML = "".concat(index + 1);
180
+ span.replaceWith(newSpan);
181
+ });
182
+ return tempDoc.querySelector('body').innerHTML;
183
+ };
184
+
151
185
  _this.renderRichContent = function (itemBody, itemBodyClass, itemId) {
152
186
  return /*#__PURE__*/_react.default.createElement(_uiFlex.Flex, {
153
187
  direction: "row",
@@ -238,6 +272,14 @@ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
238
272
  })));
239
273
  };
240
274
 
275
+ _this.shouldEnhanceItemBody = function () {
276
+ var _this$props = _this.props,
277
+ itemAnalysis = _this$props.itemAnalysis,
278
+ afsFlags = _this$props.afsFlags;
279
+ var metadata = itemAnalysis.metadata;
280
+ return afsFlags.fillInTheBlankEnabled && metadata.interaction_type === _quizCommon.RICH_FILL_BLANK_SLUG && metadata.item_body;
281
+ };
282
+
241
283
  return _this;
242
284
  }
243
285
 
@@ -278,10 +320,10 @@ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
278
320
  value: function render() {
279
321
  var _metadata$item_title;
280
322
 
281
- var _this$props = this.props,
282
- showFrequencyTable = _this$props.showFrequencyTable,
283
- itemAnalysis = _this$props.itemAnalysis,
284
- afsFlags = _this$props.afsFlags;
323
+ var _this$props2 = this.props,
324
+ showFrequencyTable = _this$props2.showFrequencyTable,
325
+ itemAnalysis = _this$props2.itemAnalysis,
326
+ afsFlags = _this$props2.afsFlags;
285
327
  var answer_summary = itemAnalysis.answer_summary,
286
328
  metadata = itemAnalysis.metadata,
287
329
  scores = itemAnalysis.scores;
@@ -290,6 +332,7 @@ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
290
332
  var metricsClass = (0, _classnames3.default)((0, _defineProperty2.default)({}, styles.hiddenMetrics, !this.state.metricsExpanded));
291
333
  var itemBodyClass = (0, _classnames3.default)(styles.itemBody, (0, _defineProperty2.default)({}, styles.hiddenItemBody, this.isBodyHigherThanContainer() && !this.state.bodyExpanded));
292
334
  var title = (_metadata$item_title = metadata.item_title) !== null && _metadata$item_title !== void 0 ? _metadata$item_title : (0, _formatMessage.default)('Untitled item');
335
+ var itemBodyEnhanced = this.shouldEnhanceItemBody() ? this.enhanceItemBody(metadata.item_body) : metadata.item_body;
293
336
  return /*#__PURE__*/_react.default.createElement(_index2.default, {
294
337
  className: styles.cardWrapper
295
338
  }, /*#__PURE__*/_react.default.createElement(_uiFlex.Flex, {
@@ -310,7 +353,7 @@ var NewItemAnalysis = (_dec = (0, _uiThemeable.themeable)(_theme.default, styles
310
353
  padding: "small xx-small none none",
311
354
  overflowY: "hidden",
312
355
  size: !this.state.bodyExpanded ? '60px' : void 0
313
- }, this.renderRichContent(metadata.item_body, itemBodyClass, itemId)))), /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, null, this.renderMetrics(scores, metricsClass)))), showFrequencyTable && this.renderAnswerSummaryTable(itemId, answer_summary, metricsClass, interactionType, afsFlags)));
356
+ }, this.renderRichContent(itemBodyEnhanced, itemBodyClass, itemId)))), /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, null, this.renderMetrics(scores, metricsClass)))), showFrequencyTable && this.renderAnswerSummaryTable(itemId, answer_summary, metricsClass, interactionType, afsFlags)));
314
357
  }
315
358
  }]);
316
359
  NewItemAnalysis.displayName = "NewItemAnalysis";
@@ -8,12 +8,17 @@ exports.default = generator;
8
8
  function generator(_ref) {
9
9
  var spacing = _ref.spacing,
10
10
  breakpoints = _ref.breakpoints,
11
- typography = _ref.typography;
11
+ typography = _ref.typography,
12
+ colors = _ref.colors;
12
13
  return {
13
14
  tabletBreakPoint: "max-width: ".concat(breakpoints.large),
14
15
  cardWrapperPadding: spacing.medium,
15
16
  viewPaddingRight: spacing.xxSmall,
16
17
  metricNumberContextFontSize: typography.fontSizeMedium,
17
- metricNumberContextFontWeight: typography.fontWeightNormal
18
+ metricNumberContextFontWeight: typography.fontWeightNormal,
19
+ blankBorderColor: colors.tiara,
20
+ blankBorderRadius: '14px',
21
+ blankMinWidth: '20px',
22
+ blankHeight: '20px'
18
23
  };
19
24
  }
@@ -123,7 +123,8 @@ var afsFlags = _propTypes.default.shape({
123
123
  categorizationEnabled: _propTypes.default.bool.isRequired,
124
124
  trueFalseEnabled: _propTypes.default.bool.isRequired,
125
125
  choiceEnabled: _propTypes.default.bool.isRequired,
126
- multiAnswerEnabled: _propTypes.default.bool.isRequired
126
+ multiAnswerEnabled: _propTypes.default.bool.isRequired,
127
+ fillInTheBlankEnabled: _propTypes.default.bool.isRequired
127
128
  });
128
129
 
129
130
  exports.afsFlags = afsFlags;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@instructure/quiz-core",
3
- "version": "20.4.2-rc.1+866bb7620",
3
+ "version": "20.4.2-rc.3+22ec8e38d",
4
4
  "license": "MIT",
5
5
  "description": "The Quiz React SDK by Instructure Inc.",
6
6
  "author": "Instructure, Inc. Engineering and Product Design",
@@ -44,11 +44,11 @@
44
44
  "@instructure/emotion": "^8.51.0",
45
45
  "@instructure/grading-utils": "^1.0.0",
46
46
  "@instructure/outcomes-ui": "^3.0.0",
47
- "@instructure/quiz-common": "20.4.2-rc.1+866bb7620",
48
- "@instructure/quiz-i18n": "20.4.2-rc.1+866bb7620",
49
- "@instructure/quiz-interactions": "20.4.2-rc.1+866bb7620",
50
- "@instructure/quiz-number-input": "20.4.2-rc.1+866bb7620",
51
- "@instructure/quiz-rce": "20.4.2-rc.1+866bb7620",
47
+ "@instructure/quiz-common": "20.4.2-rc.3+22ec8e38d",
48
+ "@instructure/quiz-i18n": "20.4.2-rc.3+22ec8e38d",
49
+ "@instructure/quiz-interactions": "20.4.2-rc.3+22ec8e38d",
50
+ "@instructure/quiz-number-input": "20.4.2-rc.3+22ec8e38d",
51
+ "@instructure/quiz-rce": "20.4.2-rc.3+22ec8e38d",
52
52
  "@instructure/ui-a11y-content": "^8.51.0",
53
53
  "@instructure/ui-alerts": "^8.51.0",
54
54
  "@instructure/ui-avatar": "^8.51.0",
@@ -112,7 +112,7 @@
112
112
  "file-saver": "~2.0.5",
113
113
  "humps": "^2.0.0",
114
114
  "immutable": "^3.8.1",
115
- "instructure-validations": "20.4.2-rc.1+866bb7620",
115
+ "instructure-validations": "20.4.2-rc.3+22ec8e38d",
116
116
  "ipaddr.js": "^1.5.4",
117
117
  "isomorphic-fetch": "^2.2.0",
118
118
  "isuuid": "^0.1.0",
@@ -163,7 +163,7 @@
163
163
  "intl": "^1.2.4",
164
164
  "jquery": "^2.2.3",
165
165
  "most-subject": "^5.3.0",
166
- "quiz-presets": "20.4.2-rc.1+866bb7620",
166
+ "quiz-presets": "20.4.2-rc.3+22ec8e38d",
167
167
  "react": "^16.8.6",
168
168
  "react-addons-test-utils": "^15.6.2",
169
169
  "react-dom": "^16.8.6",
@@ -179,5 +179,5 @@
179
179
  "publishConfig": {
180
180
  "access": "public"
181
181
  },
182
- "gitHead": "866bb7620e430ba716d2c6ab9400751884366666"
182
+ "gitHead": "22ec8e38d00de672820ed31af18d8936f9d54d6f"
183
183
  }