@pie-element/charting 2.7.19 → 2.7.20-beta.1445
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 +385 -0
- package/configure/CHANGELOG.md +367 -0
- package/configure/lib/charting-config.js +125 -18
- package/configure/lib/charting-config.js.map +1 -1
- package/configure/lib/configure.js +156 -76
- package/configure/lib/configure.js.map +1 -1
- package/configure/lib/correct-response.js +209 -48
- package/configure/lib/correct-response.js.map +1 -1
- package/configure/lib/defaults.js +53 -13
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/index.js +23 -3
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/utils.js +95 -0
- package/configure/lib/utils.js.map +1 -0
- package/configure/package.json +6 -5
- package/controller/CHANGELOG.md +44 -0
- package/controller/lib/index.js +87 -23
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +3 -3
- package/docs/config-schema.json +198 -0
- package/docs/config-schema.json.md +155 -1
- package/docs/demo/config.js +2 -2
- package/docs/demo/generate.js +6 -25
- package/docs/demo/session.js +3 -9
- package/docs/pie-schema.json +114 -48
- package/docs/pie-schema.json.md +82 -9
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -1
- package/lib/main.js +2 -5
- package/lib/main.js.map +1 -1
- package/package.json +7 -6
- package/configure/lib/chart-type.js +0 -72
- package/configure/lib/chart-type.js.map +0 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.getLabelValues = exports.getGridValues = exports.applyConstraints = exports.VALID_LABEL_VALUES = void 0;
|
|
9
|
+
|
|
10
|
+
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
11
|
+
|
|
12
|
+
// this file is almost duplicated from graphing/configure/src/utils.js; the same logic must be used in charting
|
|
13
|
+
var VALID_GRID_VALUES = [0.01, 0.02, 0.04, 0.05, 0.0625, 0.1, 0.125, 0.2, 0.25, 0.5, 1, 2, 3, 4, 5, 8, 10, 12, 15, 20, 40, 50, 64, 100, 500, 1000]; // same as VALID_GRID_VALUES but next values are excluded: 0.04, 0.0625, 0.125, 3, 4, 8, 12, 15, 40, 64
|
|
14
|
+
|
|
15
|
+
var PREFERRED_VALID_GRID_VALUES = [0.01, 0.02, 0.05, 0.1, 0.2, 0.25, 0.5, 1, 2, 5, 10, 20, 50, 100, 500, 1000];
|
|
16
|
+
var VALID_LABEL_VALUES = {
|
|
17
|
+
0.01: [0, 0.01, 0.02, 0.04, 0.05, 0.1],
|
|
18
|
+
0.02: [0, 0.02, 0.04, 0.1],
|
|
19
|
+
0.04: [0, 0.04, 0.08, 0.16, 0.2],
|
|
20
|
+
0.05: [0, 0.05, 0.1, 0.2, 0.25],
|
|
21
|
+
0.0625: [0, 0.0625, 0.125, 0.25, 0.5],
|
|
22
|
+
0.1: [0, 0.1, 0.2, 0.4, 0.5, 1],
|
|
23
|
+
0.125: [0, 0.125, 0.25, 0.5, 1],
|
|
24
|
+
0.2: [0, 0.2, 0.5, 0.1],
|
|
25
|
+
0.25: [0, 0.25, 0.5, 1, 2],
|
|
26
|
+
0.5: [0, 0.5, 1, 2],
|
|
27
|
+
1: [0, 1, 2, 4, 5, 10],
|
|
28
|
+
2: [0, 2, 4, 8, 10],
|
|
29
|
+
3: [0, 3, 6, 12, 15],
|
|
30
|
+
4: [0, 4, 8, 16, 20],
|
|
31
|
+
5: [0, 5, 10, 20, 25],
|
|
32
|
+
8: [0, 8, 16, 32, 40, 64],
|
|
33
|
+
10: [0, 10, 20, 40, 50, 100],
|
|
34
|
+
12: [0, 12, 24],
|
|
35
|
+
15: [0, 15, 30, 60],
|
|
36
|
+
20: [0, 20, 40, 80, 100],
|
|
37
|
+
40: [0, 40, 80, 160, 200],
|
|
38
|
+
50: [0, 50, 100, 200, 250],
|
|
39
|
+
64: [0, 64, 128],
|
|
40
|
+
100: [0, 100, 200, 400, 500],
|
|
41
|
+
500: [0, 500, 1000, 2500],
|
|
42
|
+
1000: [0, 1000, 2000, 4000, 5000]
|
|
43
|
+
};
|
|
44
|
+
exports.VALID_LABEL_VALUES = VALID_LABEL_VALUES;
|
|
45
|
+
|
|
46
|
+
var getGridValues = function getGridValues(axis, size) {
|
|
47
|
+
var prefferedValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
48
|
+
var minValue = 10 * (axis.max - axis.min) / size;
|
|
49
|
+
var maxValue = minValue * 10;
|
|
50
|
+
var values = prefferedValues ? PREFERRED_VALID_GRID_VALUES : VALID_GRID_VALUES;
|
|
51
|
+
return values.filter(function (value) {
|
|
52
|
+
return value >= minValue && value <= maxValue;
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
exports.getGridValues = getGridValues;
|
|
57
|
+
|
|
58
|
+
var getLabelValues = function getLabelValues(value) {
|
|
59
|
+
return VALID_LABEL_VALUES[value] || [];
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
exports.getLabelValues = getLabelValues;
|
|
63
|
+
|
|
64
|
+
var applyConstraints = function applyConstraints(axis, size, oldGridValues, oldLabelValues) {
|
|
65
|
+
var gridValues = getGridValues(axis, size);
|
|
66
|
+
var labelValues = getLabelValues(axis.step || 1);
|
|
67
|
+
|
|
68
|
+
if (!(0, _isEqual["default"])(oldGridValues, gridValues) && !gridValues.includes(axis.step)) {
|
|
69
|
+
var preferredValues = getGridValues(axis, size, true);
|
|
70
|
+
var lowestValue = preferredValues[0] || 1;
|
|
71
|
+
axis.step = lowestValue;
|
|
72
|
+
labelValues = getLabelValues(lowestValue);
|
|
73
|
+
|
|
74
|
+
if (!labelValues.includes(axis.labelStep)) {
|
|
75
|
+
axis.labelStep = lowestValue;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
gridValues: gridValues,
|
|
80
|
+
labelValues: labelValues
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (!(0, _isEqual["default"])(oldLabelValues, labelValues) && !labelValues.includes(axis.labelStep)) {
|
|
85
|
+
axis.labelStep = axis.step;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return {
|
|
89
|
+
gridValues: gridValues,
|
|
90
|
+
labelValues: labelValues
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
exports.applyConstraints = applyConstraints;
|
|
95
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils.js"],"names":["VALID_GRID_VALUES","PREFERRED_VALID_GRID_VALUES","VALID_LABEL_VALUES","getGridValues","axis","size","prefferedValues","minValue","max","min","maxValue","values","filter","value","getLabelValues","applyConstraints","oldGridValues","oldLabelValues","gridValues","labelValues","step","includes","preferredValues","lowestValue","labelStep"],"mappings":"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","sourcesContent":["// this file is almost duplicated from graphing/configure/src/utils.js; the same logic must be used in charting\nimport isEqual from 'lodash/isEqual';\n\nconst VALID_GRID_VALUES = [\n 0.01, 0.02, 0.04, 0.05, 0.0625, 0.1, 0.125, 0.2, 0.25, 0.5, 1, 2, 3, 4, 5, 8, 10, 12, 15, 20, 40, 50, 64, 100, 500,\n 1000,\n];\n\n// same as VALID_GRID_VALUES but next values are excluded: 0.04, 0.0625, 0.125, 3, 4, 8, 12, 15, 40, 64\nconst PREFERRED_VALID_GRID_VALUES = [0.01, 0.02, 0.05, 0.1, 0.2, 0.25, 0.5, 1, 2, 5, 10, 20, 50, 100, 500, 1000];\n\nexport const VALID_LABEL_VALUES = {\n 0.01: [0, 0.01, 0.02, 0.04, 0.05, 0.1],\n 0.02: [0, 0.02, 0.04, 0.1],\n 0.04: [0, 0.04, 0.08, 0.16, 0.2],\n 0.05: [0, 0.05, 0.1, 0.2, 0.25],\n 0.0625: [0, 0.0625, 0.125, 0.25, 0.5],\n 0.1: [0, 0.1, 0.2, 0.4, 0.5, 1],\n 0.125: [0, 0.125, 0.25, 0.5, 1],\n 0.2: [0, 0.2, 0.5, 0.1],\n 0.25: [0, 0.25, 0.5, 1, 2],\n 0.5: [0, 0.5, 1, 2],\n 1: [0, 1, 2, 4, 5, 10],\n 2: [0, 2, 4, 8, 10],\n 3: [0, 3, 6, 12, 15],\n 4: [0, 4, 8, 16, 20],\n 5: [0, 5, 10, 20, 25],\n 8: [0, 8, 16, 32, 40, 64],\n 10: [0, 10, 20, 40, 50, 100],\n 12: [0, 12, 24],\n 15: [0, 15, 30, 60],\n 20: [0, 20, 40, 80, 100],\n 40: [0, 40, 80, 160, 200],\n 50: [0, 50, 100, 200, 250],\n 64: [0, 64, 128],\n 100: [0, 100, 200, 400, 500],\n 500: [0, 500, 1000, 2500],\n 1000: [0, 1000, 2000, 4000, 5000],\n};\n\nexport const getGridValues = (axis, size, prefferedValues = false) => {\n const minValue = (10 * (axis.max - axis.min)) / size;\n const maxValue = minValue * 10;\n const values = prefferedValues ? PREFERRED_VALID_GRID_VALUES : VALID_GRID_VALUES;\n\n return values.filter((value) => value >= minValue && value <= maxValue);\n};\n\nexport const getLabelValues = (value) => VALID_LABEL_VALUES[value] || [];\n\nexport const applyConstraints = (axis, size, oldGridValues, oldLabelValues) => {\n const gridValues = getGridValues(axis, size);\n let labelValues = getLabelValues(axis.step || 1);\n\n if (!isEqual(oldGridValues, gridValues) && !gridValues.includes(axis.step)) {\n const preferredValues = getGridValues(axis, size, true);\n const lowestValue = preferredValues[0] || 1;\n\n axis.step = lowestValue;\n labelValues = getLabelValues(lowestValue);\n\n if (!labelValues.includes(axis.labelStep)) {\n axis.labelStep = lowestValue;\n }\n\n return { gridValues, labelValues };\n }\n\n if (!isEqual(oldLabelValues, labelValues) && !labelValues.includes(axis.labelStep)) {\n axis.labelStep = axis.step;\n }\n\n return { gridValues, labelValues };\n};\n"],"file":"utils.js"}
|
package/configure/package.json
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/charting-configure",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "5.4.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
8
8
|
"author": "",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@material-ui/core": "^3.9.2",
|
|
11
|
-
"@pie-framework/pie-configure-events": "^1.
|
|
12
|
-
"@pie-lib/charting": "^
|
|
13
|
-
"@pie-lib/config-ui": "
|
|
14
|
-
"@pie-lib/editable-html": "
|
|
11
|
+
"@pie-framework/pie-configure-events": "^1.3.0",
|
|
12
|
+
"@pie-lib/charting": "^5.6.12",
|
|
13
|
+
"@pie-lib/config-ui": "12.0.0-beta.3",
|
|
14
|
+
"@pie-lib/editable-html": "10.0.0-beta.4",
|
|
15
|
+
"@pie-lib/math-rendering": "^2.5.12",
|
|
15
16
|
"classnames": "^2.2.5",
|
|
16
17
|
"debug": "^4.1.1",
|
|
17
18
|
"prop-types": "^15.6.2",
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,50 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [2.3.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/charting-controller@2.3.0...@pie-element/charting-controller@2.3.1) (2022-12-07)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* update libs ([441f403](https://github.com/pie-framework/pie-elements/commit/441f403870b7bec0d61fab58b8d93dbe0ead4c32))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
# [2.3.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/charting-controller@2.2.24...@pie-element/charting-controller@2.3.0) (2022-11-15)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Bug Fixes
|
|
21
|
+
|
|
22
|
+
* **charting:** fix typo ([136ba52](https://github.com/pie-framework/pie-elements/commit/136ba521354dc58b73f9038767005d50da2dab94))
|
|
23
|
+
* **charting:** keep chart interactive in IBX preview mode PD-1365 ([f92515a](https://github.com/pie-framework/pie-elements/commit/f92515a7071c72cfcc07a830095cd70cc4740e58))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Features
|
|
27
|
+
|
|
28
|
+
* **charting:** move validation function in controller ([e603e16](https://github.com/pie-framework/pie-elements/commit/e603e164cc206eec99488e48a52fc05989f919ea))
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
## [2.2.24](https://github.com/pie-framework/pie-elements/compare/@pie-element/charting-controller@2.2.23...@pie-element/charting-controller@2.2.24) (2022-06-13)
|
|
35
|
+
|
|
36
|
+
**Note:** Version bump only for package @pie-element/charting-controller
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
## [2.2.23](https://github.com/pie-framework/pie-elements/compare/@pie-element/charting-controller@2.2.22...@pie-element/charting-controller@2.2.23) (2022-05-30)
|
|
43
|
+
|
|
44
|
+
**Note:** Version bump only for package @pie-element/charting-controller
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
6
50
|
## [2.2.22](https://github.com/pie-framework/pie-elements/compare/@pie-element/charting-controller@2.2.21...@pie-element/charting-controller@2.2.22) (2022-01-10)
|
|
7
51
|
|
|
8
52
|
**Note:** Version bump only for package @pie-element/charting-controller
|
package/controller/lib/index.js
CHANGED
|
@@ -5,9 +5,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
+
exports.getScore = exports.filterCategories = exports.createCorrectResponseSession = exports.checkLabelsEquality = void 0;
|
|
8
9
|
exports.model = model;
|
|
10
|
+
exports.normalize = void 0;
|
|
9
11
|
exports.outcome = outcome;
|
|
10
|
-
exports.
|
|
12
|
+
exports.validate = exports.setCorrectness = void 0;
|
|
11
13
|
|
|
12
14
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
13
15
|
|
|
@@ -17,15 +19,20 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
17
19
|
|
|
18
20
|
var _debug = _interopRequireDefault(require("debug"));
|
|
19
21
|
|
|
22
|
+
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
23
|
+
|
|
20
24
|
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
21
25
|
|
|
26
|
+
var _pick = _interopRequireDefault(require("lodash/pick"));
|
|
27
|
+
|
|
22
28
|
var _controllerUtils = require("@pie-lib/controller-utils");
|
|
23
29
|
|
|
24
|
-
var _excluded = ["
|
|
30
|
+
var _excluded = ["deletable"],
|
|
31
|
+
_excluded2 = ["correctness"];
|
|
25
32
|
|
|
26
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
33
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
27
34
|
|
|
28
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
35
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
29
36
|
|
|
30
37
|
var log = (0, _debug["default"])('@pie-element:graphing:controller');
|
|
31
38
|
|
|
@@ -55,7 +62,6 @@ exports.setCorrectness = setCorrectness;
|
|
|
55
62
|
var normalize = function normalize(question) {
|
|
56
63
|
return _objectSpread({
|
|
57
64
|
addCategoryEnabled: true,
|
|
58
|
-
editCategoryEnabled: true,
|
|
59
65
|
promptEnabled: true,
|
|
60
66
|
rationaleEnabled: true,
|
|
61
67
|
teacherInstructionsEnabled: true,
|
|
@@ -70,8 +76,7 @@ var getScore = function getScore(question, session) {
|
|
|
70
76
|
var correctAnswer = question.correctAnswer,
|
|
71
77
|
_question$data = question.data,
|
|
72
78
|
initialData = _question$data === void 0 ? [] : _question$data,
|
|
73
|
-
scoringType = question.scoringType
|
|
74
|
-
editCategoryEnabled = question.editCategoryEnabled;
|
|
79
|
+
scoringType = question.scoringType;
|
|
75
80
|
|
|
76
81
|
var isPartialScoring = _controllerUtils.partialScoring.enabled({
|
|
77
82
|
partialScoring: scoringType !== undefined ? scoringType === 'partial scoring' : scoringType
|
|
@@ -81,7 +86,7 @@ var getScore = function getScore(question, session) {
|
|
|
81
86
|
_ref$data = _ref.data,
|
|
82
87
|
correctAnswers = _ref$data === void 0 ? [] : _ref$data;
|
|
83
88
|
|
|
84
|
-
var defaultAnswers = filterCategories(initialData
|
|
89
|
+
var defaultAnswers = filterCategories(initialData);
|
|
85
90
|
var answers = setCorrectness(session && session.answer || defaultAnswers, isPartialScoring);
|
|
86
91
|
var result = 0;
|
|
87
92
|
|
|
@@ -181,13 +186,11 @@ var getScore = function getScore(question, session) {
|
|
|
181
186
|
|
|
182
187
|
exports.getScore = getScore;
|
|
183
188
|
|
|
184
|
-
var filterCategories = function filterCategories(categories
|
|
185
|
-
return categories ? categories.map(function (
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
initial: true
|
|
190
|
-
});
|
|
189
|
+
var filterCategories = function filterCategories(categories) {
|
|
190
|
+
return categories ? categories.map(function (_ref2) {
|
|
191
|
+
var deletable = _ref2.deletable,
|
|
192
|
+
rest = (0, _objectWithoutProperties2["default"])(_ref2, _excluded);
|
|
193
|
+
return rest;
|
|
191
194
|
}) : [];
|
|
192
195
|
};
|
|
193
196
|
|
|
@@ -201,7 +204,6 @@ function model(question, session, env) {
|
|
|
201
204
|
chartType = normalizedQuestion.chartType,
|
|
202
205
|
data = normalizedQuestion.data,
|
|
203
206
|
domain = normalizedQuestion.domain,
|
|
204
|
-
editCategoryEnabled = normalizedQuestion.editCategoryEnabled,
|
|
205
207
|
graph = normalizedQuestion.graph,
|
|
206
208
|
prompt = normalizedQuestion.prompt,
|
|
207
209
|
promptEnabled = normalizedQuestion.promptEnabled,
|
|
@@ -221,9 +223,8 @@ function model(question, session, env) {
|
|
|
221
223
|
addCategoryEnabled: addCategoryEnabled,
|
|
222
224
|
categoryDefaultLabel: categoryDefaultLabel,
|
|
223
225
|
chartType: chartType,
|
|
224
|
-
data: filterCategories(data
|
|
226
|
+
data: filterCategories(data),
|
|
225
227
|
domain: domain,
|
|
226
|
-
editCategoryEnabled: editCategoryEnabled,
|
|
227
228
|
graph: graph,
|
|
228
229
|
prompt: promptEnabled ? prompt : null,
|
|
229
230
|
range: range,
|
|
@@ -234,12 +235,12 @@ function model(question, session, env) {
|
|
|
234
235
|
disabled: env.mode !== 'gather',
|
|
235
236
|
scoringType: scoringType
|
|
236
237
|
};
|
|
237
|
-
var answers = filterCategories(getScore(normalizedQuestion, session, env).answers
|
|
238
|
+
var answers = filterCategories(getScore(normalizedQuestion, session, env).answers);
|
|
238
239
|
|
|
239
240
|
if (env.mode === 'view') {
|
|
240
|
-
base.correctedAnswer = answers.map(function (
|
|
241
|
-
var correctness =
|
|
242
|
-
rest = (0, _objectWithoutProperties2["default"])(
|
|
241
|
+
base.correctedAnswer = answers.map(function (_ref3) {
|
|
242
|
+
var correctness = _ref3.correctness,
|
|
243
|
+
rest = (0, _objectWithoutProperties2["default"])(_ref3, _excluded2);
|
|
243
244
|
return _objectSpread(_objectSpread({}, rest), {}, {
|
|
244
245
|
interactive: false
|
|
245
246
|
});
|
|
@@ -279,8 +280,17 @@ var createCorrectResponseSession = function createCorrectResponseSession(questio
|
|
|
279
280
|
return new Promise(function (resolve) {
|
|
280
281
|
if (env.mode !== 'evaluate' && env.role === 'instructor') {
|
|
281
282
|
var correctAnswer = question.correctAnswer;
|
|
283
|
+
var answers = correctAnswer && correctAnswer.data; // for IBX preview mode
|
|
284
|
+
|
|
285
|
+
if (env.mode === 'gather') {
|
|
286
|
+
var data = question.data;
|
|
287
|
+
answers = (correctAnswer && correctAnswer.data || []).map(function (answer, index) {
|
|
288
|
+
return _objectSpread(_objectSpread({}, data[index]), answer);
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
|
|
282
292
|
resolve({
|
|
283
|
-
answer:
|
|
293
|
+
answer: answers,
|
|
284
294
|
id: '1'
|
|
285
295
|
});
|
|
286
296
|
} else {
|
|
@@ -290,4 +300,58 @@ var createCorrectResponseSession = function createCorrectResponseSession(questio
|
|
|
290
300
|
};
|
|
291
301
|
|
|
292
302
|
exports.createCorrectResponseSession = createCorrectResponseSession;
|
|
303
|
+
|
|
304
|
+
var validate = function validate() {
|
|
305
|
+
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
306
|
+
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
307
|
+
|
|
308
|
+
var _ref4 = model || {},
|
|
309
|
+
correctAnswer = _ref4.correctAnswer,
|
|
310
|
+
data = _ref4.data;
|
|
311
|
+
|
|
312
|
+
var _ref5 = correctAnswer || {},
|
|
313
|
+
correctData = _ref5.data;
|
|
314
|
+
|
|
315
|
+
var categories = correctData || [];
|
|
316
|
+
var errors = {};
|
|
317
|
+
var correctAnswerErrors = {};
|
|
318
|
+
var categoryErrors = {};
|
|
319
|
+
categories.forEach(function (category, index) {
|
|
320
|
+
var label = category.label;
|
|
321
|
+
|
|
322
|
+
if (label === '' || label === '<div></div>') {
|
|
323
|
+
categoryErrors[index] = 'Content should not be empty.';
|
|
324
|
+
} else {
|
|
325
|
+
var identicalAnswer = categories.slice(index + 1).some(function (c) {
|
|
326
|
+
return c.label === label;
|
|
327
|
+
});
|
|
328
|
+
|
|
329
|
+
if (identicalAnswer) {
|
|
330
|
+
categoryErrors[index + 1] = 'Content should be unique.';
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
});
|
|
334
|
+
|
|
335
|
+
if (categories.length < 1 || categories.length > 20) {
|
|
336
|
+
correctAnswerErrors.categoriesError = 'The correct answer should include between 1 and 20 categories.';
|
|
337
|
+
} else if ((0, _isEqual["default"])(data.map(function (category) {
|
|
338
|
+
return (0, _pick["default"])(category, 'value', 'label');
|
|
339
|
+
}), correctData.map(function (category) {
|
|
340
|
+
return (0, _pick["default"])(category, 'value', 'label');
|
|
341
|
+
}))) {
|
|
342
|
+
correctAnswerErrors.identicalError = 'Correct answer should not be identical to the chart’s initial state';
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
if (!(0, _isEmpty["default"])(categoryErrors)) {
|
|
346
|
+
errors.categoryErrors = categoryErrors;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
if (!(0, _isEmpty["default"])(correctAnswerErrors)) {
|
|
350
|
+
errors.correctAnswerErrors = correctAnswerErrors;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
return errors;
|
|
354
|
+
};
|
|
355
|
+
|
|
356
|
+
exports.validate = validate;
|
|
293
357
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["log","lowerCase","string","toLowerCase","checkLabelsEquality","givenAnswerLabel","correctAnswerLabel","setCorrectness","answers","partialScoring","map","answer","correctness","value","label","normalize","question","addCategoryEnabled","editCategoryEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","getScore","session","env","correctAnswer","data","initialData","scoringType","isPartialScoring","enabled","undefined","correctAnswers","defaultAnswers","filterCategories","result","maxScore","score","scoreForLabelAndValueEditable","corrAnswer","forEach","index","defaultAnswer","editable","interactive","length","slice","parseFloat","toFixed","categories","category","deletable","initial","model","Promise","resolve","normalizedQuestion","categoryDefaultLabel","chartType","domain","graph","prompt","range","rationale","title","teacherInstructions","correctInfo","base","size","disabled","mode","correctedAnswer","rest","role","outcome","empty","createCorrectResponseSession","id"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { partialScoring } from '@pie-lib/controller-utils';\n\nconst log = debug('@pie-element:graphing:controller');\n\nconst lowerCase = string => (string || '').toLowerCase();\n\nexport const checkLabelsEquality = (givenAnswerLabel, correctAnswerLabel) =>\n lowerCase(givenAnswerLabel) === lowerCase(correctAnswerLabel);\n\nexport const setCorrectness = (answers, partialScoring) => answers ? answers.map(answer => ({\n ...answer,\n correctness: {\n value: partialScoring ? 'incorrect' : 'correct',\n label: partialScoring ? 'incorrect' : 'correct'\n }\n})) : [];\n\n\nexport const normalize = question => ({\n addCategoryEnabled: true,\n editCategoryEnabled: true,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\nexport const getScore = (question, session, env = {}) => {\n const { correctAnswer, data: initialData = [], scoringType, editCategoryEnabled } = question;\n\n const isPartialScoring = partialScoring.enabled(\n { partialScoring: scoringType !== undefined ? scoringType === 'partial scoring' : scoringType },\n env\n );\n\n const { data: correctAnswers = [] } = correctAnswer || {};\n const defaultAnswers = filterCategories(initialData, editCategoryEnabled);\n\n let answers = setCorrectness((session && session.answer) || defaultAnswers, isPartialScoring);\n\n let result = 0;\n\n if (isPartialScoring) {\n // if score type is \"partial scoring\"\n // maxScore is calculated based on the correct response\n // score is calculated based on the given response\n let maxScore = 0;\n let score = 0;\n\n const scoreForLabelAndValueEditable = (answer, corrAnswer) => {\n const { value, label } = answer;\n\n maxScore += 2;\n\n if (value === corrAnswer.value) {\n score += 1;\n answer.correctness.value = 'correct';\n }\n\n if (checkLabelsEquality(label, corrAnswer.label)) {\n score += 1;\n answer.correctness.label = 'correct';\n }\n };\n\n // if given answer has more categories than the correct answers, the \"extra\" will be ignored\n correctAnswers.forEach((corrAnswer, index) => {\n const defaultAnswer = defaultAnswers[index];\n const answer = answers[index];\n\n // if there is a corresponding category at the same position in the given answer\n if (answer) {\n // if there is a corresponding category at the same position in the default answer\n if (defaultAnswer) {\n // if category's label (in default answer) was not editable\n // it means that this category values only one point (only the value can be changed)\n if (!defaultAnswer.editable && answer.interactive) {\n maxScore += 1;\n\n if (answer.value === corrAnswer.value) {\n score += 1;\n answer.correctness.value = 'correct';\n }\n answer.correctness.label = 'correct';\n\n // if category's label (in default answer) was editable\n // it means that this category values 2 points (both label and value can be changed)\n } else if (defaultAnswer.editable && answer.interactive) {\n scoreForLabelAndValueEditable(answer, corrAnswer);\n } else if (!answer.interactive) {\n answer.correctness.value = 'correct';\n answer.correctness.label = 'correct';\n }\n } else {\n // if there is not a corresponding category at the same position in the default answer\n scoreForLabelAndValueEditable(answer, corrAnswer);\n }\n } else {\n // if there is not a corresponding category at the same position in the given answer\n // it means that the given answer has less categories than the correct answer\n maxScore += 2;\n }\n });\n\n result = maxScore ? score / maxScore : 0;\n } else {\n // if scoring type is \"all or nothing\"\n // the length on correct answers and length of given answer have to match\n result = correctAnswers.length === answers.length ? 1 : 0;\n\n if (result) {\n // if there is at least one difference between the correct answer and the given answer\n // the result will be incorrect\n correctAnswers.forEach((corrAnswer, index) => {\n const { value, label } = answers[index];\n\n if (value !== corrAnswer.value) {\n result = 0;\n answers[index].correctness.value = 'incorrect';\n }\n if (lowerCase(label) !== lowerCase(corrAnswer.label)) {\n result = 0;\n answers[index].correctness.label = 'incorrect';\n }\n });\n } else {\n answers = [\n ...answers.slice(0, correctAnswers.length),\n ...setCorrectness(answers.slice(correctAnswers.length), true)\n ];\n }\n }\n\n return {\n score: parseFloat(result.toFixed(2)),\n answers\n };\n};\n\nexport const filterCategories = (categories, editable) => categories ? categories.map(category => ({\n ...category,\n deletable: false,\n editable,\n initial: true\n})) : [];\n\nexport function model(question, session, env) {\n return new Promise(resolve => {\n const normalizedQuestion = normalize(question);\n const {\n addCategoryEnabled,\n categoryDefaultLabel,\n chartType,\n data,\n domain,\n editCategoryEnabled,\n graph,\n prompt,\n promptEnabled,\n range,\n rationale,\n title,\n rationaleEnabled,\n teacherInstructions,\n teacherInstructionsEnabled,\n correctAnswer,\n scoringType\n } = normalizedQuestion;\n\n const correctInfo = { correctness: 'incorrect', score: '0%' };\n\n const base = {\n addCategoryEnabled,\n categoryDefaultLabel,\n chartType,\n data: filterCategories(data, editCategoryEnabled),\n domain,\n editCategoryEnabled,\n graph,\n prompt: promptEnabled ? prompt : null,\n range,\n rationale,\n title,\n size: graph,\n correctness: correctInfo,\n disabled: env.mode !== 'gather',\n scoringType\n };\n\n const answers = filterCategories(getScore(normalizedQuestion, session, env).answers, false);\n\n if (env.mode === 'view') {\n base.correctedAnswer = answers.map(({correctness, ...rest}) => {\n return { ...rest, interactive: false };\n });\n\n base.addCategoryEnabled = false;\n }\n\n if (env.mode === 'evaluate') {\n base.correctedAnswer = answers;\n base.correctAnswer = correctAnswer;\n base.addCategoryEnabled = false;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n base.rationale = rationaleEnabled ? rationale : null;\n base.teacherInstructions = teacherInstructionsEnabled ? teacherInstructions : null;\n } else {\n base.rationale = null;\n base.teacherInstructions = null;\n }\n\n log('base: ', base);\n resolve(base);\n });\n}\n\nexport function outcome(model, session, env) {\n return new Promise(resolve => {\n resolve({\n score: getScore(model, session, env).score,\n empty: !session || isEmpty(session)\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise(resolve => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { correctAnswer } = question;\n\n resolve({\n answer: correctAnswer && correctAnswer.data,\n id: '1'\n });\n } else {\n return resolve(null);\n }\n });\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["log","lowerCase","string","toLowerCase","checkLabelsEquality","givenAnswerLabel","correctAnswerLabel","setCorrectness","answers","partialScoring","map","answer","correctness","value","label","normalize","question","addCategoryEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","getScore","session","env","correctAnswer","data","initialData","scoringType","isPartialScoring","enabled","undefined","correctAnswers","defaultAnswers","filterCategories","result","maxScore","score","scoreForLabelAndValueEditable","corrAnswer","forEach","index","defaultAnswer","editable","interactive","length","slice","parseFloat","toFixed","categories","deletable","rest","model","Promise","resolve","normalizedQuestion","categoryDefaultLabel","chartType","domain","graph","prompt","range","rationale","title","teacherInstructions","correctInfo","base","size","disabled","mode","correctedAnswer","role","outcome","empty","createCorrectResponseSession","id","validate","config","correctData","errors","correctAnswerErrors","categoryErrors","category","identicalAnswer","some","c","categoriesError","identicalError"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport pick from 'lodash/pick';\n\nimport { partialScoring } from '@pie-lib/controller-utils';\n\nconst log = debug('@pie-element:graphing:controller');\n\nconst lowerCase = (string) => (string || '').toLowerCase();\n\nexport const checkLabelsEquality = (givenAnswerLabel, correctAnswerLabel) =>\n lowerCase(givenAnswerLabel) === lowerCase(correctAnswerLabel);\n\nexport const setCorrectness = (answers, partialScoring) =>\n answers\n ? answers.map((answer) => ({\n ...answer,\n correctness: {\n value: partialScoring ? 'incorrect' : 'correct',\n label: partialScoring ? 'incorrect' : 'correct',\n },\n }))\n : [];\n\nexport const normalize = (question) => ({\n addCategoryEnabled: true,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\nexport const getScore = (question, session, env = {}) => {\n const { correctAnswer, data: initialData = [], scoringType } = question;\n\n const isPartialScoring = partialScoring.enabled(\n { partialScoring: scoringType !== undefined ? scoringType === 'partial scoring' : scoringType },\n env,\n );\n\n const { data: correctAnswers = [] } = correctAnswer || {};\n const defaultAnswers = filterCategories(initialData);\n\n let answers = setCorrectness((session && session.answer) || defaultAnswers, isPartialScoring);\n\n let result = 0;\n\n if (isPartialScoring) {\n // if score type is \"partial scoring\"\n // maxScore is calculated based on the correct response\n // score is calculated based on the given response\n let maxScore = 0;\n let score = 0;\n\n const scoreForLabelAndValueEditable = (answer, corrAnswer) => {\n const { value, label } = answer;\n\n maxScore += 2;\n\n if (value === corrAnswer.value) {\n score += 1;\n answer.correctness.value = 'correct';\n }\n\n if (checkLabelsEquality(label, corrAnswer.label)) {\n score += 1;\n answer.correctness.label = 'correct';\n }\n };\n\n // if given answer has more categories than the correct answers, the \"extra\" will be ignored\n correctAnswers.forEach((corrAnswer, index) => {\n const defaultAnswer = defaultAnswers[index];\n const answer = answers[index];\n\n // if there is a corresponding category at the same position in the given answer\n if (answer) {\n // if there is a corresponding category at the same position in the default answer\n if (defaultAnswer) {\n // if category's label (in default answer) was not editable\n // it means that this category values only one point (only the value can be changed)\n if (!defaultAnswer.editable && answer.interactive) {\n maxScore += 1;\n\n if (answer.value === corrAnswer.value) {\n score += 1;\n answer.correctness.value = 'correct';\n }\n answer.correctness.label = 'correct';\n\n // if category's label (in default answer) was editable\n // it means that this category values 2 points (both label and value can be changed)\n } else if (defaultAnswer.editable && answer.interactive) {\n scoreForLabelAndValueEditable(answer, corrAnswer);\n } else if (!answer.interactive) {\n answer.correctness.value = 'correct';\n answer.correctness.label = 'correct';\n }\n } else {\n // if there is not a corresponding category at the same position in the default answer\n scoreForLabelAndValueEditable(answer, corrAnswer);\n }\n } else {\n // if there is not a corresponding category at the same position in the given answer\n // it means that the given answer has less categories than the correct answer\n maxScore += 2;\n }\n });\n\n result = maxScore ? score / maxScore : 0;\n } else {\n // if scoring type is \"all or nothing\"\n // the length on correct answers and length of given answer have to match\n result = correctAnswers.length === answers.length ? 1 : 0;\n\n if (result) {\n // if there is at least one difference between the correct answer and the given answer\n // the result will be incorrect\n correctAnswers.forEach((corrAnswer, index) => {\n const { value, label } = answers[index];\n\n if (value !== corrAnswer.value) {\n result = 0;\n answers[index].correctness.value = 'incorrect';\n }\n if (lowerCase(label) !== lowerCase(corrAnswer.label)) {\n result = 0;\n answers[index].correctness.label = 'incorrect';\n }\n });\n } else {\n answers = [\n ...answers.slice(0, correctAnswers.length),\n ...setCorrectness(answers.slice(correctAnswers.length), true),\n ];\n }\n }\n\n return {\n score: parseFloat(result.toFixed(2)),\n answers,\n };\n};\n\nexport const filterCategories = (categories) => (categories ? categories.map(({ deletable, ...rest }) => rest) : []);\n\nexport function model(question, session, env) {\n return new Promise((resolve) => {\n const normalizedQuestion = normalize(question);\n const {\n addCategoryEnabled,\n categoryDefaultLabel,\n chartType,\n data,\n domain,\n graph,\n prompt,\n promptEnabled,\n range,\n rationale,\n title,\n rationaleEnabled,\n teacherInstructions,\n teacherInstructionsEnabled,\n correctAnswer,\n scoringType,\n } = normalizedQuestion;\n\n const correctInfo = { correctness: 'incorrect', score: '0%' };\n\n const base = {\n addCategoryEnabled,\n categoryDefaultLabel,\n chartType,\n data: filterCategories(data),\n domain,\n graph,\n prompt: promptEnabled ? prompt : null,\n range,\n rationale,\n title,\n size: graph,\n correctness: correctInfo,\n disabled: env.mode !== 'gather',\n scoringType,\n };\n\n const answers = filterCategories(getScore(normalizedQuestion, session, env).answers);\n\n if (env.mode === 'view') {\n base.correctedAnswer = answers.map(({ correctness, ...rest }) => {\n return { ...rest, interactive: false };\n });\n\n base.addCategoryEnabled = false;\n }\n\n if (env.mode === 'evaluate') {\n base.correctedAnswer = answers;\n base.correctAnswer = correctAnswer;\n base.addCategoryEnabled = false;\n }\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n base.rationale = rationaleEnabled ? rationale : null;\n base.teacherInstructions = teacherInstructionsEnabled ? teacherInstructions : null;\n } else {\n base.rationale = null;\n base.teacherInstructions = null;\n }\n\n log('base: ', base);\n resolve(base);\n });\n}\n\nexport function outcome(model, session, env) {\n return new Promise((resolve) => {\n resolve({\n score: getScore(model, session, env).score,\n empty: !session || isEmpty(session),\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { correctAnswer } = question;\n\n let answers = correctAnswer && correctAnswer.data;\n\n // for IBX preview mode\n if (env.mode === 'gather') {\n const { data } = question;\n\n answers = ((correctAnswer && correctAnswer.data) || []).map((answer, index) => {\n return {\n ...data[index],\n ...answer,\n };\n });\n }\n\n resolve({\n answer: answers,\n id: '1',\n });\n } else {\n return resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { correctAnswer, data } = model || {};\n const { data: correctData } = correctAnswer || {};\n const categories = correctData || [];\n\n const errors = {};\n const correctAnswerErrors = {};\n const categoryErrors = {};\n\n categories.forEach((category, index) => {\n const { label } = category;\n\n if (label === '' || label === '<div></div>') {\n categoryErrors[index] = 'Content should not be empty.';\n } else {\n const identicalAnswer = categories.slice(index + 1).some((c) => c.label === label);\n\n if (identicalAnswer) {\n categoryErrors[index + 1] = 'Content should be unique.';\n }\n }\n });\n\n if (categories.length < 1 || categories.length > 20) {\n correctAnswerErrors.categoriesError = 'The correct answer should include between 1 and 20 categories.';\n } else if (\n isEqual(\n data.map((category) => pick(category, 'value', 'label')),\n correctData.map((category) => pick(category, 'value', 'label')),\n )\n ) {\n correctAnswerErrors.identicalError = 'Correct answer should not be identical to the chart’s initial state';\n }\n\n if (!isEmpty(categoryErrors)) {\n errors.categoryErrors = categoryErrors;\n }\n\n if (!isEmpty(correctAnswerErrors)) {\n errors.correctAnswerErrors = correctAnswerErrors;\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/charting-controller",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.3.1",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
"test": "./node_modules/.bin/jest"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@pie-lib/controller-utils": "^0.2.
|
|
13
|
-
"@pie-lib/feedback": "^0.4.
|
|
12
|
+
"@pie-lib/controller-utils": "^0.2.42",
|
|
13
|
+
"@pie-lib/feedback": "^0.4.42",
|
|
14
14
|
"debug": "^4.1.1",
|
|
15
15
|
"lodash": "^4.17.15"
|
|
16
16
|
},
|