@digabi/exam-engine-core 19.8.0 → 19.8.3
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/__tests__/AnsweringInstructions.test.js +11 -11
- package/dist/__tests__/AnsweringInstructions.test.js.map +1 -1
- package/dist/__tests__/examServerApi.js +2 -2
- package/dist/__tests__/examServerApi.js.map +1 -1
- package/dist/__tests__/renderAnnotations.test.js +18 -18
- package/dist/__tests__/results/AnnotationList.test.js +27 -27
- package/dist/__tests__/results/ResultsContext.test.js +37 -37
- package/dist/__tests__/results/ResultsContext.test.js.map +1 -1
- package/dist/__tests__/results/ResultsExamQuestionAutoScore.test.js +4 -4
- package/dist/__tests__/results/ResultsExamQuestionManualScore.test.js +19 -19
- package/dist/__tests__/testExamRendering.js +14 -15
- package/dist/__tests__/testExamRendering.js.map +1 -1
- package/dist/__tests__/tsconfig.tsbuildinfo +1 -1
- package/dist/__tests__/validateAnswers.test.js +28 -25
- package/dist/__tests__/validateAnswers.test.js.map +1 -1
- package/dist/components/AnswerToolbar.d.ts +1 -1
- package/dist/components/AnswerToolbar.d.ts.map +1 -1
- package/dist/components/AnswerToolbar.js +2 -2
- package/dist/components/AnswerToolbar.js.map +1 -1
- package/dist/components/AnsweringInstructions.js +1 -1
- package/dist/components/AnsweringInstructions.js.map +1 -1
- package/dist/components/DocumentTitle.js +1 -1
- package/dist/components/DocumentTitle.js.map +1 -1
- package/dist/components/SectionElement.js +1 -1
- package/dist/components/SectionElement.js.map +1 -1
- package/dist/components/attachments/Attachments.js +1 -1
- package/dist/components/attachments/ExternalMaterial.js +1 -1
- package/dist/components/attachments/Question.js +1 -1
- package/dist/components/attachments/Question.js.map +1 -1
- package/dist/components/context/CommonExamContext.js +1 -1
- package/dist/components/context/ExamContext.js +1 -1
- package/dist/components/context/QuestionContext.js +1 -1
- package/dist/components/context/ResultsContext.js +7 -6
- package/dist/components/context/ResultsContext.js.map +1 -1
- package/dist/components/context/SectionContext.js +2 -2
- package/dist/components/context/SectionContext.js.map +1 -1
- package/dist/components/exam/ChoiceAnswer.js +6 -6
- package/dist/components/exam/ChoiceAnswer.js.map +1 -1
- package/dist/components/exam/DropdownAnswer.js +10 -10
- package/dist/components/exam/DropdownAnswer.js.map +1 -1
- package/dist/components/exam/Exam.d.ts +1 -0
- package/dist/components/exam/Exam.d.ts.map +1 -1
- package/dist/components/exam/Exam.js +69 -13
- package/dist/components/exam/Exam.js.map +1 -1
- package/dist/components/exam/ExternalMaterial.js +1 -1
- package/dist/components/exam/Hints.js +3 -3
- package/dist/components/exam/Hints.js.map +1 -1
- package/dist/components/exam/Question.d.ts +4 -0
- package/dist/components/exam/Question.d.ts.map +1 -1
- package/dist/components/exam/Question.js +42 -5
- package/dist/components/exam/Question.js.map +1 -1
- package/dist/components/exam/QuestionTitle.js +1 -1
- package/dist/components/exam/RichTextAnswer.d.ts +6 -1
- package/dist/components/exam/RichTextAnswer.d.ts.map +1 -1
- package/dist/components/exam/RichTextAnswer.js +14 -2
- package/dist/components/exam/RichTextAnswer.js.map +1 -1
- package/dist/components/exam/Section.js +2 -2
- package/dist/components/exam/Section.js.map +1 -1
- package/dist/components/exam/internal/ErrorIndicator.d.ts +1 -1
- package/dist/components/exam/internal/ErrorIndicator.d.ts.map +1 -1
- package/dist/components/exam/internal/ErrorIndicator.js +4 -4
- package/dist/components/exam/internal/ErrorIndicator.js.map +1 -1
- package/dist/components/exam/internal/ProgressBar.js +1 -1
- package/dist/components/exam/internal/ProgressBar.js.map +1 -1
- package/dist/components/exam/internal/TextAnswerInput.d.ts.map +1 -1
- package/dist/components/exam/internal/TextAnswerInput.js +14 -13
- package/dist/components/exam/internal/TextAnswerInput.js.map +1 -1
- package/dist/components/grading/AnswerCharacterCounter.d.ts +1 -1
- package/dist/components/grading/AnswerCharacterCounter.d.ts.map +1 -1
- package/dist/components/grading/AnswerCharacterCounter.js +3 -3
- package/dist/components/grading/AnswerCharacterCounter.js.map +1 -1
- package/dist/components/grading/GradingAnswer.js +9 -9
- package/dist/components/grading/GradingAnswer.js.map +1 -1
- package/dist/components/grading/GradingAnswerAnnotationList.d.ts +1 -1
- package/dist/components/grading/GradingAnswerAnnotationList.d.ts.map +1 -1
- package/dist/components/grading/GradingAnswerAnnotationList.js +2 -2
- package/dist/components/grading/GradingAnswerAnnotationList.js.map +1 -1
- package/dist/components/grading/editAnnotations.js +14 -14
- package/dist/components/grading/editAnnotations.js.map +1 -1
- package/dist/components/grading/largeImageDetector.js +2 -2
- package/dist/components/grading/largeImageDetector.js.map +1 -1
- package/dist/components/grading-instructions/GradingInstructions.d.ts.map +1 -1
- package/dist/components/grading-instructions/GradingInstructions.js +6 -3
- package/dist/components/grading-instructions/GradingInstructions.js.map +1 -1
- package/dist/components/grading-instructions/Question.js +1 -1
- package/dist/components/grading-instructions/QuestionTitle.js +1 -1
- package/dist/components/results/ChoiceAnswer.js +8 -7
- package/dist/components/results/ChoiceAnswer.js.map +1 -1
- package/dist/components/results/DropdownAnswer.js +5 -5
- package/dist/components/results/DropdownAnswer.js.map +1 -1
- package/dist/components/results/Question.js +3 -3
- package/dist/components/results/Question.js.map +1 -1
- package/dist/components/results/QuestionTitle.js +1 -1
- package/dist/components/results/Results.js +2 -2
- package/dist/components/results/Results.js.map +1 -1
- package/dist/components/results/Section.js +1 -1
- package/dist/components/results/Section.js.map +1 -1
- package/dist/components/results/SingleLineAnswer.d.ts +1 -1
- package/dist/components/results/SingleLineAnswer.d.ts.map +1 -1
- package/dist/components/results/SingleLineAnswer.js +1 -1
- package/dist/components/results/SingleLineAnswer.js.map +1 -1
- package/dist/components/results/internal/AnnotationList.js +2 -2
- package/dist/components/results/internal/AnnotationList.js.map +1 -1
- package/dist/components/results/internal/QuestionManualScore.js +3 -3
- package/dist/components/results/internal/QuestionScoresContainer.d.ts +1 -1
- package/dist/components/results/internal/QuestionScoresContainer.d.ts.map +1 -1
- package/dist/components/results/internal/QuestionScoresContainer.js +2 -2
- package/dist/components/results/internal/QuestionScoresContainer.js.map +1 -1
- package/dist/components/shared/AnnotationLists.d.ts +1 -1
- package/dist/components/shared/AnnotationLists.d.ts.map +1 -1
- package/dist/components/shared/AnnotationLists.js +1 -1
- package/dist/components/shared/AnnotationLists.js.map +1 -1
- package/dist/components/shared/AnswerIndicator.d.ts +11 -0
- package/dist/components/shared/AnswerIndicator.d.ts.map +1 -0
- package/dist/components/shared/AnswerIndicator.js +22 -0
- package/dist/components/shared/AnswerIndicator.js.map +1 -0
- package/dist/components/shared/AttachmentLink.js +1 -1
- package/dist/components/shared/AttachmentLink.js.map +1 -1
- package/dist/components/shared/AttachmentLinks.js +3 -3
- package/dist/components/shared/AttachmentLinks.js.map +1 -1
- package/dist/components/shared/ImageOverlay.js +3 -3
- package/dist/components/shared/ImageOverlay.js.map +1 -1
- package/dist/components/shared/Reference.js +1 -1
- package/dist/components/shared/References.js +1 -1
- package/dist/components/shared/References.js.map +1 -1
- package/dist/components/shared/Score.js +1 -1
- package/dist/components/shared/TableOfContents.d.ts +1 -0
- package/dist/components/shared/TableOfContents.d.ts.map +1 -1
- package/dist/components/shared/TableOfContents.js +83 -26
- package/dist/components/shared/TableOfContents.js.map +1 -1
- package/dist/components/shared/internal/ResponsiveMediaContainer.js +3 -3
- package/dist/components/shared/internal/ResponsiveMediaContainer.js.map +1 -1
- package/dist/components/shared/internal/RestrictedAudioPlayer.d.ts +1 -1
- package/dist/components/shared/internal/RestrictedAudioPlayer.d.ts.map +1 -1
- package/dist/components/shared/internal/RestrictedAudioPlayer.js +2 -2
- package/dist/components/shared/internal/RestrictedAudioPlayer.js.map +1 -1
- package/dist/dom-utils.js +1 -1
- package/dist/dom-utils.js.map +1 -1
- package/dist/fonts.js +1 -1
- package/dist/fonts.js.map +1 -1
- package/dist/i18n/A_E.js +2 -2
- package/dist/i18n/BA.js +1 -1
- package/dist/i18n/CA.js +1 -1
- package/dist/i18n/EA.js +2 -2
- package/dist/i18n/FA.js +2 -2
- package/dist/i18n/GC.js +2 -2
- package/dist/i18n/I.js +3 -3
- package/dist/i18n/M.js +1 -1
- package/dist/i18n/O_E.js +2 -2
- package/dist/i18n/PA.js +2 -2
- package/dist/i18n/SA.js +2 -2
- package/dist/i18n/TC.js +2 -2
- package/dist/i18n/VA.js +2 -2
- package/dist/i18n/Z.js +3 -3
- package/dist/i18n/fi-FI.d.ts +3 -0
- package/dist/i18n/fi-FI.d.ts.map +1 -1
- package/dist/i18n/fi-FI.js +17 -14
- package/dist/i18n/fi-FI.js.map +1 -1
- package/dist/i18n/index.d.ts +2 -137
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +8 -8
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/sv-FI.d.ts.map +1 -1
- package/dist/i18n/sv-FI.js +18 -14
- package/dist/i18n/sv-FI.js.map +1 -1
- package/dist/main-bundle.js +1 -1
- package/dist/main-bundle.js.LICENSE.txt +0 -5
- package/dist/main.css +1 -1
- package/dist/parser/parseExam.js +5 -5
- package/dist/parser/parseExam.js.map +1 -1
- package/dist/parser/parseExamStructure.js +4 -4
- package/dist/renderAnnotations.js +8 -8
- package/dist/renderAnnotations.js.map +1 -1
- package/dist/store/answers/reducer.js +2 -2
- package/dist/store/audio/reducer.js +3 -3
- package/dist/store/audio/sagas.js +1 -1
- package/dist/store/audio/sagas.js.map +1 -1
- package/dist/store/cas/reducer.js +1 -1
- package/dist/store/cas/sagas.js +1 -1
- package/dist/store/countdown.js +1 -1
- package/dist/store/countdown.js.map +1 -1
- package/dist/store/index.js +4 -4
- package/dist/validateAnswers.d.ts +1 -0
- package/dist/validateAnswers.d.ts.map +1 -1
- package/dist/validateAnswers.js +8 -7
- package/dist/validateAnswers.js.map +1 -1
- package/package.json +18 -18
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Exam.d.ts","sourceRoot":"","sources":["../../../src/components/exam/Exam.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"Exam.d.ts","sourceRoot":"","sources":["../../../src/components/exam/Exam.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAG/D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAA;AA+CvG,2DAA2D;AAC3D,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,uCAAuC;IACvC,cAAc,EAAE,MAAM,CAAA;IACtB,iEAAiE;IACjE,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAA;IAC/C,mBAAmB;IACnB,GAAG,EAAE,WAAW,CAAA;IAChB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,uDAAuD;AACvD,MAAM,WAAW,SAAU,SAAQ,eAAe;IAChD,2CAA2C;IAC3C,SAAS,EAAE,gBAAgB,CAAA;IAC3B,oEAAoE;IACpE,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B;;;OAGG;IACH,4BAA4B,EAAE,4BAA4B,EAAE,CAAA;IAC5D,qCAAqC;IACrC,aAAa,EAAE,aAAa,CAAA;IAC5B,IAAI,EAAE,QAAQ,GAAG,mBAAmB,GAAG,kBAAkB,CAAA;CAC1D;;AAmLD,wBAAuE"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { useContext, useEffect } from 'react';
|
1
|
+
import React, { createRef, useContext, useEffect } from 'react';
|
2
2
|
import { I18nextProvider } from 'react-i18next';
|
3
3
|
import { Provider } from 'react-redux';
|
4
4
|
import { createRenderChildNodes } from '../../createRenderChildNodes';
|
@@ -44,6 +44,8 @@ import Video from '../shared/Video';
|
|
44
44
|
import RenderChildNodes from '../RenderChildNodes';
|
45
45
|
import { QuestionNumber } from '../shared/QuestionNumber';
|
46
46
|
import ExamTranslation from '../shared/ExamTranslation';
|
47
|
+
import * as _ from 'lodash-es';
|
48
|
+
import classNames from 'classnames';
|
47
49
|
const renderChildNodes = createRenderChildNodes({
|
48
50
|
attachment: ExamAttachment,
|
49
51
|
'attachment-link': mkAttachmentLink('link'),
|
@@ -73,33 +75,87 @@ const renderChildNodes = createRenderChildNodes({
|
|
73
75
|
'section-title': SectionTitle,
|
74
76
|
'text-answer': TextAnswer,
|
75
77
|
video: Video,
|
76
|
-
'image-overlay': ImageOverlay
|
78
|
+
'image-overlay': ImageOverlay
|
77
79
|
});
|
78
|
-
const Exam = ({ doc, casStatus, answers, restrictedAudioPlaybackStats, examServerApi, }) => {
|
80
|
+
const Exam = ({ doc, casStatus, answers, restrictedAudioPlaybackStats, examServerApi, type }) => {
|
79
81
|
const { date, dateTimeFormatter, dayCode, examCode, language, resolveAttachment, root, subjectLanguage } = useContext(CommonExamContext);
|
80
82
|
const examTitle = findChildElement(root, 'exam-title');
|
81
83
|
const examInstruction = findChildElement(root, 'exam-instruction');
|
82
84
|
const tableOfContents = findChildElement(root, 'table-of-contents');
|
83
85
|
const externalMaterial = findChildElement(root, 'external-material');
|
84
86
|
const examStylesheet = root.getAttribute('exam-stylesheet');
|
87
|
+
const examRef = createRef();
|
85
88
|
const store = useCached(() => initializeExamStore(parseExamStructure(doc), casStatus, answers, restrictedAudioPlaybackStats, examServerApi));
|
86
|
-
const
|
89
|
+
const TableOfContentsSidebar = useCached(() => mkTableOfContents({
|
90
|
+
showAttachmentLinks: true,
|
91
|
+
showAnsweringInstructions: true,
|
92
|
+
isInSidebar: true
|
93
|
+
}));
|
94
|
+
const TableOfContents = useCached(() => mkTableOfContents({
|
95
|
+
showAttachmentLinks: true,
|
96
|
+
showAnsweringInstructions: true,
|
97
|
+
isInSidebar: false
|
98
|
+
}));
|
87
99
|
const i18n = useCached(() => initI18n(language, examCode, dayCode));
|
88
100
|
useEffect(changeLanguage(i18n, language));
|
89
101
|
useEffect(scrollToHash, []);
|
102
|
+
const isInViewport = (element) => {
|
103
|
+
const rect = element.getBoundingClientRect();
|
104
|
+
return rect.top >= 100 && rect.bottom <= window.innerHeight - 100;
|
105
|
+
};
|
106
|
+
const handleExamScroll = () => {
|
107
|
+
const scrollY = window.scrollY;
|
108
|
+
const sections = document.querySelectorAll('.e-exam-question.e-level-0');
|
109
|
+
const sideNavigation = document.querySelector(`.sidebar-toc-container`);
|
110
|
+
const lis = document.querySelectorAll(`.sidebar-toc-container li[data-list-number]`);
|
111
|
+
lis.forEach(i => i.classList.remove('current'));
|
112
|
+
// Find the section currently in view
|
113
|
+
sections.forEach(section => {
|
114
|
+
var _a;
|
115
|
+
const sectionTop = section.getBoundingClientRect().top + scrollY;
|
116
|
+
const sectionBottom = section.getBoundingClientRect().bottom + scrollY;
|
117
|
+
const sectionBeginsInView = sectionTop < scrollY + window.innerHeight && sectionTop > scrollY;
|
118
|
+
const sectionEndsInView = sectionBottom < scrollY + window.innerHeight && sectionBottom > scrollY;
|
119
|
+
const sectionFillsView = sectionTop < scrollY && sectionBottom > scrollY + window.innerHeight;
|
120
|
+
const sectionId = ((_a = section.querySelector('.anchor')) === null || _a === void 0 ? void 0 : _a.id) || '';
|
121
|
+
const sectionNumber = sectionId.replace('question-nr-', '');
|
122
|
+
if (sectionBeginsInView || sectionEndsInView || sectionFillsView) {
|
123
|
+
const currentNavTitle = document.querySelector(`.table-of-contents li[data-list-number="${sectionNumber}."]`);
|
124
|
+
if (currentNavTitle) {
|
125
|
+
currentNavTitle.classList.add('current');
|
126
|
+
const isVisible = isInViewport(currentNavTitle);
|
127
|
+
if (!isVisible && sideNavigation) {
|
128
|
+
const navHeight = sideNavigation.getBoundingClientRect().height;
|
129
|
+
const scrollToPos = currentNavTitle.offsetTop - navHeight / 2;
|
130
|
+
sideNavigation.scrollTo({ behavior: 'smooth', top: scrollToPos });
|
131
|
+
}
|
132
|
+
}
|
133
|
+
}
|
134
|
+
});
|
135
|
+
};
|
136
|
+
const throttledScroll = _.throttle(handleExamScroll, 100, { trailing: false });
|
137
|
+
const visuallyImpaired = type === 'visually-impaired';
|
138
|
+
window.addEventListener('scroll', throttledScroll);
|
90
139
|
return (React.createElement(Provider, { store: store },
|
91
140
|
React.createElement(I18nextProvider, { i18n: i18n },
|
92
|
-
React.createElement("main", { className: "e-exam", lang: subjectLanguage, "aria-labelledby": examTitleId },
|
141
|
+
React.createElement("main", { className: "e-exam", lang: subjectLanguage, "aria-labelledby": examTitleId, ref: examRef },
|
93
142
|
React.createElement(React.StrictMode, null),
|
94
143
|
examStylesheet && React.createElement("link", { rel: "stylesheet", href: resolveAttachment(examStylesheet) }),
|
95
|
-
React.createElement(
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
144
|
+
React.createElement("div", { className: "e-toc-and-exam" },
|
145
|
+
tableOfContents && !visuallyImpaired && (React.createElement("div", { className: "sidebar-toc-container" },
|
146
|
+
React.createElement(TableOfContentsSidebar, { element: tableOfContents, renderChildNodes }))),
|
147
|
+
React.createElement("div", { className: "main-exam-container" /*onScroll={throttledScroll}*/ },
|
148
|
+
React.createElement("div", { className: classNames('main-exam', { center: visuallyImpaired }) },
|
149
|
+
React.createElement(SectionElement, { "aria-labelledby": examTitleId },
|
150
|
+
examTitle && React.createElement(DocumentTitle, { id: examTitleId }, renderChildNodes(examTitle)),
|
151
|
+
date && (React.createElement("p", null,
|
152
|
+
React.createElement("strong", null, dateTimeFormatter.format(date)))),
|
153
|
+
examInstruction && React.createElement(ExamInstruction, { element: examInstruction, renderChildNodes }),
|
154
|
+
tableOfContents && (React.createElement("div", { className: "main-toc-container" },
|
155
|
+
React.createElement(TableOfContents, { element: tableOfContents,
|
156
|
+
renderChildNodes }))),
|
157
|
+
externalMaterial && (React.createElement(ExternalMaterial, { element: externalMaterial, renderChildNodes, forceRender: true }))),
|
158
|
+
renderChildNodes(root)))),
|
103
159
|
React.createElement("div", { className: "e-footer" },
|
104
160
|
React.createElement(ErrorIndicator, null),
|
105
161
|
React.createElement(SaveIndicator, null))))));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Exam.js","sourceRoot":"","sources":["../../../src/components/exam/Exam.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;
|
1
|
+
{"version":3,"file":"Exam.js","sourceRoot":"","sources":["../../../src/components/exam/Exam.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAC3C,OAAO,gBAAgB,MAAM,0BAA0B,CAAA;AACvD,OAAO,iBAAiB,MAAM,2BAA2B,CAAA;AACzD,OAAO,KAAK,MAAM,iBAAiB,CAAA;AACnC,OAAO,UAAU,MAAM,sBAAsB,CAAA;AAC7C,OAAO,SAAS,MAAM,qBAAqB,CAAA;AAC3C,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACvF,OAAO,aAAa,MAAM,kBAAkB,CAAA;AAC5C,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAC7C,OAAO,cAAc,MAAM,2BAA2B,CAAA;AACtD,OAAO,cAAc,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAC/C,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AACvD,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAC3C,OAAO,OAAO,MAAM,WAAW,CAAA;AAC/B,OAAO,YAAY,MAAM,gBAAgB,CAAA;AACzC,OAAO,gBAAgB,MAAM,oBAAoB,CAAA;AACjD,OAAO,IAAI,MAAM,gBAAgB,CAAA;AACjC,OAAO,OAAO,MAAM,mBAAmB,CAAA;AACvC,OAAO,KAAK,MAAM,SAAS,CAAA;AAC3B,OAAO,KAAK,MAAM,iBAAiB,CAAA;AACnC,OAAO,YAAY,MAAM,wBAAwB,CAAA;AACjD,OAAO,UAAU,MAAM,sBAAsB,CAAA;AAC7C,OAAO,aAAa,MAAM,0BAA0B,CAAA;AACpD,OAAO,cAAc,MAAM,mBAAmB,CAAA;AAC9C,OAAO,kBAAkB,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,MAAM,iBAAiB,CAAA;AACnC,OAAO,gBAAgB,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,eAAe,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,CAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,UAAU,MAAM,YAAY,CAAA;AAgCnC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC;IAC9C,UAAU,EAAE,cAAc;IAC1B,iBAAiB,EAAE,gBAAgB,CAAC,MAAM,CAAC;IAC3C,kBAAkB,EAAE,iBAAiB,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,KAAK;IACZ,aAAa,EAAE,gBAAgB;IAC/B,aAAa,EAAE,UAAU;IACzB,YAAY,EAAE,SAAS;IACvB,eAAe,EAAE,YAAY;IAC7B,iBAAiB,EAAE,cAAc;IACjC,aAAa,EAAE,UAAU;IACzB,mBAAmB,EAAE,gBAAgB;IACrC,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,QAAQ;IAClB,iBAAiB,EAAE,cAAc;IACjC,WAAW,EAAE,eAAe;IAC5B,sBAAsB,EAAE,mBAAmB;IAC3C,gBAAgB,EAAE,aAAa;IAC/B,KAAK,EAAE,KAAK;IACZ,UAAU,EAAE,UAAU;IACtB,oBAAoB,EAAE,UAAU;IAChC,qBAAqB,EAAE,KAAK;IAC5B,qBAAqB,EAAE,kBAAkB;IACzC,OAAO,EAAE,OAAO;IAChB,eAAe,EAAE,YAAY;IAC7B,aAAa,EAAE,UAAU;IACzB,KAAK,EAAE,KAAK;IACZ,eAAe,EAAE,YAAY;CAC9B,CAAC,CAAA;AAEF,MAAM,IAAI,GAAuC,CAAC,EAChD,GAAG,EACH,SAAS,EACT,OAAO,EACP,4BAA4B,EAC5B,aAAa,EACb,IAAI,EACL,EAAE,EAAE;IACH,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe,EAAE,GACtG,UAAU,CAAC,iBAAiB,CAAC,CAAA;IAE/B,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IACtD,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;IAClE,MAAM,eAAe,GAAG,gBAAgB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAA;IACnE,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAA;IACpE,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAA;IAE3D,MAAM,OAAO,GAAG,SAAS,EAAkB,CAAA;IAE3C,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,CAC3B,mBAAmB,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,4BAA4B,EAAE,aAAa,CAAC,CAC9G,CAAA;IAED,MAAM,sBAAsB,GAAG,SAAS,CAAC,GAAG,EAAE,CAC5C,iBAAiB,CAAC;QAChB,mBAAmB,EAAE,IAAI;QACzB,yBAAyB,EAAE,IAAI;QAC/B,WAAW,EAAE,IAAI;KAClB,CAAC,CACH,CAAA;IAED,MAAM,eAAe,GAAG,SAAS,CAAC,GAAG,EAAE,CACrC,iBAAiB,CAAC;QAChB,mBAAmB,EAAE,IAAI;QACzB,yBAAyB,EAAE,IAAI;QAC/B,WAAW,EAAE,KAAK;KACnB,CAAC,CACH,CAAA;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IACnE,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEzC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IAE3B,MAAM,YAAY,GAAG,CAAC,OAAgB,EAAE,EAAE;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAA;QAC5C,OAAO,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,GAAG,GAAG,CAAA;IACnE,CAAC,CAAA;IAED,MAAM,gBAAgB,GAAG,GAAG,EAAE;QAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,CAAA;QACxE,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAA;QAEvE,MAAM,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,6CAA6C,CAAC,CAAA;QACpF,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;QAE/C,qCAAqC;QACrC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;;YACzB,MAAM,UAAU,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,OAAO,CAAA;YAChE,MAAM,aAAa,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,MAAM,GAAG,OAAO,CAAA;YAEtE,MAAM,mBAAmB,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC,WAAW,IAAI,UAAU,GAAG,OAAO,CAAA;YAC7F,MAAM,iBAAiB,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC,WAAW,IAAI,aAAa,GAAG,OAAO,CAAA;YACjG,MAAM,gBAAgB,GAAG,UAAU,GAAG,OAAO,IAAI,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC,WAAW,CAAA;YAE7F,MAAM,SAAS,GAAG,CAAA,MAAA,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,0CAAE,EAAE,KAAI,EAAE,CAAA;YAC5D,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;YAE3D,IAAI,mBAAmB,IAAI,iBAAiB,IAAI,gBAAgB,EAAE;gBAChE,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,2CAA2C,aAAa,KAAK,CAAC,CAAA;gBAE7G,IAAI,eAAe,EAAE;oBACnB,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;oBACxC,MAAM,SAAS,GAAG,YAAY,CAAC,eAAe,CAAC,CAAA;oBAE/C,IAAI,CAAC,SAAS,IAAI,cAAc,EAAE;wBAChC,MAAM,SAAS,GAAG,cAAc,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAA;wBAC/D,MAAM,WAAW,GAAI,eAA+B,CAAC,SAAS,GAAG,SAAS,GAAG,CAAC,CAAA;wBAC9E,cAAc,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAA;qBAClE;iBACF;aACF;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,MAAM,eAAe,GAAG,CAAC,CAAC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAA;IAE9E,MAAM,gBAAgB,GAAG,IAAI,KAAK,mBAAmB,CAAA;IAErD,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAA;IAElD,OAAO,CACL,oBAAC,QAAQ,IAAC,KAAK,EAAE,KAAK;QACpB,oBAAC,eAAe,IAAC,IAAI,EAAE,IAAI;YACzB,8BAAM,SAAS,EAAC,QAAQ,EAAC,IAAI,EAAE,eAAe,qBAAmB,WAAW,EAAE,GAAG,EAAE,OAAO;gBACxF,oBAAC,KAAK,CAAC,UAAU,OAAG;gBACnB,cAAc,IAAI,8BAAM,GAAG,EAAC,YAAY,EAAC,IAAI,EAAE,iBAAiB,CAAC,cAAc,CAAC,GAAI;gBAErF,6BAAK,SAAS,EAAC,gBAAgB;oBAC5B,eAAe,IAAI,CAAC,gBAAgB,IAAI,CACvC,6BAAK,SAAS,EAAC,uBAAuB;wBACpC,oBAAC,sBAAsB,IAAO,OAAO,EAAE,eAAe,EAAE,gBAAgB,GAAM,CAC1E,CACP;oBAED,6BAAK,SAAS,EAAC,qBAAqB,CAAC,8BAA8B;wBACjE,6BAAK,SAAS,EAAE,UAAU,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;4BACnE,oBAAC,cAAc,uBAAkB,WAAW;gCACzC,SAAS,IAAI,oBAAC,aAAa,IAAC,EAAE,EAAE,WAAW,IAAG,gBAAgB,CAAC,SAAS,CAAC,CAAiB;gCAC1F,IAAI,IAAI,CACP;oCACE,oCAAS,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAU,CAC/C,CACL;gCACA,eAAe,IAAI,oBAAC,eAAe,IAAO,OAAO,EAAE,eAAe,EAAE,gBAAgB,GAAM;gCAE1F,eAAe,IAAI,CAClB,6BAAK,SAAS,EAAC,oBAAoB;oCACjC,oBAAC,eAAe,IAEZ,OAAO,EAAE,eAAe;wCACxB,gBAAgB,GAElB,CACE,CACP;gCACA,gBAAgB,IAAI,CACnB,oBAAC,gBAAgB,IAAO,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,WAAW,EAAE,IAAI,GAAM,CAC7F,CACc;4BAChB,gBAAgB,CAAC,IAAI,CAAC,CACnB,CACF,CACF;gBACN,6BAAK,SAAS,EAAC,UAAU;oBACvB,oBAAC,cAAc,OAAG;oBAClB,oBAAC,aAAa,OAAG,CACb,CACD,CACS,CACT,CACZ,CAAA;AACH,CAAC,CAAA;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA"}
|
@@ -8,7 +8,7 @@ import { AttachmentContext, withAttachmentContext } from '../context/AttachmentC
|
|
8
8
|
import { CommonExamContext } from '../context/CommonExamContext';
|
9
9
|
const renderChildNodes = createRenderChildNodes({
|
10
10
|
attachment: withAttachmentContext(Attachment),
|
11
|
-
'attachment-title': AttachmentTitle
|
11
|
+
'attachment-title': AttachmentTitle
|
12
12
|
});
|
13
13
|
function Attachment({ element }) {
|
14
14
|
const { displayNumber } = useContext(AttachmentContext);
|
@@ -5,17 +5,17 @@ import { findChildElement, getNumericAttribute, queryAll } from '../../dom-utils
|
|
5
5
|
import { shortDisplayNumber } from '../../shortDisplayNumber';
|
6
6
|
const Hints = ({ element, renderChildNodes }) => {
|
7
7
|
const focusedQuestionId = useSelector((state) => state.answers.focusedQuestionId);
|
8
|
-
const answersWithHints = queryAll(element, ['text-answer', 'scored-text-answer']).filter(
|
8
|
+
const answersWithHints = queryAll(element, ['text-answer', 'scored-text-answer']).filter(answer => findChildElement(answer, 'hint') != null);
|
9
9
|
return answersWithHints.length > 0 ? (React.createElement("div", { className: "e-columns" },
|
10
10
|
React.createElement("div", { className: "e-column e-column--8" }, renderChildNodes(element)),
|
11
11
|
React.createElement("div", { className: "e-hints e-column e-column--4", "aria-hidden": "true" }, answersWithHints.map((answer, i) => (React.createElement(Hint, { answer, focusedQuestionId, renderChildNodes, key: i })))))) : (React.createElement(React.Fragment, null, renderChildNodes(element)));
|
12
12
|
};
|
13
|
-
function Hint({ answer, focusedQuestionId, renderChildNodes
|
13
|
+
function Hint({ answer, focusedQuestionId, renderChildNodes }) {
|
14
14
|
const questionId = getNumericAttribute(answer, 'question-id');
|
15
15
|
const displayNumber = answer.getAttribute('display-number');
|
16
16
|
const hint = findChildElement(answer, 'hint');
|
17
17
|
return (React.createElement("p", { className: classNames('e-hints__hint', {
|
18
|
-
'e-hints__hint--focused': focusedQuestionId === questionId
|
18
|
+
'e-hints__hint--focused': focusedQuestionId === questionId
|
19
19
|
}), onClick: () => {
|
20
20
|
const question = document.querySelector(`.text-answer[data-question-id="${questionId}"]`);
|
21
21
|
if (question) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Hints.js","sourceRoot":"","sources":["../../../src/components/exam/Hints.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAI7D,MAAM,KAAK,GAAgD,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE;IAC3F,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,KAAgC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC5G,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC,CAAC,MAAM,CACtF,
|
1
|
+
{"version":3,"file":"Hints.js","sourceRoot":"","sources":["../../../src/components/exam/Hints.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEzC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAI7D,MAAM,KAAK,GAAgD,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,EAAE;IAC3F,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,KAAgC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC5G,MAAM,gBAAgB,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC,CAAC,MAAM,CACtF,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,CACnD,CAAA;IAED,OAAO,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACnC,6BAAK,SAAS,EAAC,WAAW;QACxB,6BAAK,SAAS,EAAC,sBAAsB,IAAE,gBAAgB,CAAC,OAAO,CAAC,CAAO;QAIvE,6BAAK,SAAS,EAAC,8BAA8B,iBAAa,MAAM,IAC7D,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CACnC,oBAAC,IAAI,IAAO,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAI,GAAG,EAAE,CAAC,GAAI,CACtE,CAAC,CACE,CACF,CACP,CAAC,CAAC,CAAC,CACF,0CAAG,gBAAgB,CAAC,OAAO,CAAC,CAAI,CACjC,CAAA;AACH,CAAC,CAAA;AAED,SAAS,IAAI,CAAC,EACZ,MAAM,EACN,iBAAiB,EACjB,gBAAgB,EAKjB;IACC,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAE,CAAA;IAC9D,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAE,CAAA;IAC5D,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAE,CAAA;IAE9C,OAAO,CACL,2BACE,SAAS,EAAE,UAAU,CAAC,eAAe,EAAE;YACrC,wBAAwB,EAAE,iBAAiB,KAAK,UAAU;SAC3D,CAAC,EACF,OAAO,EAAE,GAAG,EAAE;YACZ,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAc,kCAAkC,UAAU,IAAI,CAAC,CAAA;YACtG,IAAI,QAAQ,EAAE;gBACZ,QAAQ,CAAC,KAAK,EAAE,CAAA;aACjB;QACH,CAAC,sBACiB,UAAU;QAE3B,kBAAkB,CAAC,aAAa,CAAC;;QAAG,gBAAgB,CAAC,IAAI,CAAC,CACzD,CACL,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAA"}
|
@@ -1,4 +1,8 @@
|
|
1
1
|
import React from 'react';
|
2
|
+
export declare const ExpandQuestionContext: React.Context<{
|
3
|
+
expanded: boolean;
|
4
|
+
toggleWriterMode: (s: boolean) => void;
|
5
|
+
}>;
|
2
6
|
declare const _default: React.MemoExoticComponent<React.ComponentType<any>>;
|
3
7
|
export default _default;
|
4
8
|
//# sourceMappingURL=Question.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Question.d.ts","sourceRoot":"","sources":["../../../src/components/exam/Question.tsx"],"names":[],"mappings":"AACA,OAAO,
|
1
|
+
{"version":3,"file":"Question.d.ts","sourceRoot":"","sources":["../../../src/components/exam/Question.tsx"],"names":[],"mappings":"AACA,OAAO,KAAyD,MAAM,OAAO,CAAA;AAU7E,eAAO,MAAM,qBAAqB;cACtB,OAAO;0BACK,OAAO,KAAK,IAAI;EACkB,CAAA;;AA8D1D,wBAAwD"}
|
@@ -1,16 +1,53 @@
|
|
1
1
|
import classNames from 'classnames';
|
2
|
-
import React, { useContext } from 'react';
|
2
|
+
import React, { createContext, useContext, useEffect, useState } from 'react';
|
3
3
|
import { useSelector } from 'react-redux';
|
4
4
|
import { QuestionContext, withQuestionContext } from '../context/QuestionContext';
|
5
5
|
import { SectionContext } from '../context/SectionContext';
|
6
|
+
import { faCompressAlt } from '@fortawesome/free-solid-svg-icons';
|
7
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
8
|
+
import { useExamTranslation } from '../../i18n';
|
9
|
+
export const ExpandQuestionContext = createContext({ expanded: false, toggleWriterMode: () => undefined });
|
6
10
|
function Question({ element, renderChildNodes }) {
|
7
11
|
const casStatus = useSelector((state) => state.cas.casStatus);
|
8
12
|
const { casForbidden } = useContext(SectionContext);
|
9
13
|
const { displayNumber, level } = useContext(QuestionContext);
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
+
const [expanded, setExpanded] = useState(false);
|
15
|
+
const { t } = useExamTranslation();
|
16
|
+
const toggleWriterMode = (expand) => {
|
17
|
+
setExpanded(expand);
|
18
|
+
const body = document.querySelector('body');
|
19
|
+
if (expand) {
|
20
|
+
body === null || body === void 0 ? void 0 : body.classList.add('writer-mode');
|
21
|
+
}
|
22
|
+
else {
|
23
|
+
body === null || body === void 0 ? void 0 : body.classList.remove('writer-mode');
|
24
|
+
body === null || body === void 0 ? void 0 : body.classList.remove('rich-text-editor-focus');
|
25
|
+
setTimeout(() => { var _a; return (_a = document.getElementById(`question-nr-${displayNumber}`)) === null || _a === void 0 ? void 0 : _a.scrollIntoView(); }, 10);
|
26
|
+
}
|
27
|
+
};
|
28
|
+
const handleEsc = (e) => {
|
29
|
+
if (e.key === 'Escape' || e.code === 'Escape') {
|
30
|
+
toggleWriterMode(false);
|
31
|
+
}
|
32
|
+
};
|
33
|
+
useEffect(() => {
|
34
|
+
if (expanded) {
|
35
|
+
window.addEventListener('keydown', handleEsc);
|
36
|
+
}
|
37
|
+
return () => window.removeEventListener('keydown', handleEsc);
|
38
|
+
}, [expanded]);
|
39
|
+
return !casForbidden || casStatus === 'forbidden' ? (React.createElement(ExpandQuestionContext.Provider, { value: { expanded, toggleWriterMode } },
|
40
|
+
React.createElement("div", { className: classNames('e-exam-question', {
|
41
|
+
'e-level-0 e-pad-b-8 e-clearfix': level === 0,
|
42
|
+
'e-mrg-l-8': level > 0,
|
43
|
+
'e-expanded': expanded
|
44
|
+
}) },
|
45
|
+
React.createElement("div", { className: "anchor", id: `question-nr-${displayNumber}` }),
|
46
|
+
expanded ? (React.createElement("div", { className: "full-screen", "data-full-screen-id": displayNumber },
|
47
|
+
React.createElement("button", { className: "expand close", onClick: () => toggleWriterMode(false) },
|
48
|
+
React.createElement(FontAwesomeIcon, { icon: faCompressAlt }),
|
49
|
+
t('close-writing-mode')),
|
50
|
+
renderChildNodes(element))) : (renderChildNodes(element))))) : null;
|
14
51
|
}
|
15
52
|
export default React.memo(withQuestionContext(Question));
|
16
53
|
//# sourceMappingURL=Question.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Question.js","sourceRoot":"","sources":["../../../src/components/exam/Question.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;
|
1
|
+
{"version":3,"file":"Question.js","sourceRoot":"","sources":["../../../src/components/exam/Question.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAG1D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAA;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAG/C,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAA;AAE1D,SAAS,QAAQ,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAsB;IACjE,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,KAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;IAChF,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IACnD,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;IAC5D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAA;IAExD,MAAM,EAAE,CAAC,EAAE,GAAG,kBAAkB,EAAE,CAAA;IAElC,MAAM,gBAAgB,GAAG,CAAC,MAAe,EAAE,EAAE;QAC3C,WAAW,CAAC,MAAM,CAAC,CAAA;QACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC3C,IAAI,MAAM,EAAE;YACV,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;SACnC;aAAM;YACL,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;YACrC,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAA;YAChD,UAAU,CAAC,GAAG,EAAE,WAAC,OAAA,MAAA,QAAQ,CAAC,cAAc,CAAC,eAAe,aAAa,EAAE,CAAC,0CAAE,cAAc,EAAE,CAAA,EAAA,EAAE,EAAE,CAAC,CAAA;SAChG;IACH,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,CAAC,CAAgB,EAAE,EAAE;QACrC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC7C,gBAAgB,CAAC,KAAK,CAAC,CAAA;SACxB;IACH,CAAC,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,EAAE;YACZ,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;SAC9C;QACD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;IAC/D,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;IAEd,OAAO,CAAC,YAAY,IAAI,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,CAClD,oBAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE;QACnE,6BACE,SAAS,EAAE,UAAU,CAAC,iBAAiB,EAAE;gBACvC,gCAAgC,EAAE,KAAK,KAAK,CAAC;gBAC7C,WAAW,EAAE,KAAK,GAAG,CAAC;gBACtB,YAAY,EAAE,QAAQ;aACvB,CAAC;YAEF,6BAAK,SAAS,EAAC,QAAQ,EAAC,EAAE,EAAE,eAAe,aAAa,EAAE,GAAI;YAE7D,QAAQ,CAAC,CAAC,CAAC,CACV,6BAAK,SAAS,EAAC,aAAa,yBAAsB,aAAa;gBAC7D,gCAAQ,SAAS,EAAC,cAAc,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC;oBACrE,oBAAC,eAAe,IAAC,IAAI,EAAE,aAAa,GAAI;oBACvC,CAAC,CAAC,oBAAoB,CAAC,CACjB;gBACR,gBAAgB,CAAC,OAAO,CAAC,CACtB,CACP,CAAC,CAAC,CAAC,CACF,gBAAgB,CAAC,OAAO,CAAC,CAC1B,CACG,CACyB,CAClC,CAAC,CAAC,CAAC,IAAI,CAAA;AACV,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAA"}
|
@@ -13,7 +13,7 @@ const QuestionTitle = ({ element, renderChildNodes }) => {
|
|
13
13
|
return (React.createElement(React.Fragment, null,
|
14
14
|
React.createElement(Tag, { id: id, className: classNames('exam-question-title', { 'e-normal e-font-size-m': level > 0 }) },
|
15
15
|
React.createElement("strong", { className: classNames('exam-question-title__display-number', {
|
16
|
-
'exam-question-title__display-number--indented': level > 0
|
16
|
+
'exam-question-title__display-number--indented': level > 0
|
17
17
|
}) }, `${formatQuestionDisplayNumber(displayNumber)} `),
|
18
18
|
renderChildNodes(element),
|
19
19
|
" ",
|
@@ -6,6 +6,11 @@ export interface ScreenshotError {
|
|
6
6
|
key: 'screenshot-too-big' | 'screenshot-byte-limit-reached' | 'screenshot-upload-failed';
|
7
7
|
options?: TOptions;
|
8
8
|
}
|
9
|
+
type ErrorResponse = {
|
10
|
+
response: {
|
11
|
+
status: number;
|
12
|
+
};
|
13
|
+
};
|
9
14
|
interface Props {
|
10
15
|
answer?: RichTextAnswerT;
|
11
16
|
className?: string;
|
@@ -24,7 +29,7 @@ export default class RichTextAnswer extends React.PureComponent<Props> {
|
|
24
29
|
private lastHTML;
|
25
30
|
constructor(props: Props);
|
26
31
|
componentDidMount(): void;
|
27
|
-
handleSaveError: (err:
|
32
|
+
handleSaveError: (err: ErrorResponse) => void;
|
28
33
|
handleChange: (data: {
|
29
34
|
answerHTML: string;
|
30
35
|
answerText: string;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"RichTextAnswer.d.ts","sourceRoot":"","sources":["../../../src/components/exam/RichTextAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,cAAc,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;
|
1
|
+
{"version":3,"file":"RichTextAnswer.d.ts","sourceRoot":"","sources":["../../../src/components/exam/RichTextAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,cAAc,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAOhE,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,oBAAoB,GAAG,+BAA+B,GAAG,0BAA0B,CAAA;IACxF,OAAO,CAAC,EAAE,QAAQ,CAAA;CACnB;AAED,KAAK,aAAa,GAAG;IAAE,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAAA;AAErD,UAAU,KAAK;IACb,MAAM,CAAC,EAAE,eAAe,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAA;IAC1D,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAA;IACzC,cAAc,EAAE,CAAC,UAAU,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACrD,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC;IACpE,MAAM,CAAC,WAAW,mCAAoB;IAC9B,OAAO,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,iBAAiB,CAAC,CAAA;IAC5D,OAAO,CAAC,GAAG,CAAiC;IAC5C,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,KAAK,EAAE,KAAK;IAMxB,iBAAiB,IAAI,IAAI;IAwBzB,eAAe,QAAS,aAAa,KAAG,IAAI,CAa3C;IAED,YAAY,SAAU;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,KAAG,IAAI,CAKtE;IAED,kBAAkB,IAAI,IAAI;IAS1B,MAAM,IAAI,KAAK,CAAC,SAAS;CAkC1B"}
|
@@ -2,6 +2,10 @@ import * as _ from 'lodash-es';
|
|
2
2
|
import React from 'react';
|
3
3
|
import { CommonExamContext } from '../context/CommonExamContext';
|
4
4
|
import { makeRichText } from 'rich-text-editor';
|
5
|
+
import { ExpandQuestionContext } from './Question';
|
6
|
+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
7
|
+
import { faExpandAlt } from '@fortawesome/free-solid-svg-icons';
|
8
|
+
import { useExamTranslation } from '../../i18n';
|
5
9
|
class RichTextAnswer extends React.PureComponent {
|
6
10
|
constructor(props) {
|
7
11
|
super(props);
|
@@ -38,7 +42,7 @@ class RichTextAnswer extends React.PureComponent {
|
|
38
42
|
screenshotSaver: ({ data, type }) => saveScreenshot(data instanceof Blob ? data : new Blob([data], { type })).catch((err) => {
|
39
43
|
this.handleSaveError(err);
|
40
44
|
throw err; // Rethrow error so rich-text-editor can handle it.
|
41
|
-
})
|
45
|
+
})
|
42
46
|
}, this.handleChange);
|
43
47
|
}
|
44
48
|
}
|
@@ -51,9 +55,17 @@ class RichTextAnswer extends React.PureComponent {
|
|
51
55
|
}
|
52
56
|
render() {
|
53
57
|
const { className, questionId, invalid, lang, labelledBy } = this.props;
|
54
|
-
return (React.createElement(
|
58
|
+
return (React.createElement(ExpandQuestionContext.Consumer, null, ({ expanded, toggleWriterMode }) => (React.createElement(React.Fragment, null,
|
59
|
+
React.createElement("div", { ref: this.ref, className: className, "data-question-id": questionId, role: "textbox", "aria-multiline": "true", "aria-invalid": invalid, tabIndex: 0, lang: lang, "aria-labelledby": labelledBy, id: String(questionId) }),
|
60
|
+
!expanded && (React.createElement("button", { className: "expand open", onClick: () => toggleWriterMode(true), "aria-labelledby": "expand-label", "aria-owns": String(questionId) },
|
61
|
+
React.createElement(ExpandButtonLabel, null),
|
62
|
+
React.createElement(FontAwesomeIcon, { icon: faExpandAlt })))))));
|
55
63
|
}
|
56
64
|
}
|
57
65
|
RichTextAnswer.contextType = CommonExamContext;
|
58
66
|
export default RichTextAnswer;
|
67
|
+
const ExpandButtonLabel = () => {
|
68
|
+
const { t } = useExamTranslation();
|
69
|
+
return (React.createElement("div", { className: "label", id: "expand-label" }, t('open-writing-mode')));
|
70
|
+
};
|
59
71
|
//# sourceMappingURL=RichTextAnswer.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"RichTextAnswer.js","sourceRoot":"","sources":["../../../src/components/exam/RichTextAnswer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;
|
1
|
+
{"version":3,"file":"RichTextAnswer.js","sourceRoot":"","sources":["../../../src/components/exam/RichTextAnswer.tsx"],"names":[],"mappings":"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"}
|
@@ -31,11 +31,11 @@ function CasControls(props) {
|
|
31
31
|
return (React.createElement("div", { className: "e-cas-controls" }, props.casStatus === 'forbidden' ? (React.createElement("div", { className: "e-text-center" },
|
32
32
|
React.createElement("hr", { className: "e-exam-separator" }),
|
33
33
|
React.createElement("p", { id: "e-cas-controls-forbidden-description" }, t('cas.forbidden.infoText')),
|
34
|
-
React.createElement("button", { className: "e-button", id: "allow-cas", onClick: () => dispatch(allowCas(casCountdownDuration)), "aria-describedby": "e-cas-controls-forbidden-description" }, t('cas.forbidden.buttonText')))) : props.casStatus === 'allowing' ? (React.createElement("div", { className: "e-text-center", ref:
|
34
|
+
React.createElement("button", { className: "e-button", id: "allow-cas", onClick: () => dispatch(allowCas(casCountdownDuration)), "aria-describedby": "e-cas-controls-forbidden-description" }, t('cas.forbidden.buttonText')))) : props.casStatus === 'allowing' ? (React.createElement("div", { className: "e-text-center", ref: e => e != null && casCountdownDuration === props.durationRemaining && e.scrollIntoView() },
|
35
35
|
React.createElement("hr", { className: "e-exam-separator" }),
|
36
36
|
React.createElement("p", { id: "e-cas-controls-allowing-description" }, t('cas.allowing.infoText')),
|
37
37
|
React.createElement(ProgressBar, { className: "e-mrg-b-2", duration: casCountdownDuration, durationRemaining: props.durationRemaining }),
|
38
|
-
React.createElement("button", { className: "e-button", id: "allow-cas-cancelled", onClick: () => dispatch(allowCasCancelled()), ref:
|
38
|
+
React.createElement("button", { className: "e-button", id: "allow-cas-cancelled", onClick: () => dispatch(allowCasCancelled()), ref: e => e != null && casCountdownDuration === props.durationRemaining && e.focus(), "aria-describedby": "e-cas-controls-allowing-description" }, t('cas.allowing.cancel', { count: props.durationRemaining })))) : (React.createElement("div", { className: "notification e-text-left e-mrg-b-0" }, t('cas.allowed.infoText')))));
|
39
39
|
}
|
40
40
|
export default React.memo(withSectionContext(Section));
|
41
41
|
//# sourceMappingURL=Section.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Section.js","sourceRoot":"","sources":["../../../src/components/exam/Section.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,WAAW,MAAM,wBAAwB,CAAA;AAChD,OAAO,cAAc,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,KAAK,CAAC,MAAM,WAAW,CAAA;AAE9B,SAAS,eAAe;IACtB,MAAM,EAAE,CAAC,EAAE,GAAG,kBAAkB,EAAE,CAAA;IAClC,OAAO,CACL;QACE,gCAAK,CAAC,CAAC,aAAa,CAAC,CAAM,CACzB,CACL,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAsB;IAChE,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,KAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;IACnF,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAClE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAA;IAClD,MAAM,WAAW,GAAG,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAEhD,OAAO,CACL,oBAAC,cAAc,IAAC,SAAS,EAAC,cAAc,qBAAkB,cAAc,CAAC,aAAa,CAAC;QACpF,gBAAgB,CAAC,OAAO,CAAC;QACzB,YAAY,IAAI,oBAAC,WAAW,OAAK,QAAQ,GAAI;QAC7C,WAAW,IAAI,oBAAC,eAAe,OAAG,CACpB,CAClB,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAe;IAClC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAA;IAC9B,MAAM,EAAE,CAAC,EAAE,GAAG,kBAAkB,EAAE,CAAA;IAClC,MAAM,EAAE,oBAAoB,EAAE,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;IAExD,OAAO,CACL,6BAAK,SAAS,EAAC,gBAAgB,IAC5B,KAAK,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,CACjC,6BAAK,SAAS,EAAC,eAAe;QAC5B,4BAAI,SAAS,EAAC,kBAAkB,GAAG;QACnC,2BAAG,EAAE,EAAC,sCAAsC,IAAE,CAAC,CAAC,wBAAwB,CAAC,CAAK;QAC9E,gCACE,SAAS,EAAC,UAAU,EACpB,EAAE,EAAC,WAAW,EACd,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,sBACtC,sCAAsC,IAEtD,CAAC,CAAC,0BAA0B,CAAC,CACvB,CACL,CACP,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,CACnC,6BACE,SAAS,EAAC,eAAe,EACzB,GAAG,EAAE,CAAC,CAAC,EAAE,
|
1
|
+
{"version":3,"file":"Section.js","sourceRoot":"","sources":["../../../src/components/exam/Section.tsx"],"names":[],"mappings":"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"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { ValidationError } from '../../../validateAnswers';
|
3
|
-
export declare function ErrorIndicatorForErrors({ validationErrors, inExam
|
3
|
+
export declare function ErrorIndicatorForErrors({ validationErrors, inExam }: {
|
4
4
|
validationErrors: ValidationError[];
|
5
5
|
inExam: boolean;
|
6
6
|
}): JSX.Element | null;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ErrorIndicator.d.ts","sourceRoot":"","sources":["../../../../src/components/exam/internal/ErrorIndicator.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAqB,MAAM,OAAO,CAAA;AAIzC,OAAO,EAA8B,eAAe,EAAE,MAAM,0BAA0B,CAAA;AA2BtF,wBAAgB,uBAAuB,CAAC,EACtC,gBAAgB,EAChB,MAAM,
|
1
|
+
{"version":3,"file":"ErrorIndicator.d.ts","sourceRoot":"","sources":["../../../../src/components/exam/internal/ErrorIndicator.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAqB,MAAM,OAAO,CAAA;AAIzC,OAAO,EAA8B,eAAe,EAAE,MAAM,0BAA0B,CAAA;AA2BtF,wBAAgB,uBAAuB,CAAC,EACtC,gBAAgB,EAChB,MAAM,EACP,EAAE;IACD,gBAAgB,EAAE,eAAe,EAAE,CAAA;IACnC,MAAM,EAAE,OAAO,CAAA;CAChB,sBAyBA;;AA2BD,wBAAyC"}
|
@@ -7,7 +7,7 @@ import { useExamTranslation } from '../../../i18n';
|
|
7
7
|
import AnsweringInstructions from '../../AnsweringInstructions';
|
8
8
|
import { CommonExamContext } from '../../context/CommonExamContext';
|
9
9
|
import classNames from 'classnames';
|
10
|
-
const ExtraAnswerError =
|
10
|
+
const ExtraAnswerError = props => {
|
11
11
|
const { t } = useExamTranslation();
|
12
12
|
const { displayNumber, elementType } = props;
|
13
13
|
return (React.createElement("div", null,
|
@@ -24,11 +24,11 @@ const AnswerTooLongError = ({ displayNumber, characterCount }) => {
|
|
24
24
|
" ",
|
25
25
|
t('answer-errors.answer-too-long', { count: characterCount })));
|
26
26
|
};
|
27
|
-
export function ErrorIndicatorForErrors({ validationErrors, inExam
|
27
|
+
export function ErrorIndicatorForErrors({ validationErrors, inExam }) {
|
28
28
|
return validationErrors.length > 0 ? (React.createElement("div", { className: classNames({ 'error-indicator e-bg-color-error e-color-off-white': inExam }, 'e-columns e-columns--inline e-font-size-xs e-pad-1 e-mrg-r-1'), role: "alert" },
|
29
29
|
React.createElement("div", { className: "e-column e-column--narrow" },
|
30
30
|
React.createElement(FontAwesomeIcon, { size: "lg", icon: faExclamationTriangle, fixedWidth: true, className: "e-mrg-r-1" })),
|
31
|
-
React.createElement("div", { className: "e-column e-column--gapless" }, validationErrors.map(
|
31
|
+
React.createElement("div", { className: "e-column e-column--gapless" }, validationErrors.map(validationError => {
|
32
32
|
const key = validationError.type + validationError.displayNumber;
|
33
33
|
switch (validationError.type) {
|
34
34
|
case 'ExtraAnswer':
|
@@ -49,7 +49,7 @@ const FallbackTitle = ({ elementType, displayNumber }) => {
|
|
49
49
|
// we can delete this code on some day. 💩
|
50
50
|
if (elementType === 'section') {
|
51
51
|
const { root } = useContext(CommonExamContext);
|
52
|
-
const section = findChildElement(root,
|
52
|
+
const section = findChildElement(root, e => e.localName === 'section' && e.getAttribute('display-number') === displayNumber);
|
53
53
|
if (section) {
|
54
54
|
const sectionTitle = findChildElement(section, 'section-title');
|
55
55
|
if (sectionTitle) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ErrorIndicator.js","sourceRoot":"","sources":["../../../../src/components/exam/internal/ErrorIndicator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AAChE,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,OAAO,qBAAqB,MAAM,6BAA6B,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAA;AAEnE,OAAO,UAAU,MAAM,YAAY,CAAA;AAEnC,MAAM,gBAAgB,GAAyC,
|
1
|
+
{"version":3,"file":"ErrorIndicator.js","sourceRoot":"","sources":["../../../../src/components/exam/internal/ErrorIndicator.tsx"],"names":[],"mappings":"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"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import classNames from 'classnames';
|
2
2
|
import React, { useEffect, useRef, useState } from 'react';
|
3
|
-
const ProgressBar = ({ duration, durationRemaining, className
|
3
|
+
const ProgressBar = ({ duration, durationRemaining, className }) => {
|
4
4
|
const progressBarRef = useRef(null);
|
5
5
|
const [animating, setAnimating] = useState(false);
|
6
6
|
useEffect(() => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ProgressBar.js","sourceRoot":"","sources":["../../../../src/components/exam/internal/ProgressBar.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE1D,MAAM,WAAW,GAAiG,CAAC,EACjH,QAAQ,EACR,iBAAiB,EACjB,SAAS,
|
1
|
+
{"version":3,"file":"ProgressBar.js","sourceRoot":"","sources":["../../../../src/components/exam/internal/ProgressBar.tsx"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE1D,MAAM,WAAW,GAAiG,CAAC,EACjH,QAAQ,EACR,iBAAiB,EACjB,SAAS,EACV,EAAE,EAAE;IACH,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IACnD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,SAAS,CAAC,GAAG,EAAE;QACb,uEAAuE;QACvE,uEAAuE;QACvE,wEAAwE;QACxE,wEAAwE;QACxE,yCAAyC;QACzC,cAAc,CAAC,OAAQ,CAAC,SAAS,CAAA;QACjC,YAAY,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CACL,6BAAK,SAAS,EAAE,UAAU,CAAC,gBAAgB,EAAE,SAAS,CAAC,EAAE,GAAG,EAAE,cAAc;QAC1E,6BACE,SAAS,EAAE,UAAU,CAAC,sBAAsB,EAAE,EAAE,iCAAiC,EAAE,SAAS,EAAE,CAAC,EAC/F,KAAK,EAAE,EAAE,kBAAkB,EAAE,GAAG,QAAQ,GAAG,EAAE,EAC7C,IAAI,EAAC,aAAa,mBACH,QAAQ,mBACR,CAAC,mBACD,QAAQ,GAAG,iBAAiB,GAC3C,CACE,CACP,CAAA;AACH,CAAC,CAAA;AAED,eAAe,WAAW,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"TextAnswerInput.d.ts","sourceRoot":"","sources":["../../../../src/components/exam/internal/TextAnswerInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAEnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;
|
1
|
+
{"version":3,"file":"TextAnswerInput.d.ts","sourceRoot":"","sources":["../../../../src/components/exam/internal/TextAnswerInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAA+D,MAAM,OAAO,CAAA;AAEnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AAgNpE,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE5D;;AAED,wBAA0C"}
|
@@ -48,20 +48,20 @@ const TextAnswerInput = ({ element, className }) => {
|
|
48
48
|
}
|
49
49
|
}
|
50
50
|
});
|
51
|
-
const onChange = useCallback(
|
51
|
+
const onChange = useCallback(event => {
|
52
52
|
const value = event.currentTarget.value.trim();
|
53
53
|
const answer = {
|
54
54
|
type: 'text',
|
55
55
|
questionId,
|
56
56
|
value,
|
57
57
|
characterCount: getCharacterCount(value),
|
58
|
-
displayNumber
|
58
|
+
displayNumber
|
59
59
|
};
|
60
60
|
dispatch(saveAnswer(answer));
|
61
61
|
setScreenshotError(undefined);
|
62
62
|
}, [questionId, displayNumber]);
|
63
63
|
const [integerValue, setIntegerValue] = useState('');
|
64
|
-
const onIntegerChange = useCallback(
|
64
|
+
const onIntegerChange = useCallback(event => {
|
65
65
|
event.preventDefault();
|
66
66
|
event.currentTarget.classList.remove('text-answer--integer--input-error');
|
67
67
|
const patternForIntegers = /^-?\d*$/;
|
@@ -73,7 +73,7 @@ const TextAnswerInput = ({ element, className }) => {
|
|
73
73
|
questionId,
|
74
74
|
value,
|
75
75
|
characterCount: getCharacterCount(value),
|
76
|
-
displayNumber
|
76
|
+
displayNumber
|
77
77
|
};
|
78
78
|
dispatch(saveAnswer(answer));
|
79
79
|
setScreenshotError(undefined);
|
@@ -91,7 +91,7 @@ const TextAnswerInput = ({ element, className }) => {
|
|
91
91
|
questionId,
|
92
92
|
value: answerHtml,
|
93
93
|
characterCount: getCharacterCount(answerText),
|
94
|
-
displayNumber
|
94
|
+
displayNumber
|
95
95
|
};
|
96
96
|
dispatch(saveAnswer(answer));
|
97
97
|
setScreenshotError(undefined);
|
@@ -104,14 +104,15 @@ const TextAnswerInput = ({ element, className }) => {
|
|
104
104
|
case 'rich-text':
|
105
105
|
return (React.createElement(React.Fragment, null,
|
106
106
|
maxLength != null && React.createElement(AnswerLengthInfo, { maxLength, id: answerLengthInfoId(element) }),
|
107
|
-
React.createElement(
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
107
|
+
React.createElement("div", { className: "text-answer-container" },
|
108
|
+
React.createElement(RichTextAnswer, { answer: answer, className: classNames('text-answer text-answer--rich-text', className), saveScreenshot: data => examServerApi.saveScreenshot(questionId, data), onChange: onRichTextChange, onError: onError, questionId: questionId, lang: lang, invalid: invalid, labelledBy: labelledBy }),
|
109
|
+
React.createElement(AnswerToolbar, { answer,
|
110
|
+
element,
|
111
|
+
selectAnswerVersion: wrappedSelectAnswerVersion,
|
112
|
+
showAnswerHistory,
|
113
|
+
supportsAnswerHistory,
|
114
|
+
screenshotError,
|
115
|
+
validationError }))));
|
115
116
|
case 'integer':
|
116
117
|
return (React.createElement("span", { className: "e-nowrap" },
|
117
118
|
React.createElement("input", { type: "text", className: classNames('text-answer text-answer--single-line text-answer--integer', className), value: integerValue, onChange: onIntegerChange, onFocus: onFocus, onBlur: onBlur, ref: ref, "data-question-id": questionId, lang: lang, "aria-describedby": scoreId, "aria-labelledby": labelledBy }),
|