@instructure/quiz-core 20.20.1-snapshot.3 → 20.20.1-snapshot.34
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 +115 -0
- package/es/banks/components/AddToBankModal/presenter.js +10 -11
- package/es/building/components/resources/ActionButtons/presenter.js +3 -2
- package/es/building/components/resources/quiz/instructions/Edit/presenter.js +5 -5
- package/es/building/components/resources/quizEntry/QuizEntryEdit/presenter.js +5 -7
- package/es/common/components/layout/sidebar/Sidebar/index.js +5 -3
- package/es/common/components/layout/sidebar/SidebarItem/presenter.js +5 -2
- package/es/common/components/layout/sidebar/Stimulus/presenter.js +3 -1
- package/es/common/components/resources/quiz/AddContent/Button/index.js +2 -0
- package/es/common/components/resources/stimulus/StimulusEdit/presenter.js +5 -7
- package/es/common/components/shared/overlay/index.js +3 -1
- package/es/common/kinesis/StreamQueue.js +8 -2
- package/es/common/util/clickHandlers.js +19 -0
- package/es/moderating/components/resources/AccommodationsModal/ReduceAnswerChoicesSettings/index.js +78 -0
- package/es/moderating/components/resources/ModerateTableRow/presenter.js +0 -3
- package/es/moderating/components/sidebar/ModerateTray/presenter.js +2 -1
- package/es/moderating/components/sidebar/ResetQuiz/index.js +15 -8
- package/es/moderating/components/sidebar/ResetQuiz/presenter.js +20 -4
- package/lib/banks/components/AddToBankModal/presenter.js +9 -10
- package/lib/building/components/resources/ActionButtons/presenter.js +2 -1
- package/lib/building/components/resources/quiz/instructions/Edit/presenter.js +5 -5
- package/lib/building/components/resources/quizEntry/QuizEntryEdit/presenter.js +5 -7
- package/lib/common/components/layout/sidebar/Sidebar/index.js +4 -2
- package/lib/common/components/layout/sidebar/SidebarItem/presenter.js +5 -2
- package/lib/common/components/layout/sidebar/Stimulus/presenter.js +3 -1
- package/lib/common/components/resources/quiz/AddContent/Button/index.js +2 -0
- package/lib/common/components/resources/stimulus/StimulusEdit/presenter.js +5 -7
- package/lib/common/components/shared/overlay/index.js +3 -1
- package/lib/common/kinesis/StreamQueue.js +8 -2
- package/lib/common/util/clickHandlers.js +26 -0
- package/lib/moderating/components/resources/AccommodationsModal/ReduceAnswerChoicesSettings/index.js +88 -0
- package/lib/moderating/components/resources/ModerateTableRow/presenter.js +0 -3
- package/lib/moderating/components/sidebar/ModerateTray/presenter.js +2 -1
- package/lib/moderating/components/sidebar/ResetQuiz/index.js +15 -8
- package/lib/moderating/components/sidebar/ResetQuiz/presenter.js +20 -4
- package/package.json +10 -10
|
@@ -9,6 +9,8 @@ import PropTypes from 'prop-types';
|
|
|
9
9
|
import t from '@instructure/quiz-i18n/es/format-message';
|
|
10
10
|
import { Button } from '@instructure/ui-buttons';
|
|
11
11
|
import { Heading } from '@instructure/ui-heading';
|
|
12
|
+
import { Tooltip } from '@instructure/ui-tooltip';
|
|
13
|
+
import { AccessibleContent } from '@instructure/ui-a11y-content';
|
|
12
14
|
export var ResetQuiz = /*#__PURE__*/function (_Component) {
|
|
13
15
|
_inherits(ResetQuiz, _Component);
|
|
14
16
|
var _super = _createSuper(ResetQuiz);
|
|
@@ -57,18 +59,31 @@ export var ResetQuiz = /*#__PURE__*/function (_Component) {
|
|
|
57
59
|
key: "render",
|
|
58
60
|
value: function render() {
|
|
59
61
|
if (!this.props.reopenOn) return null;
|
|
60
|
-
|
|
62
|
+
var _this$props = this.props,
|
|
63
|
+
reopenOverride = _this$props.reopenOverride,
|
|
64
|
+
sessionId = _this$props.sessionId;
|
|
65
|
+
if (!sessionId) {
|
|
61
66
|
return /*#__PURE__*/React.createElement("span", null, t('No attempts have been recorded yet.'));
|
|
62
67
|
}
|
|
63
|
-
|
|
68
|
+
var reOpen = /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Heading, {
|
|
64
69
|
level: "h3"
|
|
65
70
|
}, t('Manage current attempt')), this.props.reopenOn ? /*#__PURE__*/React.createElement(Button, {
|
|
66
71
|
ref: this.reopenButtonRef,
|
|
67
72
|
onClick: this.reopenQuizSession,
|
|
68
|
-
disabled: !this.props.isComplete,
|
|
73
|
+
disabled: !this.props.isComplete || reopenOverride,
|
|
69
74
|
margin: "small none",
|
|
70
75
|
"data-automation": "sdk-reopen-quiz-button"
|
|
71
76
|
}, t('Reopen')) : null);
|
|
77
|
+
if (reopenOverride) {
|
|
78
|
+
var text = t('One Question at Time Quizzes with Backtracking disabled cannot be reopened.');
|
|
79
|
+
return /*#__PURE__*/React.createElement(AccessibleContent, {
|
|
80
|
+
alt: text
|
|
81
|
+
}, /*#__PURE__*/React.createElement(Tooltip, {
|
|
82
|
+
renderTip: text,
|
|
83
|
+
placement: "start"
|
|
84
|
+
}, reOpen));
|
|
85
|
+
}
|
|
86
|
+
return reOpen;
|
|
72
87
|
}
|
|
73
88
|
}]);
|
|
74
89
|
ResetQuiz.displayName = "ResetQuiz";
|
|
@@ -81,6 +96,7 @@ ResetQuiz.propTypes = {
|
|
|
81
96
|
reopenQuizSession: PropTypes.func.isRequired,
|
|
82
97
|
reopenOn: PropTypes.bool.isRequired,
|
|
83
98
|
screenreaderNotification: PropTypes.func.isRequired,
|
|
84
|
-
withConfirm: PropTypes.func.isRequired
|
|
99
|
+
withConfirm: PropTypes.func.isRequired,
|
|
100
|
+
reopenOverride: PropTypes.bool.isRequired
|
|
85
101
|
};
|
|
86
102
|
export default ResetQuiz;
|
|
@@ -30,19 +30,16 @@ var _uiFlex = require("@instructure/ui-flex");
|
|
|
30
30
|
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
|
|
31
31
|
var _quizCommon = require("@instructure/quiz-common");
|
|
32
32
|
var _featureCheck = require("../../../common/util/featureCheck.js");
|
|
33
|
-
var _ref2 = /*#__PURE__*/_react.default.createElement(
|
|
34
|
-
color: "success"
|
|
35
|
-
});
|
|
36
|
-
var _ref3 = /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, {
|
|
33
|
+
var _ref2 = /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, {
|
|
37
34
|
padding: "0 small 0 0"
|
|
38
35
|
}, /*#__PURE__*/_react.default.createElement(_uiIcons.IconNoLine, {
|
|
39
36
|
color: "error",
|
|
40
37
|
size: "small"
|
|
41
38
|
}));
|
|
42
|
-
var
|
|
39
|
+
var _ref3 = /*#__PURE__*/_react.default.createElement(_uiIcons.IconWarningLine, {
|
|
43
40
|
color: "warning"
|
|
44
41
|
});
|
|
45
|
-
var
|
|
42
|
+
var _ref4 = /*#__PURE__*/_react.default.createElement("br", null);
|
|
46
43
|
var AddToBankModal = /*#__PURE__*/function (_Component) {
|
|
47
44
|
(0, _inherits2.default)(AddToBankModal, _Component);
|
|
48
45
|
var _super = (0, _createSuper2.default)(AddToBankModal);
|
|
@@ -219,9 +216,11 @@ var AddToBankModal = /*#__PURE__*/function (_Component) {
|
|
|
219
216
|
renderTitle: (0, _formatMessage.default)('Checking content shareability...')
|
|
220
217
|
}), "\xA0", (0, _formatMessage.default)('Validating content...'));
|
|
221
218
|
} else if (this.state.contentShareable === 'true') {
|
|
222
|
-
|
|
219
|
+
// No message needed. The API call to check shareability is very fast in most cases,
|
|
220
|
+
// so the user may be distracted by a message here.
|
|
221
|
+
content = null;
|
|
223
222
|
} else if (this.state.contentShareable === 'false') {
|
|
224
|
-
content = /*#__PURE__*/_react.default.createElement(_uiFlex.Flex, null,
|
|
223
|
+
content = /*#__PURE__*/_react.default.createElement(_uiFlex.Flex, null, _ref2, /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, {
|
|
225
224
|
shouldShrink: true
|
|
226
225
|
}, /*#__PURE__*/_react.default.createElement(_uiText.Text, {
|
|
227
226
|
color: "danger"
|
|
@@ -229,7 +228,7 @@ var AddToBankModal = /*#__PURE__*/function (_Component) {
|
|
|
229
228
|
} else {
|
|
230
229
|
content = /*#__PURE__*/_react.default.createElement(_uiText.Text, {
|
|
231
230
|
color: "warning"
|
|
232
|
-
},
|
|
231
|
+
}, _ref3, "\xA0", (0, _formatMessage.default)('There was an error attempting to validate shareability.'));
|
|
233
232
|
}
|
|
234
233
|
return /*#__PURE__*/_react.default.createElement(_uiView.View, {
|
|
235
234
|
as: "div",
|
|
@@ -251,7 +250,7 @@ var AddToBankModal = /*#__PURE__*/function (_Component) {
|
|
|
251
250
|
}), /*#__PURE__*/_react.default.createElement(_uiRadioInput.RadioInput, {
|
|
252
251
|
value: "new",
|
|
253
252
|
label: (0, _formatMessage.default)('New item bank')
|
|
254
|
-
})),
|
|
253
|
+
})), _ref4, this.renderBankTypeContent(), this.renderContentShareabilityMessage());
|
|
255
254
|
}
|
|
256
255
|
}, {
|
|
257
256
|
key: "render",
|
|
@@ -78,8 +78,9 @@ var ActionButtons = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.defa
|
|
|
78
78
|
key: "render",
|
|
79
79
|
value: function render() {
|
|
80
80
|
var hideClass = !this.props.shouldRenderEdit ? 'hide' : '';
|
|
81
|
+
var parentDivClass = "buttons ".concat(_quizCommon.END_EDITING_TRIGGER_CLASSNAME);
|
|
81
82
|
return (0, _emotion.jsx)("div", {
|
|
82
|
-
className:
|
|
83
|
+
className: parentDivClass,
|
|
83
84
|
tabIndex: "-1",
|
|
84
85
|
onFocus: this.onButtonFocus,
|
|
85
86
|
css: this.props.styles.buttons
|
|
@@ -15,7 +15,7 @@ var _uiButtons = require("@instructure/ui-buttons");
|
|
|
15
15
|
var _emotion = require("@instructure/emotion");
|
|
16
16
|
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
|
|
17
17
|
var _CustomPropTypes = _interopRequireDefault(require("../../../../../../common/util/CustomPropTypes.js"));
|
|
18
|
-
var
|
|
18
|
+
var _clickHandlers = require("../../../../../../common/util/clickHandlers.js");
|
|
19
19
|
var _quizCommon = require("@instructure/quiz-common");
|
|
20
20
|
var _quizRce = require("@instructure/quiz-rce");
|
|
21
21
|
var _styles = _interopRequireDefault(require("./styles.js"));
|
|
@@ -44,10 +44,10 @@ var QuizInstructionsEdit = (_dec = (0, _emotion.withStyle)(_styles.default, _the
|
|
|
44
44
|
}, {
|
|
45
45
|
key: "ignoreClickOutsideIf",
|
|
46
46
|
value: function ignoreClickOutsideIf(e) {
|
|
47
|
-
var
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
var _checkClickedNode = (0, _clickHandlers.checkClickedNode)(e, this.props.appContainer),
|
|
48
|
+
isEndEditingTrigger = _checkClickedNode.isEndEditingTrigger,
|
|
49
|
+
outsideApp = _checkClickedNode.outsideApp;
|
|
50
|
+
return outsideApp || !isEndEditingTrigger;
|
|
51
51
|
}
|
|
52
52
|
}, {
|
|
53
53
|
key: "render",
|
|
@@ -21,10 +21,10 @@ var _first = _interopRequireDefault(require("lodash/first"));
|
|
|
21
21
|
var _emotion = require("@instructure/emotion");
|
|
22
22
|
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
|
|
23
23
|
var _CustomPropTypes = _interopRequireDefault(require("../../../../../common/util/CustomPropTypes.js"));
|
|
24
|
-
var _ElementsForSelectors = _interopRequireDefault(require("../../../../../common/util/ElementsForSelectors.js"));
|
|
25
24
|
var _index = _interopRequireDefault(require("../../../../../banks/components/AddToBankModal/index.js"));
|
|
26
25
|
var _index2 = _interopRequireDefault(require("../../../../../common/components/shared/drag_and_drop/DragAndDropZone/index.js"));
|
|
27
26
|
var _componentWithOutsideClickEmotion = _interopRequireDefault(require("../../../../../common/components/shared/functionality/componentWithOutsideClickEmotion.js"));
|
|
27
|
+
var _clickHandlers = require("../../../../../common/util/clickHandlers.js");
|
|
28
28
|
var _index3 = _interopRequireDefault(require("./Header/index.js"));
|
|
29
29
|
var _index4 = _interopRequireDefault(require("./Footer/index.js"));
|
|
30
30
|
var _quizCommon = require("@instructure/quiz-common");
|
|
@@ -302,12 +302,10 @@ var QuizEntryEdit = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.defa
|
|
|
302
302
|
}, {
|
|
303
303
|
key: "ignoreClickOutsideIf",
|
|
304
304
|
value: function ignoreClickOutsideIf(e) {
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
});
|
|
310
|
-
return this.props.isOccluded || outsideApp;
|
|
305
|
+
var _checkClickedNode = (0, _clickHandlers.checkClickedNode)(e, this.props.appContainer),
|
|
306
|
+
isEndEditingTrigger = _checkClickedNode.isEndEditingTrigger,
|
|
307
|
+
outsideApp = _checkClickedNode.outsideApp;
|
|
308
|
+
return this.props.isOccluded || outsideApp || !isEndEditingTrigger;
|
|
311
309
|
}
|
|
312
310
|
}, {
|
|
313
311
|
key: "isValid",
|
|
@@ -112,7 +112,8 @@ var Sidebar = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.default),
|
|
|
112
112
|
return;
|
|
113
113
|
}
|
|
114
114
|
return (0, _emotion.jsx)("div", {
|
|
115
|
-
css: this.props.styles.sidebar.actionableInfo
|
|
115
|
+
css: this.props.styles.sidebar.actionableInfo,
|
|
116
|
+
className: _quizCommon.END_EDITING_TRIGGER_CLASSNAME
|
|
116
117
|
}, (0, _emotion.jsx)(_uiLink.Link, {
|
|
117
118
|
href: "#",
|
|
118
119
|
margin: "small",
|
|
@@ -134,7 +135,8 @@ var Sidebar = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.default),
|
|
|
134
135
|
return;
|
|
135
136
|
}
|
|
136
137
|
return (0, _emotion.jsx)("div", {
|
|
137
|
-
css: this.props.styles.sidebar.actionableInfo
|
|
138
|
+
css: this.props.styles.sidebar.actionableInfo,
|
|
139
|
+
className: _quizCommon.END_EDITING_TRIGGER_CLASSNAME
|
|
138
140
|
}, (0, _emotion.jsx)(_uiLink.Link, {
|
|
139
141
|
href: "#",
|
|
140
142
|
margin: "small",
|
|
@@ -21,6 +21,7 @@ var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/f
|
|
|
21
21
|
var _quizRce = require("@instructure/quiz-rce");
|
|
22
22
|
var _styles = _interopRequireDefault(require("./styles.js"));
|
|
23
23
|
var _theme = _interopRequireDefault(require("./theme.js"));
|
|
24
|
+
var _quizCommon = require("@instructure/quiz-common");
|
|
24
25
|
var _dec, _class, _SidebarItem;
|
|
25
26
|
/** @jsx jsx */
|
|
26
27
|
var SidebarItem = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.default), _dec(_class = (_SidebarItem = /*#__PURE__*/function (_Component) {
|
|
@@ -117,7 +118,8 @@ var SidebarItem = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.defaul
|
|
|
117
118
|
key: "renderClosed",
|
|
118
119
|
value: function renderClosed() {
|
|
119
120
|
return (0, _emotion.jsx)("div", {
|
|
120
|
-
css: this.props.styles.sidebarItem
|
|
121
|
+
css: this.props.styles.sidebarItem,
|
|
122
|
+
className: _quizCommon.END_EDITING_TRIGGER_CLASSNAME
|
|
121
123
|
}, this.renderButton());
|
|
122
124
|
}
|
|
123
125
|
}, {
|
|
@@ -128,8 +130,9 @@ var SidebarItem = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.defaul
|
|
|
128
130
|
itemName = _this$props3.itemName,
|
|
129
131
|
pointsPossible = _this$props3.pointsPossible,
|
|
130
132
|
styles = _this$props3.styles;
|
|
133
|
+
var parentDivClass = "sidebarIsOpen ".concat(_quizCommon.END_EDITING_TRIGGER_CLASSNAME);
|
|
131
134
|
return (0, _emotion.jsx)("div", {
|
|
132
|
-
className:
|
|
135
|
+
className: parentDivClass,
|
|
133
136
|
css: styles.sidebarItem
|
|
134
137
|
}, (0, _emotion.jsx)(_uiFlex.Flex, {
|
|
135
138
|
justifyItems: "space-between"
|
|
@@ -23,6 +23,7 @@ var _index3 = _interopRequireDefault(require("./Summary/index.js"));
|
|
|
23
23
|
var _styles = _interopRequireDefault(require("./styles.js"));
|
|
24
24
|
var _theme = _interopRequireDefault(require("./theme.js"));
|
|
25
25
|
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
|
|
26
|
+
var _quizCommon = require("@instructure/quiz-common");
|
|
26
27
|
var _dec, _class, _SidebarStimulus;
|
|
27
28
|
/** @jsx jsx */
|
|
28
29
|
var DISPLAY_AS_SUMMARY_LIMIT = 5;
|
|
@@ -90,7 +91,8 @@ var SidebarStimulus = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.de
|
|
|
90
91
|
margin: "small",
|
|
91
92
|
forceButtonRole: false,
|
|
92
93
|
onClick: this.scrollToItem,
|
|
93
|
-
renderIcon: _ref
|
|
94
|
+
renderIcon: _ref,
|
|
95
|
+
className: _quizCommon.END_EDITING_TRIGGER_CLASSNAME
|
|
94
96
|
}, (0, _emotion.jsx)(_uiA11yContent.ScreenReaderContent, null, (0, _formatMessage.default)('Navigate to stimulus at position { displayPosition }', {
|
|
95
97
|
displayPosition: displayPosition
|
|
96
98
|
})));
|
|
@@ -18,6 +18,7 @@ var _emotion = require("@instructure/emotion");
|
|
|
18
18
|
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
|
|
19
19
|
var _styles = _interopRequireDefault(require("./styles.js"));
|
|
20
20
|
var _theme = _interopRequireDefault(require("./theme.js"));
|
|
21
|
+
var _quizCommon = require("@instructure/quiz-common");
|
|
21
22
|
var _dec, _class, _AddContentButton;
|
|
22
23
|
/** @jsx jsx */
|
|
23
24
|
var AddContentButton = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.default), _dec(_class = (_AddContentButton = /*#__PURE__*/function (_Component) {
|
|
@@ -67,6 +68,7 @@ var AddContentButton = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.d
|
|
|
67
68
|
key: "renderNonStimulus",
|
|
68
69
|
value: function renderNonStimulus() {
|
|
69
70
|
return (0, _emotion.jsx)("div", {
|
|
71
|
+
className: _quizCommon.END_EDITING_TRIGGER_CLASSNAME,
|
|
70
72
|
css: this.props.styles.newItemButtonHolder
|
|
71
73
|
}, (0, _emotion.jsx)("button", {
|
|
72
74
|
ref: this.storeButtonElemRef,
|
|
@@ -26,7 +26,7 @@ var _index = _interopRequireDefault(require("../../../../../banks/components/Add
|
|
|
26
26
|
var _index2 = _interopRequireDefault(require("../../../../../building/components/resources/AddToBankOptions/index.js"));
|
|
27
27
|
var _index3 = _interopRequireDefault(require("../../WarningWrapper/index.js"));
|
|
28
28
|
var _CustomPropTypes = _interopRequireDefault(require("../../../../../common/util/CustomPropTypes.js"));
|
|
29
|
-
var
|
|
29
|
+
var _clickHandlers = require("../../../../../common/util/clickHandlers.js");
|
|
30
30
|
var _index4 = _interopRequireDefault(require("../StimulusShowInfo/index.js"));
|
|
31
31
|
var _index5 = _interopRequireDefault(require("../StimulusEditInfo/index.js"));
|
|
32
32
|
var _componentWithOutsideClickEmotion = _interopRequireDefault(require("../../../shared/functionality/componentWithOutsideClickEmotion.js"));
|
|
@@ -293,12 +293,10 @@ var StimulusEdit = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.defau
|
|
|
293
293
|
}, {
|
|
294
294
|
key: "ignoreClickOutsideIf",
|
|
295
295
|
value: function ignoreClickOutsideIf(e) {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
});
|
|
301
|
-
return outsideApp;
|
|
296
|
+
var _checkClickedNode = (0, _clickHandlers.checkClickedNode)(e, this.props.appContainer),
|
|
297
|
+
isEndEditingTrigger = _checkClickedNode.isEndEditingTrigger,
|
|
298
|
+
outsideApp = _checkClickedNode.outsideApp;
|
|
299
|
+
return outsideApp || !isEndEditingTrigger;
|
|
302
300
|
}
|
|
303
301
|
}, {
|
|
304
302
|
key: "afterSubmit",
|
|
@@ -15,6 +15,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
15
15
|
var _emotion = require("@instructure/emotion");
|
|
16
16
|
var _styles = _interopRequireDefault(require("./styles.js"));
|
|
17
17
|
var _theme = _interopRequireDefault(require("./theme.js"));
|
|
18
|
+
var _quizCommon = require("@instructure/quiz-common");
|
|
18
19
|
var _dec, _class, _Overlay;
|
|
19
20
|
/** @jsx jsx */
|
|
20
21
|
/* eslint "jsx-a11y/click-events-have-key-events": "warn" */
|
|
@@ -37,9 +38,10 @@ var Overlay = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.default),
|
|
|
37
38
|
if (this.props.hideOverlay) {
|
|
38
39
|
return null;
|
|
39
40
|
}
|
|
41
|
+
var overlayClass = "overlay ".concat(_quizCommon.END_EDITING_TRIGGER_CLASSNAME);
|
|
40
42
|
return (0, _emotion.jsx)("div", {
|
|
41
43
|
role: "presentation",
|
|
42
|
-
className:
|
|
44
|
+
className: overlayClass,
|
|
43
45
|
css: this.props.styles.overlay,
|
|
44
46
|
onClick: this.props.onClick,
|
|
45
47
|
"data-automation": "sdk-overlay"
|
|
@@ -12,6 +12,8 @@ var ERROR_STATE = 'error';
|
|
|
12
12
|
var WAITING_STATE = 'waiting';
|
|
13
13
|
var SENDING_STATE = 'sending';
|
|
14
14
|
var SENT_STATE = 'sent';
|
|
15
|
+
var REACHED_MAX_FAILURES = 'reached_max_failures';
|
|
16
|
+
var MAX_FAILED_ATTEMPTS = 3;
|
|
15
17
|
var StreamQueue = /*#__PURE__*/function () {
|
|
16
18
|
function StreamQueue(_ref) {
|
|
17
19
|
var config = _ref.config,
|
|
@@ -27,7 +29,7 @@ var StreamQueue = /*#__PURE__*/function () {
|
|
|
27
29
|
accessKeyId: kinesis.config.credentials.accessKeyId,
|
|
28
30
|
secretAccessKey: kinesis.config.credentials.secretAccessKey,
|
|
29
31
|
sessionToken: kinesis.config.credentials.sessionToken,
|
|
30
|
-
region: kinesis.config.
|
|
32
|
+
region: kinesis.config.region,
|
|
31
33
|
service: 'execute-api'
|
|
32
34
|
});
|
|
33
35
|
this._addPage();
|
|
@@ -122,9 +124,13 @@ var StreamQueue = /*#__PURE__*/function () {
|
|
|
122
124
|
_this.kinesis.putRecords(params, function (err, data) {
|
|
123
125
|
if (err) {
|
|
124
126
|
_this.pageQueue[i].status = ERROR_STATE;
|
|
127
|
+
_this.pageQueue[i].errorCount = (_this.pageQueue[i].errorCount || 0) + 1;
|
|
125
128
|
// eslint-disable-next-line no-console
|
|
126
129
|
console.error("KINESIS STREAM ".concat(_this.config.stream, " ERROR: "), err);
|
|
127
|
-
_this.
|
|
130
|
+
if (_this.pageQueue[i].errorCount >= MAX_FAILED_ATTEMPTS) {
|
|
131
|
+
_this.pageQueue[i].status = REACHED_MAX_FAILURES;
|
|
132
|
+
_this._sendRecordsViaProxy(params);
|
|
133
|
+
}
|
|
128
134
|
} else {
|
|
129
135
|
_this.pageQueue[i].status = SENT_STATE;
|
|
130
136
|
// eslint-disable-next-line no-console
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.checkClickedNode = checkClickedNode;
|
|
8
|
+
var _ElementsForSelectors = _interopRequireDefault(require("./ElementsForSelectors.js"));
|
|
9
|
+
var _quizCommon = require("@instructure/quiz-common");
|
|
10
|
+
function checkClickedNode(e, appContainer) {
|
|
11
|
+
// Need to iterate over the appNodes since Gauge and lti have a different index for the sdk node
|
|
12
|
+
var appNodes = (0, _ElementsForSelectors.default)(appContainer);
|
|
13
|
+
var outsideApp = appNodes.every(function (node) {
|
|
14
|
+
return node && !node.contains(e.target);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
// checking if the click was on an element that should end editing
|
|
18
|
+
var endEditingNodes = (0, _ElementsForSelectors.default)(".".concat(_quizCommon.END_EDITING_TRIGGER_CLASSNAME));
|
|
19
|
+
var isEndEditingTrigger = endEditingNodes.some(function (node) {
|
|
20
|
+
return node && node.contains(e.target);
|
|
21
|
+
});
|
|
22
|
+
return {
|
|
23
|
+
isEndEditingTrigger: isEndEditingTrigger,
|
|
24
|
+
outsideApp: outsideApp
|
|
25
|
+
};
|
|
26
|
+
}
|
package/lib/moderating/components/resources/AccommodationsModal/ReduceAnswerChoicesSettings/index.js
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = exports.ReduceAnswerChoicesSettings = void 0;
|
|
9
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
12
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
13
|
+
var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/createSuper"));
|
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
15
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
16
|
+
var _uiCheckbox = require("@instructure/ui-checkbox");
|
|
17
|
+
var _uiButtons = require("@instructure/ui-buttons");
|
|
18
|
+
var _uiIcons = require("@instructure/ui-icons");
|
|
19
|
+
var _uiTooltip = require("@instructure/ui-tooltip");
|
|
20
|
+
var _uiView = require("@instructure/ui-view");
|
|
21
|
+
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
|
|
22
|
+
var ReduceAnswerChoicesSettings = /*#__PURE__*/function (_Component) {
|
|
23
|
+
(0, _inherits2.default)(ReduceAnswerChoicesSettings, _Component);
|
|
24
|
+
var _super = (0, _createSuper2.default)(ReduceAnswerChoicesSettings);
|
|
25
|
+
function ReduceAnswerChoicesSettings() {
|
|
26
|
+
var _this;
|
|
27
|
+
(0, _classCallCheck2.default)(this, ReduceAnswerChoicesSettings);
|
|
28
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
29
|
+
args[_key] = arguments[_key];
|
|
30
|
+
}
|
|
31
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
32
|
+
_this.onChangeReduceChoices = function () {
|
|
33
|
+
var update = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, _this.props.courseAccommodationSettings), {}, {
|
|
34
|
+
reduceChoicesEnabled: !_this.props.courseAccommodationSettings.reduceChoicesEnabled
|
|
35
|
+
});
|
|
36
|
+
_this.props.onChange(update);
|
|
37
|
+
};
|
|
38
|
+
_this.renderSettingLabel = function (label, tooltip) {
|
|
39
|
+
return /*#__PURE__*/_react.default.createElement("span", null, label, /*#__PURE__*/_react.default.createElement(_uiTooltip.Tooltip, {
|
|
40
|
+
color: "primary-inverse",
|
|
41
|
+
renderTip: tooltip,
|
|
42
|
+
placement: "bottom",
|
|
43
|
+
on: ['click', 'hover', 'focus']
|
|
44
|
+
}, /*#__PURE__*/_react.default.createElement(_uiButtons.IconButton, {
|
|
45
|
+
renderIcon: _uiIcons.IconInfoLine,
|
|
46
|
+
color: "secondary",
|
|
47
|
+
size: "small",
|
|
48
|
+
shape: "circle",
|
|
49
|
+
withBackground: false,
|
|
50
|
+
withBorder: false,
|
|
51
|
+
interaction: "readonly",
|
|
52
|
+
screenReaderLabel: tooltip
|
|
53
|
+
})));
|
|
54
|
+
};
|
|
55
|
+
return _this;
|
|
56
|
+
}
|
|
57
|
+
(0, _createClass2.default)(ReduceAnswerChoicesSettings, [{
|
|
58
|
+
key: "render",
|
|
59
|
+
value: function render() {
|
|
60
|
+
return /*#__PURE__*/_react.default.createElement(_uiView.View, {
|
|
61
|
+
display: "block",
|
|
62
|
+
margin: "medium none"
|
|
63
|
+
}, /*#__PURE__*/_react.default.createElement(_uiCheckbox.Checkbox, {
|
|
64
|
+
variant: "toggle",
|
|
65
|
+
checked: this.props.courseAccommodationSettings.reduceChoicesEnabled || false,
|
|
66
|
+
label: this.renderSettingLabel((0, _formatMessage.default)('Reduced answer choices'), (0, _formatMessage.default)('Removes one incorrect answer from all multiple-choice questions that have 4 or more answer choices.')),
|
|
67
|
+
onChange: this.onChangeReduceChoices,
|
|
68
|
+
value: "reduce_choices_enabled"
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
}]);
|
|
72
|
+
ReduceAnswerChoicesSettings.displayName = "ReduceAnswerChoicesSettings";
|
|
73
|
+
return ReduceAnswerChoicesSettings;
|
|
74
|
+
}(_react.Component);
|
|
75
|
+
exports.ReduceAnswerChoicesSettings = ReduceAnswerChoicesSettings;
|
|
76
|
+
ReduceAnswerChoicesSettings.propTypes = {
|
|
77
|
+
courseAccommodationSettings: _propTypes.default.shape({
|
|
78
|
+
reduceChoicesEnabled: _propTypes.default.bool
|
|
79
|
+
}).isRequired,
|
|
80
|
+
onChange: _propTypes.default.func.isRequired
|
|
81
|
+
};
|
|
82
|
+
ReduceAnswerChoicesSettings.defaultProps = {
|
|
83
|
+
courseAccommodationSettings: {
|
|
84
|
+
reduceChoicesEnabled: false
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
var _default = ReduceAnswerChoicesSettings;
|
|
88
|
+
exports.default = _default;
|
|
@@ -268,9 +268,6 @@ var ModerateTableRow = (_dec = (0, _emotion.withStyle)(_styles.default, _theme.d
|
|
|
268
268
|
}, (0, _formatMessage.default)('{ name }: { value }', elem)));
|
|
269
269
|
}));
|
|
270
270
|
}
|
|
271
|
-
|
|
272
|
-
// Display the Accommodations and the button in a flex container with reverse order
|
|
273
|
-
// so that the screen reader will read the accommodations first, and then the button
|
|
274
271
|
return (0, _emotion.jsx)(_uiTable.Table.Cell, {
|
|
275
272
|
"data-automation": "sdk-moderate-accommodations-text"
|
|
276
273
|
}, displayContent);
|
|
@@ -22,6 +22,7 @@ var _uiTruncateText = require("@instructure/ui-truncate-text");
|
|
|
22
22
|
var _uiModal = require("@instructure/ui-modal");
|
|
23
23
|
var _quizCommon = require("@instructure/quiz-common");
|
|
24
24
|
var _uiA11yContent = require("@instructure/ui-a11y-content");
|
|
25
|
+
var _featureCheck = require("../../../../common/util/featureCheck.js");
|
|
25
26
|
var ModerateTray = /*#__PURE__*/function (_Component) {
|
|
26
27
|
(0, _inherits2.default)(ModerateTray, _Component);
|
|
27
28
|
var _super = (0, _createSuper2.default)(ModerateTray);
|
|
@@ -158,7 +159,7 @@ var ModerateTray = /*#__PURE__*/function (_Component) {
|
|
|
158
159
|
}, this.renderTitleAndCloseButton()), /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, {
|
|
159
160
|
shouldGrow: true,
|
|
160
161
|
padding: "0 medium"
|
|
161
|
-
}, this.renderChildren()), /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, null, this.renderFooter())));
|
|
162
|
+
}, this.renderChildren()), (0, _featureCheck.featureOn)('add_time_to_existing_quiz_sessions') && /*#__PURE__*/_react.default.createElement(_uiFlex.Flex.Item, null, this.renderFooter())));
|
|
162
163
|
}
|
|
163
164
|
}]);
|
|
164
165
|
ModerateTray.displayName = "ModerateTray";
|
|
@@ -15,20 +15,27 @@ var _quizSessions = require("../../../api/quizSessions.js");
|
|
|
15
15
|
var _quizSessions2 = require("../../../../common/selectors/quizSessions.js");
|
|
16
16
|
function mapStateToProps(state) {
|
|
17
17
|
var quizSessionIds = state.getIn(['moderation', 'selectedSessions']);
|
|
18
|
-
var
|
|
18
|
+
var quizSessions = (0, _quizSessions2.getQuizSessionsByIds)(state, quizSessionIds).filter(function (qs) {
|
|
19
19
|
return qs.isLoaded() && !qs.pending();
|
|
20
20
|
}).sort(function (qs1, qs2) {
|
|
21
21
|
return qs2.id - qs1.id;
|
|
22
22
|
});
|
|
23
|
-
var
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
var quizSessionId,
|
|
24
|
+
quizSession,
|
|
25
|
+
reopenOverride = false;
|
|
26
|
+
if (quizSessions.size > 0) {
|
|
27
|
+
quizSession = quizSessions.get(0);
|
|
28
|
+
var _ref = [quizSession.allowBacktracking, quizSession.isOneQuestionAtATime()],
|
|
29
|
+
allowBacktracking = _ref[0],
|
|
30
|
+
isOneQuestionAtATime = _ref[1];
|
|
31
|
+
quizSessionId = quizSession.id;
|
|
32
|
+
reopenOverride = !allowBacktracking && isOneQuestionAtATime;
|
|
27
33
|
}
|
|
28
34
|
return {
|
|
29
|
-
sessionId:
|
|
30
|
-
isComplete:
|
|
31
|
-
reopenOn: (0, _featureCheck.featureOn)('reopen_session')
|
|
35
|
+
sessionId: quizSessionId || null,
|
|
36
|
+
isComplete: quizSession ? !(quizSession.inProgress() || quizSession.reopeningGraded()) : false,
|
|
37
|
+
reopenOn: (0, _featureCheck.featureOn)('reopen_session'),
|
|
38
|
+
reopenOverride: reopenOverride
|
|
32
39
|
};
|
|
33
40
|
}
|
|
34
41
|
var _default = (0, _reactRedux.connect)(mapStateToProps, {
|
|
@@ -17,6 +17,8 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
17
17
|
var _formatMessage = _interopRequireDefault(require("@instructure/quiz-i18n/es/format-message"));
|
|
18
18
|
var _uiButtons = require("@instructure/ui-buttons");
|
|
19
19
|
var _uiHeading = require("@instructure/ui-heading");
|
|
20
|
+
var _uiTooltip = require("@instructure/ui-tooltip");
|
|
21
|
+
var _uiA11yContent = require("@instructure/ui-a11y-content");
|
|
20
22
|
var ResetQuiz = /*#__PURE__*/function (_Component) {
|
|
21
23
|
(0, _inherits2.default)(ResetQuiz, _Component);
|
|
22
24
|
var _super = (0, _createSuper2.default)(ResetQuiz);
|
|
@@ -65,18 +67,31 @@ var ResetQuiz = /*#__PURE__*/function (_Component) {
|
|
|
65
67
|
key: "render",
|
|
66
68
|
value: function render() {
|
|
67
69
|
if (!this.props.reopenOn) return null;
|
|
68
|
-
|
|
70
|
+
var _this$props = this.props,
|
|
71
|
+
reopenOverride = _this$props.reopenOverride,
|
|
72
|
+
sessionId = _this$props.sessionId;
|
|
73
|
+
if (!sessionId) {
|
|
69
74
|
return /*#__PURE__*/_react.default.createElement("span", null, (0, _formatMessage.default)('No attempts have been recorded yet.'));
|
|
70
75
|
}
|
|
71
|
-
|
|
76
|
+
var reOpen = /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_uiHeading.Heading, {
|
|
72
77
|
level: "h3"
|
|
73
78
|
}, (0, _formatMessage.default)('Manage current attempt')), this.props.reopenOn ? /*#__PURE__*/_react.default.createElement(_uiButtons.Button, {
|
|
74
79
|
ref: this.reopenButtonRef,
|
|
75
80
|
onClick: this.reopenQuizSession,
|
|
76
|
-
disabled: !this.props.isComplete,
|
|
81
|
+
disabled: !this.props.isComplete || reopenOverride,
|
|
77
82
|
margin: "small none",
|
|
78
83
|
"data-automation": "sdk-reopen-quiz-button"
|
|
79
84
|
}, (0, _formatMessage.default)('Reopen')) : null);
|
|
85
|
+
if (reopenOverride) {
|
|
86
|
+
var text = (0, _formatMessage.default)('One Question at Time Quizzes with Backtracking disabled cannot be reopened.');
|
|
87
|
+
return /*#__PURE__*/_react.default.createElement(_uiA11yContent.AccessibleContent, {
|
|
88
|
+
alt: text
|
|
89
|
+
}, /*#__PURE__*/_react.default.createElement(_uiTooltip.Tooltip, {
|
|
90
|
+
renderTip: text,
|
|
91
|
+
placement: "start"
|
|
92
|
+
}, reOpen));
|
|
93
|
+
}
|
|
94
|
+
return reOpen;
|
|
80
95
|
}
|
|
81
96
|
}]);
|
|
82
97
|
ResetQuiz.displayName = "ResetQuiz";
|
|
@@ -90,7 +105,8 @@ ResetQuiz.propTypes = {
|
|
|
90
105
|
reopenQuizSession: _propTypes.default.func.isRequired,
|
|
91
106
|
reopenOn: _propTypes.default.bool.isRequired,
|
|
92
107
|
screenreaderNotification: _propTypes.default.func.isRequired,
|
|
93
|
-
withConfirm: _propTypes.default.func.isRequired
|
|
108
|
+
withConfirm: _propTypes.default.func.isRequired,
|
|
109
|
+
reopenOverride: _propTypes.default.bool.isRequired
|
|
94
110
|
};
|
|
95
111
|
var _default = ResetQuiz;
|
|
96
112
|
exports.default = _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@instructure/quiz-core",
|
|
3
|
-
"version": "20.20.1-snapshot.
|
|
3
|
+
"version": "20.20.1-snapshot.34+5767d10b6",
|
|
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.2.2",
|
|
47
|
-
"@instructure/quiz-common": "20.20.1-snapshot.
|
|
48
|
-
"@instructure/quiz-i18n": "20.20.1-snapshot.
|
|
49
|
-
"@instructure/quiz-interactions": "20.20.1-snapshot.
|
|
50
|
-
"@instructure/quiz-number-input": "20.20.1-snapshot.
|
|
51
|
-
"@instructure/quiz-rce": "20.20.1-snapshot.
|
|
47
|
+
"@instructure/quiz-common": "20.20.1-snapshot.34+5767d10b6",
|
|
48
|
+
"@instructure/quiz-i18n": "20.20.1-snapshot.34+5767d10b6",
|
|
49
|
+
"@instructure/quiz-interactions": "20.20.1-snapshot.34+5767d10b6",
|
|
50
|
+
"@instructure/quiz-number-input": "20.20.1-snapshot.34+5767d10b6",
|
|
51
|
+
"@instructure/quiz-rce": "20.20.1-snapshot.34+5767d10b6",
|
|
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.20.1-snapshot.
|
|
115
|
+
"instructure-validations": "20.20.1-snapshot.34+5767d10b6",
|
|
116
116
|
"ipaddr.js": "^1.5.4",
|
|
117
117
|
"isomorphic-fetch": "^2.2.0",
|
|
118
118
|
"isuuid": "^0.1.0",
|
|
@@ -143,7 +143,7 @@
|
|
|
143
143
|
"uuid": "^3.2.1"
|
|
144
144
|
},
|
|
145
145
|
"devDependencies": {
|
|
146
|
-
"@instructure/quiz-scripts": "20.
|
|
146
|
+
"@instructure/quiz-scripts": "20.26.0",
|
|
147
147
|
"@instructure/ui-axe-check": "^8.51.0",
|
|
148
148
|
"@instructure/ui-babel-preset": "^7.22.1",
|
|
149
149
|
"@instructure/ui-test-utils": "^7.22.1",
|
|
@@ -161,7 +161,7 @@
|
|
|
161
161
|
"jquery": "^2.2.3",
|
|
162
162
|
"karma-junit-reporter": "^2.0.1",
|
|
163
163
|
"most-subject": "^5.3.0",
|
|
164
|
-
"quiz-presets": "20.20.1-snapshot.
|
|
164
|
+
"quiz-presets": "20.20.1-snapshot.34+5767d10b6",
|
|
165
165
|
"react": "^16.8.6",
|
|
166
166
|
"react-addons-test-utils": "^15.6.2",
|
|
167
167
|
"react-dom": "^16.8.6",
|
|
@@ -177,5 +177,5 @@
|
|
|
177
177
|
"publishConfig": {
|
|
178
178
|
"access": "public"
|
|
179
179
|
},
|
|
180
|
-
"gitHead": "
|
|
180
|
+
"gitHead": "5767d10b6eeea6b5a63c1b8e0311aca7892cc31b"
|
|
181
181
|
}
|