@longsightgroup/qti3-player 0.4.0 → 0.5.4
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/README.md +146 -13
- package/dist/content/content-dom.d.ts +11 -0
- package/dist/content/content-dom.d.ts.map +1 -0
- package/dist/content/content-dom.js +262 -0
- package/dist/content/content-dom.js.map +1 -0
- package/dist/content/content-renderer.d.ts +17 -0
- package/dist/content/content-renderer.d.ts.map +1 -0
- package/dist/content/content-renderer.js +82 -0
- package/dist/content/content-renderer.js.map +1 -0
- package/dist/controls/remove-button.d.ts +3 -0
- package/dist/controls/remove-button.d.ts.map +1 -0
- package/dist/controls/remove-button.js +12 -0
- package/dist/controls/remove-button.js.map +1 -0
- package/dist/index.d.ts +13 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/interactions/choice-interaction.d.ts +4 -0
- package/dist/interactions/choice-interaction.d.ts.map +1 -0
- package/dist/interactions/choice-interaction.js +81 -0
- package/dist/interactions/choice-interaction.js.map +1 -0
- package/dist/interactions/drawing-interaction.d.ts +6 -0
- package/dist/interactions/drawing-interaction.d.ts.map +1 -0
- package/dist/interactions/drawing-interaction.js +401 -0
- package/dist/interactions/drawing-interaction.js.map +1 -0
- package/dist/interactions/end-attempt-interaction.d.ts +4 -0
- package/dist/interactions/end-attempt-interaction.d.ts.map +1 -0
- package/dist/interactions/end-attempt-interaction.js +13 -0
- package/dist/interactions/end-attempt-interaction.js.map +1 -0
- package/dist/interactions/gap-match-interaction.d.ts +4 -0
- package/dist/interactions/gap-match-interaction.d.ts.map +1 -0
- package/dist/interactions/gap-match-interaction.js +277 -0
- package/dist/interactions/gap-match-interaction.js.map +1 -0
- package/dist/interactions/graphic-associate-interaction.d.ts +4 -0
- package/dist/interactions/graphic-associate-interaction.d.ts.map +1 -0
- package/dist/interactions/graphic-associate-interaction.js +297 -0
- package/dist/interactions/graphic-associate-interaction.js.map +1 -0
- package/dist/interactions/graphic-context.d.ts +3 -0
- package/dist/interactions/graphic-context.d.ts.map +1 -0
- package/dist/interactions/graphic-context.js +35 -0
- package/dist/interactions/graphic-context.js.map +1 -0
- package/dist/interactions/hotspot-interaction.d.ts +4 -0
- package/dist/interactions/hotspot-interaction.d.ts.map +1 -0
- package/dist/interactions/hotspot-interaction.js +68 -0
- package/dist/interactions/hotspot-interaction.js.map +1 -0
- package/dist/interactions/hottext-interaction.d.ts +3 -0
- package/dist/interactions/hottext-interaction.d.ts.map +1 -0
- package/dist/interactions/hottext-interaction.js +66 -0
- package/dist/interactions/hottext-interaction.js.map +1 -0
- package/dist/interactions/inline-choice-interaction.d.ts +4 -0
- package/dist/interactions/inline-choice-interaction.d.ts.map +1 -0
- package/dist/interactions/inline-choice-interaction.js +31 -0
- package/dist/interactions/inline-choice-interaction.js.map +1 -0
- package/dist/interactions/inline-controls.d.ts +6 -0
- package/dist/interactions/inline-controls.d.ts.map +1 -0
- package/dist/interactions/inline-controls.js +15 -0
- package/dist/interactions/inline-controls.js.map +1 -0
- package/dist/interactions/interaction-diagnostics.d.ts +7 -0
- package/dist/interactions/interaction-diagnostics.d.ts.map +1 -0
- package/dist/interactions/interaction-diagnostics.js +137 -0
- package/dist/interactions/interaction-diagnostics.js.map +1 -0
- package/dist/interactions/interaction-dispatch.d.ts +2 -0
- package/dist/interactions/interaction-dispatch.d.ts.map +1 -0
- package/dist/interactions/interaction-dispatch.js +2 -0
- package/dist/interactions/interaction-dispatch.js.map +1 -0
- package/dist/interactions/interaction-label.d.ts +4 -0
- package/dist/interactions/interaction-label.d.ts.map +1 -0
- package/dist/interactions/interaction-label.js +8 -0
- package/dist/interactions/interaction-label.js.map +1 -0
- package/dist/interactions/interaction-registry.d.ts +24 -0
- package/dist/interactions/interaction-registry.d.ts.map +1 -0
- package/dist/interactions/interaction-registry.js +138 -0
- package/dist/interactions/interaction-registry.js.map +1 -0
- package/dist/interactions/match-interaction.d.ts +4 -0
- package/dist/interactions/match-interaction.d.ts.map +1 -0
- package/dist/interactions/match-interaction.js +188 -0
- package/dist/interactions/match-interaction.js.map +1 -0
- package/dist/interactions/object-asset.d.ts +8 -0
- package/dist/interactions/object-asset.d.ts.map +1 -0
- package/dist/interactions/object-asset.js +182 -0
- package/dist/interactions/object-asset.js.map +1 -0
- package/dist/interactions/pair-interaction.d.ts +4 -0
- package/dist/interactions/pair-interaction.d.ts.map +1 -0
- package/dist/interactions/pair-interaction.js +125 -0
- package/dist/interactions/pair-interaction.js.map +1 -0
- package/dist/interactions/point-value.d.ts +16 -0
- package/dist/interactions/point-value.d.ts.map +1 -0
- package/dist/interactions/point-value.js +37 -0
- package/dist/interactions/point-value.js.map +1 -0
- package/dist/interactions/portable-custom-interaction.d.ts +16 -0
- package/dist/interactions/portable-custom-interaction.d.ts.map +1 -0
- package/dist/interactions/portable-custom-interaction.js +97 -0
- package/dist/interactions/portable-custom-interaction.js.map +1 -0
- package/dist/interactions/position-object-interaction.d.ts +4 -0
- package/dist/interactions/position-object-interaction.d.ts.map +1 -0
- package/dist/interactions/position-object-interaction.js +177 -0
- package/dist/interactions/position-object-interaction.js.map +1 -0
- package/dist/interactions/routing.d.ts +5 -0
- package/dist/interactions/routing.d.ts.map +1 -0
- package/dist/interactions/routing.js +24 -0
- package/dist/interactions/routing.js.map +1 -0
- package/dist/interactions/select-point-interaction.d.ts +4 -0
- package/dist/interactions/select-point-interaction.d.ts.map +1 -0
- package/dist/interactions/select-point-interaction.js +166 -0
- package/dist/interactions/select-point-interaction.js.map +1 -0
- package/dist/interactions/shared.d.ts +12 -0
- package/dist/interactions/shared.d.ts.map +1 -0
- package/dist/interactions/shared.js +65 -0
- package/dist/interactions/shared.js.map +1 -0
- package/dist/interactions/text-interaction.d.ts +6 -0
- package/dist/interactions/text-interaction.d.ts.map +1 -0
- package/dist/interactions/text-interaction.js +110 -0
- package/dist/interactions/text-interaction.js.map +1 -0
- package/dist/interactions/unsupported-interaction.d.ts +4 -0
- package/dist/interactions/unsupported-interaction.d.ts.map +1 -0
- package/dist/interactions/unsupported-interaction.js +23 -0
- package/dist/interactions/unsupported-interaction.js.map +1 -0
- package/dist/interactions/upload-interaction.d.ts +4 -0
- package/dist/interactions/upload-interaction.d.ts.map +1 -0
- package/dist/interactions/upload-interaction.js +10 -0
- package/dist/interactions/upload-interaction.js.map +1 -0
- package/dist/player/attempt-availability.d.ts +6 -0
- package/dist/player/attempt-availability.d.ts.map +1 -0
- package/dist/player/attempt-availability.js +27 -0
- package/dist/player/attempt-availability.js.map +1 -0
- package/dist/player/content-state.d.ts +19 -0
- package/dist/player/content-state.d.ts.map +1 -0
- package/dist/player/content-state.js +39 -0
- package/dist/player/content-state.js.map +1 -0
- package/dist/player/dynamic-body.d.ts +7 -0
- package/dist/player/dynamic-body.d.ts.map +1 -0
- package/dist/player/dynamic-body.js +28 -0
- package/dist/player/dynamic-body.js.map +1 -0
- package/dist/player/feedback-panel.d.ts +3 -0
- package/dist/player/feedback-panel.d.ts.map +1 -0
- package/dist/player/feedback-panel.js +14 -0
- package/dist/player/feedback-panel.js.map +1 -0
- package/dist/player/fetch-xml.d.ts +2 -0
- package/dist/player/fetch-xml.d.ts.map +1 -0
- package/dist/player/fetch-xml.js +10 -0
- package/dist/player/fetch-xml.js.map +1 -0
- package/dist/player/interaction-render.d.ts +14 -0
- package/dist/player/interaction-render.d.ts.map +1 -0
- package/dist/player/interaction-render.js +51 -0
- package/dist/player/interaction-render.js.map +1 -0
- package/dist/player/render-shell.d.ts +8 -0
- package/dist/player/render-shell.d.ts.map +1 -0
- package/dist/player/render-shell.js +37 -0
- package/dist/player/render-shell.js.map +1 -0
- package/dist/player/resolve-assets.d.ts +3 -0
- package/dist/player/resolve-assets.d.ts.map +1 -0
- package/dist/player/resolve-assets.js +12 -0
- package/dist/player/resolve-assets.js.map +1 -0
- package/dist/player/validation-messages.d.ts +17 -0
- package/dist/player/validation-messages.d.ts.map +1 -0
- package/dist/player/validation-messages.js +33 -0
- package/dist/player/validation-messages.js.map +1 -0
- package/dist/player-adapter.d.ts +62 -0
- package/dist/player-adapter.d.ts.map +1 -0
- package/dist/player-adapter.js +119 -0
- package/dist/player-adapter.js.map +1 -0
- package/dist/player-dev.d.ts +4 -0
- package/dist/player-dev.d.ts.map +1 -0
- package/dist/player-dev.js +14 -0
- package/dist/player-dev.js.map +1 -0
- package/dist/player-element.d.ts +14 -1
- package/dist/player-element.d.ts.map +1 -1
- package/dist/player-element.js +57 -5
- package/dist/player-element.js.map +1 -1
- package/dist/player-locale.d.ts +8 -3
- package/dist/player-locale.d.ts.map +1 -1
- package/dist/player-locale.js +16 -175
- package/dist/player-locale.js.map +1 -1
- package/dist/player-message-catalog-default.d.ts +4 -0
- package/dist/player-message-catalog-default.d.ts.map +1 -0
- package/dist/player-message-catalog-default.js +118 -0
- package/dist/player-message-catalog-default.js.map +1 -0
- package/dist/player-message-catalog-validate.d.ts +31 -0
- package/dist/player-message-catalog-validate.d.ts.map +1 -0
- package/dist/player-message-catalog-validate.js +327 -0
- package/dist/player-message-catalog-validate.js.map +1 -0
- package/dist/player-message-catalog.d.ts +18 -0
- package/dist/player-message-catalog.d.ts.map +1 -0
- package/dist/player-message-catalog.js +40 -0
- package/dist/player-message-catalog.js.map +1 -0
- package/dist/player-message-keys.d.ts +6 -0
- package/dist/player-message-keys.d.ts.map +1 -0
- package/dist/player-message-keys.js +7 -0
- package/dist/player-message-keys.js.map +1 -0
- package/dist/player-message-manifest.d.ts +272 -0
- package/dist/player-message-manifest.d.ts.map +1 -0
- package/dist/player-message-manifest.js +83 -0
- package/dist/player-message-manifest.js.map +1 -0
- package/dist/player-message-overrides.d.ts +3 -0
- package/dist/player-message-overrides.d.ts.map +1 -0
- package/dist/player-message-overrides.js +28 -0
- package/dist/player-message-overrides.js.map +1 -0
- package/dist/player-message-resolver.d.ts +31 -0
- package/dist/player-message-resolver.d.ts.map +1 -0
- package/dist/player-message-resolver.js +110 -0
- package/dist/player-message-resolver.js.map +1 -0
- package/dist/player-messages.d.ts +0 -38
- package/dist/player-messages.d.ts.map +1 -1
- package/dist/player-types.d.ts +12 -2
- package/dist/player-types.d.ts.map +1 -1
- package/dist/reorder/a11y.d.ts +7 -0
- package/dist/reorder/a11y.d.ts.map +1 -0
- package/dist/reorder/a11y.js +34 -0
- package/dist/reorder/a11y.js.map +1 -0
- package/dist/reorder/graphic-order-interaction.d.ts +4 -0
- package/dist/reorder/graphic-order-interaction.d.ts.map +1 -0
- package/dist/reorder/graphic-order-interaction.js +205 -0
- package/dist/reorder/graphic-order-interaction.js.map +1 -0
- package/dist/reorder/list-controls.d.ts +22 -0
- package/dist/reorder/list-controls.d.ts.map +1 -0
- package/dist/reorder/list-controls.js +75 -0
- package/dist/reorder/list-controls.js.map +1 -0
- package/dist/reorder/order-interaction.d.ts +4 -0
- package/dist/reorder/order-interaction.d.ts.map +1 -0
- package/dist/reorder/order-interaction.js +54 -0
- package/dist/reorder/order-interaction.js.map +1 -0
- package/dist/styles/base-styles.d.ts +2 -0
- package/dist/styles/base-styles.d.ts.map +1 -0
- package/dist/styles/base-styles.js +133 -0
- package/dist/styles/base-styles.js.map +1 -0
- package/dist/styles/choice-hottext-styles.d.ts +2 -0
- package/dist/styles/choice-hottext-styles.d.ts.map +1 -0
- package/dist/styles/choice-hottext-styles.js +76 -0
- package/dist/styles/choice-hottext-styles.js.map +1 -0
- package/dist/styles/control-styles.d.ts +2 -0
- package/dist/styles/control-styles.d.ts.map +1 -0
- package/dist/styles/control-styles.js +114 -0
- package/dist/styles/control-styles.js.map +1 -0
- package/dist/styles/drawing-styles.d.ts +2 -0
- package/dist/styles/drawing-styles.d.ts.map +1 -0
- package/dist/styles/drawing-styles.js +30 -0
- package/dist/styles/drawing-styles.js.map +1 -0
- package/dist/styles/gap-match-styles.d.ts +2 -0
- package/dist/styles/gap-match-styles.d.ts.map +1 -0
- package/dist/styles/gap-match-styles.js +33 -0
- package/dist/styles/gap-match-styles.js.map +1 -0
- package/dist/styles/graphic-styles.d.ts +2 -0
- package/dist/styles/graphic-styles.d.ts.map +1 -0
- package/dist/styles/graphic-styles.js +289 -0
- package/dist/styles/graphic-styles.js.map +1 -0
- package/dist/styles/match-pair-styles.d.ts +2 -0
- package/dist/styles/match-pair-styles.d.ts.map +1 -0
- package/dist/styles/match-pair-styles.js +62 -0
- package/dist/styles/match-pair-styles.js.map +1 -0
- package/dist/styles/text-slider-styles.d.ts +2 -0
- package/dist/styles/text-slider-styles.d.ts.map +1 -0
- package/dist/styles/text-slider-styles.js +35 -0
- package/dist/styles/text-slider-styles.js.map +1 -0
- package/package.json +8 -8
- package/src/controls/remove-button.ts +8 -5
- package/src/index.ts +61 -5
- package/src/interactions/choice-interaction.ts +6 -2
- package/src/interactions/drawing-interaction.ts +14 -9
- package/src/interactions/end-attempt-interaction.ts +3 -3
- package/src/interactions/gap-match-interaction.ts +32 -13
- package/src/interactions/graphic-associate-interaction.ts +15 -10
- package/src/interactions/hotspot-interaction.ts +10 -6
- package/src/interactions/inline-choice-interaction.ts +4 -4
- package/src/interactions/interaction-registry.ts +12 -12
- package/src/interactions/match-interaction.ts +9 -6
- package/src/interactions/pair-interaction.ts +22 -14
- package/src/interactions/position-object-interaction.ts +22 -13
- package/src/interactions/select-point-interaction.ts +25 -13
- package/src/interactions/shared.ts +21 -4
- package/src/interactions/text-interaction.ts +14 -4
- package/src/interactions/upload-interaction.ts +6 -3
- package/src/player/interaction-render.ts +4 -4
- package/src/player-adapter.ts +253 -0
- package/src/player-dev.ts +14 -0
- package/src/player-element.ts +78 -8
- package/src/player-locale.ts +28 -199
- package/src/player-message-catalog-default.ts +119 -0
- package/src/player-message-catalog-validate.ts +425 -0
- package/src/player-message-catalog.ts +72 -0
- package/src/player-message-keys.ts +12 -0
- package/src/player-message-manifest.ts +103 -0
- package/src/player-message-overrides.ts +38 -0
- package/src/player-message-resolver.ts +205 -0
- package/src/player-messages.ts +0 -30
- package/src/player-types.ts +15 -4
- package/src/reorder/a11y.ts +22 -7
- package/src/reorder/graphic-order-interaction.ts +23 -16
- package/src/reorder/list-controls.ts +8 -6
- package/src/reorder/order-interaction.ts +7 -5
- package/src/styles/base-styles.ts +20 -5
- package/src/styles/graphic-styles.ts +0 -6
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { renderGraphicOrderResponse } from "../reorder/graphic-order-interaction.js";
|
|
2
|
+
import { renderOrderedResponse } from "../reorder/order-interaction.js";
|
|
3
|
+
import { renderChoice } from "./choice-interaction.js";
|
|
4
|
+
import { renderDrawingResponse } from "./drawing-interaction.js";
|
|
5
|
+
import { renderEndAttemptResponse } from "./end-attempt-interaction.js";
|
|
6
|
+
import { renderGapMatchResponse } from "./gap-match-interaction.js";
|
|
7
|
+
import { renderGraphicAssociateResponse } from "./graphic-associate-interaction.js";
|
|
8
|
+
import { renderHotspotResponse } from "./hotspot-interaction.js";
|
|
9
|
+
import { renderHottextResponse } from "./hottext-interaction.js";
|
|
10
|
+
import { renderSelect } from "./inline-choice-interaction.js";
|
|
11
|
+
import { renderMatchResponse } from "./match-interaction.js";
|
|
12
|
+
import { renderObjectAsset } from "./object-asset.js";
|
|
13
|
+
import { renderPairResponse } from "./pair-interaction.js";
|
|
14
|
+
import { renderPositionObjectResponse } from "./position-object-interaction.js";
|
|
15
|
+
import { usesChoiceSet, usesOrderedResponse, usesPairResponse } from "./routing.js";
|
|
16
|
+
import { renderSelectPointResponse } from "./select-point-interaction.js";
|
|
17
|
+
import { renderSliderResponse, renderTextResponse } from "./text-interaction.js";
|
|
18
|
+
import { renderUnsupportedInteraction } from "./unsupported-interaction.js";
|
|
19
|
+
import { renderUploadResponse } from "./upload-interaction.js";
|
|
20
|
+
export const interactionRegistry = [
|
|
21
|
+
{
|
|
22
|
+
id: "graphicOrder",
|
|
23
|
+
matches: (interaction) => interaction.type === "graphicOrder",
|
|
24
|
+
render: ({ interaction, update, currentValue, messages }) => renderGraphicOrderResponse(interaction, update, currentValue, messages),
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: "ordered",
|
|
28
|
+
matches: usesOrderedResponse,
|
|
29
|
+
render: ({ interaction, update, currentValue, messages }) => renderOrderedResponse(interaction, update, currentValue, messages),
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
id: "gapMatch",
|
|
33
|
+
matches: (interaction) => interaction.type === "gapMatch" || interaction.type === "graphicGapMatch",
|
|
34
|
+
render: ({ interaction, update, currentValue, messages }) => renderGapMatchResponse(interaction, update, currentValue, messages),
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: "graphicAssociate",
|
|
38
|
+
matches: (interaction) => interaction.type === "graphicAssociate",
|
|
39
|
+
render: ({ interaction, update, currentValue, messages }) => renderGraphicAssociateResponse(interaction, update, currentValue, messages),
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
id: "match",
|
|
43
|
+
matches: (interaction) => interaction.type === "match",
|
|
44
|
+
render: ({ interaction, update, currentValue, messages }) => renderMatchResponse(interaction, update, currentValue, messages),
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
id: "pair",
|
|
48
|
+
matches: usesPairResponse,
|
|
49
|
+
render: ({ interaction, update, currentValue, messages }) => renderPairResponse(interaction, update, currentValue, messages),
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: "hotspot",
|
|
53
|
+
matches: (interaction) => interaction.type === "hotspot" && Boolean(interaction.object),
|
|
54
|
+
render: ({ interaction, update, currentValue, messages }) => renderHotspotResponse(interaction, update, currentValue, messages),
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: "hottext",
|
|
58
|
+
matches: (interaction) => interaction.type === "hottext",
|
|
59
|
+
render: ({ interaction, update, currentValue }) => renderHottextResponse(interaction, update, currentValue),
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
id: "choice",
|
|
63
|
+
matches: usesChoiceSet,
|
|
64
|
+
render: ({ interaction, update, currentValue, messages }) => renderChoice(interaction, update, currentValue, messages),
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: "inlineChoice",
|
|
68
|
+
matches: (interaction) => interaction.type === "inlineChoice",
|
|
69
|
+
render: ({ interaction, update, currentValue, messages }) => renderSelect(interaction, update, currentValue, messages),
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
id: "extendedText",
|
|
73
|
+
matches: (interaction) => interaction.type === "extendedText",
|
|
74
|
+
render: ({ interaction, update, currentValue, messages }) => renderTextResponse(interaction, update, "extended", currentValue, messages),
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
id: "selectPoint",
|
|
78
|
+
matches: (interaction) => interaction.type === "selectPoint",
|
|
79
|
+
render: ({ interaction, update, currentValue, messages }) => renderSelectPointResponse(interaction, update, currentValue, messages),
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
id: "positionObject",
|
|
83
|
+
matches: (interaction) => interaction.type === "positionObject",
|
|
84
|
+
render: ({ interaction, update, currentValue, messages }) => renderPositionObjectResponse(interaction, update, currentValue, messages),
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
id: "drawing",
|
|
88
|
+
matches: (interaction) => interaction.type === "drawing",
|
|
89
|
+
render: ({ interaction, update, currentValue, messages }) => renderDrawingResponse(interaction, update, currentValue, messages),
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
id: "portableCustom",
|
|
93
|
+
matches: (interaction) => interaction.type === "portableCustom",
|
|
94
|
+
render: ({ interaction, update, currentValue, renderPortableCustom }) => renderPortableCustom(interaction, update, currentValue),
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
id: "textEntry",
|
|
98
|
+
matches: (interaction) => interaction.type === "textEntry",
|
|
99
|
+
render: ({ interaction, update, currentValue, messages }) => renderTextResponse(interaction, update, "entry", currentValue, messages),
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: "slider",
|
|
103
|
+
matches: (interaction) => interaction.type === "slider",
|
|
104
|
+
render: ({ interaction, update, currentValue, messages }) => renderSliderResponse(interaction, update, currentValue, messages),
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: "upload",
|
|
108
|
+
matches: (interaction) => interaction.type === "upload",
|
|
109
|
+
render: ({ interaction, update, messages }) => renderUploadResponse(interaction, update, messages),
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
id: "endAttempt",
|
|
113
|
+
matches: (interaction) => interaction.type === "endAttempt",
|
|
114
|
+
render: ({ interaction, update, endAttempt, messages }) => renderEndAttemptResponse(interaction, update, endAttempt, messages),
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: "media",
|
|
118
|
+
matches: (interaction) => interaction.type === "media",
|
|
119
|
+
render: ({ interaction, update, currentValue, isCompleted }) => renderObjectAsset(interaction, {
|
|
120
|
+
currentValue,
|
|
121
|
+
update,
|
|
122
|
+
isCompleted,
|
|
123
|
+
}),
|
|
124
|
+
},
|
|
125
|
+
];
|
|
126
|
+
export function matchInteractionRegistryEntry(interaction) {
|
|
127
|
+
return interactionRegistry.find((entry) => entry.matches(interaction));
|
|
128
|
+
}
|
|
129
|
+
export function isInteractionSupported(interaction) {
|
|
130
|
+
return matchInteractionRegistryEntry(interaction) !== undefined;
|
|
131
|
+
}
|
|
132
|
+
export function renderInteractionResponse(context) {
|
|
133
|
+
const entry = matchInteractionRegistryEntry(context.interaction);
|
|
134
|
+
if (entry)
|
|
135
|
+
return entry.render(context);
|
|
136
|
+
return renderUnsupportedInteraction(context.interaction);
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=interaction-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction-registry.js","sourceRoot":"","sources":["../../src/interactions/interaction-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { QtiInteraction, QtiValue } from "@longsightgroup/qti3-core";
|
|
2
|
+
import type { PlayerMessageResolver } from "../player-message-resolver.js";
|
|
3
|
+
export declare function renderMatchResponse(interaction: QtiInteraction, update: (value: QtiValue) => void, currentValue: QtiValue, messages: PlayerMessageResolver): HTMLElement;
|
|
4
|
+
//# sourceMappingURL=match-interaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match-interaction.d.ts","sourceRoot":"","sources":["../../src/interactions/match-interaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAGrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAI3E,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,cAAc,EAC3B,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EACjC,YAAY,EAAE,QAAQ,EACtB,QAAQ,EAAE,qBAAqB,GAC9B,WAAW,CA6Lb"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { removeButton } from "../controls/remove-button.js";
|
|
2
|
+
import { missingChoicesMessage, responseGroup, valueToStrings } from "../interaction-support.js";
|
|
3
|
+
import { parseUnlimitedMaximum } from "../response-limits.js";
|
|
4
|
+
import { choiceText, sourceChoices, targetChoices, tokenButton, tokenRegion } from "./shared.js";
|
|
5
|
+
export function renderMatchResponse(interaction, update, currentValue, messages) {
|
|
6
|
+
const group = responseGroup();
|
|
7
|
+
const sources = sourceChoices(interaction);
|
|
8
|
+
const targets = targetChoices(interaction);
|
|
9
|
+
if (sources.length === 0 || targets.length === 0) {
|
|
10
|
+
group.append(missingChoicesMessage(interaction));
|
|
11
|
+
return group;
|
|
12
|
+
}
|
|
13
|
+
const selectedPairs = valueToStrings(currentValue);
|
|
14
|
+
let selectedSource;
|
|
15
|
+
let selectedTarget;
|
|
16
|
+
let draggedSource;
|
|
17
|
+
const selector = document.createElement("div");
|
|
18
|
+
selector.className = "qti3-match-selector";
|
|
19
|
+
const sourceRegion = tokenRegion(messages.message("matchSourcesBank"));
|
|
20
|
+
sourceRegion.classList.add("qti3-match-source-bank");
|
|
21
|
+
const targetRegion = tokenRegion(messages.message("matchTargetsBank"));
|
|
22
|
+
targetRegion.classList.add("qti3-match-target-bank");
|
|
23
|
+
const pairList = document.createElement("ul");
|
|
24
|
+
pairList.className = "qti3-pair-list";
|
|
25
|
+
pairList.setAttribute("aria-label", messages.message("matchSelectedPairsList"));
|
|
26
|
+
const commit = () => {
|
|
27
|
+
if (interaction.responseCardinality === "single")
|
|
28
|
+
update(selectedPairs[0] ?? null);
|
|
29
|
+
else
|
|
30
|
+
update([...selectedPairs]);
|
|
31
|
+
};
|
|
32
|
+
const removePair = (pair) => {
|
|
33
|
+
const index = selectedPairs.indexOf(pair);
|
|
34
|
+
if (index >= 0)
|
|
35
|
+
selectedPairs.splice(index, 1);
|
|
36
|
+
};
|
|
37
|
+
const syncPressed = () => {
|
|
38
|
+
for (const button of sourceRegion.querySelectorAll("button")) {
|
|
39
|
+
const identifier = button.dataset.choiceIdentifier ?? "";
|
|
40
|
+
button.setAttribute("aria-pressed", identifier === selectedSource?.identifier ||
|
|
41
|
+
selectedPairs.some((pair) => pair.startsWith(`${identifier} `))
|
|
42
|
+
? "true"
|
|
43
|
+
: "false");
|
|
44
|
+
}
|
|
45
|
+
for (const button of targetRegion.querySelectorAll("button")) {
|
|
46
|
+
const identifier = button.dataset.choiceIdentifier ?? "";
|
|
47
|
+
button.setAttribute("aria-pressed", identifier === selectedTarget?.identifier ||
|
|
48
|
+
selectedPairs.some((pair) => pair.endsWith(` ${identifier}`))
|
|
49
|
+
? "true"
|
|
50
|
+
: "false");
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const renderPairs = () => {
|
|
54
|
+
pairList.replaceChildren(...selectedPairs.map((pair) => {
|
|
55
|
+
const [source, target] = pair.split(" ");
|
|
56
|
+
const label = messages.message("associationPairLabel", {
|
|
57
|
+
source: choiceText(sources, source),
|
|
58
|
+
target: choiceText(targets, target),
|
|
59
|
+
});
|
|
60
|
+
const item = document.createElement("li");
|
|
61
|
+
item.className = "qti3-pair-chip";
|
|
62
|
+
const text = document.createElement("span");
|
|
63
|
+
text.textContent = label;
|
|
64
|
+
const remove = removeButton(label, messages);
|
|
65
|
+
remove.addEventListener("click", () => {
|
|
66
|
+
removePair(pair);
|
|
67
|
+
syncPressed();
|
|
68
|
+
renderPairs();
|
|
69
|
+
commit();
|
|
70
|
+
});
|
|
71
|
+
item.append(text, remove);
|
|
72
|
+
return item;
|
|
73
|
+
}));
|
|
74
|
+
};
|
|
75
|
+
const clearSelection = () => {
|
|
76
|
+
selectedSource = undefined;
|
|
77
|
+
selectedTarget = undefined;
|
|
78
|
+
};
|
|
79
|
+
const removePairsForSource = (source) => {
|
|
80
|
+
for (const existing of selectedPairs.filter((pair) => pair.startsWith(`${source.identifier} `))) {
|
|
81
|
+
removePair(existing);
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const removePairsForTarget = (target) => {
|
|
85
|
+
for (const existing of selectedPairs.filter((pair) => pair.endsWith(` ${target.identifier}`))) {
|
|
86
|
+
removePair(existing);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const togglePair = (source, target) => {
|
|
90
|
+
const pair = `${source.identifier} ${target.identifier}`;
|
|
91
|
+
if (selectedPairs.includes(pair)) {
|
|
92
|
+
removePair(pair);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
if (interaction.responseCardinality === "single")
|
|
96
|
+
selectedPairs.splice(0);
|
|
97
|
+
if (parseUnlimitedMaximum(source.attributes["match-max"]) === 1) {
|
|
98
|
+
removePairsForSource(source);
|
|
99
|
+
}
|
|
100
|
+
if (parseUnlimitedMaximum(target.attributes["match-max"]) === 1) {
|
|
101
|
+
removePairsForTarget(target);
|
|
102
|
+
}
|
|
103
|
+
selectedPairs.push(pair);
|
|
104
|
+
}
|
|
105
|
+
clearSelection();
|
|
106
|
+
syncPressed();
|
|
107
|
+
renderPairs();
|
|
108
|
+
commit();
|
|
109
|
+
};
|
|
110
|
+
const addSelectedPair = () => {
|
|
111
|
+
if (!selectedSource || !selectedTarget)
|
|
112
|
+
return;
|
|
113
|
+
togglePair(selectedSource, selectedTarget);
|
|
114
|
+
};
|
|
115
|
+
const addPair = (sourceIdentifier, targetIdentifier) => {
|
|
116
|
+
const source = sources.find((choice) => choice.identifier === sourceIdentifier);
|
|
117
|
+
const target = targets.find((choice) => choice.identifier === targetIdentifier);
|
|
118
|
+
if (!source || !target)
|
|
119
|
+
return;
|
|
120
|
+
togglePair(source, target);
|
|
121
|
+
};
|
|
122
|
+
for (const source of sources) {
|
|
123
|
+
const button = tokenButton(source);
|
|
124
|
+
button.classList.add("qti3-match-source");
|
|
125
|
+
button.draggable = true;
|
|
126
|
+
button.addEventListener("dragstart", (event) => {
|
|
127
|
+
draggedSource = source.identifier;
|
|
128
|
+
event.dataTransfer?.setData("text/plain", source.identifier);
|
|
129
|
+
event.dataTransfer?.setDragImage(button, 8, 8);
|
|
130
|
+
});
|
|
131
|
+
button.addEventListener("dragend", () => {
|
|
132
|
+
draggedSource = undefined;
|
|
133
|
+
syncPressed();
|
|
134
|
+
});
|
|
135
|
+
button.addEventListener("click", () => {
|
|
136
|
+
selectedSource = source;
|
|
137
|
+
syncPressed();
|
|
138
|
+
addSelectedPair();
|
|
139
|
+
});
|
|
140
|
+
button.addEventListener("keydown", (event) => {
|
|
141
|
+
if (event.key !== "Delete" && event.key !== "Backspace")
|
|
142
|
+
return;
|
|
143
|
+
event.preventDefault();
|
|
144
|
+
removePairsForSource(source);
|
|
145
|
+
clearSelection();
|
|
146
|
+
syncPressed();
|
|
147
|
+
renderPairs();
|
|
148
|
+
commit();
|
|
149
|
+
});
|
|
150
|
+
sourceRegion.append(button);
|
|
151
|
+
}
|
|
152
|
+
for (const target of targets) {
|
|
153
|
+
const button = tokenButton(target);
|
|
154
|
+
button.classList.add("qti3-match-target");
|
|
155
|
+
button.addEventListener("dragover", (event) => {
|
|
156
|
+
event.preventDefault();
|
|
157
|
+
button.classList.add("qti3-drop-target");
|
|
158
|
+
});
|
|
159
|
+
button.addEventListener("dragleave", () => button.classList.remove("qti3-drop-target"));
|
|
160
|
+
button.addEventListener("drop", (event) => {
|
|
161
|
+
event.preventDefault();
|
|
162
|
+
button.classList.remove("qti3-drop-target");
|
|
163
|
+
addPair(event.dataTransfer?.getData("text/plain") || draggedSource, target.identifier);
|
|
164
|
+
});
|
|
165
|
+
button.addEventListener("click", () => {
|
|
166
|
+
selectedTarget = target;
|
|
167
|
+
syncPressed();
|
|
168
|
+
addSelectedPair();
|
|
169
|
+
});
|
|
170
|
+
button.addEventListener("keydown", (event) => {
|
|
171
|
+
if (event.key !== "Delete" && event.key !== "Backspace")
|
|
172
|
+
return;
|
|
173
|
+
event.preventDefault();
|
|
174
|
+
removePairsForTarget(target);
|
|
175
|
+
clearSelection();
|
|
176
|
+
syncPressed();
|
|
177
|
+
renderPairs();
|
|
178
|
+
commit();
|
|
179
|
+
});
|
|
180
|
+
targetRegion.append(button);
|
|
181
|
+
}
|
|
182
|
+
selector.append(sourceRegion, targetRegion);
|
|
183
|
+
syncPressed();
|
|
184
|
+
renderPairs();
|
|
185
|
+
group.append(selector, pairList);
|
|
186
|
+
return group;
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=match-interaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"match-interaction.js","sourceRoot":"","sources":["../../src/interactions/match-interaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { QtiInteraction, QtiValue } from "@longsightgroup/qti3-core";
|
|
2
|
+
export interface MediaResponseBinding {
|
|
3
|
+
currentValue?: QtiValue | undefined;
|
|
4
|
+
update?: ((value: QtiValue) => void) | undefined;
|
|
5
|
+
isCompleted?: (() => boolean) | undefined;
|
|
6
|
+
}
|
|
7
|
+
export declare function renderObjectAsset(interaction: QtiInteraction, mediaResponse?: MediaResponseBinding): HTMLElement;
|
|
8
|
+
//# sourceMappingURL=object-asset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-asset.d.ts","sourceRoot":"","sources":["../../src/interactions/object-asset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkB,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAU1F,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACpC,MAAM,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACjD,WAAW,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,SAAS,CAAC;CAC3C;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,cAAc,EAC3B,aAAa,GAAE,oBAAyB,GACvC,WAAW,CA4Cb"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { objectIsImage } from "../interaction-support.js";
|
|
2
|
+
import { maximumMediaPlays, mediaPlayCount } from "../response-limits.js";
|
|
3
|
+
function parseBooleanAttribute(value) {
|
|
4
|
+
if (value === "true" || value === "1")
|
|
5
|
+
return true;
|
|
6
|
+
if (value === "false" || value === "0")
|
|
7
|
+
return false;
|
|
8
|
+
return undefined;
|
|
9
|
+
}
|
|
10
|
+
export function renderObjectAsset(interaction, mediaResponse = {}) {
|
|
11
|
+
const object = interaction.object;
|
|
12
|
+
const label = interaction.prompt ?? object?.text ?? "Media interaction";
|
|
13
|
+
const mediaType = object ? mediaElementType(object) : undefined;
|
|
14
|
+
if (object && mediaType === "audio") {
|
|
15
|
+
const audio = document.createElement("audio");
|
|
16
|
+
configureMediaElement(audio, interaction, object, label, mediaResponse);
|
|
17
|
+
audio.style.inlineSize = "100%";
|
|
18
|
+
return audio;
|
|
19
|
+
}
|
|
20
|
+
if (object && mediaType === "video") {
|
|
21
|
+
const video = document.createElement("video");
|
|
22
|
+
configureMediaElement(video, interaction, object, label, mediaResponse);
|
|
23
|
+
if (object.width)
|
|
24
|
+
video.width = Number(object.width);
|
|
25
|
+
if (object.height)
|
|
26
|
+
video.height = Number(object.height);
|
|
27
|
+
return video;
|
|
28
|
+
}
|
|
29
|
+
if (object?.data && objectIsImage(object)) {
|
|
30
|
+
const image = document.createElement("img");
|
|
31
|
+
image.src = object.data;
|
|
32
|
+
image.alt = label;
|
|
33
|
+
image.style.maxInlineSize = "100%";
|
|
34
|
+
image.style.blockSize = "auto";
|
|
35
|
+
if (object.width)
|
|
36
|
+
image.width = Number(object.width);
|
|
37
|
+
if (object.height)
|
|
38
|
+
image.height = Number(object.height);
|
|
39
|
+
return image;
|
|
40
|
+
}
|
|
41
|
+
const group = document.createElement("div");
|
|
42
|
+
group.role = "group";
|
|
43
|
+
group.setAttribute("aria-label", label);
|
|
44
|
+
const fallbackHref = object?.data ?? object?.sources.find((source) => source.src)?.src;
|
|
45
|
+
if (fallbackHref) {
|
|
46
|
+
const link = document.createElement("a");
|
|
47
|
+
link.href = fallbackHref;
|
|
48
|
+
link.textContent = object?.text || fallbackHref;
|
|
49
|
+
group.append(link);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
group.textContent = label;
|
|
53
|
+
}
|
|
54
|
+
return group;
|
|
55
|
+
}
|
|
56
|
+
function configureMediaElement(media, interaction, object, label, mediaResponse) {
|
|
57
|
+
media.controls = mediaControlsMode(interaction, object) !== "none";
|
|
58
|
+
media.preload = "none";
|
|
59
|
+
media.autoplay = parseBooleanAttribute(interaction.attributes.autostart) ?? false;
|
|
60
|
+
media.loop = parseBooleanAttribute(interaction.attributes.loop) ?? false;
|
|
61
|
+
media.setAttribute("aria-label", label);
|
|
62
|
+
media.style.maxInlineSize = "100%";
|
|
63
|
+
copyMediaDataAttributes(media, interaction.attributes);
|
|
64
|
+
copyMediaDataAttributes(media, object.attributes);
|
|
65
|
+
if (object.data)
|
|
66
|
+
media.src = object.data;
|
|
67
|
+
for (const source of object.sources) {
|
|
68
|
+
if (!source.src)
|
|
69
|
+
continue;
|
|
70
|
+
const sourceElement = document.createElement("source");
|
|
71
|
+
sourceElement.src = source.src;
|
|
72
|
+
if (source.type)
|
|
73
|
+
sourceElement.type = source.type;
|
|
74
|
+
copySafeMediaChildAttributes(sourceElement, source.attributes, sourceAttributeNames);
|
|
75
|
+
media.append(sourceElement);
|
|
76
|
+
}
|
|
77
|
+
for (const track of object.tracks) {
|
|
78
|
+
if (!track.src)
|
|
79
|
+
continue;
|
|
80
|
+
const trackElement = document.createElement("track");
|
|
81
|
+
trackElement.src = track.src;
|
|
82
|
+
if (track.kind)
|
|
83
|
+
trackElement.kind = track.kind;
|
|
84
|
+
if (track.srclang)
|
|
85
|
+
trackElement.srclang = track.srclang;
|
|
86
|
+
if (track.label)
|
|
87
|
+
trackElement.label = track.label;
|
|
88
|
+
if (track.default)
|
|
89
|
+
trackElement.default = true;
|
|
90
|
+
copySafeMediaChildAttributes(trackElement, track.attributes, trackAttributeNames);
|
|
91
|
+
media.append(trackElement);
|
|
92
|
+
}
|
|
93
|
+
bindMediaPlayCount(media, interaction, mediaResponse);
|
|
94
|
+
}
|
|
95
|
+
function copyMediaDataAttributes(element, attributes) {
|
|
96
|
+
for (const [name, value] of Object.entries(attributes)) {
|
|
97
|
+
if (!name.startsWith("data-"))
|
|
98
|
+
continue;
|
|
99
|
+
element.setAttribute(name, value);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const sourceAttributeNames = new Set(["src", "srcset", "type"]);
|
|
103
|
+
const trackAttributeNames = new Set(["default", "kind", "label", "src", "srclang"]);
|
|
104
|
+
function copySafeMediaChildAttributes(element, attributes, controlledNames) {
|
|
105
|
+
for (const [name, value] of Object.entries(attributes)) {
|
|
106
|
+
const normalizedName = name.toLowerCase();
|
|
107
|
+
if (controlledNames.has(normalizedName))
|
|
108
|
+
continue;
|
|
109
|
+
if (normalizedName === "class" ||
|
|
110
|
+
normalizedName === "id" ||
|
|
111
|
+
normalizedName === "title" ||
|
|
112
|
+
normalizedName === "media" ||
|
|
113
|
+
normalizedName === "sizes" ||
|
|
114
|
+
normalizedName.startsWith("data-")) {
|
|
115
|
+
element.setAttribute(name, value);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
function mediaElementType(object) {
|
|
120
|
+
const types = [object.type, ...object.sources.map((source) => source.type)].filter((value) => Boolean(value));
|
|
121
|
+
if (types.some((value) => value.startsWith("audio/")))
|
|
122
|
+
return "audio";
|
|
123
|
+
if (types.some((value) => value.startsWith("video/")))
|
|
124
|
+
return "video";
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
function mediaControlsMode(interaction, object) {
|
|
128
|
+
return (interaction.attributes["data-qti-media-player-controls"] ??
|
|
129
|
+
object.attributes["data-qti-media-player-controls"]);
|
|
130
|
+
}
|
|
131
|
+
function bindMediaPlayCount(media, interaction, mediaResponse) {
|
|
132
|
+
if (!mediaResponse.update)
|
|
133
|
+
return;
|
|
134
|
+
let playCount = mediaPlayCount(mediaResponse.currentValue ?? null);
|
|
135
|
+
let activePlaySession = false;
|
|
136
|
+
let readyAfterEnded = false;
|
|
137
|
+
const maximum = maximumMediaPlays(interaction);
|
|
138
|
+
const syncState = () => {
|
|
139
|
+
media.dataset.playCount = String(playCount);
|
|
140
|
+
if (maximum !== undefined && playCount >= maximum && !activePlaySession) {
|
|
141
|
+
media.dataset.maxPlaysReached = "true";
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
delete media.dataset.maxPlaysReached;
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
media.addEventListener("play", () => {
|
|
148
|
+
if (mediaResponse.isCompleted?.()) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (!activePlaySession && maximum !== undefined && playCount >= maximum) {
|
|
152
|
+
media.pause();
|
|
153
|
+
syncState();
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (!activePlaySession && (readyAfterEnded || media.currentTime <= 0.25)) {
|
|
157
|
+
playCount += 1;
|
|
158
|
+
mediaResponse.update?.(playCount);
|
|
159
|
+
activePlaySession = true;
|
|
160
|
+
readyAfterEnded = false;
|
|
161
|
+
syncState();
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
activePlaySession = true;
|
|
165
|
+
readyAfterEnded = false;
|
|
166
|
+
syncState();
|
|
167
|
+
});
|
|
168
|
+
media.addEventListener("ended", () => {
|
|
169
|
+
activePlaySession = false;
|
|
170
|
+
readyAfterEnded = true;
|
|
171
|
+
syncState();
|
|
172
|
+
});
|
|
173
|
+
media.addEventListener("seeked", () => {
|
|
174
|
+
if (!media.paused || media.currentTime > 0.25)
|
|
175
|
+
return;
|
|
176
|
+
activePlaySession = false;
|
|
177
|
+
readyAfterEnded = false;
|
|
178
|
+
syncState();
|
|
179
|
+
});
|
|
180
|
+
syncState();
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=object-asset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-asset.js","sourceRoot":"","sources":["../../src/interactions/object-asset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { QtiInteraction, QtiValue } from "@longsightgroup/qti3-core";
|
|
2
|
+
import type { PlayerMessageResolver } from "../player-message-resolver.js";
|
|
3
|
+
export declare function renderPairResponse(interaction: QtiInteraction, update: (value: QtiValue) => void, currentValue: QtiValue, messages: PlayerMessageResolver): HTMLElement;
|
|
4
|
+
//# sourceMappingURL=pair-interaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pair-interaction.d.ts","sourceRoot":"","sources":["../../src/interactions/pair-interaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,cAAc,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAGrF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAU3E,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,cAAc,EAC3B,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EACjC,YAAY,EAAE,QAAQ,EACtB,QAAQ,EAAE,qBAAqB,GAC9B,WAAW,CAwIb"}
|