@longsightgroup/qti3-player 0.5.1 → 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/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/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/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
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { QtiContentNode, QtiValue } from "@longsightgroup/qti3-core";
|
|
2
|
+
export declare const unsafeContentElements: Set<string>;
|
|
3
|
+
export declare function contentElementName(qtiName: string): string | undefined;
|
|
4
|
+
export declare function createContentElement(name: string): HTMLElement | MathMLElement;
|
|
5
|
+
export declare function copySafeAttributes(element: Element, attributes: Record<string, string>): void;
|
|
6
|
+
export declare function applySharedAccessibilityVocabulary(element: Element, attributes: Record<string, string>): void;
|
|
7
|
+
export declare function isSafeUrl(value: string): boolean;
|
|
8
|
+
export declare function isResolvableAssetUrl(value: string): boolean;
|
|
9
|
+
export declare function formatPrintedValue(value: QtiValue, format?: string): string;
|
|
10
|
+
export declare function contentNodeText(node: QtiContentNode): string;
|
|
11
|
+
//# sourceMappingURL=content-dom.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-dom.d.ts","sourceRoot":"","sources":["../../src/content/content-dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AA2D1E,eAAO,MAAM,qBAAqB,aAA+B,CAAC;AA6ClE,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQtE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,aAAa,CAK9E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAS7F;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC,IAAI,CAeN;AAiFD,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAYhD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAQ3D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAY3E;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAI5D"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
const htmlContentElements = new Set([
|
|
2
|
+
"a",
|
|
3
|
+
"abbr",
|
|
4
|
+
"b",
|
|
5
|
+
"bdi",
|
|
6
|
+
"bdo",
|
|
7
|
+
"blockquote",
|
|
8
|
+
"br",
|
|
9
|
+
"caption",
|
|
10
|
+
"cite",
|
|
11
|
+
"code",
|
|
12
|
+
"dd",
|
|
13
|
+
"dfn",
|
|
14
|
+
"div",
|
|
15
|
+
"dl",
|
|
16
|
+
"dt",
|
|
17
|
+
"em",
|
|
18
|
+
"figcaption",
|
|
19
|
+
"figure",
|
|
20
|
+
"h1",
|
|
21
|
+
"h2",
|
|
22
|
+
"h3",
|
|
23
|
+
"h4",
|
|
24
|
+
"h5",
|
|
25
|
+
"h6",
|
|
26
|
+
"hr",
|
|
27
|
+
"i",
|
|
28
|
+
"img",
|
|
29
|
+
"kbd",
|
|
30
|
+
"li",
|
|
31
|
+
"ol",
|
|
32
|
+
"p",
|
|
33
|
+
"pre",
|
|
34
|
+
"q",
|
|
35
|
+
"rb",
|
|
36
|
+
"rbc",
|
|
37
|
+
"rp",
|
|
38
|
+
"rt",
|
|
39
|
+
"rtc",
|
|
40
|
+
"ruby",
|
|
41
|
+
"samp",
|
|
42
|
+
"small",
|
|
43
|
+
"span",
|
|
44
|
+
"strong",
|
|
45
|
+
"sub",
|
|
46
|
+
"sup",
|
|
47
|
+
"table",
|
|
48
|
+
"tbody",
|
|
49
|
+
"td",
|
|
50
|
+
"tfoot",
|
|
51
|
+
"th",
|
|
52
|
+
"thead",
|
|
53
|
+
"tr",
|
|
54
|
+
"ul",
|
|
55
|
+
"var",
|
|
56
|
+
]);
|
|
57
|
+
export const unsafeContentElements = new Set(["script", "style"]);
|
|
58
|
+
const mathMlElements = new Set([
|
|
59
|
+
"math",
|
|
60
|
+
"maction",
|
|
61
|
+
"maligngroup",
|
|
62
|
+
"malignmark",
|
|
63
|
+
"menclose",
|
|
64
|
+
"merror",
|
|
65
|
+
"mfenced",
|
|
66
|
+
"mfrac",
|
|
67
|
+
"mglyph",
|
|
68
|
+
"mi",
|
|
69
|
+
"mlabeledtr",
|
|
70
|
+
"mlongdiv",
|
|
71
|
+
"mmultiscripts",
|
|
72
|
+
"mn",
|
|
73
|
+
"mo",
|
|
74
|
+
"mover",
|
|
75
|
+
"mpadded",
|
|
76
|
+
"mphantom",
|
|
77
|
+
"mroot",
|
|
78
|
+
"mrow",
|
|
79
|
+
"ms",
|
|
80
|
+
"mscarries",
|
|
81
|
+
"mscarry",
|
|
82
|
+
"msgroup",
|
|
83
|
+
"msline",
|
|
84
|
+
"mspace",
|
|
85
|
+
"msqrt",
|
|
86
|
+
"msrow",
|
|
87
|
+
"mstack",
|
|
88
|
+
"mstyle",
|
|
89
|
+
"msub",
|
|
90
|
+
"msubsup",
|
|
91
|
+
"msup",
|
|
92
|
+
"mtable",
|
|
93
|
+
"mtd",
|
|
94
|
+
"mtext",
|
|
95
|
+
"mtr",
|
|
96
|
+
"munder",
|
|
97
|
+
"munderover",
|
|
98
|
+
"semantics",
|
|
99
|
+
]);
|
|
100
|
+
export function contentElementName(qtiName) {
|
|
101
|
+
if (qtiName === "qti-content-body" || qtiName === "qti-prompt")
|
|
102
|
+
return undefined;
|
|
103
|
+
if (htmlContentElements.has(qtiName) || mathMlElements.has(qtiName))
|
|
104
|
+
return qtiName;
|
|
105
|
+
if (qtiName === "object")
|
|
106
|
+
return "object";
|
|
107
|
+
if (qtiName === "qti-rubric-block")
|
|
108
|
+
return "section";
|
|
109
|
+
if (qtiName === "qti-template-block")
|
|
110
|
+
return "div";
|
|
111
|
+
if (qtiName === "qti-template-inline")
|
|
112
|
+
return "span";
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
export function createContentElement(name) {
|
|
116
|
+
if (mathMlElements.has(name)) {
|
|
117
|
+
return document.createElementNS("http://www.w3.org/1998/Math/MathML", name);
|
|
118
|
+
}
|
|
119
|
+
return document.createElement(name);
|
|
120
|
+
}
|
|
121
|
+
export function copySafeAttributes(element, attributes) {
|
|
122
|
+
for (const [name, value] of Object.entries(attributes)) {
|
|
123
|
+
if (!isSafeContentAttribute(name, value))
|
|
124
|
+
continue;
|
|
125
|
+
element.setAttribute(name, value);
|
|
126
|
+
if (name === "xml:lang" && !Object.hasOwn(attributes, "lang")) {
|
|
127
|
+
element.setAttribute("lang", value);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
applySharedAccessibilityVocabulary(element, attributes);
|
|
131
|
+
}
|
|
132
|
+
export function applySharedAccessibilityVocabulary(element, attributes) {
|
|
133
|
+
for (const [name, value] of Object.entries(attributes)) {
|
|
134
|
+
const ariaName = qtiAriaAttributeName(name);
|
|
135
|
+
if (!ariaName || hasAttributeName(attributes, ariaName))
|
|
136
|
+
continue;
|
|
137
|
+
element.setAttribute(ariaName, value);
|
|
138
|
+
}
|
|
139
|
+
const suppressTts = attributeValue(attributes, "data-qti-suppress-tts");
|
|
140
|
+
if (suppressesScreenReaderSpeech(suppressTts) &&
|
|
141
|
+
!hasAttributeName(attributes, "aria-hidden") &&
|
|
142
|
+
!hasAttributeName(attributes, "data-qti-aria-hidden")) {
|
|
143
|
+
element.setAttribute("aria-hidden", "true");
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
function qtiAriaAttributeName(name) {
|
|
147
|
+
const normalizedName = name.toLowerCase();
|
|
148
|
+
const prefix = "data-qti-aria-";
|
|
149
|
+
if (!normalizedName.startsWith(prefix))
|
|
150
|
+
return undefined;
|
|
151
|
+
const suffix = normalizedName.slice(prefix.length);
|
|
152
|
+
if (!/^[a-z0-9][a-z0-9-]*$/.test(suffix))
|
|
153
|
+
return undefined;
|
|
154
|
+
return `aria-${suffix}`;
|
|
155
|
+
}
|
|
156
|
+
function attributeValue(attributes, name) {
|
|
157
|
+
const normalizedName = name.toLowerCase();
|
|
158
|
+
const entry = Object.entries(attributes).find(([attributeName]) => attributeName.toLowerCase() === normalizedName);
|
|
159
|
+
return entry?.[1];
|
|
160
|
+
}
|
|
161
|
+
function hasAttributeName(attributes, name) {
|
|
162
|
+
return attributeValue(attributes, name) !== undefined;
|
|
163
|
+
}
|
|
164
|
+
function suppressesScreenReaderSpeech(value) {
|
|
165
|
+
if (!value)
|
|
166
|
+
return false;
|
|
167
|
+
const tokens = value
|
|
168
|
+
.toLowerCase()
|
|
169
|
+
.split(/[\s,]+/)
|
|
170
|
+
.filter(Boolean);
|
|
171
|
+
return tokens.includes("all") || tokens.includes("screen-reader");
|
|
172
|
+
}
|
|
173
|
+
function isSafeContentAttribute(name, value) {
|
|
174
|
+
const normalizedName = name.toLowerCase();
|
|
175
|
+
if (normalizedName.startsWith("on"))
|
|
176
|
+
return false;
|
|
177
|
+
if (normalizedName === "style")
|
|
178
|
+
return false;
|
|
179
|
+
if (normalizedName === "href" || normalizedName === "src" || normalizedName === "data") {
|
|
180
|
+
return isSafeUrl(value);
|
|
181
|
+
}
|
|
182
|
+
return (normalizedName === "alt" ||
|
|
183
|
+
normalizedName === "class" ||
|
|
184
|
+
normalizedName === "colspan" ||
|
|
185
|
+
normalizedName === "dir" ||
|
|
186
|
+
normalizedName === "headers" ||
|
|
187
|
+
normalizedName === "height" ||
|
|
188
|
+
normalizedName === "id" ||
|
|
189
|
+
normalizedName === "lang" ||
|
|
190
|
+
normalizedName === "role" ||
|
|
191
|
+
normalizedName === "rowspan" ||
|
|
192
|
+
normalizedName === "scope" ||
|
|
193
|
+
normalizedName === "title" ||
|
|
194
|
+
normalizedName === "type" ||
|
|
195
|
+
normalizedName === "width" ||
|
|
196
|
+
normalizedName === "xml:lang" ||
|
|
197
|
+
mathMlAttributeNames.has(normalizedName) ||
|
|
198
|
+
normalizedName.startsWith("aria-") ||
|
|
199
|
+
normalizedName.startsWith("data-"));
|
|
200
|
+
}
|
|
201
|
+
const mathMlAttributeNames = new Set([
|
|
202
|
+
"accent",
|
|
203
|
+
"accentunder",
|
|
204
|
+
"align",
|
|
205
|
+
"columnalign",
|
|
206
|
+
"display",
|
|
207
|
+
"fence",
|
|
208
|
+
"largeop",
|
|
209
|
+
"lspace",
|
|
210
|
+
"mathbackground",
|
|
211
|
+
"mathcolor",
|
|
212
|
+
"mathsize",
|
|
213
|
+
"mathvariant",
|
|
214
|
+
"movablelimits",
|
|
215
|
+
"rowalign",
|
|
216
|
+
"rspace",
|
|
217
|
+
"separator",
|
|
218
|
+
"stretchy",
|
|
219
|
+
]);
|
|
220
|
+
export function isSafeUrl(value) {
|
|
221
|
+
return (value.startsWith("#") ||
|
|
222
|
+
value.startsWith("/") ||
|
|
223
|
+
value.startsWith("./") ||
|
|
224
|
+
value.startsWith("../") ||
|
|
225
|
+
value.startsWith("http://") ||
|
|
226
|
+
value.startsWith("https://") ||
|
|
227
|
+
value.startsWith("data:image/") ||
|
|
228
|
+
value.startsWith("data:audio/") ||
|
|
229
|
+
value.startsWith("data:video/"));
|
|
230
|
+
}
|
|
231
|
+
export function isResolvableAssetUrl(value) {
|
|
232
|
+
return (!value.startsWith("#") &&
|
|
233
|
+
!value.startsWith("data:") &&
|
|
234
|
+
!value.startsWith("blob:") &&
|
|
235
|
+
!value.startsWith("http://") &&
|
|
236
|
+
!value.startsWith("https://"));
|
|
237
|
+
}
|
|
238
|
+
export function formatPrintedValue(value, format) {
|
|
239
|
+
if (value === null || value === undefined)
|
|
240
|
+
return "";
|
|
241
|
+
const numericValue = typeof value === "number" ? value : typeof value === "string" ? Number(value) : Number.NaN;
|
|
242
|
+
if (Number.isFinite(numericValue) && format) {
|
|
243
|
+
const fixed = /^%\.(\d+)f$/.exec(format);
|
|
244
|
+
if (fixed)
|
|
245
|
+
return numericValue.toFixed(Number(fixed[1]));
|
|
246
|
+
if (format === "%d" || format === "%i")
|
|
247
|
+
return String(Math.trunc(numericValue));
|
|
248
|
+
}
|
|
249
|
+
if (Array.isArray(value))
|
|
250
|
+
return value.map((item) => String(item)).join(", ");
|
|
251
|
+
if (typeof value === "object")
|
|
252
|
+
return JSON.stringify(value);
|
|
253
|
+
return String(value);
|
|
254
|
+
}
|
|
255
|
+
export function contentNodeText(node) {
|
|
256
|
+
if (node.kind === "text")
|
|
257
|
+
return node.text;
|
|
258
|
+
if ("children" in node)
|
|
259
|
+
return node.children.map(contentNodeText).join("");
|
|
260
|
+
return "";
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=content-dom.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-dom.js","sourceRoot":"","sources":["../../src/content/content-dom.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { QtiContentNode, QtiInteraction, QtiValue } from "@longsightgroup/qti3-core";
|
|
2
|
+
export interface PlayerContentContext {
|
|
3
|
+
interactionAt(index: number): QtiInteraction | undefined;
|
|
4
|
+
renderBlockInteraction(interaction: QtiInteraction): HTMLElement;
|
|
5
|
+
renderEmbeddedInteraction(interaction: QtiInteraction): HTMLElement;
|
|
6
|
+
currentVariableValue(identifier: string): QtiValue;
|
|
7
|
+
mathTemplateValue(node: Extract<QtiContentNode, {
|
|
8
|
+
kind: "element";
|
|
9
|
+
}>): string | undefined;
|
|
10
|
+
isFeedbackVisible(node: Extract<QtiContentNode, {
|
|
11
|
+
kind: "feedback";
|
|
12
|
+
}>): boolean;
|
|
13
|
+
isTemplateContentVisible(element: HTMLElement): boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function renderContentNodes(nodes: QtiContentNode[], context: PlayerContentContext): Node[];
|
|
16
|
+
export declare function renderContentNode(node: QtiContentNode, context: PlayerContentContext): Node[];
|
|
17
|
+
//# sourceMappingURL=content-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-renderer.d.ts","sourceRoot":"","sources":["../../src/content/content-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAS1F,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IACzD,sBAAsB,CAAC,WAAW,EAAE,cAAc,GAAG,WAAW,CAAC;IACjE,yBAAyB,CAAC,WAAW,EAAE,cAAc,GAAG,WAAW,CAAC;IACpE,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,CAAC;IACnD,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1F,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,EAAE;QAAE,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC;IAChF,wBAAwB,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC;CACzD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI,EAAE,CAEjG;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,GAAG,IAAI,EAAE,CA6C7F"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { contentElementName, copySafeAttributes, createContentElement, formatPrintedValue, unsafeContentElements, } from "./content-dom.js";
|
|
2
|
+
export function renderContentNodes(nodes, context) {
|
|
3
|
+
return nodes.flatMap((node) => renderContentNode(node, context));
|
|
4
|
+
}
|
|
5
|
+
export function renderContentNode(node, context) {
|
|
6
|
+
if (node.kind === "text")
|
|
7
|
+
return [document.createTextNode(node.text)];
|
|
8
|
+
if (node.kind === "interaction") {
|
|
9
|
+
const interaction = context.interactionAt(node.interactionIndex);
|
|
10
|
+
if (!interaction)
|
|
11
|
+
return [];
|
|
12
|
+
if (interaction.type === "inlineChoice" || interaction.type === "textEntry") {
|
|
13
|
+
return [context.renderEmbeddedInteraction(interaction)];
|
|
14
|
+
}
|
|
15
|
+
return [context.renderBlockInteraction(interaction)];
|
|
16
|
+
}
|
|
17
|
+
if (node.kind === "printedVariable") {
|
|
18
|
+
return [renderPrintedVariable(node.identifier, node.format, context)];
|
|
19
|
+
}
|
|
20
|
+
if (node.kind === "feedback")
|
|
21
|
+
return renderFeedbackContent(node, context);
|
|
22
|
+
if (node.qtiName === "qti-template-block" || node.qtiName === "qti-template-inline") {
|
|
23
|
+
return [renderTemplateContent(node, context)];
|
|
24
|
+
}
|
|
25
|
+
if (node.qtiName === "qti-position-object-stage") {
|
|
26
|
+
return renderContentNodes(node.children.filter((child) => !("qtiName" in child) || (child.qtiName !== "object" && child.qtiName !== "img")), context);
|
|
27
|
+
}
|
|
28
|
+
if (node.qtiName === "qti-prompt") {
|
|
29
|
+
const prompt = document.createElement("p");
|
|
30
|
+
copySafeAttributes(prompt, node.attributes);
|
|
31
|
+
prompt.classList.add("qti3-item-prompt");
|
|
32
|
+
prompt.append(...renderContentNodes(node.children, context));
|
|
33
|
+
return [prompt];
|
|
34
|
+
}
|
|
35
|
+
if (unsafeContentElements.has(node.qtiName))
|
|
36
|
+
return [];
|
|
37
|
+
const elementName = contentElementName(node.qtiName);
|
|
38
|
+
if (!elementName)
|
|
39
|
+
return renderContentNodes(node.children, context);
|
|
40
|
+
const element = createContentElement(elementName);
|
|
41
|
+
copySafeAttributes(element, node.attributes);
|
|
42
|
+
const mathTemplateValue = context.mathTemplateValue(node);
|
|
43
|
+
if (mathTemplateValue === undefined) {
|
|
44
|
+
element.append(...renderContentNodes(node.children, context));
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
element.textContent = mathTemplateValue;
|
|
48
|
+
}
|
|
49
|
+
return [element];
|
|
50
|
+
}
|
|
51
|
+
function renderTemplateContent(node, context) {
|
|
52
|
+
const element = document.createElement(node.qtiName === "qti-template-block" ? "div" : "span");
|
|
53
|
+
copySafeAttributes(element, node.attributes);
|
|
54
|
+
element.classList.add(node.qtiName === "qti-template-block" ? "qti3-template-block" : "qti3-template-inline");
|
|
55
|
+
element.dataset.templateIdentifier = node.attributes["template-identifier"] ?? "";
|
|
56
|
+
element.dataset.templateValueIdentifier = node.attributes.identifier ?? "";
|
|
57
|
+
element.dataset.showHide = node.attributes["show-hide"] === "hide" ? "hide" : "show";
|
|
58
|
+
element.hidden = !context.isTemplateContentVisible(element);
|
|
59
|
+
element.append(...renderContentNodes(node.children, context));
|
|
60
|
+
return element;
|
|
61
|
+
}
|
|
62
|
+
function renderPrintedVariable(identifier, format, context) {
|
|
63
|
+
const output = document.createElement("output");
|
|
64
|
+
output.className = "qti3-printed-variable";
|
|
65
|
+
output.dataset.identifier = identifier;
|
|
66
|
+
if (format)
|
|
67
|
+
output.dataset.format = format;
|
|
68
|
+
output.value = formatPrintedValue(context.currentVariableValue(identifier), format);
|
|
69
|
+
output.textContent = output.value;
|
|
70
|
+
return output;
|
|
71
|
+
}
|
|
72
|
+
function renderFeedbackContent(node, context) {
|
|
73
|
+
const element = document.createElement(node.feedbackType === "block" ? "section" : "span");
|
|
74
|
+
element.className = `qti3-feedback-${node.feedbackType}`;
|
|
75
|
+
element.dataset.feedbackIdentifier = node.identifier;
|
|
76
|
+
element.dataset.outcomeIdentifier = node.outcomeIdentifier;
|
|
77
|
+
element.dataset.showHide = node.showHide;
|
|
78
|
+
element.hidden = !context.isFeedbackVisible(node);
|
|
79
|
+
element.append(...renderContentNodes(node.children, context));
|
|
80
|
+
return [element];
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=content-renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-renderer.js","sourceRoot":"","sources":["../../src/content/content-renderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-button.d.ts","sourceRoot":"","sources":["../../src/controls/remove-button.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3E,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,QAAQ,EAAE,qBAAqB,GAC9B,iBAAiB,CASnB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { trashIcon } from "../icons.js";
|
|
2
|
+
export function removeButton(label, messages) {
|
|
3
|
+
const safeLabel = label?.trim() || messages.message("remove");
|
|
4
|
+
const button = document.createElement("button");
|
|
5
|
+
button.type = "button";
|
|
6
|
+
button.className = "qti3-icon-button qti3-remove-button";
|
|
7
|
+
button.title = messages.message("remove");
|
|
8
|
+
button.setAttribute("aria-label", messages.message("removePair", { label: safeLabel }));
|
|
9
|
+
button.append(trashIcon());
|
|
10
|
+
return button;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=remove-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-button.js","sourceRoot":"","sources":["../../src/controls/remove-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,MAAM,UAAU,YAAY,CAC1B,KAAoB,EACpB,QAA+B;IAE/B,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,MAAM,CAAC,SAAS,GAAG,qCAAqC,CAAC;IACzD,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IACxF,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -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 renderChoice(interaction: QtiInteraction, update: (value: QtiValue) => void, currentValue: QtiValue, messages: PlayerMessageResolver): HTMLElement;
|
|
4
|
+
//# sourceMappingURL=choice-interaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"choice-interaction.d.ts","sourceRoot":"","sources":["../../src/interactions/choice-interaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAO1E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAmB3E,wBAAgB,YAAY,CAC1B,WAAW,EAAE,cAAc,EAC3B,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EACjC,YAAY,EAAE,QAAQ,EACtB,QAAQ,EAAE,qBAAqB,GAC9B,WAAW,CAgEb"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { interactionChoices, missingChoicesMessage, responseGroup, valueToStrings, } from "../interaction-support.js";
|
|
2
|
+
function choicePresentationLabel(interaction, index) {
|
|
3
|
+
const classNames = new Set((interaction.attributes.class ?? "").split(/\s+/).filter(Boolean));
|
|
4
|
+
if (classNames.has("qti-labels-none"))
|
|
5
|
+
return "";
|
|
6
|
+
const labels = classNames.has("qti-labels-decimal")
|
|
7
|
+
? Array.from({ length: 26 }, (_, item) => `${item + 1}`)
|
|
8
|
+
: classNames.has("qti-labels-lower-alpha")
|
|
9
|
+
? "abcdefghijklmnopqrstuvwxyz".split("")
|
|
10
|
+
: "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
|
|
11
|
+
const suffix = classNames.has("qti-labels-suffix-none")
|
|
12
|
+
? ""
|
|
13
|
+
: classNames.has("qti-labels-suffix-parenthesis")
|
|
14
|
+
? ")"
|
|
15
|
+
: ".";
|
|
16
|
+
return `${labels[index] ?? `${index + 1}`}${suffix}`;
|
|
17
|
+
}
|
|
18
|
+
export function renderChoice(interaction, update, currentValue, messages) {
|
|
19
|
+
const group = responseGroup("qti3-choice-group");
|
|
20
|
+
const multiple = interaction.responseCardinality === "multiple" || interaction.responseCardinality === "ordered";
|
|
21
|
+
const selected = new Set(valueToStrings(currentValue));
|
|
22
|
+
const list = document.createElement("div");
|
|
23
|
+
list.className = "qti3-choice-list";
|
|
24
|
+
list.role = "group";
|
|
25
|
+
list.setAttribute("aria-label", messages.message("interactionOptionsList", { type: interaction.type }));
|
|
26
|
+
const syncSelected = () => {
|
|
27
|
+
for (const label of list.querySelectorAll(".qti3-choice-option")) {
|
|
28
|
+
const identifier = label.dataset.choiceIdentifier ?? "";
|
|
29
|
+
label.dataset.selected = selected.has(identifier) ? "true" : "false";
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
const choices = interactionChoices(interaction);
|
|
33
|
+
if (choices.length === 0) {
|
|
34
|
+
group.append(missingChoicesMessage(interaction));
|
|
35
|
+
return group;
|
|
36
|
+
}
|
|
37
|
+
for (const [index, choice] of choices.entries()) {
|
|
38
|
+
const label = document.createElement("label");
|
|
39
|
+
label.className = "qti3-choice-option";
|
|
40
|
+
label.dataset.choiceIdentifier = choice.identifier;
|
|
41
|
+
const input = document.createElement("input");
|
|
42
|
+
input.type = multiple ? "checkbox" : "radio";
|
|
43
|
+
input.name = interaction.responseIdentifier ?? interaction.type;
|
|
44
|
+
input.value = choice.identifier;
|
|
45
|
+
input.checked = selected.has(choice.identifier);
|
|
46
|
+
input.addEventListener("change", () => {
|
|
47
|
+
if (multiple) {
|
|
48
|
+
if (input.checked)
|
|
49
|
+
selected.add(choice.identifier);
|
|
50
|
+
else
|
|
51
|
+
selected.delete(choice.identifier);
|
|
52
|
+
update([...selected]);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
selected.clear();
|
|
56
|
+
selected.add(choice.identifier);
|
|
57
|
+
syncSelected();
|
|
58
|
+
update(input.value);
|
|
59
|
+
}
|
|
60
|
+
syncSelected();
|
|
61
|
+
});
|
|
62
|
+
const visibleLabel = choicePresentationLabel(interaction, index);
|
|
63
|
+
const optionParts = [input];
|
|
64
|
+
if (visibleLabel) {
|
|
65
|
+
const labelText = document.createElement("span");
|
|
66
|
+
labelText.className = "qti3-choice-label";
|
|
67
|
+
labelText.textContent = visibleLabel;
|
|
68
|
+
optionParts.push(labelText);
|
|
69
|
+
}
|
|
70
|
+
const text = document.createElement("span");
|
|
71
|
+
text.className = "qti3-choice-text";
|
|
72
|
+
text.textContent = choice.text;
|
|
73
|
+
optionParts.push(text);
|
|
74
|
+
label.append(...optionParts);
|
|
75
|
+
list.append(label);
|
|
76
|
+
}
|
|
77
|
+
syncSelected();
|
|
78
|
+
group.append(list);
|
|
79
|
+
return group;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=choice-interaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"choice-interaction.js","sourceRoot":"","sources":["../../src/interactions/choice-interaction.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,cAAc,GACf,MAAM,2BAA2B,CAAC;AAGnC,SAAS,uBAAuB,CAAC,WAA2B,EAAE,KAAa;IACzE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9F,IAAI,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjD,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACjD,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;QACxD,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,wBAAwB,CAAC;YACxC,CAAC,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,CAAC,CAAC,4BAA4B,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,wBAAwB,CAAC;QACrD,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,+BAA+B,CAAC;YAC/C,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,GAAG,CAAC;IACV,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,WAA2B,EAC3B,MAAiC,EACjC,YAAsB,EACtB,QAA+B;IAE/B,MAAM,KAAK,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAEjD,MAAM,QAAQ,GACZ,WAAW,CAAC,mBAAmB,KAAK,UAAU,IAAI,WAAW,CAAC,mBAAmB,KAAK,SAAS,CAAC;IAClG,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC;IACpC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;IACpB,IAAI,CAAC,YAAY,CACf,YAAY,EACZ,QAAQ,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CACvE,CAAC;IACF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,CAAc,qBAAqB,CAAC,EAAE,CAAC;YAC9E,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC;YACxD,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACvE,CAAC;IACH,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,SAAS,GAAG,oBAAoB,CAAC;QACvC,KAAK,CAAC,OAAO,CAAC,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC;QACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;QAC7C,KAAK,CAAC,IAAI,GAAG,WAAW,CAAC,kBAAkB,IAAI,WAAW,CAAC,IAAI,CAAC;QAChE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;QAChC,KAAK,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAChD,KAAK,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YACpC,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,KAAK,CAAC,OAAO;oBAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;;oBAC9C,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBACxC,MAAM,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjB,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;gBAChC,YAAY,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;YACD,YAAY,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,uBAAuB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACjE,MAAM,WAAW,GAAkB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACjD,SAAS,CAAC,SAAS,GAAG,mBAAmB,CAAC;YAC1C,SAAS,CAAC,WAAW,GAAG,YAAY,CAAC;YACrC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,kBAAkB,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC;QAC/B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,KAAK,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,YAAY,EAAE,CAAC;IACf,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnB,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { QtiInteraction, QtiValue } from "@longsightgroup/qti3-core";
|
|
2
|
+
import type { PlayerMessageResolver } from "../player-message-resolver.js";
|
|
3
|
+
export declare const DRAWING_STROKE_COLOR = "#000";
|
|
4
|
+
export declare const DRAWING_STROKE_WIDTH = 3;
|
|
5
|
+
export declare function renderDrawingResponse(interaction: QtiInteraction, update: (value: QtiValue) => void, currentValue: QtiValue, messages: PlayerMessageResolver): HTMLElement;
|
|
6
|
+
//# sourceMappingURL=drawing-interaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drawing-interaction.d.ts","sourceRoot":"","sources":["../../src/interactions/drawing-interaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkB,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE1F,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3E,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAC3C,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,cAAc,EAC3B,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,EACjC,YAAY,EAAE,QAAQ,EACtB,QAAQ,EAAE,qBAAqB,GAC9B,WAAW,CA8Ib"}
|