@digabi/exam-engine-core 23.14.4 → 23.14.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/__tests__/playwright/exam/AudioAnswer.test.js +20 -0
  2. package/dist/__tests__/playwright/exam/AudioAnswer.test.js.map +1 -1
  3. package/dist/__tests__/playwright/exam/AudioPlayer.test.js +4 -5
  4. package/dist/__tests__/playwright/exam/AudioPlayer.test.js.map +1 -1
  5. package/dist/__tests__/playwright/pages/AudioPlayer.page.d.ts +2 -1
  6. package/dist/__tests__/playwright/pages/AudioPlayer.page.d.ts.map +1 -1
  7. package/dist/__tests__/playwright/pages/AudioPlayer.page.js +2 -1
  8. package/dist/__tests__/playwright/pages/AudioPlayer.page.js.map +1 -1
  9. package/dist/__tests__/playwright/stories/exam/AudioAnswer.story.d.ts.map +1 -1
  10. package/dist/__tests__/playwright/stories/exam/AudioAnswer.story.js +1 -2
  11. package/dist/__tests__/playwright/stories/exam/AudioAnswer.story.js.map +1 -1
  12. package/dist/__tests__/tsconfig.tsbuildinfo +1 -1
  13. package/dist/components/results/AudioAnswer.d.ts.map +1 -1
  14. package/dist/components/results/AudioAnswer.js +3 -2
  15. package/dist/components/results/AudioAnswer.js.map +1 -1
  16. package/dist/components/shared/internal/AudioPlayer.d.ts.map +1 -1
  17. package/dist/components/shared/internal/AudioPlayer.js +3 -0
  18. package/dist/components/shared/internal/AudioPlayer.js.map +1 -1
  19. package/dist/index.d.ts +1 -0
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +1 -0
  22. package/dist/index.js.map +1 -1
  23. package/dist/indexedDBExamServerAPI.d.ts +4 -0
  24. package/dist/indexedDBExamServerAPI.d.ts.map +1 -0
  25. package/dist/indexedDBExamServerAPI.js +97 -0
  26. package/dist/indexedDBExamServerAPI.js.map +1 -0
  27. package/dist/main-bundle.js +13 -13
  28. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"AudioAnswer.d.ts","sourceRoot":"","sources":["../../../src/components/results/AudioAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAWjE,iBAAS,WAAW,CAAC,gBAAgB,EAAE,kBAAkB,qBAgCxD;;AAED,wBAAsC"}
1
+ {"version":3,"file":"AudioAnswer.d.ts","sourceRoot":"","sources":["../../../src/components/results/AudioAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAWjE,iBAAS,WAAW,CAAC,gBAAgB,EAAE,kBAAkB,qBAoCxD;;AAED,wBAAsC"}
@@ -24,8 +24,9 @@ function AudioAnswer(audioAnswerProps) {
24
24
  React.createElement(ResultsExamQuestionManualScore, { scores: score, maxScore, displayNumber, questionId }),
25
25
  React.createElement("div", { className: classNames('audio-answer', {
26
26
  'no-answer': !value
27
- }), "aria-description": !value ? i18n.t('examineExam.questionHasNoAnswer') : undefined },
28
- React.createElement(AudioPlayer, { src: value, variant: "recorded" })),
27
+ }), "aria-description": !value ? i18n.t('examineExam.questionHasNoAnswer') : undefined }, value ? (React.createElement(AudioPlayer, { src: value, variant: "recorded" })) : (React.createElement("span", { className: "e-normal" },
28
+ " ",
29
+ i18n.t('examineExam.questionHasNoAnswer')))),
29
30
  comment && (React.createElement(React.Fragment, null,
30
31
  React.createElement("h5", null, t('comment')),
31
32
  React.createElement("p", { className: "e-italic" }, comment)))));
@@ -1 +1 @@
1
- {"version":3,"file":"AudioAnswer.js","sourceRoot":"","sources":["../../../src/components/results/AudioAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAErE,OAAO,8BAA8B,MAAM,gCAAgC,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,WAAW,MAAM,gCAAgC,CAAA;AAExD,SAAS,WAAW,CAAC,gBAAoC;;IACvD,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAA;IACpC,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;IAC/C,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,kBAAkB,EAAE,CAAA;IACxC,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAClE,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAE,CAAA;IAC/D,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAA2B,CAAA;IACxE,MAAM,KAAK,GAAG,MAAM,IAAI,MAAM,CAAC,KAAK,CAAA;IACpC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAE,CAAA;IAC3D,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAClH,MAAM,OAAO,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,0CAAE,OAAO,CAAA;IAE1C,OAAO,CACL;QACE,oBAAC,8BAA8B,IAAO,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,GAAM;QAC9F,6BACE,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE;gBACpC,WAAW,EAAE,CAAC,KAAK;aACpB,CAAC,sBACgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC,SAAS;YAEhF,oBAAC,WAAW,IAAC,GAAG,EAAE,KAAM,EAAE,OAAO,EAAC,UAAU,GAAG,CAC3C;QACL,OAAO,IAAI,CACV;YACE,gCAAK,CAAC,CAAC,SAAS,CAAC,CAAM;YACvB,2BAAG,SAAS,EAAC,UAAU,IAAE,OAAO,CAAK,CACpC,CACJ,CACA,CACJ,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA"}
1
+ {"version":3,"file":"AudioAnswer.js","sourceRoot":"","sources":["../../../src/components/results/AudioAnswer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAErE,OAAO,8BAA8B,MAAM,gCAAgC,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,UAAU,MAAM,YAAY,CAAA;AACnC,OAAO,WAAW,MAAM,gCAAgC,CAAA;AAExD,SAAS,WAAW,CAAC,gBAAoC;;IACvD,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,CAAA;IACpC,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,eAAe,CAAC,CAAA;IAC/C,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,kBAAkB,EAAE,CAAA;IACxC,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IAClE,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAE,CAAA;IAC/D,MAAM,MAAM,GAAG,mBAAmB,CAAC,UAAU,CAA2B,CAAA;IACxE,MAAM,KAAK,GAAG,MAAM,IAAI,MAAM,CAAC,KAAK,CAAA;IACpC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC3C,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,EAAE,WAAW,CAAE,CAAA;IAC3D,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAClH,MAAM,OAAO,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,UAAU,0CAAE,OAAO,CAAA;IAE1C,OAAO,CACL;QACE,oBAAC,8BAA8B,IAAO,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,GAAM;QAC9F,6BACE,SAAS,EAAE,UAAU,CAAC,cAAc,EAAE;gBACpC,WAAW,EAAE,CAAC,KAAK;aACpB,CAAC,sBACgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC,SAAS,IAE/E,KAAK,CAAC,CAAC,CAAC,CACP,oBAAC,WAAW,IAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAC,UAAU,GAAG,CAC/C,CAAC,CAAC,CAAC,CACF,8BAAM,SAAS,EAAC,UAAU;;YAAG,IAAI,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAQ,CAC/E,CACG;QACL,OAAO,IAAI,CACV;YACE,gCAAK,CAAC,CAAC,SAAS,CAAC,CAAM;YACvB,2BAAG,SAAS,EAAC,UAAU,IAAE,OAAO,CAAK,CACpC,CACJ,CACA,CACJ,CAAA;AACH,CAAC;AAED,eAAe,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"AudioPlayer.d.ts","sourceRoot":"","sources":["../../../../src/components/shared/internal/AudioPlayer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAA;AAIvE,UAAU,gBAAgB;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,UAAU,GAAG,YAAY,CAAA;IACnC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAuH3C,CAAA;AAED,eAAe,WAAW,CAAA"}
1
+ {"version":3,"file":"AudioPlayer.d.ts","sourceRoot":"","sources":["../../../../src/components/shared/internal/AudioPlayer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmD,MAAM,OAAO,CAAA;AAIvE,UAAU,gBAAgB;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,UAAU,GAAG,YAAY,CAAA;IACnC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAyH3C,CAAA;AAED,eAAe,WAAW,CAAA"}
@@ -43,6 +43,7 @@ const AudioPlayer = ({ src, variant = 'repeatable', labelId }) => {
43
43
  audio.addEventListener('pause', setPlayingFalse);
44
44
  audio.addEventListener('ended', setPlayingFalse);
45
45
  return () => {
46
+ setIsPlaying(false);
46
47
  audio.removeEventListener('loadeddata', onDurationChange);
47
48
  audio.removeEventListener('loadedmetadata', onDurationChange);
48
49
  audio.removeEventListener('durationchange', onDurationChange);
@@ -70,6 +71,8 @@ const AudioPlayer = ({ src, variant = 'repeatable', labelId }) => {
70
71
  if (seekTime !== undefined)
71
72
  audioRef.current.currentTime = seekTime;
72
73
  const newTime = audioRef.current.currentTime;
74
+ if (!Number.isFinite(newTime))
75
+ return;
73
76
  // for some reason duration is 0 here, so we use the audioRef
74
77
  // Ensure duration is not NaN or 0 before division to prevent issues
75
78
  const dur = !Number.isFinite(audioRef.current.duration) ? 0 : audioRef.current.duration;
@@ -1 +1 @@
1
- {"version":3,"file":"AudioPlayer.js","sourceRoot":"","sources":["../../../../src/components/shared/internal/AudioPlayer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AudioPlayer.js","sourceRoot":"","sources":["../../../../src/components/shared/internal/AudioPlayer.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@ export * from './types/ExamAnswer';
11
11
  export * from './types/ExamServerAPI';
12
12
  export * from './types/GradingStructure';
13
13
  export * from './types/Score';
14
+ export { indexedDBExamServerAPI } from './indexedDBExamServerAPI';
14
15
  export interface ExamBundle {
15
16
  Attachments: typeof Attachments;
16
17
  Exam: typeof Exam;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAA;AAC7B,OAAO,WAAW,MAAM,sCAAsC,CAAA;AAC9D,OAAO,IAAI,MAAM,wBAAwB,CAAA;AACzC,OAAO,mBAAmB,MAAM,uDAAuD,CAAA;AACvF,OAAO,OAAO,MAAM,8BAA8B,CAAA;AAClD,OAAO,SAAS,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;AACrE,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAClE,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,eAAe,CAAA;AAE7B,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,OAAO,WAAW,CAAA;IAC/B,IAAI,EAAE,OAAO,IAAI,CAAA;IACjB,SAAS,EAAE,OAAO,SAAS,CAAA;IAC3B,OAAO,EAAE,OAAO,OAAO,CAAA;CACxB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAA;AAC7B,OAAO,WAAW,MAAM,sCAAsC,CAAA;AAC9D,OAAO,IAAI,MAAM,wBAAwB,CAAA;AACzC,OAAO,mBAAmB,MAAM,uDAAuD,CAAA;AACvF,OAAO,OAAO,MAAM,8BAA8B,CAAA;AAClD,OAAO,SAAS,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;AACrE,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAClE,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,eAAe,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAEjE,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,OAAO,WAAW,CAAA;IAC/B,IAAI,EAAE,OAAO,IAAI,CAAA;IACjB,SAAS,EAAE,OAAO,SAAS,CAAA;IAC3B,OAAO,EAAE,OAAO,OAAO,CAAA;CACxB"}
package/dist/index.js CHANGED
@@ -10,4 +10,5 @@ export * from './types/ExamAnswer';
10
10
  export * from './types/ExamServerAPI';
11
11
  export * from './types/GradingStructure';
12
12
  export * from './types/Score';
13
+ export { indexedDBExamServerAPI } from './indexedDBExamServerAPI';
13
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAA;AAC7B,OAAO,WAAW,MAAM,sCAAsC,CAAA;AAC9D,OAAO,IAAI,MAAM,wBAAwB,CAAA;AACzC,OAAO,mBAAmB,MAAM,uDAAuD,CAAA;AACvF,OAAO,OAAO,MAAM,8BAA8B,CAAA;AAClD,OAAO,SAAS,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAClE,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAA;AAC7B,OAAO,WAAW,MAAM,sCAAsC,CAAA;AAC9D,OAAO,IAAI,MAAM,wBAAwB,CAAA;AACzC,OAAO,mBAAmB,MAAM,uDAAuD,CAAA;AACvF,OAAO,OAAO,MAAM,8BAA8B,CAAA;AAClD,OAAO,SAAS,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;AAErE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAClE,cAAc,oBAAoB,CAAA;AAClC,cAAc,uBAAuB,CAAA;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,eAAe,CAAA;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { ExamServerAPI } from '.';
2
+ /** Creates a mock Exam Server API, backed by a local IndexedDB database. */
3
+ export declare function indexedDBExamServerAPI(examUuid: string, resolveAttachment: (s: string) => string): ExamServerAPI;
4
+ //# sourceMappingURL=indexedDBExamServerAPI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexedDBExamServerAPI.d.ts","sourceRoot":"","sources":["../src/indexedDBExamServerAPI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,aAAa,EAAE,MAAM,GAAG,CAAA;AAG7C,4EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,aAAa,CAqGhH"}
@@ -0,0 +1,97 @@
1
+ import Dexie from 'dexie';
2
+ /** Creates a mock Exam Server API, backed by a local IndexedDB database. */
3
+ export function indexedDBExamServerAPI(examUuid, resolveAttachment) {
4
+ const db = new (class extends Dexie {
5
+ constructor() {
6
+ super('exam');
7
+ this.version(1).stores({
8
+ answer: '[examUuid+questionId], examUuid',
9
+ audio: 'audioId'
10
+ });
11
+ }
12
+ })();
13
+ // Emulate real exam restricted audio playback by playing the audio files in a
14
+ // HTML5 <audio> tag. The tag is made visible when starting playback and hidden
15
+ // when playback finishes.
16
+ const audioPlayer = new Audio();
17
+ audioPlayer.classList.add('audio-player');
18
+ audioPlayer.controls = true;
19
+ audioPlayer.onended = () => {
20
+ audioPlayer.classList.add('audio-player--animating');
21
+ audioPlayer.classList.remove('audio-player--visible');
22
+ };
23
+ const animationFinished = () => audioPlayer.classList.remove('audio-player--animating');
24
+ audioPlayer.addEventListener('transitionend', animationFinished);
25
+ audioPlayer.addEventListener('transitioncancel', animationFinished);
26
+ document.body.appendChild(audioPlayer);
27
+ const examServerApi = {
28
+ setCasStatus: casStatus => Promise.resolve(casStatus),
29
+ getAnswers: () => db.answer.where({ examUuid }).toArray(),
30
+ saveAnswer: async (answer) => {
31
+ await db.answer.put({ ...answer, examUuid });
32
+ },
33
+ async saveAudio(questionId, audio) {
34
+ const audioId = `${examUuid}-${questionId}`;
35
+ const previouslySavedAudio = await db.audio.get(audioId);
36
+ const combinedAudio = previouslySavedAudio
37
+ ? new Blob([previouslySavedAudio.blob, audio], { type: audio.type })
38
+ : audio;
39
+ return new Promise((resolve, reject) => {
40
+ const reader = new FileReader();
41
+ reader.onload = async () => {
42
+ const dataUrl = String(reader.result);
43
+ await db.audio.put({ blob: combinedAudio, dataUrl, audioId });
44
+ resolve(dataUrl);
45
+ };
46
+ reader.onerror = () => {
47
+ reader.abort();
48
+ reject(reader.error);
49
+ };
50
+ reader.readAsDataURL(combinedAudio);
51
+ });
52
+ },
53
+ async deleteAudio(dataUrl) {
54
+ const audio = await db.audio
55
+ .filter(audio => audio.dataUrl.includes(dataUrl) // operator == does not find audio, because of value.split('/') in AudioAnswer.tsx
56
+ )
57
+ .first();
58
+ if (audio) {
59
+ await db.audio.delete(audio.audioId);
60
+ }
61
+ return Promise.resolve();
62
+ },
63
+ async playAudio(src) {
64
+ audioPlayer.src = resolveAttachment(src);
65
+ try {
66
+ await audioPlayer.play();
67
+ audioPlayer.classList.add('audio-player--visible', 'audio-player--animating');
68
+ return 'ok';
69
+ }
70
+ catch (err) {
71
+ console.error(err);
72
+ return 'other-error';
73
+ }
74
+ },
75
+ async playRestrictedAudio(src) {
76
+ return examServerApi.playAudio(src);
77
+ },
78
+ getRestrictedAudio() {
79
+ throw new Error('other-error');
80
+ },
81
+ saveScreenshot(_, file) {
82
+ return new Promise((resolve, reject) => {
83
+ const reader = new FileReader();
84
+ reader.onload = () => {
85
+ resolve(String(reader.result));
86
+ };
87
+ reader.onerror = () => {
88
+ reader.abort();
89
+ reject(reader.error);
90
+ };
91
+ reader.readAsDataURL(file);
92
+ });
93
+ }
94
+ };
95
+ return examServerApi;
96
+ }
97
+ //# sourceMappingURL=indexedDBExamServerAPI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexedDBExamServerAPI.js","sourceRoot":"","sources":["../src/indexedDBExamServerAPI.ts"],"names":[],"mappings":"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"}