@longsightgroup/qti3-core 0.7.2 → 0.8.0
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 +41 -10
- package/dist/content-text.d.ts +14 -0
- package/dist/content-text.d.ts.map +1 -0
- package/dist/content-text.js +58 -0
- package/dist/content-text.js.map +1 -0
- package/dist/index.d.ts +7 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/package-xml.d.ts +12 -0
- package/dist/package-xml.d.ts.map +1 -0
- package/dist/package-xml.js +17 -0
- package/dist/package-xml.js.map +1 -0
- package/dist/parser-custom-interactions.d.ts +8 -0
- package/dist/parser-custom-interactions.d.ts.map +1 -0
- package/dist/parser-custom-interactions.js +178 -0
- package/dist/parser-custom-interactions.js.map +1 -0
- package/dist/parser-declarations.d.ts +6 -0
- package/dist/parser-declarations.d.ts.map +1 -0
- package/dist/parser-declarations.js +136 -0
- package/dist/parser-declarations.js.map +1 -0
- package/dist/parser-item-metadata.d.ts +9 -0
- package/dist/parser-item-metadata.d.ts.map +1 -0
- package/dist/parser-item-metadata.js +158 -0
- package/dist/parser-item-metadata.js.map +1 -0
- package/dist/parser-processing.d.ts +5 -0
- package/dist/parser-processing.d.ts.map +1 -0
- package/dist/parser-processing.js +642 -0
- package/dist/parser-processing.js.map +1 -0
- package/dist/parser-values.d.ts +8 -0
- package/dist/parser-values.d.ts.map +1 -0
- package/dist/parser-values.js +49 -0
- package/dist/parser-values.js.map +1 -0
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +32 -1086
- package/dist/parser.js.map +1 -1
- package/dist/processing-expression-tags.d.ts +56 -0
- package/dist/processing-expression-tags.d.ts.map +1 -0
- package/dist/processing-expression-tags.js +52 -0
- package/dist/processing-expression-tags.js.map +1 -0
- package/dist/processing-rules.d.ts +3 -0
- package/dist/processing-rules.d.ts.map +1 -0
- package/dist/processing-rules.js +10 -0
- package/dist/processing-rules.js.map +1 -0
- package/dist/serializer-processing-expressions.d.ts +8 -0
- package/dist/serializer-processing-expressions.d.ts.map +1 -0
- package/dist/serializer-processing-expressions.js +198 -0
- package/dist/serializer-processing-expressions.js.map +1 -0
- package/dist/serializer-processing-xml.d.ts +15 -0
- package/dist/serializer-processing-xml.d.ts.map +1 -0
- package/dist/serializer-processing-xml.js +46 -0
- package/dist/serializer-processing-xml.js.map +1 -0
- package/dist/serializer-processing.d.ts +8 -0
- package/dist/serializer-processing.d.ts.map +1 -0
- package/dist/serializer-processing.js +106 -0
- package/dist/serializer-processing.js.map +1 -0
- package/dist/shared-vocabulary-authoring.d.ts +50 -0
- package/dist/shared-vocabulary-authoring.d.ts.map +1 -0
- package/dist/shared-vocabulary-authoring.js +302 -0
- package/dist/shared-vocabulary-authoring.js.map +1 -0
- package/dist/shared-vocabulary-interaction-sets.d.ts +6 -0
- package/dist/shared-vocabulary-interaction-sets.d.ts.map +1 -0
- package/dist/shared-vocabulary-interaction-sets.js +23 -0
- package/dist/shared-vocabulary-interaction-sets.js.map +1 -0
- package/dist/shared-vocabulary-interaction-validation.d.ts +3 -0
- package/dist/shared-vocabulary-interaction-validation.d.ts.map +1 -0
- package/dist/shared-vocabulary-interaction-validation.js +99 -0
- package/dist/shared-vocabulary-interaction-validation.js.map +1 -0
- package/dist/shared-vocabulary-registry-validation.d.ts +5 -0
- package/dist/shared-vocabulary-registry-validation.d.ts.map +1 -0
- package/dist/shared-vocabulary-registry-validation.js +147 -0
- package/dist/shared-vocabulary-registry-validation.js.map +1 -0
- package/dist/shared-vocabulary-support.d.ts.map +1 -1
- package/dist/shared-vocabulary-support.js +96 -56
- package/dist/shared-vocabulary-support.js.map +1 -1
- package/dist/shared-vocabulary.d.ts +6 -0
- package/dist/shared-vocabulary.d.ts.map +1 -1
- package/dist/shared-vocabulary.js +12 -0
- package/dist/shared-vocabulary.js.map +1 -1
- package/dist/support.d.ts +4 -1
- package/dist/support.d.ts.map +1 -1
- package/dist/support.js +159 -10
- package/dist/support.js.map +1 -1
- package/dist/types.d.ts +38 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +29 -250
- package/dist/validation.js.map +1 -1
- package/dist/xml.d.ts +10 -0
- package/dist/xml.d.ts.map +1 -1
- package/dist/xml.js +321 -249
- package/dist/xml.js.map +1 -1
- package/package.json +1 -4
- package/src/content-text.ts +80 -0
- package/src/index.ts +67 -0
- package/src/interaction-test-fixtures.ts +44 -0
- package/src/package-xml.ts +30 -0
- package/src/parser-custom-interactions.ts +309 -0
- package/src/parser-declarations.ts +174 -0
- package/src/parser-item-metadata.ts +194 -0
- package/src/parser-processing.ts +701 -0
- package/src/parser-values.ts +61 -0
- package/src/parser.ts +59 -1230
- package/src/processing-expression-tags.ts +65 -0
- package/src/processing-rules.ts +11 -0
- package/src/serializer-processing-expressions.ts +456 -0
- package/src/serializer-processing-xml.ts +67 -0
- package/src/serializer-processing.fixtures.ts +469 -0
- package/src/serializer-processing.ts +196 -0
- package/src/shared-vocabulary-authoring.ts +409 -0
- package/src/shared-vocabulary-interaction-sets.ts +28 -0
- package/src/shared-vocabulary-interaction-validation.ts +143 -0
- package/src/shared-vocabulary-registry-validation.ts +207 -0
- package/src/shared-vocabulary-support.ts +127 -101
- package/src/shared-vocabulary.ts +18 -0
- package/src/support.ts +174 -14
- package/src/types.ts +48 -7
- package/src/validation.ts +33 -341
- package/src/xml.ts +378 -255
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { escapeXmlAttribute } from "./xml.js";
|
|
2
|
+
export function renderElement(name, attrs, content, indent) {
|
|
3
|
+
const prefix = " ".repeat(indent);
|
|
4
|
+
const attributeText = renderAttributes(attrs);
|
|
5
|
+
if (typeof content === "string") {
|
|
6
|
+
return [`${prefix}<${name}${attributeText}>${content}</${name}>`];
|
|
7
|
+
}
|
|
8
|
+
if (content.length === 0)
|
|
9
|
+
return [`${prefix}<${name}${attributeText}/>`];
|
|
10
|
+
return [`${prefix}<${name}${attributeText}>`, ...content, `${prefix}</${name}>`];
|
|
11
|
+
}
|
|
12
|
+
export function renderAttributes(attrs) {
|
|
13
|
+
return attrs
|
|
14
|
+
.filter((attr) => attr[1] !== undefined)
|
|
15
|
+
.map(([name, value]) => ` ${name}="${escapeXmlAttribute(String(value))}"`)
|
|
16
|
+
.join("");
|
|
17
|
+
}
|
|
18
|
+
export function knownAttributesWithBagFallback(bag, known) {
|
|
19
|
+
const knownNames = new Set(known.map((entry) => entry.name));
|
|
20
|
+
const resolved = known.flatMap(({ name, fallback }) => {
|
|
21
|
+
const bagValue = bag?.[name];
|
|
22
|
+
if (bagValue !== undefined)
|
|
23
|
+
return [[name, bagValue]];
|
|
24
|
+
if (fallback !== undefined)
|
|
25
|
+
return [[name, fallback]];
|
|
26
|
+
return [];
|
|
27
|
+
});
|
|
28
|
+
const extras = Object.entries(bag ?? {})
|
|
29
|
+
.filter(([name]) => !knownNames.has(name))
|
|
30
|
+
.sort(([left], [right]) => left.localeCompare(right));
|
|
31
|
+
return [...resolved, ...extras];
|
|
32
|
+
}
|
|
33
|
+
export function sortedBagAttributes(bag) {
|
|
34
|
+
return Object.entries(bag ?? {})
|
|
35
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
36
|
+
.map(([name, value]) => [name, value]);
|
|
37
|
+
}
|
|
38
|
+
export function addSerializerDiagnostic(context, code, diagnostic) {
|
|
39
|
+
context.diagnostics.push({
|
|
40
|
+
code,
|
|
41
|
+
severity: diagnostic.severity ?? "error",
|
|
42
|
+
message: diagnostic.message,
|
|
43
|
+
...(diagnostic.source !== undefined ? { source: diagnostic.source } : {}),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=serializer-processing-xml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer-processing-xml.js","sourceRoot":"","sources":["../src/serializer-processing-xml.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { QtiDiagnostic, QtiResponseProcessing } from "./types.js";
|
|
2
|
+
export interface QtiSerializeResponseProcessingResult {
|
|
3
|
+
ok: boolean;
|
|
4
|
+
xml?: string | undefined;
|
|
5
|
+
diagnostics: QtiDiagnostic[];
|
|
6
|
+
}
|
|
7
|
+
export declare function serializeResponseProcessing(processing: QtiResponseProcessing): QtiSerializeResponseProcessingResult;
|
|
8
|
+
//# sourceMappingURL=serializer-processing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer-processing.d.ts","sourceRoot":"","sources":["../src/serializer-processing.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,aAAa,EAGb,qBAAqB,EAEtB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,oCAAoC;IACnD,EAAE,EAAE,OAAO,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,WAAW,EAAE,aAAa,EAAE,CAAC;CAC9B;AAED,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,qBAAqB,GAChC,oCAAoC,CAmBtC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { responseConditionsFromRules } from "./processing-rules.js";
|
|
2
|
+
import { serializeExpression } from "./serializer-processing-expressions.js";
|
|
3
|
+
import { addSerializerDiagnostic, renderElement, } from "./serializer-processing-xml.js";
|
|
4
|
+
export function serializeResponseProcessing(processing) {
|
|
5
|
+
const context = { diagnostics: [] };
|
|
6
|
+
const rules = responseProcessingRules(processing, context);
|
|
7
|
+
const attrs = [];
|
|
8
|
+
if (processing.template !== undefined)
|
|
9
|
+
attrs.push(["template", processing.template]);
|
|
10
|
+
const body = rules.flatMap((rule) => serializeResponseRule(rule, context, 1));
|
|
11
|
+
const hasErrors = context.diagnostics.some((diagnostic) => diagnostic.severity === "error");
|
|
12
|
+
if (hasErrors) {
|
|
13
|
+
return { ok: false, diagnostics: context.diagnostics };
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
ok: true,
|
|
17
|
+
xml: renderElement("qti-response-processing", attrs, body, 0).join("\n"),
|
|
18
|
+
diagnostics: context.diagnostics,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function responseProcessingRules(processing, context) {
|
|
22
|
+
if (processing.conditions.length === 0)
|
|
23
|
+
return processing.rules;
|
|
24
|
+
const flattened = responseConditionsFromRules(processing.rules);
|
|
25
|
+
if (sameConditionReferences(flattened, processing.conditions))
|
|
26
|
+
return processing.rules;
|
|
27
|
+
if (processing.rules.length === 0) {
|
|
28
|
+
return processing.conditions.map((condition) => ({ type: "responseCondition", condition }));
|
|
29
|
+
}
|
|
30
|
+
addSerializerDiagnostic(context, "responseProcessing.serialize.conditions", {
|
|
31
|
+
message: "QtiResponseProcessing.conditions must be represented as responseCondition rules when rules are present.",
|
|
32
|
+
});
|
|
33
|
+
return processing.rules;
|
|
34
|
+
}
|
|
35
|
+
function sameConditionReferences(left, right) {
|
|
36
|
+
if (left.length !== right.length)
|
|
37
|
+
return false;
|
|
38
|
+
return left.every((condition, index) => condition === right[index]);
|
|
39
|
+
}
|
|
40
|
+
function serializeResponseRule(rule, context, indent) {
|
|
41
|
+
switch (rule.type) {
|
|
42
|
+
case "setOutcomeValue": {
|
|
43
|
+
const expressionXml = serializeExpression(rule.expression, context, indent + 1);
|
|
44
|
+
if (!requireRuleIdentifier(rule.identifier, "qti-set-outcome-value", rule.source, context)) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
return renderElement("qti-set-outcome-value", [["identifier", rule.identifier]], expressionXml, indent);
|
|
48
|
+
}
|
|
49
|
+
case "lookupOutcomeValue": {
|
|
50
|
+
const expressionXml = serializeExpression(rule.expression, context, indent + 1);
|
|
51
|
+
if (!requireRuleIdentifier(rule.identifier, "qti-lookup-outcome-value", rule.source, context)) {
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
return renderElement("qti-lookup-outcome-value", [["identifier", rule.identifier]], expressionXml, indent);
|
|
55
|
+
}
|
|
56
|
+
case "exitResponse":
|
|
57
|
+
return renderElement("qti-exit-response", [], [], indent);
|
|
58
|
+
case "responseCondition":
|
|
59
|
+
return serializeResponseCondition(rule.condition, context, indent);
|
|
60
|
+
case "responseProcessingFragment":
|
|
61
|
+
return renderElement("qti-response-processing-fragment", [], rule.rules.flatMap((child) => serializeResponseRule(child, context, indent + 1)), indent);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function serializeResponseCondition(condition, context, indent) {
|
|
65
|
+
if (condition.ifExpression === undefined) {
|
|
66
|
+
addSerializerDiagnostic(context, "responseProcessing.serialize.missingExpression", {
|
|
67
|
+
message: "qti-response-condition requires an if expression.",
|
|
68
|
+
});
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
const children = [
|
|
72
|
+
...renderElement("qti-response-if", [], [
|
|
73
|
+
...serializeExpression(condition.ifExpression, context, indent + 2),
|
|
74
|
+
...condition.thenRules.flatMap((rule) => serializeResponseRule(rule, context, indent + 2)),
|
|
75
|
+
], indent + 1),
|
|
76
|
+
];
|
|
77
|
+
for (const branch of condition.elseIfs) {
|
|
78
|
+
children.push(...serializeResponseBranch(branch, context, indent + 1));
|
|
79
|
+
}
|
|
80
|
+
if (condition.elseRules.length > 0) {
|
|
81
|
+
children.push(...renderElement("qti-response-else", [], condition.elseRules.flatMap((rule) => serializeResponseRule(rule, context, indent + 2)), indent + 1));
|
|
82
|
+
}
|
|
83
|
+
return renderElement("qti-response-condition", [], children, indent);
|
|
84
|
+
}
|
|
85
|
+
function serializeResponseBranch(branch, context, indent) {
|
|
86
|
+
if (branch.expression === undefined) {
|
|
87
|
+
addSerializerDiagnostic(context, "responseProcessing.serialize.missingExpression", {
|
|
88
|
+
message: "qti-response-else-if requires an expression.",
|
|
89
|
+
});
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
92
|
+
return renderElement("qti-response-else-if", [], [
|
|
93
|
+
...serializeExpression(branch.expression, context, indent + 1),
|
|
94
|
+
...branch.rules.flatMap((rule) => serializeResponseRule(rule, context, indent + 1)),
|
|
95
|
+
], indent);
|
|
96
|
+
}
|
|
97
|
+
function requireRuleIdentifier(identifier, tagName, source, context) {
|
|
98
|
+
if (identifier !== "")
|
|
99
|
+
return true;
|
|
100
|
+
addSerializerDiagnostic(context, "responseProcessing.serialize.invalidAttribute", {
|
|
101
|
+
message: `${tagName} requires a non-empty identifier.`,
|
|
102
|
+
source,
|
|
103
|
+
});
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=serializer-processing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer-processing.js","sourceRoot":"","sources":["../src/serializer-processing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { QtiInteractionType } from "./types.js";
|
|
2
|
+
export type QtiSharedVocabularyFieldValue = string | number;
|
|
3
|
+
export type QtiSharedVocabularyStateValue = QtiSharedVocabularyFieldValue | boolean | readonly string[] | undefined;
|
|
4
|
+
export type QtiSharedVocabularyState = Record<string, QtiSharedVocabularyStateValue>;
|
|
5
|
+
export type QtiSharedVocabularyAttributeValueType = "string" | "number" | "token-list";
|
|
6
|
+
export type QtiSharedVocabularyField = {
|
|
7
|
+
kind: "class-value";
|
|
8
|
+
id: string;
|
|
9
|
+
classPrefix: string;
|
|
10
|
+
values: readonly QtiSharedVocabularyFieldValue[];
|
|
11
|
+
interactions: readonly QtiInteractionType[];
|
|
12
|
+
precedence: "value-order" | "class-order";
|
|
13
|
+
} | {
|
|
14
|
+
kind: "class-fixed";
|
|
15
|
+
id: string;
|
|
16
|
+
className: string;
|
|
17
|
+
interactions: readonly QtiInteractionType[];
|
|
18
|
+
} | {
|
|
19
|
+
kind: "attribute";
|
|
20
|
+
id: string;
|
|
21
|
+
attributeName: string;
|
|
22
|
+
interactions: readonly QtiInteractionType[];
|
|
23
|
+
values?: readonly string[] | undefined;
|
|
24
|
+
valueType?: QtiSharedVocabularyAttributeValueType | undefined;
|
|
25
|
+
numberMinimum?: number | undefined;
|
|
26
|
+
};
|
|
27
|
+
export declare const sharedVocabularyInteractionFields: readonly QtiSharedVocabularyField[];
|
|
28
|
+
export declare function sharedVocabularyFieldsForInteraction(interaction: QtiInteractionType): readonly QtiSharedVocabularyField[];
|
|
29
|
+
export declare function sharedVocabularyFieldById(id: string): QtiSharedVocabularyField | undefined;
|
|
30
|
+
export declare function sharedVocabularyFixedClassName(fieldId: string): string | undefined;
|
|
31
|
+
export declare function parseSharedVocabularyClasses(className: string, interaction?: QtiInteractionType): QtiSharedVocabularyState;
|
|
32
|
+
export declare function serializeSharedVocabularyClassNames(state: QtiSharedVocabularyState, interaction?: QtiInteractionType): string[];
|
|
33
|
+
export declare function parseSharedVocabularyAttributes(attrs: Record<string, string | undefined>, interaction?: QtiInteractionType): QtiSharedVocabularyState;
|
|
34
|
+
export declare function serializeSharedVocabularyAttributes(state: QtiSharedVocabularyState, interaction?: QtiInteractionType): Record<string, string>;
|
|
35
|
+
export declare function sharedVocabularyClassNamesForField(field: Extract<QtiSharedVocabularyField, {
|
|
36
|
+
kind: "class-value";
|
|
37
|
+
}>): string[];
|
|
38
|
+
export declare function matchedSharedVocabularyClassNames(field: Extract<QtiSharedVocabularyField, {
|
|
39
|
+
kind: "class-value";
|
|
40
|
+
}>, classNames: readonly string[]): string[];
|
|
41
|
+
export declare function describeSharedVocabularyPrecedence(field: Extract<QtiSharedVocabularyField, {
|
|
42
|
+
kind: "class-value";
|
|
43
|
+
}>, matchedClassNames: readonly string[]): string;
|
|
44
|
+
export declare function formatSharedVocabularyClassValueRange(field: Extract<QtiSharedVocabularyField, {
|
|
45
|
+
kind: "class-value";
|
|
46
|
+
}>): string;
|
|
47
|
+
export declare function parseClassValue(field: Extract<QtiSharedVocabularyField, {
|
|
48
|
+
kind: "class-value";
|
|
49
|
+
}>, className: string): QtiSharedVocabularyFieldValue | undefined;
|
|
50
|
+
//# sourceMappingURL=shared-vocabulary-authoring.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-vocabulary-authoring.d.ts","sourceRoot":"","sources":["../src/shared-vocabulary-authoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { SHARED_VOCABULARY_CHOICE_WRITING_ORIENTATIONS } from "./shared-vocabulary-generated-families.js";
|
|
2
|
+
import { SHARED_VOCABULARY_CHOICE_AND_ORDER_INTERACTIONS, SHARED_VOCABULARY_CHOICES_LAYOUT_INTERACTIONS, SHARED_VOCABULARY_MEDIA_INTERACTIONS, SHARED_VOCABULARY_SELECTION_PRESENTATION_INTERACTIONS, } from "./shared-vocabulary-interaction-sets.js";
|
|
3
|
+
import { SHARED_VOCABULARY_CHOICES_POSITIONS, SHARED_VOCABULARY_CHOICES_STACKING, SHARED_VOCABULARY_LABEL_STYLES, SHARED_VOCABULARY_LABEL_SUFFIXES, SHARED_VOCABULARY_MEDIA_PLAYER_CONTROLS, SHARED_VOCABULARY_ORIENTATIONS, SHARED_VOCABULARY_SELECTION_TONES, } from "./shared-vocabulary.js";
|
|
4
|
+
const choiceAndOrder = SHARED_VOCABULARY_CHOICE_AND_ORDER_INTERACTIONS;
|
|
5
|
+
const choicesLayoutInteractions = SHARED_VOCABULARY_CHOICES_LAYOUT_INTERACTIONS;
|
|
6
|
+
const selectionPresentationInteractions = SHARED_VOCABULARY_SELECTION_PRESENTATION_INTERACTIONS;
|
|
7
|
+
const mediaInteraction = SHARED_VOCABULARY_MEDIA_INTERACTIONS;
|
|
8
|
+
export const sharedVocabularyInteractionFields = [
|
|
9
|
+
{
|
|
10
|
+
kind: "class-value",
|
|
11
|
+
id: "labels-style",
|
|
12
|
+
classPrefix: "qti-labels-",
|
|
13
|
+
values: SHARED_VOCABULARY_LABEL_STYLES,
|
|
14
|
+
interactions: choiceAndOrder,
|
|
15
|
+
precedence: "value-order",
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
kind: "class-value",
|
|
19
|
+
id: "labels-suffix",
|
|
20
|
+
classPrefix: "qti-labels-suffix-",
|
|
21
|
+
values: SHARED_VOCABULARY_LABEL_SUFFIXES,
|
|
22
|
+
interactions: choiceAndOrder,
|
|
23
|
+
precedence: "value-order",
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
kind: "class-value",
|
|
27
|
+
id: "orientation",
|
|
28
|
+
classPrefix: "qti-orientation-",
|
|
29
|
+
values: SHARED_VOCABULARY_ORIENTATIONS,
|
|
30
|
+
interactions: choiceAndOrder,
|
|
31
|
+
precedence: "value-order",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
kind: "class-value",
|
|
35
|
+
id: "choices-stacking",
|
|
36
|
+
classPrefix: "qti-choices-stacking-",
|
|
37
|
+
values: SHARED_VOCABULARY_CHOICES_STACKING,
|
|
38
|
+
interactions: ["choice"],
|
|
39
|
+
precedence: "class-order",
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
kind: "class-value",
|
|
43
|
+
id: "choices-position",
|
|
44
|
+
classPrefix: "qti-choices-",
|
|
45
|
+
values: SHARED_VOCABULARY_CHOICES_POSITIONS,
|
|
46
|
+
interactions: choicesLayoutInteractions,
|
|
47
|
+
precedence: "class-order",
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
kind: "class-value",
|
|
51
|
+
id: "selections-tone",
|
|
52
|
+
classPrefix: "qti-selections-",
|
|
53
|
+
values: SHARED_VOCABULARY_SELECTION_TONES,
|
|
54
|
+
interactions: selectionPresentationInteractions,
|
|
55
|
+
precedence: "value-order",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
kind: "class-value",
|
|
59
|
+
id: "writing-orientation",
|
|
60
|
+
classPrefix: "qti-writing-orientation-",
|
|
61
|
+
values: SHARED_VOCABULARY_CHOICE_WRITING_ORIENTATIONS,
|
|
62
|
+
interactions: ["choice", "inlineChoice"],
|
|
63
|
+
precedence: "value-order",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
kind: "class-fixed",
|
|
67
|
+
id: "input-control-hidden",
|
|
68
|
+
className: "qti-input-control-hidden",
|
|
69
|
+
interactions: ["choice", "hottext"],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
kind: "class-fixed",
|
|
73
|
+
id: "unselected-hidden",
|
|
74
|
+
className: "qti-unselected-hidden",
|
|
75
|
+
interactions: selectionPresentationInteractions,
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
kind: "class-fixed",
|
|
79
|
+
id: "match-tabular",
|
|
80
|
+
className: "qti-match-tabular",
|
|
81
|
+
interactions: ["match"],
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
kind: "class-fixed",
|
|
85
|
+
id: "header-hidden",
|
|
86
|
+
className: "qti-header-hidden",
|
|
87
|
+
interactions: ["match"],
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
kind: "class-fixed",
|
|
91
|
+
id: "gap-placement",
|
|
92
|
+
className: "qti-gap-placement",
|
|
93
|
+
interactions: ["gapMatch"],
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
kind: "attribute",
|
|
97
|
+
id: "media-player-controls",
|
|
98
|
+
attributeName: "data-qti-media-player-controls",
|
|
99
|
+
values: SHARED_VOCABULARY_MEDIA_PLAYER_CONTROLS,
|
|
100
|
+
valueType: "token-list",
|
|
101
|
+
interactions: mediaInteraction,
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
kind: "attribute",
|
|
105
|
+
id: "media-player-pause-delay",
|
|
106
|
+
attributeName: "data-qti-media-player-pause-delay",
|
|
107
|
+
valueType: "number",
|
|
108
|
+
numberMinimum: 0,
|
|
109
|
+
interactions: mediaInteraction,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
kind: "attribute",
|
|
113
|
+
id: "media-player-pause-duration",
|
|
114
|
+
attributeName: "data-qti-media-player-pause-duration",
|
|
115
|
+
valueType: "number",
|
|
116
|
+
numberMinimum: 0,
|
|
117
|
+
interactions: mediaInteraction,
|
|
118
|
+
},
|
|
119
|
+
];
|
|
120
|
+
export function sharedVocabularyFieldsForInteraction(interaction) {
|
|
121
|
+
return sharedVocabularyInteractionFields.filter((field) => field.interactions.includes(interaction));
|
|
122
|
+
}
|
|
123
|
+
export function sharedVocabularyFieldById(id) {
|
|
124
|
+
return sharedVocabularyInteractionFields.find((field) => field.id === id);
|
|
125
|
+
}
|
|
126
|
+
export function sharedVocabularyFixedClassName(fieldId) {
|
|
127
|
+
const field = sharedVocabularyFieldById(fieldId);
|
|
128
|
+
return field?.kind === "class-fixed" ? field.className : undefined;
|
|
129
|
+
}
|
|
130
|
+
export function parseSharedVocabularyClasses(className, interaction) {
|
|
131
|
+
const classNames = className.split(/\s+/).filter(Boolean);
|
|
132
|
+
const classNameSet = new Set(classNames);
|
|
133
|
+
const state = {};
|
|
134
|
+
for (const field of fieldsForInteractionFilter(interaction)) {
|
|
135
|
+
if (field.kind === "attribute")
|
|
136
|
+
continue;
|
|
137
|
+
if (field.kind === "class-fixed") {
|
|
138
|
+
if (classNameSet.has(field.className))
|
|
139
|
+
state[field.id] = true;
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
const value = parseClassValueField(field, classNames);
|
|
143
|
+
if (value !== undefined)
|
|
144
|
+
state[field.id] = value;
|
|
145
|
+
}
|
|
146
|
+
return state;
|
|
147
|
+
}
|
|
148
|
+
export function serializeSharedVocabularyClassNames(state, interaction) {
|
|
149
|
+
const classNames = [];
|
|
150
|
+
for (const field of fieldsForInteractionFilter(interaction)) {
|
|
151
|
+
if (field.kind === "attribute")
|
|
152
|
+
continue;
|
|
153
|
+
const value = state[field.id];
|
|
154
|
+
if (field.kind === "class-fixed") {
|
|
155
|
+
if (value === true)
|
|
156
|
+
classNames.push(field.className);
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
if (isOmittedStateValue(value))
|
|
160
|
+
continue;
|
|
161
|
+
if (!isAllowedFieldValue(field.values, value))
|
|
162
|
+
continue;
|
|
163
|
+
classNames.push(`${field.classPrefix}${String(value)}`);
|
|
164
|
+
}
|
|
165
|
+
return classNames;
|
|
166
|
+
}
|
|
167
|
+
export function parseSharedVocabularyAttributes(attrs, interaction) {
|
|
168
|
+
const state = {};
|
|
169
|
+
for (const field of fieldsForInteractionFilter(interaction)) {
|
|
170
|
+
if (field.kind !== "attribute")
|
|
171
|
+
continue;
|
|
172
|
+
const value = attrs[field.attributeName];
|
|
173
|
+
if (value === undefined || value === "")
|
|
174
|
+
continue;
|
|
175
|
+
const parsed = parseAttributeValue(field, value);
|
|
176
|
+
if (parsed !== undefined)
|
|
177
|
+
state[field.id] = parsed;
|
|
178
|
+
}
|
|
179
|
+
return state;
|
|
180
|
+
}
|
|
181
|
+
export function serializeSharedVocabularyAttributes(state, interaction) {
|
|
182
|
+
const attrs = {};
|
|
183
|
+
for (const field of fieldsForInteractionFilter(interaction)) {
|
|
184
|
+
if (field.kind !== "attribute")
|
|
185
|
+
continue;
|
|
186
|
+
const value = state[field.id];
|
|
187
|
+
if (isOmittedStateValue(value))
|
|
188
|
+
continue;
|
|
189
|
+
const serialized = serializeAttributeValue(field, value);
|
|
190
|
+
if (serialized !== undefined)
|
|
191
|
+
attrs[field.attributeName] = serialized;
|
|
192
|
+
}
|
|
193
|
+
return attrs;
|
|
194
|
+
}
|
|
195
|
+
function fieldsForInteractionFilter(interaction) {
|
|
196
|
+
return interaction === undefined
|
|
197
|
+
? sharedVocabularyInteractionFields
|
|
198
|
+
: sharedVocabularyFieldsForInteraction(interaction);
|
|
199
|
+
}
|
|
200
|
+
export function sharedVocabularyClassNamesForField(field) {
|
|
201
|
+
return field.values.map((value) => `${field.classPrefix}${String(value)}`);
|
|
202
|
+
}
|
|
203
|
+
export function matchedSharedVocabularyClassNames(field, classNames) {
|
|
204
|
+
const matched = [];
|
|
205
|
+
for (const className of classNames) {
|
|
206
|
+
if (parseClassValue(field, className) !== undefined)
|
|
207
|
+
matched.push(className);
|
|
208
|
+
}
|
|
209
|
+
return matched;
|
|
210
|
+
}
|
|
211
|
+
export function describeSharedVocabularyPrecedence(field, matchedClassNames) {
|
|
212
|
+
const matched = new Set(matchedClassNames);
|
|
213
|
+
if (field.precedence === "class-order") {
|
|
214
|
+
const ordered = matchedClassNames.filter((className) => matched.has(className));
|
|
215
|
+
if (ordered.length < 2)
|
|
216
|
+
return `${ordered[0] ?? "The first matching class"} takes precedence`;
|
|
217
|
+
const [first, ...rest] = ordered;
|
|
218
|
+
return `${first} takes precedence over ${rest.join(", then ")}`;
|
|
219
|
+
}
|
|
220
|
+
const ordered = sharedVocabularyClassNamesForField(field).filter((className) => matched.has(className));
|
|
221
|
+
if (ordered.length < 2)
|
|
222
|
+
return `${ordered[0] ?? "The first matching class"} takes precedence`;
|
|
223
|
+
const [first, ...rest] = ordered;
|
|
224
|
+
return `${first} takes precedence over ${rest.join(", then ")}`;
|
|
225
|
+
}
|
|
226
|
+
export function formatSharedVocabularyClassValueRange(field) {
|
|
227
|
+
const classNames = sharedVocabularyClassNamesForField(field);
|
|
228
|
+
if (classNames.length <= 1)
|
|
229
|
+
return classNames[0] ?? "";
|
|
230
|
+
return `${classNames[0]} through ${classNames[classNames.length - 1]}`;
|
|
231
|
+
}
|
|
232
|
+
function parseClassValueField(field, classNames) {
|
|
233
|
+
if (field.precedence === "class-order") {
|
|
234
|
+
for (const className of classNames) {
|
|
235
|
+
const value = parseClassValue(field, className);
|
|
236
|
+
if (value !== undefined)
|
|
237
|
+
return value;
|
|
238
|
+
}
|
|
239
|
+
return undefined;
|
|
240
|
+
}
|
|
241
|
+
for (const value of field.values) {
|
|
242
|
+
const className = `${field.classPrefix}${String(value)}`;
|
|
243
|
+
if (classNames.includes(className))
|
|
244
|
+
return value;
|
|
245
|
+
}
|
|
246
|
+
return undefined;
|
|
247
|
+
}
|
|
248
|
+
export function parseClassValue(field, className) {
|
|
249
|
+
if (!className.startsWith(field.classPrefix))
|
|
250
|
+
return undefined;
|
|
251
|
+
const suffix = className.slice(field.classPrefix.length);
|
|
252
|
+
for (const value of field.values) {
|
|
253
|
+
if (String(value) === suffix)
|
|
254
|
+
return value;
|
|
255
|
+
}
|
|
256
|
+
return undefined;
|
|
257
|
+
}
|
|
258
|
+
function parseAttributeValue(field, value) {
|
|
259
|
+
if (field.valueType === "token-list") {
|
|
260
|
+
const allowed = new Set(field.values ?? []);
|
|
261
|
+
const tokens = value.split(/\s+/).filter((token) => allowed.has(token));
|
|
262
|
+
return tokens.length > 0 ? [...new Set(tokens)] : undefined;
|
|
263
|
+
}
|
|
264
|
+
if (field.valueType === "number") {
|
|
265
|
+
const parsed = Number(value);
|
|
266
|
+
const minimum = field.numberMinimum ?? Number.NEGATIVE_INFINITY;
|
|
267
|
+
return Number.isFinite(parsed) && parsed >= minimum ? parsed : undefined;
|
|
268
|
+
}
|
|
269
|
+
if (field.values !== undefined && !field.values.includes(value))
|
|
270
|
+
return undefined;
|
|
271
|
+
return value;
|
|
272
|
+
}
|
|
273
|
+
function serializeAttributeValue(field, value) {
|
|
274
|
+
if (field.valueType === "token-list") {
|
|
275
|
+
const values = Array.isArray(value) ? value : String(value).split(/\s+/);
|
|
276
|
+
const allowed = new Set(field.values ?? []);
|
|
277
|
+
const tokens = values.filter((token) => allowed.has(String(token)));
|
|
278
|
+
return tokens.length > 0 ? [...new Set(tokens)].join(" ") : undefined;
|
|
279
|
+
}
|
|
280
|
+
if (field.valueType === "number") {
|
|
281
|
+
if (typeof value !== "number")
|
|
282
|
+
return undefined;
|
|
283
|
+
const minimum = field.numberMinimum ?? Number.NEGATIVE_INFINITY;
|
|
284
|
+
return Number.isFinite(value) && value >= minimum ? String(value) : undefined;
|
|
285
|
+
}
|
|
286
|
+
if (typeof value !== "string" && typeof value !== "number")
|
|
287
|
+
return undefined;
|
|
288
|
+
const serialized = String(value);
|
|
289
|
+
if (field.values !== undefined && !field.values.includes(serialized))
|
|
290
|
+
return undefined;
|
|
291
|
+
return serialized;
|
|
292
|
+
}
|
|
293
|
+
function isAllowedFieldValue(values, value) {
|
|
294
|
+
return values.some((allowed) => allowed === value);
|
|
295
|
+
}
|
|
296
|
+
function isOmittedStateValue(value) {
|
|
297
|
+
return (value === undefined ||
|
|
298
|
+
value === false ||
|
|
299
|
+
value === "" ||
|
|
300
|
+
(Array.isArray(value) && value.length === 0));
|
|
301
|
+
}
|
|
302
|
+
//# sourceMappingURL=shared-vocabulary-authoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-vocabulary-authoring.js","sourceRoot":"","sources":["../src/shared-vocabulary-authoring.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const SHARED_VOCABULARY_CHOICE_INTERACTIONS: readonly ["choice"];
|
|
2
|
+
export declare const SHARED_VOCABULARY_CHOICE_AND_ORDER_INTERACTIONS: readonly ["choice", "order"];
|
|
3
|
+
export declare const SHARED_VOCABULARY_CHOICES_LAYOUT_INTERACTIONS: readonly ["match", "gapMatch", "graphicGapMatch", "order"];
|
|
4
|
+
export declare const SHARED_VOCABULARY_SELECTION_PRESENTATION_INTERACTIONS: readonly ["choice", "hottext", "hotspot", "graphicGapMatch"];
|
|
5
|
+
export declare const SHARED_VOCABULARY_MEDIA_INTERACTIONS: readonly ["media"];
|
|
6
|
+
//# sourceMappingURL=shared-vocabulary-interaction-sets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-vocabulary-interaction-sets.d.ts","sourceRoot":"","sources":["../src/shared-vocabulary-interaction-sets.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,qCAAqC,qBAEA,CAAC;AAEnD,eAAO,MAAM,+CAA+C,8BAGV,CAAC;AAEnD,eAAO,MAAM,6CAA6C,4DAKR,CAAC;AAEnD,eAAO,MAAM,qDAAqD,8DAKhB,CAAC;AAEnD,eAAO,MAAM,oCAAoC,oBAEC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const SHARED_VOCABULARY_CHOICE_INTERACTIONS = [
|
|
2
|
+
"choice",
|
|
3
|
+
];
|
|
4
|
+
export const SHARED_VOCABULARY_CHOICE_AND_ORDER_INTERACTIONS = [
|
|
5
|
+
"choice",
|
|
6
|
+
"order",
|
|
7
|
+
];
|
|
8
|
+
export const SHARED_VOCABULARY_CHOICES_LAYOUT_INTERACTIONS = [
|
|
9
|
+
"match",
|
|
10
|
+
"gapMatch",
|
|
11
|
+
"graphicGapMatch",
|
|
12
|
+
"order",
|
|
13
|
+
];
|
|
14
|
+
export const SHARED_VOCABULARY_SELECTION_PRESENTATION_INTERACTIONS = [
|
|
15
|
+
"choice",
|
|
16
|
+
"hottext",
|
|
17
|
+
"hotspot",
|
|
18
|
+
"graphicGapMatch",
|
|
19
|
+
];
|
|
20
|
+
export const SHARED_VOCABULARY_MEDIA_INTERACTIONS = [
|
|
21
|
+
"media",
|
|
22
|
+
];
|
|
23
|
+
//# sourceMappingURL=shared-vocabulary-interaction-sets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-vocabulary-interaction-sets.js","sourceRoot":"","sources":["../src/shared-vocabulary-interaction-sets.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qCAAqC,GAAG;IACnD,QAAQ;CACwC,CAAC;AAEnD,MAAM,CAAC,MAAM,+CAA+C,GAAG;IAC7D,QAAQ;IACR,OAAO;CACyC,CAAC;AAEnD,MAAM,CAAC,MAAM,6CAA6C,GAAG;IAC3D,OAAO;IACP,UAAU;IACV,iBAAiB;IACjB,OAAO;CACyC,CAAC;AAEnD,MAAM,CAAC,MAAM,qDAAqD,GAAG;IACnE,QAAQ;IACR,SAAS;IACT,SAAS;IACT,iBAAiB;CAC+B,CAAC;AAEnD,MAAM,CAAC,MAAM,oCAAoC,GAAG;IAClD,OAAO;CACyC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-vocabulary-interaction-validation.d.ts","sourceRoot":"","sources":["../src/shared-vocabulary-interaction-validation.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAchE,wBAAgB,mCAAmC,CACjD,WAAW,EAAE,cAAc,EAC3B,WAAW,EAAE,aAAa,EAAE,GAC3B,IAAI,CAoDN"}
|