@pie-element/explicit-constructed-response 11.2.2-beta.4 → 11.2.2-beta.6
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/CHANGELOG.md +8 -0
- package/configure/CHANGELOG.md +8 -0
- package/configure/package.json +3 -3
- package/controller/CHANGELOG.md +8 -0
- package/controller/package.json +1 -1
- package/package.json +3 -3
- package/configure/lib/__tests__/alternateResponses.test.js +0 -503
- package/configure/lib/__tests__/alternateSection.test.js +0 -372
- package/configure/lib/__tests__/ecr-toolbar.test.js +0 -214
- package/configure/lib/__tests__/main.test.js +0 -470
- package/configure/lib/__tests__/markupUtils.test.js +0 -55
- package/configure/lib/__tests__/utils.test.js +0 -62
- package/configure/lib/alternateResponses.js +0 -199
- package/configure/lib/alternateResponses.js.map +0 -1
- package/configure/lib/alternateSection.js +0 -329
- package/configure/lib/alternateSection.js.map +0 -1
- package/configure/lib/defaults.js +0 -184
- package/configure/lib/defaults.js.map +0 -1
- package/configure/lib/ecr-toolbar.js +0 -181
- package/configure/lib/ecr-toolbar.js.map +0 -1
- package/configure/lib/index.js +0 -165
- package/configure/lib/index.js.map +0 -1
- package/configure/lib/main.js +0 -501
- package/configure/lib/main.js.map +0 -1
- package/configure/lib/markupUtils.js +0 -70
- package/configure/lib/markupUtils.js.map +0 -1
- package/configure/lib/utils.js +0 -15
- package/configure/lib/utils.js.map +0 -1
- package/controller/lib/__tests__/index.spec.js +0 -30
- package/controller/lib/__tests__/index.test.js +0 -950
- package/controller/lib/defaults.js +0 -23
- package/controller/lib/defaults.js.map +0 -1
- package/controller/lib/index.js +0 -368
- package/controller/lib/index.js.map +0 -1
- package/docs/demo/pie.manifest.json +0 -11
- package/lib/__tests__/main.test.js +0 -166
- package/lib/index.js +0 -92
- package/lib/index.js.map +0 -1
- package/lib/main.js +0 -205
- package/lib/main.js.map +0 -1
- package/lib/print.js +0 -71
- package/lib/print.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markupUtils.js","names":["_lodashEs","require","tSymbols","nSymbols","matchTabAndNewLine","RegExp","removeUnwantedCharacters","markup","replace","exports","createElementFromHTML","htmlString","div","document","createElement","innerHTML","trim","processMarkup","newMarkup","slateMarkup","index","querySelectorAll","forEach","s","replaceWith","REGEX","createSlateMarkup","choices","match","g","label","escape","getAdjustedLength","length","stripHtmlTags","decodeHTML","html","doc","DOMParser","parseFromString","body","textContent"],"sources":["../src/markupUtils.js"],"sourcesContent":["import { escape } from 'lodash-es';\n\n// do not remove \\t from \\times, \\triangle, \\tan, \\theta or \\therefore\nconst tSymbols = 'imes|riangle|an|heta|herefore';\n// do not remove \\n from \\nthroot, \\nparallel, \\ncong, \\napprox, \\neq, \\ne or \\nsim\nconst nSymbols = 'throot|parallel|cong|approx|eq|e|sim';\n// match all \\t and \\n that are not part of math symbols that starts with \\t or \\n\nconst matchTabAndNewLine = new RegExp(\n `(\\\\t(?!${tSymbols}))|(\\\\n(?!${nSymbols}))|(\\\\\\\\t(?!${tSymbols}))|(\\\\\\\\n(?!${nSymbols}))`,\n 'g',\n);\n\nexport const removeUnwantedCharacters = (markup) =>\n markup.replace(matchTabAndNewLine, '').replace(/\\\\\"/g, '\"').replace(/\\\\\\//g, '/');\n\nconst createElementFromHTML = (htmlString = '') => {\n const div = document.createElement('div');\n\n div.innerHTML = htmlString.trim();\n\n return div;\n};\n\nexport const processMarkup = (markup) => {\n const newMarkup = removeUnwantedCharacters(markup || '');\n const slateMarkup = createElementFromHTML(newMarkup || '');\n let index = 0;\n\n slateMarkup.querySelectorAll('[data-type=\"explicit_constructed_response\"]').forEach((s) => {\n s.replaceWith(`{{${index++}}}`);\n });\n\n return slateMarkup.innerHTML;\n};\n\nconst REGEX = /\\{\\{(\\d+)\\}\\}/g;\n\nexport const createSlateMarkup = (markup, choices) => {\n if (!markup) {\n return '';\n }\n\n const newMarkup = removeUnwantedCharacters(markup);\n\n return newMarkup.replace(REGEX, (match, g) => {\n const label = choices[g][0].label || '';\n\n return `<span data-type=\"explicit_constructed_response\" data-index=\"${g}\" data-value=\"${escape(label)}\"></span>`;\n });\n};\n\n// also used in controller/src/index.js\nexport const getAdjustedLength = (length) => {\n if (length <= 2) {\n return length + 2;\n }\n\n if (length <= 4) {\n return length + 3;\n }\n\n if (length <= 6) {\n return length + 4;\n }\n\n return length + 5;\n};\n\nexport const stripHtmlTags = (markup) => {\n if (typeof markup !== 'string') {\n return '';\n }\n return markup.replace(/<\\/?[^>]+(>|$)/g, \"\");\n};\n\nexport const decodeHTML = (html) => {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n return doc.body.textContent || '';\n};\n"],"mappings":"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","ignoreList":[]}
|
package/configure/lib/utils.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.generateValidationMessage = void 0;
|
|
7
|
-
const generateValidationMessage = config => {
|
|
8
|
-
const {
|
|
9
|
-
maxResponseAreas
|
|
10
|
-
} = config;
|
|
11
|
-
const responseAreasMessage = '\nCorrect answers should not be blank.' + '\nEach answer defined for a response area should be unique.' + '\nThere should be at least 1 ' + (maxResponseAreas ? `and at most ${maxResponseAreas} ` : '') + 'response area' + (maxResponseAreas ? 's' : '') + ' defined.';
|
|
12
|
-
return 'Validation requirements:' + responseAreasMessage;
|
|
13
|
-
};
|
|
14
|
-
exports.generateValidationMessage = generateValidationMessage;
|
|
15
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["generateValidationMessage","config","maxResponseAreas","responseAreasMessage","exports"],"sources":["../src/utils.js"],"sourcesContent":["export const generateValidationMessage = (config) => {\n const { maxResponseAreas } = config;\n\n const responseAreasMessage =\n '\\nCorrect answers should not be blank.' +\n '\\nEach answer defined for a response area should be unique.' +\n '\\nThere should be at least 1 ' +\n (maxResponseAreas ? `and at most ${maxResponseAreas} ` : '') +\n 'response area' +\n (maxResponseAreas ? 's' : '') +\n ' defined.';\n\n return 'Validation requirements:' + responseAreasMessage;\n};\n"],"mappings":";;;;;;AAAO,MAAMA,yBAAyB,GAAIC,MAAM,IAAK;EACnD,MAAM;IAAEC;EAAiB,CAAC,GAAGD,MAAM;EAEnC,MAAME,oBAAoB,GACxB,wCAAwC,GACxC,6DAA6D,GAC7D,+BAA+B,IAC9BD,gBAAgB,GAAG,eAAeA,gBAAgB,GAAG,GAAG,EAAE,CAAC,GAC5D,eAAe,IACdA,gBAAgB,GAAG,GAAG,GAAG,EAAE,CAAC,GAC7B,WAAW;EAEb,OAAO,0BAA0B,GAAGC,oBAAoB;AAC1D,CAAC;AAACC,OAAA,CAAAJ,yBAAA,GAAAA,yBAAA","ignoreList":[]}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _index = require("../index");
|
|
4
|
-
const choice = (l, v) => ({
|
|
5
|
-
label: l,
|
|
6
|
-
value: v
|
|
7
|
-
});
|
|
8
|
-
const d = {
|
|
9
|
-
prompt: '',
|
|
10
|
-
teacherInstructions: true,
|
|
11
|
-
studentInstructions: false,
|
|
12
|
-
choices: {
|
|
13
|
-
0: [choice('A', '0'), choice('B', '1')]
|
|
14
|
-
},
|
|
15
|
-
markup: '<p>\n <strong>Esta cuadrícula de coordenadas representa el diseño del salón de matemáticas de Valerie. Cada unidad en la cuadricula representa 1 pie cuadrado. </strong>\n</p>\n<p>\n <strong>* El escritorio de Valeria se encuentra en (-3,-4)</strong>\n</p>\n<p>\n <strong>* El escritorio de la maestra se encuentra en (5,-4)</strong>\n</p>\n<p>\n <strong>* El cuarto de materiales se encuentra en (-3,-7)</strong>\n</p>\n<p>\n <strong><img src="https://storage.googleapis.com/pie-staging-221718-assets/image/180d28b2-0376-428e-b415-de96e158b7e7" alt=""></strong>\n</p>\n<p>\n \n</p>\n<p>\n <strong>Anota la distancia, en pies, desde el escritorio de Valerie al cuarto de materiales.</strong>\n</p>\n<p>\n {{0}} <strong>pies</strong>\n</p>',
|
|
16
|
-
id: '2422330',
|
|
17
|
-
rubric: '',
|
|
18
|
-
element: 'explicit-constructed-response-element',
|
|
19
|
-
autoScoring: 'partial',
|
|
20
|
-
rationale: ''
|
|
21
|
-
};
|
|
22
|
-
describe('edge cases', () => {
|
|
23
|
-
it('does not throw an error if the session has no value', async () => {
|
|
24
|
-
const result = (0, _index.model)(d, {}, {
|
|
25
|
-
mode: 'evaluate'
|
|
26
|
-
});
|
|
27
|
-
expect(result).toBeDefined();
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJyZXF1aXJlIiwiY2hvaWNlIiwibCIsInYiLCJsYWJlbCIsInZhbHVlIiwiZCIsInByb21wdCIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJzdHVkZW50SW5zdHJ1Y3Rpb25zIiwiY2hvaWNlcyIsIm1hcmt1cCIsImlkIiwicnVicmljIiwiZWxlbWVudCIsImF1dG9TY29yaW5nIiwicmF0aW9uYWxlIiwiZGVzY3JpYmUiLCJpdCIsInJlc3VsdCIsIm1vZGVsIiwibW9kZSIsImV4cGVjdCIsInRvQmVEZWZpbmVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9pbmRleC5zcGVjLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1vZGVsIH0gZnJvbSAnLi4vaW5kZXgnO1xuXG5jb25zdCBjaG9pY2UgPSAobCwgdikgPT4gKHsgbGFiZWw6IGwsIHZhbHVlOiB2IH0pO1xuXG5jb25zdCBkID0ge1xuICBwcm9tcHQ6ICcnLFxuICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiB0cnVlLFxuICBzdHVkZW50SW5zdHJ1Y3Rpb25zOiBmYWxzZSxcbiAgY2hvaWNlczoge1xuICAgIDA6IFtjaG9pY2UoJ0EnLCAnMCcpLCBjaG9pY2UoJ0InLCAnMScpXSxcbiAgfSxcbiAgbWFya3VwOlxuICAgICc8cD5cXG4gIDxzdHJvbmc+RXN0YSBjdWFkcsOtY3VsYSBkZSBjb29yZGVuYWRhcyByZXByZXNlbnRhIGVsIGRpc2XDsW8gZGVsIHNhbMOzbiBkZSBtYXRlbcOhdGljYXMgZGUgVmFsZXJpZS4gQ2FkYSB1bmlkYWQgZW4gbGEgY3VhZHJpY3VsYSByZXByZXNlbnRhIDEgcGllIGN1YWRyYWRvLiZuYnNwOzwvc3Ryb25nPlxcbjwvcD5cXG48cD5cXG4gIDxzdHJvbmc+KiBFbCBlc2NyaXRvcmlvIGRlIFZhbGVyaWEgc2UgZW5jdWVudHJhIGVuICgtMywtNCk8L3N0cm9uZz5cXG48L3A+XFxuPHA+XFxuICA8c3Ryb25nPiogRWwgZXNjcml0b3JpbyBkZSBsYSBtYWVzdHJhIHNlIGVuY3VlbnRyYSBlbiAoNSwtNCk8L3N0cm9uZz5cXG48L3A+XFxuPHA+XFxuICA8c3Ryb25nPiogRWwgY3VhcnRvIGRlIG1hdGVyaWFsZXMgc2UgZW5jdWVudHJhJm5ic3A7IGVuICgtMywtNyk8L3N0cm9uZz5cXG48L3A+XFxuPHA+XFxuICA8c3Ryb25nPjxpbWcgc3JjPVwiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3BpZS1zdGFnaW5nLTIyMTcxOC1hc3NldHMvaW1hZ2UvMTgwZDI4YjItMDM3Ni00MjhlLWI0MTUtZGU5NmUxNThiN2U3XCIgYWx0PVwiXCI+PC9zdHJvbmc+XFxuPC9wPlxcbjxwPlxcbiAgJm5ic3A7XFxuPC9wPlxcbjxwPlxcbiAgPHN0cm9uZz5Bbm90YSBsYSBkaXN0YW5jaWEsIGVuIHBpZXMsIGRlc2RlIGVsIGVzY3JpdG9yaW8gZGUgVmFsZXJpZSBhbCBjdWFydG8gZGUgbWF0ZXJpYWxlcy48L3N0cm9uZz5cXG48L3A+XFxuPHA+XFxuICB7ezB9fSA8c3Ryb25nPnBpZXM8L3N0cm9uZz5cXG48L3A+JyxcbiAgaWQ6ICcyNDIyMzMwJyxcbiAgcnVicmljOiAnJyxcbiAgZWxlbWVudDogJ2V4cGxpY2l0LWNvbnN0cnVjdGVkLXJlc3BvbnNlLWVsZW1lbnQnLFxuICBhdXRvU2NvcmluZzogJ3BhcnRpYWwnLFxuICByYXRpb25hbGU6ICcnLFxufTtcblxuZGVzY3JpYmUoJ2VkZ2UgY2FzZXMnLCAoKSA9PiB7XG4gIGl0KCdkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgc2Vzc2lvbiBoYXMgbm8gdmFsdWUnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gbW9kZWwoZCwge30sIHsgbW9kZTogJ2V2YWx1YXRlJyB9KTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlRGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUVBLE1BQU1DLE1BQU0sR0FBR0EsQ0FBQ0MsQ0FBQyxFQUFFQyxDQUFDLE1BQU07RUFBRUMsS0FBSyxFQUFFRixDQUFDO0VBQUVHLEtBQUssRUFBRUY7QUFBRSxDQUFDLENBQUM7QUFFakQsTUFBTUcsQ0FBQyxHQUFHO0VBQ1JDLE1BQU0sRUFBRSxFQUFFO0VBQ1ZDLG1CQUFtQixFQUFFLElBQUk7RUFDekJDLG1CQUFtQixFQUFFLEtBQUs7RUFDMUJDLE9BQU8sRUFBRTtJQUNQLENBQUMsRUFBRSxDQUFDVCxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFQSxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUN4QyxDQUFDO0VBQ0RVLE1BQU0sRUFDSiw0dkJBQTR2QjtFQUM5dkJDLEVBQUUsRUFBRSxTQUFTO0VBQ2JDLE1BQU0sRUFBRSxFQUFFO0VBQ1ZDLE9BQU8sRUFBRSx1Q0FBdUM7RUFDaERDLFdBQVcsRUFBRSxTQUFTO0VBQ3RCQyxTQUFTLEVBQUU7QUFDYixDQUFDO0FBRURDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsTUFBTTtFQUMzQkMsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLFlBQVk7SUFDcEUsTUFBTUMsTUFBTSxHQUFHLElBQUFDLFlBQUssRUFBQ2QsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO01BQUVlLElBQUksRUFBRTtJQUFXLENBQUMsQ0FBQztJQUNqREMsTUFBTSxDQUFDSCxNQUFNLENBQUMsQ0FBQ0ksV0FBVyxDQUFDLENBQUM7RUFDOUIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwiaWdub3JlTGlzdCI6W119
|