@digabi/exam-engine-mastering 19.15.4 → 19.15.5-alpha.1

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.
@@ -0,0 +1,2 @@
1
+ export function createHvp(doc: import("libxmljs2").Document, targetLanguage: string): any;
2
+ //# sourceMappingURL=createHvp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createHvp.d.ts","sourceRoot":"","sources":["../../src/mastering/createHvp.js"],"names":[],"mappings":"AASyB,0FA+FxB"}
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ramda_1 = __importDefault(require("ramda"));
7
+ const schema_1 = require("./schema");
8
+ /**
9
+ * Generates HVP.
10
+ *
11
+ * @param {import("libxmljs2").Document} doc
12
+ * @param {string} targetLanguage
13
+ */
14
+ exports.createHvp = (doc, targetLanguage) => {
15
+ const cleanString = (input) => input.trim().replace(/\s+/g, ' ');
16
+ const nodeContains = (elementName, node) => {
17
+ return node.find(`.//${elementName}`, schema_1.ns).length > 0;
18
+ };
19
+ const findQuestionTypes = (node) => {
20
+ const elementNamesToTypes = {
21
+ 'fi-FI': {
22
+ 'e:scored-text-answer': 'keskitetysti arvosteltava tekstivastaus',
23
+ 'e:choice-answer': 'monivalintavastaus',
24
+ 'e:dropdown-answer': 'monivalintavastaus',
25
+ 'e:text-answer': 'tekstivastaus',
26
+ },
27
+ 'sv-FI': {
28
+ 'e:scored-text-answer': 'centraliserat bedömt textsvar',
29
+ 'e:choice-answer': 'flervalssvar',
30
+ 'e:dropdown-answer': 'flervalssvar',
31
+ 'e:text-answer': 'textsvar',
32
+ },
33
+ };
34
+ const elementNamesToTypesInTargetLanguage = elementNamesToTypes[targetLanguage];
35
+ return Object.keys(elementNamesToTypesInTargetLanguage)
36
+ .map((elementName) => (nodeContains(elementName, node) ? elementNamesToTypesInTargetLanguage[elementName] : null))
37
+ .filter((x) => x !== null);
38
+ };
39
+ const optionsWithScoresString = function (node, optionElementName) {
40
+ const prefix = optionElementName === 'e:choice-answer-option' ? '-' : ramda_1.default.last(getDisplayNumber(node).split('.')) + '.';
41
+ return node
42
+ .find(`.//${optionElementName}[@score]`, schema_1.ns)
43
+ .map((o) => `${prefix} ${cleanString(o.text())} (${o.attr('score').value()} p.)`)
44
+ .join('\n');
45
+ };
46
+ const getAttributeValue = (attributeName) => (node) => node.attr(attributeName).value();
47
+ const getMaxScore = getAttributeValue('max-score');
48
+ const getScore = getAttributeValue('score');
49
+ const getDisplayNumber = getAttributeValue('display-number');
50
+ const nodeToStrings = function (node) {
51
+ var _a, _b;
52
+ switch (node.name()) {
53
+ case 'exam-title':
54
+ return [cleanString(node.text())];
55
+ case 'section': {
56
+ const sectionTitle = cleanString(node.get('./e:section-title', schema_1.ns).text());
57
+ return [
58
+ `\n### ${targetLanguage === 'sv-FI' ? 'Del' : 'Osa'} ${getDisplayNumber(node)}: ${sectionTitle} (${getMaxScore(node)} p.)`,
59
+ ];
60
+ }
61
+ case 'question': {
62
+ const displayNumber = getDisplayNumber(node);
63
+ const isTopLevelQuestion = !displayNumber.includes('.');
64
+ const answerTypesInQuestion = findQuestionTypes(node);
65
+ const questionTitle = cleanString(node.find('e:question-title', schema_1.ns)[0].text());
66
+ return [
67
+ `\n${isTopLevelQuestion ? '#### ' : ''}${displayNumber}. ${questionTitle} (${getMaxScore(node)} p.) ${isTopLevelQuestion ? '' : '(' + answerTypesInQuestion.join(', ') + ')'}\n`,
68
+ ];
69
+ }
70
+ case 'choice-answer': {
71
+ return [optionsWithScoresString(node, 'e:choice-answer-option')];
72
+ }
73
+ case 'scored-text-answer': {
74
+ return [
75
+ `- ${getDisplayNumber(node)}. ${(_b = (_a = node.get('./e:hint', schema_1.ns)) === null || _a === void 0 ? void 0 : _a.text().trim()) !== null && _b !== void 0 ? _b : ''}\n${node
76
+ .find('.//e:accepted-answer[@score]', schema_1.ns)
77
+ .map((elem) => ` - ${cleanString(elem.text())} (${getScore(elem)} p.)`)
78
+ .join('\n')}`,
79
+ ];
80
+ }
81
+ case 'dropdown-answer': {
82
+ return [optionsWithScoresString(node, 'e:dropdown-answer-option')];
83
+ }
84
+ default:
85
+ return [];
86
+ }
87
+ };
88
+ const processNode = (node) => {
89
+ if (node.type() !== 'element') {
90
+ return [];
91
+ }
92
+ const childNodes = node.childNodes();
93
+ return childNodes.length !== 0 ? [...nodeToStrings(node), ...childNodes.map(processNode)] : [];
94
+ };
95
+ return ramda_1.default.flatten(doc.childNodes().map(processNode)).join('\n').trim();
96
+ };
97
+ //# sourceMappingURL=createHvp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createHvp.js","sourceRoot":"","sources":["../../src/mastering/createHvp.js"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digabi/exam-engine-mastering",
3
- "version": "19.15.4",
3
+ "version": "19.15.5-alpha.1",
4
4
  "main": "dist/index.js",
5
5
  "author": "Matriculation Examination Board, Finland",
6
6
  "license": "EUPL-1.1",
@@ -9,8 +9,8 @@
9
9
  "schema"
10
10
  ],
11
11
  "dependencies": {
12
- "@digabi/exam-engine-core": "19.15.4",
13
- "@digabi/exam-engine-rendering": "19.15.4",
12
+ "@digabi/exam-engine-core": "19.15.5-alpha.1",
13
+ "@digabi/exam-engine-rendering": "19.15.5-alpha.1",
14
14
  "@ffprobe-installer/ffprobe": "^2.0.0",
15
15
  "cloneable-readable": "^3.0.0",
16
16
  "compare-versions": "^6.0.0",
@@ -21,5 +21,5 @@
21
21
  "mathjax-node": "^2.1.1",
22
22
  "yazl": "^2.5.1"
23
23
  },
24
- "gitHead": "379d1b377da0ec18a8555c85e29e9b8478465769"
24
+ "gitHead": "c669efe79eda2d89d7d1a267df11e9692e7b5026"
25
25
  }