@examplary/qti 0.0.1 → 1.0.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.
Files changed (86) hide show
  1. package/README.md +6 -1
  2. package/dist/ims/ims-package.d.ts +1 -1
  3. package/dist/ims/ims-package.js +2 -2
  4. package/dist/ims/ims-package.js.map +1 -1
  5. package/dist/index.d.ts +2 -0
  6. package/dist/index.js +2 -0
  7. package/dist/index.js.map +1 -1
  8. package/dist/qti/interactions/associate-interaction.d.ts +36 -0
  9. package/dist/qti/interactions/associate-interaction.js +46 -0
  10. package/dist/qti/interactions/associate-interaction.js.map +1 -0
  11. package/dist/qti/interactions/choice-interaction.d.ts +36 -0
  12. package/dist/qti/interactions/choice-interaction.js +43 -0
  13. package/dist/qti/interactions/choice-interaction.js.map +1 -0
  14. package/dist/qti/interactions/drawing-interaction.d.ts +25 -0
  15. package/dist/qti/interactions/drawing-interaction.js +30 -0
  16. package/dist/qti/interactions/drawing-interaction.js.map +1 -0
  17. package/dist/qti/interactions/end-attempt-interaction.d.ts +21 -0
  18. package/dist/qti/interactions/end-attempt-interaction.js +27 -0
  19. package/dist/qti/interactions/end-attempt-interaction.js.map +1 -0
  20. package/dist/qti/interactions/extended-text-interaction.d.ts +28 -0
  21. package/dist/qti/interactions/extended-text-interaction.js +34 -0
  22. package/dist/qti/interactions/extended-text-interaction.js.map +1 -0
  23. package/dist/qti/interactions/gap-match-interaction.d.ts +34 -0
  24. package/dist/qti/interactions/gap-match-interaction.js +46 -0
  25. package/dist/qti/interactions/gap-match-interaction.js.map +1 -0
  26. package/dist/qti/interactions/graphic-associate-interaction.d.ts +37 -0
  27. package/dist/qti/interactions/graphic-associate-interaction.js +47 -0
  28. package/dist/qti/interactions/graphic-associate-interaction.js.map +1 -0
  29. package/dist/qti/interactions/graphic-gap-match-interaction.d.ts +42 -0
  30. package/dist/qti/interactions/graphic-gap-match-interaction.js +64 -0
  31. package/dist/qti/interactions/graphic-gap-match-interaction.js.map +1 -0
  32. package/dist/qti/interactions/graphic-order-interaction.d.ts +28 -0
  33. package/dist/qti/interactions/graphic-order-interaction.js +46 -0
  34. package/dist/qti/interactions/graphic-order-interaction.js.map +1 -0
  35. package/dist/qti/interactions/hotspot-interaction.d.ts +41 -0
  36. package/dist/qti/interactions/hotspot-interaction.js +46 -0
  37. package/dist/qti/interactions/hotspot-interaction.js.map +1 -0
  38. package/dist/qti/interactions/hottext-interaction.d.ts +22 -0
  39. package/dist/qti/interactions/hottext-interaction.js +31 -0
  40. package/dist/qti/interactions/hottext-interaction.js.map +1 -0
  41. package/dist/qti/interactions/index.d.ts +63 -0
  42. package/dist/qti/interactions/index.js +64 -0
  43. package/dist/qti/interactions/index.js.map +1 -0
  44. package/dist/qti/interactions/inline-choice-interaction.d.ts +30 -0
  45. package/dist/qti/interactions/inline-choice-interaction.js +40 -0
  46. package/dist/qti/interactions/inline-choice-interaction.js.map +1 -0
  47. package/dist/qti/interactions/interaction.d.ts +20 -0
  48. package/dist/qti/interactions/interaction.js +24 -0
  49. package/dist/qti/interactions/interaction.js.map +1 -0
  50. package/dist/qti/interactions/match-interaction.d.ts +31 -0
  51. package/dist/qti/interactions/match-interaction.js +63 -0
  52. package/dist/qti/interactions/match-interaction.js.map +1 -0
  53. package/dist/qti/interactions/media-interaction.d.ts +31 -0
  54. package/dist/qti/interactions/media-interaction.js +36 -0
  55. package/dist/qti/interactions/media-interaction.js.map +1 -0
  56. package/dist/qti/interactions/order-interaction.d.ts +28 -0
  57. package/dist/qti/interactions/order-interaction.js +43 -0
  58. package/dist/qti/interactions/order-interaction.js.map +1 -0
  59. package/dist/qti/interactions/position-object-interaction.d.ts +36 -0
  60. package/dist/qti/interactions/position-object-interaction.js +43 -0
  61. package/dist/qti/interactions/position-object-interaction.js.map +1 -0
  62. package/dist/qti/interactions/select-point-interaction.d.ts +28 -0
  63. package/dist/qti/interactions/select-point-interaction.js +33 -0
  64. package/dist/qti/interactions/select-point-interaction.js.map +1 -0
  65. package/dist/qti/interactions/slider-interaction.d.ts +26 -0
  66. package/dist/qti/interactions/slider-interaction.js +32 -0
  67. package/dist/qti/interactions/slider-interaction.js.map +1 -0
  68. package/dist/qti/interactions/text-entry-interaction.d.ts +25 -0
  69. package/dist/qti/interactions/text-entry-interaction.js +31 -0
  70. package/dist/qti/interactions/text-entry-interaction.js.map +1 -0
  71. package/dist/qti/interactions/upload-interaction.d.ts +19 -0
  72. package/dist/qti/interactions/upload-interaction.js +25 -0
  73. package/dist/qti/interactions/upload-interaction.js.map +1 -0
  74. package/dist/qti/qti-element.d.ts +11 -0
  75. package/dist/qti/qti-element.js +29 -0
  76. package/dist/qti/qti-element.js.map +1 -0
  77. package/dist/qti/qti-item.d.ts +7 -3
  78. package/dist/qti/qti-item.js +18 -21
  79. package/dist/qti/qti-item.js.map +1 -1
  80. package/dist/qti/qti-test.d.ts +5 -3
  81. package/dist/qti/qti-test.js +8 -6
  82. package/dist/qti/qti-test.js.map +1 -1
  83. package/dist/utils/html.d.ts +2 -0
  84. package/dist/utils/html.js +15 -0
  85. package/dist/utils/html.js.map +1 -0
  86. package/package.json +1 -1
@@ -1,13 +1,16 @@
1
- import { create, fragment } from "xmlbuilder2/lib/index.js";
1
+ import { create } from "xmlbuilder2/lib/index.js";
2
+ import { QtiElement } from "./qti-element";
2
3
  import { ImsManifestResourceType } from "../ims/ims-manifest";
4
+ import { appendHtmlFragment } from "../utils/html";
3
5
  export var ResponseProcessingTemplate;
4
6
  (function (ResponseProcessingTemplate) {
5
7
  ResponseProcessingTemplate["MatchCorrect"] = "https://purl.imsglobal.org/spec/qti/v3p0/rptemplates/match_correct.xml";
6
8
  ResponseProcessingTemplate["MapResponse"] = "https://purl.imsglobal.org/spec/qti/v3p0/rptemplates/map_response.xml";
7
9
  ResponseProcessingTemplate["MapResponsePoint"] = "https://purl.imsglobal.org/spec/qti/v3p0/rptemplates/map_response_point.xml";
8
10
  })(ResponseProcessingTemplate || (ResponseProcessingTemplate = {}));
9
- export class QtiItem {
11
+ export class QtiItem extends QtiElement {
10
12
  constructor(options) {
13
+ super();
11
14
  this.responseDeclarations = new Map();
12
15
  this.identifier = options?.identifier || "item-" + Date.now();
13
16
  this.adaptive = options?.adaptive;
@@ -31,11 +34,8 @@ export class QtiItem {
31
34
  "xml:lang": this.language,
32
35
  });
33
36
  }
34
- buildXml() {
35
- return this.item.end({ prettyPrint: true });
36
- }
37
- addToPackage(pkg) {
38
- pkg.addResource({
37
+ async addToPackage(pkg) {
38
+ await pkg.addResource({
39
39
  identifier: this.identifier,
40
40
  type: ImsManifestResourceType.imsqti_item_xmlv3p0,
41
41
  }, [
@@ -46,7 +46,7 @@ export class QtiItem {
46
46
  ]);
47
47
  }
48
48
  addToTest(test) {
49
- test.addItemReference(this.identifier, `items/${this.identifier}.xml`);
49
+ test.addItemReference(this.identifier, `item-${this.identifier}.xml`);
50
50
  }
51
51
  getOrCreateItemBody() {
52
52
  if (!this.itemBody) {
@@ -55,18 +55,11 @@ export class QtiItem {
55
55
  return this.itemBody;
56
56
  }
57
57
  addItemBodyFromHtml(html) {
58
- // TODO: support inline math -> MathML conversion
59
- // https://www.imsglobal.org/spec/qti/v3p0/impl#h.z1siiqfxmyc5
60
- // TODO: convert other custom web components to valid HTML5
61
- // file-attachment
62
- // page-clipping
63
- const frag = fragment({
64
- invalidCharReplacement: "�",
65
- }, `<div>
66
- ${this.title ? `<h1>${this.title}</h1>` : ""}
67
- ${html}
68
- </div>`);
69
- this.getOrCreateItemBody().import(frag);
58
+ const content = `${this.title ? `<h1>${this.title}</h1>` : ""}${html}`;
59
+ appendHtmlFragment(content, this.getOrCreateItemBody());
60
+ }
61
+ addInteraction(interaction) {
62
+ this.getOrCreateItemBody().import(interaction.getXmlBuilder());
70
63
  }
71
64
  addPciInteraction(interaction, externalModules = false) {
72
65
  const pci = this.getOrCreateItemBody().ele("qti-portable-custom-interaction", {
@@ -95,6 +88,7 @@ export class QtiItem {
95
88
  cardinality: "single",
96
89
  baseType: "string",
97
90
  }) {
91
+ // TODO: some implementations expect the response to be defined before the body, so we should enforce order
98
92
  if (this.responseDeclarations.has(responseDeclaration.identifier)) {
99
93
  throw new Error(`Response declaration with identifier ${responseDeclaration.identifier} already exists.`);
100
94
  }
@@ -142,8 +136,11 @@ export class QtiItem {
142
136
  outcome
143
137
  .ele("qti-default-value")
144
138
  .ele("qti-value")
145
- .txt(outcomeDeclaration.defaultValue?.toString() ?? "0");
139
+ .txt(outcomeDeclaration.defaultValue.toString());
146
140
  }
147
141
  }
142
+ getRootElement() {
143
+ return this.item;
144
+ }
148
145
  }
149
146
  //# sourceMappingURL=qti-item.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"qti-item.js","sourceRoot":"","sources":["../../src/qti/qti-item.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qti-item.js","sourceRoot":"","sources":["../../src/qti/qti-item.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { XMLBuilder } from "xmlbuilder2/lib/interfaces";
2
+ import { QtiElement } from "./qti-element";
1
3
  import { ImsPackage } from "../ims/ims-package";
2
4
  type QtiTestOptions = {
3
5
  identifier?: string;
@@ -6,7 +8,7 @@ type QtiTestOptions = {
6
8
  toolName?: string;
7
9
  toolVersion?: string;
8
10
  };
9
- export declare class QtiTest {
11
+ export declare class QtiTest extends QtiElement {
10
12
  identifier: string;
11
13
  title?: string;
12
14
  language?: string;
@@ -17,9 +19,9 @@ export declare class QtiTest {
17
19
  private section;
18
20
  private outcomeProcessing;
19
21
  constructor(options?: QtiTestOptions);
20
- buildXml(): string;
21
- addToPackage(pkg: ImsPackage): void;
22
+ addToPackage(pkg: ImsPackage): Promise<void>;
22
23
  addItemReference(itemIdentifier: string, href: string): void;
23
24
  private addOutcomeDeclaration;
25
+ protected getRootElement(): XMLBuilder;
24
26
  }
25
27
  export {};
@@ -1,7 +1,9 @@
1
1
  import { create } from "xmlbuilder2/lib/index.js";
2
+ import { QtiElement } from "./qti-element";
2
3
  import { ImsManifestResourceType } from "../ims/ims-manifest";
3
- export class QtiTest {
4
+ export class QtiTest extends QtiElement {
4
5
  constructor(options) {
6
+ super();
5
7
  this.identifier = options?.identifier || "test-" + Date.now();
6
8
  this.title = options?.title;
7
9
  this.language = options?.language;
@@ -33,11 +35,8 @@ export class QtiTest {
33
35
  this.addOutcomeDeclaration("SCORE");
34
36
  this.addOutcomeDeclaration("MAX_SCORE");
35
37
  }
36
- buildXml() {
37
- return this.test.end({ prettyPrint: true });
38
- }
39
- addToPackage(pkg) {
40
- pkg.addResource({
38
+ async addToPackage(pkg) {
39
+ await pkg.addResource({
41
40
  identifier: this.identifier,
42
41
  type: ImsManifestResourceType.imsqti_test_xmlv3p0,
43
42
  }, [
@@ -72,5 +71,8 @@ export class QtiTest {
72
71
  "variable-identifier": identifier,
73
72
  });
74
73
  }
74
+ getRootElement() {
75
+ return this.test;
76
+ }
75
77
  }
76
78
  //# sourceMappingURL=qti-test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"qti-test.js","sourceRoot":"","sources":["../../src/qti/qti-test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qti-test.js","sourceRoot":"","sources":["../../src/qti/qti-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { XMLBuilder } from "xmlbuilder2/lib/interfaces";
2
+ export declare const appendHtmlFragment: (html: string, toElement: XMLBuilder) => void;
@@ -0,0 +1,15 @@
1
+ import { fragment } from "xmlbuilder2";
2
+ export const appendHtmlFragment = (html, toElement) => {
3
+ // TODO: support inline math -> MathML conversion
4
+ // https://www.imsglobal.org/spec/qti/v3p0/impl#h.z1siiqfxmyc5
5
+ // TODO: convert other custom web components to valid HTML5
6
+ // file-attachment
7
+ // page-clipping
8
+ const doc = fragment({
9
+ invalidCharReplacement: "�",
10
+ }, `<div>${html}</div>`);
11
+ doc.each((child) => {
12
+ toElement.import(child);
13
+ });
14
+ };
15
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/utils/html.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,SAAqB,EAAE,EAAE;IACxE,iDAAiD;IACjD,8DAA8D;IAE9D,2DAA2D;IAC3D,kBAAkB;IAClB,gBAAgB;IAEhB,MAAM,GAAG,GAAG,QAAQ,CAClB;QACE,sBAAsB,EAAE,GAAG;KAC5B,EACD,QAAQ,IAAI,QAAQ,CACrB,CAAC;IAEF,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@examplary/qti",
3
3
  "description": "Utilities to generate QTI 3.0 assessment packages.",
4
4
  "packageManager": "yarn@4.5.3",
5
- "version": "0.0.1",
5
+ "version": "1.0.0",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
8
8
  "files": [