@digabi/exam-engine-rendering 19.1.0-alpha.0 → 19.1.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/dist/Grading.d.ts +4 -0
- package/dist/Grading.d.ts.map +1 -0
- package/dist/Grading.js +109 -0
- package/dist/Grading.js.map +1 -0
- package/dist/PreviewGrading.d.ts +4 -0
- package/dist/PreviewGrading.d.ts.map +1 -0
- package/dist/PreviewGrading.js +86 -0
- package/dist/PreviewGrading.js.map +1 -0
- package/dist/__tests__/puppeteerUtils.d.ts +0 -4
- package/dist/__tests__/puppeteerUtils.d.ts.map +1 -1
- package/dist/__tests__/puppeteerUtils.js +1 -15
- package/dist/__tests__/puppeteerUtils.js.map +1 -1
- package/dist/__tests__/testGrading.d.ts +2 -0
- package/dist/__tests__/testGrading.d.ts.map +1 -0
- package/dist/__tests__/testGrading.js +97 -0
- package/dist/__tests__/testGrading.js.map +1 -0
- package/dist/__tests__/testOfflineGeneration.js +16 -1
- package/dist/__tests__/testOfflineGeneration.js.map +1 -1
- package/dist/__tests__/tsconfig.tsbuildinfo +1 -1
- package/dist/createOfflineExam.d.ts +0 -4
- package/dist/createOfflineExam.d.ts.map +1 -1
- package/dist/createOfflineExam.js +6 -16
- package/dist/createOfflineExam.js.map +1 -1
- package/dist/getOfflineWebpackConfig.d.ts.map +1 -1
- package/dist/getOfflineWebpackConfig.js +23 -28
- package/dist/getOfflineWebpackConfig.js.map +1 -1
- package/dist/preview.js +5 -2
- package/dist/preview.js.map +1 -1
- package/dist/utils/indexedDBGraringServerAPI.d.ts +3 -0
- package/dist/utils/indexedDBGraringServerAPI.d.ts.map +1 -0
- package/dist/utils/indexedDBGraringServerAPI.js +33 -0
- package/dist/utils/indexedDBGraringServerAPI.js.map +1 -0
- package/package.json +4 -4
- package/public/index.html +16 -0
- package/dist/__tests__/testGradingInstructionsGeneration.d.ts +0 -2
- package/dist/__tests__/testGradingInstructionsGeneration.d.ts.map +0 -1
- package/dist/__tests__/testGradingInstructionsGeneration.js +0 -32
- package/dist/__tests__/testGradingInstructionsGeneration.js.map +0 -1
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Grading.d.ts","sourceRoot":"","sources":["../src/Grading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAA;;AAqHtE,wBAA6E"}
|
package/dist/Grading.js
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
+
const react_1 = __importStar(require("react"));
|
27
|
+
const react_i18next_1 = require("react-i18next");
|
28
|
+
const ResultsContext_1 = require("@digabi/exam-engine-core/dist/components/context/ResultsContext");
|
29
|
+
const i18n_1 = require("@digabi/exam-engine-core/dist/i18n");
|
30
|
+
const GradingAnswer_1 = require("@digabi/exam-engine-core/dist/components/grading/GradingAnswer");
|
31
|
+
const CommonExamContext_1 = require("@digabi/exam-engine-core/dist/components/context/CommonExamContext");
|
32
|
+
function Grading() {
|
33
|
+
const { answersByQuestionId } = (0, react_1.useContext)(ResultsContext_1.ResultsContext);
|
34
|
+
const i18n = (0, i18n_1.initI18n)('FI-fi');
|
35
|
+
(0, react_1.useEffect)((0, i18n_1.changeLanguage)(i18n, 'FI-fi'));
|
36
|
+
const answerIds = Object.keys(answersByQuestionId).map(Number);
|
37
|
+
if (answerIds.length === 0) {
|
38
|
+
return react_1.default.createElement("div", null, "No answers");
|
39
|
+
}
|
40
|
+
const [answerId, setAnswerId] = (0, react_1.useState)(answerIds[0]);
|
41
|
+
const annotationsStorage = (0, react_1.useRef)(Object.fromEntries(answerIds.map((id) => [
|
42
|
+
id,
|
43
|
+
{
|
44
|
+
pregrading: [
|
45
|
+
{
|
46
|
+
startIndex: 2,
|
47
|
+
length: 5,
|
48
|
+
message: '+1',
|
49
|
+
},
|
50
|
+
{
|
51
|
+
x: 0.07434944237918215,
|
52
|
+
y: 0.8599562363238512,
|
53
|
+
type: 'rect',
|
54
|
+
width: 0.16604708798017348,
|
55
|
+
height: 0.03063457330415753,
|
56
|
+
message: '+2',
|
57
|
+
attachmentIndex: 0,
|
58
|
+
},
|
59
|
+
{
|
60
|
+
x1: 0.4035532994923858,
|
61
|
+
x2: 0.5621827411167513,
|
62
|
+
y1: 0.957983193277311,
|
63
|
+
y2: 0.957983193277311,
|
64
|
+
type: 'line',
|
65
|
+
message: 'trk, +1',
|
66
|
+
attachmentIndex: 0,
|
67
|
+
},
|
68
|
+
],
|
69
|
+
censoring: [],
|
70
|
+
},
|
71
|
+
])));
|
72
|
+
const [annotations, setAnnotations] = (0, react_1.useState)({
|
73
|
+
pregrading: [],
|
74
|
+
censoring: [],
|
75
|
+
});
|
76
|
+
(0, react_1.useEffect)(() => {
|
77
|
+
setAnnotations(annotationsStorage.current[answerId]);
|
78
|
+
});
|
79
|
+
const answer = answersByQuestionId[answerId];
|
80
|
+
const { type: answerType, value } = answer;
|
81
|
+
if (answerType === 'choice') {
|
82
|
+
return react_1.default.createElement("div", null, "choice answer");
|
83
|
+
}
|
84
|
+
const { characterCount } = answer;
|
85
|
+
function selectQuestion(e, id) {
|
86
|
+
e.preventDefault();
|
87
|
+
setAnswerId(id);
|
88
|
+
setAnnotations(annotationsStorage.current[id]);
|
89
|
+
}
|
90
|
+
function saveAnnotations(annotations) {
|
91
|
+
annotationsStorage.current[answerId] = annotations;
|
92
|
+
setAnnotations({ ...annotationsStorage.current[answerId] });
|
93
|
+
}
|
94
|
+
return (react_1.default.createElement(react_i18next_1.I18nextProvider, { i18n: i18n },
|
95
|
+
react_1.default.createElement("main", { className: "e-exam" },
|
96
|
+
react_1.default.createElement("div", { className: "grading-navi" }, answerIds.map((id) => id === answerId ? (react_1.default.createElement("span", { key: id, className: "grading-navi-item" }, answersByQuestionId[id].displayNumber)) : (react_1.default.createElement("a", { className: "grading-navi-item", href: "", onClick: (e) => selectQuestion(e, id), key: id }, answersByQuestionId[id].displayNumber)))),
|
97
|
+
react_1.default.createElement(GradingAnswer_1.GradingAnswer, { ...{
|
98
|
+
isReadOnly: false,
|
99
|
+
answerType,
|
100
|
+
gradingRole: 'censoring',
|
101
|
+
value,
|
102
|
+
characterCount,
|
103
|
+
maxLength: 100,
|
104
|
+
annotations,
|
105
|
+
saveAnnotations,
|
106
|
+
} }))));
|
107
|
+
}
|
108
|
+
exports.default = react_1.default.memo((0, ResultsContext_1.withResultsContext)((0, CommonExamContext_1.withCommonExamContext)(Grading)));
|
109
|
+
//# sourceMappingURL=Grading.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Grading.js","sourceRoot":"","sources":["../src/Grading.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"PreviewGrading.d.ts","sourceRoot":"","sources":["../src/PreviewGrading.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkD,MAAM,OAAO,CAAA;;AA2FtE,wBAAwE"}
|
@@ -0,0 +1,86 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
+
const react_1 = __importStar(require("react"));
|
27
|
+
const ResultsContext_1 = require("@digabi/exam-engine-core/dist/components/context/ResultsContext");
|
28
|
+
const GradingAnswer_1 = require("@digabi/exam-engine-core/dist/components/grading/GradingAnswer");
|
29
|
+
const CommonExamContext_1 = require("@digabi/exam-engine-core/dist/components/context/CommonExamContext");
|
30
|
+
function PreviewGrading() {
|
31
|
+
const { answersByQuestionId } = (0, react_1.useContext)(ResultsContext_1.ResultsContext);
|
32
|
+
const language = 'fi-FI';
|
33
|
+
const answerIds = Object.keys(answersByQuestionId).map(Number);
|
34
|
+
if (answerIds.length === 0) {
|
35
|
+
return react_1.default.createElement("div", null, "No answers");
|
36
|
+
}
|
37
|
+
const [answerId, setAnswerId] = (0, react_1.useState)(answerIds[0]);
|
38
|
+
const annotationsStorage = (0, react_1.useRef)(Object.fromEntries(answerIds.map((id) => [
|
39
|
+
id,
|
40
|
+
{
|
41
|
+
pregrading: [
|
42
|
+
{
|
43
|
+
startIndex: 2,
|
44
|
+
length: 5,
|
45
|
+
message: '+1',
|
46
|
+
},
|
47
|
+
],
|
48
|
+
censoring: [],
|
49
|
+
},
|
50
|
+
])));
|
51
|
+
const [annotations, setAnnotations] = (0, react_1.useState)({
|
52
|
+
pregrading: [],
|
53
|
+
censoring: [],
|
54
|
+
});
|
55
|
+
(0, react_1.useEffect)(() => {
|
56
|
+
setAnnotations(annotationsStorage.current[answerId]);
|
57
|
+
});
|
58
|
+
const answer = answersByQuestionId[answerId];
|
59
|
+
const { type, value } = answer;
|
60
|
+
if (type === 'choice') {
|
61
|
+
return react_1.default.createElement("div", null, "choice answer");
|
62
|
+
}
|
63
|
+
const { characterCount } = answer;
|
64
|
+
function selectQuestion(e, id) {
|
65
|
+
e.preventDefault();
|
66
|
+
setAnswerId(id);
|
67
|
+
setAnnotations(annotationsStorage.current[id]);
|
68
|
+
}
|
69
|
+
function saveAnnotations(annotations) {
|
70
|
+
annotationsStorage.current[answerId] = annotations;
|
71
|
+
setAnnotations({ ...annotationsStorage.current[answerId] });
|
72
|
+
}
|
73
|
+
return (react_1.default.createElement("main", { className: "e-exam" },
|
74
|
+
react_1.default.createElement("div", { className: "grading-navi" }, answerIds.map((id) => id === answerId ? (react_1.default.createElement("span", { key: id, className: "grading-navi-item" }, answersByQuestionId[id].displayNumber)) : (react_1.default.createElement("a", { className: "grading-navi-item", href: "", onClick: (e) => selectQuestion(e, id), key: id }, answersByQuestionId[id].displayNumber)))),
|
75
|
+
react_1.default.createElement(GradingAnswer_1.GradingAnswer, { ...{
|
76
|
+
answer: { type, characterCount, value },
|
77
|
+
language,
|
78
|
+
isReadOnly: false,
|
79
|
+
gradingRole: 'censoring',
|
80
|
+
maxLength: 100,
|
81
|
+
annotations,
|
82
|
+
saveAnnotations,
|
83
|
+
} })));
|
84
|
+
}
|
85
|
+
exports.default = (0, ResultsContext_1.withResultsContext)((0, CommonExamContext_1.withCommonExamContext)(PreviewGrading));
|
86
|
+
//# sourceMappingURL=PreviewGrading.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"PreviewGrading.js","sourceRoot":"","sources":["../src/PreviewGrading.tsx"],"names":[],"mappings":"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"}
|
@@ -6,8 +6,4 @@ export declare function halt(page: Page): Promise<void>;
|
|
6
6
|
export declare function getInnerText(page: Page, selector: string): Promise<string>;
|
7
7
|
export declare function getOuterHtml(page: Page, selector: string): Promise<string>;
|
8
8
|
export declare function getTextContent(page: Page, selector: string): Promise<string>;
|
9
|
-
export declare function getPageAndRequestErrors(page: Page, filename: string): Promise<{
|
10
|
-
requestErrors: string[];
|
11
|
-
pageErrors: Error[];
|
12
|
-
}>;
|
13
9
|
//# sourceMappingURL=puppeteerUtils.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"puppeteerUtils.d.ts","sourceRoot":"","sources":["../../__tests__/puppeteerUtils.ts"],"names":[],"mappings":"AAEA,OAAkB,EAAW,IAAI,EAAE,MAAM,WAAW,CAAA;AAIpD,wBAAgB,aAAa,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,CAgBnD;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrE;AAED,wBAAsB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;AAGD,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpD;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhF;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlF
|
1
|
+
{"version":3,"file":"puppeteerUtils.d.ts","sourceRoot":"","sources":["../../__tests__/puppeteerUtils.ts"],"names":[],"mappings":"AAEA,OAAkB,EAAW,IAAI,EAAE,MAAM,WAAW,CAAA;AAIpD,wBAAgB,aAAa,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,CAgBnD;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrE;AAED,wBAAsB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzD;AAGD,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAGpD;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhF;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlF"}
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.
|
6
|
+
exports.getTextContent = exports.getOuterHtml = exports.getInnerText = exports.halt = exports.delay = exports.loadExam = exports.initPuppeteer = void 0;
|
7
7
|
const puppeteer_1 = __importDefault(require("puppeteer"));
|
8
8
|
const isInDebugMode = process.env.PUPPETEER_DEBUG === '1';
|
9
9
|
function initPuppeteer() {
|
@@ -71,18 +71,4 @@ async function getTextContent(page, selector) {
|
|
71
71
|
});
|
72
72
|
}
|
73
73
|
exports.getTextContent = getTextContent;
|
74
|
-
async function getPageAndRequestErrors(page, filename) {
|
75
|
-
const requestErrors = [];
|
76
|
-
const pageErrors = [];
|
77
|
-
page.on('requestfailed', (req) => {
|
78
|
-
const errorText = req.failure().errorText;
|
79
|
-
if (errorText !== 'net::ERR_ABORTED') {
|
80
|
-
requestErrors.push(req.url());
|
81
|
-
}
|
82
|
-
});
|
83
|
-
page.on('pageerror', (err) => pageErrors.push(err));
|
84
|
-
await page.goto('file://' + filename, { waitUntil: 'networkidle0' });
|
85
|
-
return { requestErrors, pageErrors };
|
86
|
-
}
|
87
|
-
exports.getPageAndRequestErrors = getPageAndRequestErrors;
|
88
74
|
//# sourceMappingURL=puppeteerUtils.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"puppeteerUtils.js","sourceRoot":"","sources":["../../__tests__/puppeteerUtils.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;;;;;;AAEZ,0DAAoD;AAEpD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,GAAG,CAAA;AAEzD,SAAgB,aAAa;IAC3B,IAAI,OAAgB,CAAA;IACpB,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,OAAO,GAAG,MAAM,mBAAS,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,cAAc,EAAE,0BAA0B,CAAC,EAAE,CAAC,CAAA;IACpH,CAAC,CAAC,CAAA;IACF,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAA;IACvB,CAAC,CAAC,CAAA;IAEF,OAAO,KAAK,UAAU,UAAU;QAC9B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,6BAA6B,EAAE,CAAA;QAC7D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;QACpC,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAA;QACvC,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;QACrD,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;AACH,CAAC;AAhBD,sCAgBC;AAEM,KAAK,UAAU,QAAQ,CAAC,IAAU,EAAE,GAAW;IACpD,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACpB,MAAM,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;AACvC,CAAC;AAHD,4BAGC;AAEM,KAAK,UAAU,KAAK,CAAC,MAAc;IACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAA;AAC9D,CAAC;AAFD,sBAEC;AAED,iDAAiD;AAC1C,KAAK,UAAU,IAAI,CAAC,IAAU;IACnC,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAA;IACtC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA,CAAC,wDAAwD;AAC7F,CAAC;AAHD,oBAGC;AAEM,KAAK,UAAU,YAAY,CAAC,IAAU,EAAE,QAAgB;IAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;QAChC,IAAI,CAAC,YAAY,WAAW,EAAE;YAC5B,OAAO,CAAC,CAAC,SAAS,CAAA;SACnB;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;SAC/D;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AARD,oCAQC;AAEM,KAAK,UAAU,YAAY,CAAC,IAAU,EAAE,QAAgB;IAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;QAChC,IAAI,CAAC,YAAY,WAAW,EAAE;YAC5B,OAAO,CAAC,CAAC,SAAS,CAAA;SACnB;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;SAC/D;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AARD,oCAQC;AAEM,KAAK,UAAU,cAAc,CAAC,IAAU,EAAE,QAAgB;IAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;QAChC,IAAI,CAAC,YAAY,WAAW,EAAE;YAC5B,OAAO,CAAC,CAAC,WAAY,CAAC,IAAI,EAAE,CAAA;SAC7B;aAAM;YACL,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;SAC/D;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AARD,wCAQC
|
1
|
+
{"version":3,"file":"puppeteerUtils.js","sourceRoot":"","sources":["../../__tests__/puppeteerUtils.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"testGrading.d.ts","sourceRoot":"","sources":["../../__tests__/testGrading.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,97 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const exam_engine_exams_1 = require("@digabi/exam-engine-exams");
|
4
|
+
const exam_engine_rendering_1 = require("@digabi/exam-engine-rendering");
|
5
|
+
const puppeteerUtils_1 = require("./puppeteerUtils");
|
6
|
+
const VISIBLE = { visible: true };
|
7
|
+
const HIDDEN = { hidden: true };
|
8
|
+
describe('testGrading.ts', () => {
|
9
|
+
const createPage = (0, puppeteerUtils_1.initPuppeteer)();
|
10
|
+
let page;
|
11
|
+
let ctx;
|
12
|
+
beforeAll(async () => {
|
13
|
+
ctx = await (0, exam_engine_rendering_1.previewExam)((0, exam_engine_exams_1.resolveExam)('N/N.xml'));
|
14
|
+
page = await createPage();
|
15
|
+
await (0, puppeteerUtils_1.loadExam)(page, ctx.url);
|
16
|
+
await answer(1, 'Short answer message content');
|
17
|
+
await answer(7, 'Duis magna mi, interdum eu mattis vel, ultricies a nibh. Duis tortor tortor, imperdiet eget fermentum eget, rutrum ac lorem. Ut eu enim risus. Donec sed eros orci. Aenean vel eros lobortis, dignissim magna nec, vulputate quam. Morbi non metus consequat, pellentesque tellus iaculis, iaculis dolor. Vivamus vel feugiat neque, sit amet varius turpis. Aliquam non dapibus augue, interdum dapibus tellus. Ut at est eu ex pharetra ultricies');
|
18
|
+
await page.click('[data-js="newEquation"]');
|
19
|
+
await page.keyboard.type('1/x+2x^2');
|
20
|
+
await page.keyboard.press('Escape');
|
21
|
+
// await page.type(`.text-answer[data-question-id="${7}"]`, text)
|
22
|
+
await page.waitForSelector('.save-indicator-text--saved');
|
23
|
+
await page.goto(ctx.url + '/fi-FI/normal/grading');
|
24
|
+
await page.waitForSelector('.e-grading-answer');
|
25
|
+
});
|
26
|
+
afterAll(async () => {
|
27
|
+
await ctx.close();
|
28
|
+
});
|
29
|
+
it('renders single line answer with character without warning and annotate', async () => {
|
30
|
+
await navigateToAnswer('1.1');
|
31
|
+
await expectText('.e-grading-answer-length', 'Vastauksen pituus: 25 merkkiä.');
|
32
|
+
await page.waitForSelector('.e-grading-answer-max-length-surplus', HIDDEN);
|
33
|
+
await drag(245, 140, 300, 140);
|
34
|
+
await page.waitForSelector('.e-grading-answer-add-annotation', VISIBLE);
|
35
|
+
await page.keyboard.type('+1p.');
|
36
|
+
await page.keyboard.press('Enter');
|
37
|
+
await expectAnnotationMessages(['+1', '+1p.']);
|
38
|
+
});
|
39
|
+
it('renders character count with surplus warning', async () => {
|
40
|
+
await navigateToAnswer('2');
|
41
|
+
const surplusText = 'Vastauksen enimmäispituus 100 merkkiä ylittyy 268 %.';
|
42
|
+
await expectText('.e-grading-answer-length', 'Vastauksen pituus: 368 merkkiä.' + surplusText);
|
43
|
+
await expectText('.e-grading-answer-max-length-surplus', surplusText);
|
44
|
+
});
|
45
|
+
it('creates annotations, modifies and removes them', async () => {
|
46
|
+
await navigateToAnswer('2');
|
47
|
+
await drag(200, 200, 402, 200);
|
48
|
+
await page.waitForSelector('.e-grading-answer-add-annotation', VISIBLE);
|
49
|
+
await page.keyboard.type('first annotation message');
|
50
|
+
await page.keyboard.press('Enter');
|
51
|
+
await page.waitForSelector('.e-grading-answer-add-annotation', HIDDEN);
|
52
|
+
await expectText('.e-annotation--censoring', 'sque tellus iaculis, iaculis d');
|
53
|
+
await expectAnnotationMessages(['+1', 'first annotation message']);
|
54
|
+
await page.mouse.move(300, 200);
|
55
|
+
await page.waitForSelector('.e-grading-answer-tooltip', VISIBLE);
|
56
|
+
await page.click('.e-grading-answer-tooltip-label');
|
57
|
+
await page.waitForSelector('.e-grading-answer-add-annotation', VISIBLE);
|
58
|
+
await page.keyboard.sendCharacter('2');
|
59
|
+
await page.keyboard.press('Enter');
|
60
|
+
await expectAnnotationMessages(['+1', 'first annotation message2']);
|
61
|
+
await page.mouse.move(300, 200);
|
62
|
+
await page.click('.e-grading-answer-tooltip-remove');
|
63
|
+
await expectAnnotationMessages(['+1']);
|
64
|
+
await drag(510, 230, 550, 250);
|
65
|
+
await page.waitForSelector('.e-grading-answer-add-annotation', VISIBLE);
|
66
|
+
await page.keyboard.type('img annotation msg');
|
67
|
+
await page.keyboard.press('Enter');
|
68
|
+
await page.waitForSelector('.e-grading-answer-add-annotation', HIDDEN);
|
69
|
+
await page.waitForSelector('.e-annotation-wrapper .e-annotation--censoring', VISIBLE);
|
70
|
+
await expectAnnotationMessages(['+1', 'img annotation msg']);
|
71
|
+
});
|
72
|
+
async function expectText(selector, text) {
|
73
|
+
const element = await page.waitForSelector(selector, VISIBLE);
|
74
|
+
const textContent = await (element === null || element === void 0 ? void 0 : element.evaluate((el) => el.textContent));
|
75
|
+
expect(textContent).toBe(text);
|
76
|
+
}
|
77
|
+
async function expectAnnotationMessages(expected) {
|
78
|
+
const annotationList = await page.waitForSelector('.e-annotation-list', VISIBLE);
|
79
|
+
const listItems = await (annotationList === null || annotationList === void 0 ? void 0 : annotationList.evaluate((el) => Array.from(el.querySelectorAll('li')).map((li) => li.textContent)));
|
80
|
+
expect(listItems).toEqual(expected);
|
81
|
+
}
|
82
|
+
async function drag(x1, y1, x2, y2) {
|
83
|
+
await page.mouse.move(x1, y1);
|
84
|
+
await page.mouse.down();
|
85
|
+
await page.mouse.move(x2, y2);
|
86
|
+
await page.mouse.up();
|
87
|
+
}
|
88
|
+
async function answer(questionId, text) {
|
89
|
+
await page.type(`.text-answer[data-question-id="${questionId}"]`, text);
|
90
|
+
}
|
91
|
+
async function navigateToAnswer(displayNumber) {
|
92
|
+
const navi = await page.waitForSelector('.grading-navi');
|
93
|
+
const button = await (navi === null || navi === void 0 ? void 0 : navi.waitForSelector('text/' + displayNumber));
|
94
|
+
await (button === null || button === void 0 ? void 0 : button.click());
|
95
|
+
}
|
96
|
+
});
|
97
|
+
//# sourceMappingURL=testGrading.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"testGrading.js","sourceRoot":"","sources":["../../__tests__/testGrading.ts"],"names":[],"mappings":"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"}
|
@@ -13,11 +13,13 @@ describe('testOfflineGeneration.ts - Offline version generation', () => {
|
|
13
13
|
let page;
|
14
14
|
let examHtmlFile;
|
15
15
|
let attachmentsHtmlFile;
|
16
|
+
let gradingInstructionHtmlFile;
|
16
17
|
beforeAll(async () => {
|
17
18
|
const tmpdir = await tmp_promise_1.default.dir().then((r) => r.path);
|
18
19
|
const [outputDirectory] = await (0, exam_engine_rendering_1.createOfflineExam)((0, exam_engine_exams_1.resolveExam)('A_E/A_E.xml'), tmpdir);
|
19
20
|
examHtmlFile = path_1.default.resolve(outputDirectory, 'index.html');
|
20
21
|
attachmentsHtmlFile = path_1.default.resolve(outputDirectory, 'attachments/index.html');
|
22
|
+
gradingInstructionHtmlFile = path_1.default.resolve(outputDirectory, 'attachments/index.html');
|
21
23
|
page = await createPage();
|
22
24
|
});
|
23
25
|
it('renders exam page without errors', async () => {
|
@@ -26,8 +28,21 @@ describe('testOfflineGeneration.ts - Offline version generation', () => {
|
|
26
28
|
it('renders attachment page without errors', async () => {
|
27
29
|
await expectToRenderWithoutErrors(attachmentsHtmlFile);
|
28
30
|
});
|
31
|
+
it('renders grading instruction page without errors', async () => {
|
32
|
+
await expectToRenderWithoutErrors(gradingInstructionHtmlFile);
|
33
|
+
});
|
29
34
|
async function expectToRenderWithoutErrors(filename) {
|
30
|
-
const
|
35
|
+
const requestErrors = [];
|
36
|
+
const pageErrors = [];
|
37
|
+
// FIXME: Remove explicit type after Puppeteer's types have improved.
|
38
|
+
page.on('requestfailed', (req) => {
|
39
|
+
const errorText = req.failure().errorText;
|
40
|
+
if (errorText !== 'net::ERR_ABORTED') {
|
41
|
+
requestErrors.push(req.url());
|
42
|
+
}
|
43
|
+
});
|
44
|
+
page.on('pageerror', (err) => pageErrors.push(err));
|
45
|
+
await page.goto('file://' + filename, { waitUntil: 'networkidle0' });
|
31
46
|
expect(requestErrors).toEqual([]);
|
32
47
|
expect(pageErrors).toEqual([]);
|
33
48
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"testOfflineGeneration.js","sourceRoot":"","sources":["../../__tests__/testOfflineGeneration.ts"],"names":[],"mappings":";;;;;AAAA,iEAAuD;AACvD,yEAAiE;AACjE,gDAAuB;AAEvB,8DAA6B;AAC7B,
|
1
|
+
{"version":3,"file":"testOfflineGeneration.js","sourceRoot":"","sources":["../../__tests__/testOfflineGeneration.ts"],"names":[],"mappings":";;;;;AAAA,iEAAuD;AACvD,yEAAiE;AACjE,gDAAuB;AAEvB,8DAA6B;AAC7B,qDAAgD;AAEhD,QAAQ,CAAC,uDAAuD,EAAE,GAAG,EAAE;IACrE,MAAM,UAAU,GAAG,IAAA,8BAAa,GAAE,CAAA;IAClC,IAAI,IAAU,CAAA;IACd,IAAI,YAAoB,CAAA;IACxB,IAAI,mBAA2B,CAAA;IAC/B,IAAI,0BAAkC,CAAA;IAEtC,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,MAAM,GAAG,MAAM,qBAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAClD,MAAM,CAAC,eAAe,CAAC,GAAG,MAAM,IAAA,yCAAiB,EAAC,IAAA,+BAAW,EAAC,aAAa,CAAC,EAAE,MAAM,CAAC,CAAA;QACrF,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,CAAC,CAAA;QAC1D,mBAAmB,GAAG,cAAI,CAAC,OAAO,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAA;QAC7E,0BAA0B,GAAG,cAAI,CAAC,OAAO,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAA;QACpF,IAAI,GAAG,MAAM,UAAU,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,2BAA2B,CAAC,YAAY,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,2BAA2B,CAAC,mBAAmB,CAAC,CAAA;IACxD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,2BAA2B,CAAC,0BAA0B,CAAC,CAAA;IAC/D,CAAC,CAAC,CAAA;IAEF,KAAK,UAAU,2BAA2B,CAAC,QAAgB;QACzD,MAAM,aAAa,GAAa,EAAE,CAAA;QAClC,MAAM,UAAU,GAAY,EAAE,CAAA;QAE9B,qEAAqE;QACrE,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,GAAgB,EAAE,EAAE;YAC5C,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,EAAG,CAAC,SAAS,CAAA;YAC1C,IAAI,SAAS,KAAK,kBAAkB,EAAE;gBACpC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;aAC9B;QACH,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAEnD,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAA;QACpE,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACjC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAChC,CAAC;AACH,CAAC,CAAC,CAAA"}
|