@pie-element/complex-rubric 2.4.2-next.22 → 2.4.2-next.25

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 @@
1
+ {"version":3,"sources":["../src/main.jsx"],"names":["styles","root","width","paddingRight","boxSizing","background","rubricLabels","RUBRIC_TYPES","MULTI_TRAIT_RUBRIC","SIMPLE_RUBRIC","RUBRICLESS","Main","model","onModelChanged","props","e","rubricType","target","value","configuration","canUpdateModel","classes","rubrics","contentDimensions","rubricOptions","multiTraitRubric","simpleRubric","rubricless","rubricTag","isRubricTypeAvailable","indexOf","ref","errors","onChangeRubricType","length","map","availableRubric","i","React","Component","PropTypes","object","bool","func","onConfigurationChanged"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { RUBRIC_TYPES } from '@pie-lib/pie-toolbox/rubric';\nimport { layout } from '@pie-lib/pie-toolbox/config-ui';\nimport Radio from '@material-ui/core/Radio';\nimport RadioGroup from '@material-ui/core/RadioGroup';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport { withStyles } from '@material-ui/core/styles';\n\nconst styles = {\n root: {\n width: 'fit-content',\n paddingRight: '24px',\n boxSizing: 'border-box',\n '&:hover': {\n background: 'var(--pie-secondary-background, rgba(241,241,241,1))'\n }\n }\n};\nconst rubricLabels = {\n [RUBRIC_TYPES.MULTI_TRAIT_RUBRIC]: 'Multi Trait Rubric',\n [RUBRIC_TYPES.SIMPLE_RUBRIC]: 'Simple Rubric',\n [RUBRIC_TYPES.RUBRICLESS]: 'Rubricless',\n};\n\nexport class Main extends React.Component {\n static propTypes = {\n classes: PropTypes.object,\n canUpdateModel: PropTypes.bool,\n configuration: PropTypes.object,\n model: PropTypes.object,\n onModelChanged: PropTypes.func,\n onConfigurationChanged: PropTypes.func,\n };\n\n onModelChanged = (model) => {\n const { onModelChanged } = this.props;\n\n return onModelChanged(model);\n };\n\n onChangeRubricType = (e) => {\n const { model } = this.props;\n\n const rubricType = e.target.value;\n this.onModelChanged({ ...model, rubricType });\n };\n\n render() {\n const { model, configuration, canUpdateModel, classes } = this.props;\n\n const { rubrics = {} } = model || {};\n let { rubricType } = model;\n const { contentDimensions = {}, rubricOptions = [], multiTraitRubric, simpleRubric, rubricless, width } = configuration;\n let rubricTag = '';\n\n if (!rubricType) {\n rubricType = RUBRIC_TYPES.SIMPLE_RUBRIC;\n }\n\n const isRubricTypeAvailable = rubricOptions.indexOf(rubricType) > -1;\n\n if (canUpdateModel) {\n switch (rubricType) {\n case RUBRIC_TYPES.SIMPLE_RUBRIC:\n default:\n rubricTag = (\n <rubric-configure\n id=\"simpleRubric\"\n key=\"simple-rubric\"\n ref={(ref) => {\n if (ref) {\n this.simpleRubric = ref;\n this.simpleRubric.model = {...rubrics.simpleRubric, errors: model.errors || {}};\n this.simpleRubric.configuration = { ...simpleRubric, width };\n }\n }}\n />\n );\n break;\n\n case RUBRIC_TYPES.MULTI_TRAIT_RUBRIC:\n rubricTag = (\n <multi-trait-rubric-configure\n id=\"multiTraitRubric\"\n key=\"multi-trait-rubric\"\n ref={(ref) => {\n if (ref) {\n this.multiTraitRubric = ref;\n\n this.multiTraitRubric.model = {...rubrics.multiTraitRubric, errors: model.errors || {} };\n this.multiTraitRubric.configuration = { ...multiTraitRubric, width: width || multiTraitRubric.width };\n }\n }}\n />\n );\n break;\n\n case RUBRIC_TYPES.RUBRICLESS:\n rubricTag = (\n <rubric-configure\n id=\"rubricless\"\n key=\"rubricless\"\n ref={(ref) => {\n if (ref) {\n this.rubricless = ref;\n\n this.rubricless.model = rubrics.rubricless;\n this.rubricless.configuration = { ...rubricless, width };\n }\n }}\n />\n );\n break;\n }\n }\n\n return (\n <layout.ConfigLayout dimensions={contentDimensions} hideSettings={true} settings={null}>\n <RadioGroup\n aria-label=\"rubric-type\"\n name=\"rubricType\"\n value={model.rubricType}\n onChange={this.onChangeRubricType}\n >\n {\n rubricOptions.length > 1 && rubricOptions.map((availableRubric, i)=>\n <FormControlLabel\n key={i}\n value={availableRubric}\n control={<Radio checked={rubricType === availableRubric} />}\n label={rubricLabels[availableRubric]}\n classes={{ root: classes.root }}\n />\n )\n }\n </RadioGroup>\n\n {isRubricTypeAvailable && rubricTag}\n </layout.ConfigLayout>\n );\n }\n}\n\nexport default withStyles(styles)(Main);\n"],"file":"main.js"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var multiTraitDefaultModel = {
8
+ visibleToStudent: true,
9
+ halfScoring: false,
10
+ pointLabels: true,
11
+ description: false,
12
+ standards: false,
13
+ scales: [],
14
+ excludeZero: false
15
+ };
16
+ var rubricDefaultModel = {
17
+ points: ['', '', '', ''],
18
+ sampleAnswers: [null, null, null, null],
19
+ maxPoints: 4,
20
+ excludeZero: false
21
+ };
22
+ var rubriclessDefaultModel = {
23
+ maxPoints: 100,
24
+ excludeZero: false,
25
+ rubriclessInstructionEnabled: true
26
+ };
27
+ var multiTraitDefaultConfiguration = {
28
+ settingsPanelDisabled: false,
29
+ excludeZeroDialogBoxContent: {
30
+ title: 'Exclude 0 (Zero) from Score Point Values.',
31
+ text: "<div>\n You are about to exclude 0 from score point values.\n <br/>\n Some of the existing data has to be changed.\n <br/>\n Please choose if you want to:\n <ul>\n <li>\n shift Labels and Descriptions to the left\n </li>\n <li>\n remove 0 column with its Label and Description\n </li>\n </ul>\n </div>"
32
+ },
33
+ includeZeroDialogBoxContent: {
34
+ title: 'Include 0 (Zero) in Score Point Values.',
35
+ text: "<div>\n You are about to include 0 in score point values.\n <br/>\n Some of the existing data has to be changed.\n <br/>\n Please choose if you want to:\n <ul>\n <li>\n shift Labels and Descriptions to the right\n </li>\n <li>\n add 0 column with empty Label and Descriptions\n </li>\n </ul>\n </div>"
36
+ },
37
+ deleteScaleDialogBoxContent: {
38
+ title: 'Delete Scale',
39
+ text: 'Are you sure you want to delete this scale?'
40
+ },
41
+ maxPointsDialogBoxContent: {
42
+ title: 'Decreasing Max Points.',
43
+ text: " You are about to decrease max score point value.\n <br/>\n All the Labels and Descriptions for scores above Max Point will be deleted."
44
+ },
45
+ spellCheck: {
46
+ label: 'Spellcheck',
47
+ settings: false,
48
+ enabled: true
49
+ },
50
+ showExcludeZero: {
51
+ settings: true,
52
+ label: 'Exclude Zero'
53
+ },
54
+ showScorePointLabels: {
55
+ settings: true,
56
+ label: 'Show Score Point Labels'
57
+ },
58
+ showDescription: {
59
+ settings: true,
60
+ label: 'Show Description'
61
+ },
62
+ showVisibleToStudent: {
63
+ settings: true,
64
+ label: 'Visible to Student'
65
+ },
66
+ showHalfScoring: {
67
+ settings: true,
68
+ label: 'Half Scoring'
69
+ },
70
+ width: '900px',
71
+ // these should not be set to true (should not be used) for now
72
+ showStandards: {
73
+ settings: false,
74
+ label: 'Show Standards'
75
+ },
76
+ showLevelTagInput: {
77
+ settings: false,
78
+ label: 'Show Level Tag Input',
79
+ enabled: false
80
+ },
81
+ dragAndDrop: {
82
+ settings: true,
83
+ label: 'Enable Drag and Drop',
84
+ enabled: false
85
+ }
86
+ };
87
+ var rubricDefaultConfiguration = {
88
+ showExcludeZero: {
89
+ settings: true,
90
+ label: 'Ability to exclude zero'
91
+ },
92
+ showMaxPoint: {
93
+ settings: true,
94
+ label: 'Show max points dropdown'
95
+ },
96
+ settingsPanelDisabled: false
97
+ };
98
+ var rubriclessDefaultConfiguration = {
99
+ showExcludeZero: {
100
+ settings: true,
101
+ label: 'Ability to exclude zero'
102
+ },
103
+ showMaxPoint: {
104
+ settings: true,
105
+ label: 'Show max points dropdown'
106
+ },
107
+ settingsPanelDisabled: false,
108
+ // shows us if it simple rubric or rubricless(simple rubric with less structure)
109
+ rubricless: true,
110
+ // scoring instruction for rubricless
111
+ rubriclessInstruction: {
112
+ settings: true,
113
+ label: 'Instruction'
114
+ },
115
+ maxMaxPoints: 100
116
+ };
117
+ var _default = {
118
+ model: {
119
+ rubricOptions: ['simpleRubric', 'multiTraitRubric'],
120
+ rubricType: 'simpleRubric',
121
+ rubrics: {
122
+ simpleRubric: rubricDefaultModel,
123
+ multiTraitRubric: multiTraitDefaultModel,
124
+ rubricless: rubriclessDefaultModel
125
+ }
126
+ },
127
+ configuration: {
128
+ multiTraitRubric: multiTraitDefaultConfiguration,
129
+ simpleRubric: rubricDefaultConfiguration,
130
+ rubricless: rubriclessDefaultConfiguration
131
+ }
132
+ };
133
+ exports["default"] = _default;
134
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/defaults.js"],"names":["multiTraitDefaultModel","visibleToStudent","halfScoring","pointLabels","description","standards","scales","excludeZero","rubricDefaultModel","points","sampleAnswers","maxPoints","rubriclessDefaultModel","rubriclessInstructionEnabled","multiTraitDefaultConfiguration","settingsPanelDisabled","excludeZeroDialogBoxContent","title","text","includeZeroDialogBoxContent","deleteScaleDialogBoxContent","maxPointsDialogBoxContent","spellCheck","label","settings","enabled","showExcludeZero","showScorePointLabels","showDescription","showVisibleToStudent","showHalfScoring","width","showStandards","showLevelTagInput","dragAndDrop","rubricDefaultConfiguration","showMaxPoint","rubriclessDefaultConfiguration","rubricless","rubriclessInstruction","maxMaxPoints","model","rubricOptions","rubricType","rubrics","simpleRubric","multiTraitRubric","configuration"],"mappings":"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","sourcesContent":["const multiTraitDefaultModel = {\n visibleToStudent: true,\n halfScoring: false,\n pointLabels: true,\n description: false,\n standards: false,\n scales: [],\n excludeZero: false,\n};\n\nconst rubricDefaultModel = {\n points: ['', '', '', ''],\n sampleAnswers: [null, null, null, null],\n maxPoints: 4,\n excludeZero: false,\n};\n\nconst rubriclessDefaultModel = {\n maxPoints: 100,\n excludeZero: false,\n rubriclessInstructionEnabled: true,\n};\n\nconst multiTraitDefaultConfiguration = {\n settingsPanelDisabled: false,\n excludeZeroDialogBoxContent: {\n title: 'Exclude 0 (Zero) from Score Point Values.',\n text: `<div>\n You are about to exclude 0 from score point values.\n <br/>\n Some of the existing data has to be changed.\n <br/>\n Please choose if you want to:\n <ul>\n <li>\n shift Labels and Descriptions to the left\n </li>\n <li>\n remove 0 column with its Label and Description\n </li>\n </ul>\n </div>`,\n },\n includeZeroDialogBoxContent: {\n title: 'Include 0 (Zero) in Score Point Values.',\n text: `<div>\n You are about to include 0 in score point values.\n <br/>\n Some of the existing data has to be changed.\n <br/>\n Please choose if you want to:\n <ul>\n <li>\n shift Labels and Descriptions to the right\n </li>\n <li>\n add 0 column with empty Label and Descriptions\n </li>\n </ul>\n </div>`,\n },\n deleteScaleDialogBoxContent: {\n title: 'Delete Scale',\n text: 'Are you sure you want to delete this scale?',\n },\n maxPointsDialogBoxContent: {\n title: 'Decreasing Max Points.',\n text: ` You are about to decrease max score point value.\n <br/>\n All the Labels and Descriptions for scores above Max Point will be deleted.`,\n },\n spellCheck: {\n label: 'Spellcheck',\n settings: false,\n enabled: true,\n },\n showExcludeZero: {\n settings: true,\n label: 'Exclude Zero',\n },\n showScorePointLabels: {\n settings: true,\n label: 'Show Score Point Labels',\n },\n showDescription: {\n settings: true,\n label: 'Show Description',\n },\n showVisibleToStudent: {\n settings: true,\n label: 'Visible to Student',\n },\n showHalfScoring: {\n settings: true,\n label: 'Half Scoring',\n },\n width: '900px',\n // these should not be set to true (should not be used) for now\n showStandards: {\n settings: false,\n label: 'Show Standards',\n },\n showLevelTagInput: {\n settings: false,\n label: 'Show Level Tag Input',\n enabled: false,\n },\n dragAndDrop: {\n settings: true,\n label: 'Enable Drag and Drop',\n enabled: false,\n },\n};\n\nconst rubricDefaultConfiguration = {\n showExcludeZero: {\n settings: true,\n label: 'Ability to exclude zero',\n },\n showMaxPoint: {\n settings: true,\n label: 'Show max points dropdown',\n },\n settingsPanelDisabled: false,\n};\n\nconst rubriclessDefaultConfiguration = {\n showExcludeZero: {\n settings: true,\n label: 'Ability to exclude zero',\n },\n showMaxPoint: {\n settings: true,\n label: 'Show max points dropdown',\n },\n settingsPanelDisabled: false,\n // shows us if it simple rubric or rubricless(simple rubric with less structure)\n rubricless: true,\n // scoring instruction for rubricless\n rubriclessInstruction: {\n settings: true,\n label: 'Instruction',\n },\n maxMaxPoints: 100,\n};\n\nexport default {\n model: {\n rubricOptions: ['simpleRubric', 'multiTraitRubric'],\n rubricType: 'simpleRubric',\n rubrics: { simpleRubric: rubricDefaultModel, multiTraitRubric: multiTraitDefaultModel, rubricless: rubriclessDefaultModel },\n },\n configuration: {\n multiTraitRubric: multiTraitDefaultConfiguration,\n simpleRubric: rubricDefaultConfiguration,\n rubricless: rubriclessDefaultConfiguration,\n },\n};\n"],"file":"defaults.js"}
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createCorrectResponseSession = void 0;
9
+ exports.createDefaultModel = createDefaultModel;
10
+ exports.getScore = void 0;
11
+ exports.model = model;
12
+ exports.normalize = void 0;
13
+ exports.outcome = outcome;
14
+ exports.validate = void 0;
15
+
16
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
17
+
18
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
19
+
20
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
21
+
22
+ var _defaults = _interopRequireDefault(require("./defaults"));
23
+
24
+ var _utils = require("./utils");
25
+
26
+ 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
+
28
+ 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
+
30
+ // todo the import from pie-lib/rubric might break webpack
31
+ var RUBRIC_TYPES = {
32
+ SIMPLE_RUBRIC: 'simpleRubric',
33
+ MULTI_TRAIT_RUBRIC: 'multiTraitRubric',
34
+ 'rubricless': 'rubricless'
35
+ };
36
+
37
+ function createDefaultModel() {
38
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
39
+ return new Promise(function (resolve) {
40
+ return resolve(_objectSpread(_objectSpread({}, _defaults["default"].model), model));
41
+ });
42
+ }
43
+
44
+ var normalize = function normalize(question) {
45
+ return _objectSpread(_objectSpread({}, _defaults["default"].model), question);
46
+ };
47
+ /**
48
+ * @param {*} question
49
+ * @param {*} session
50
+ * @param {*} env
51
+ */
52
+
53
+
54
+ exports.normalize = normalize;
55
+
56
+ function model(_x, _x2, _x3) {
57
+ return _model.apply(this, arguments);
58
+ }
59
+
60
+ function _model() {
61
+ _model = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(question, session, env) {
62
+ var normalizedQuestion, _ref, scales, excludeZero, parsedScales;
63
+
64
+ return _regenerator["default"].wrap(function _callee$(_context) {
65
+ while (1) {
66
+ switch (_context.prev = _context.next) {
67
+ case 0:
68
+ normalizedQuestion = normalize(question);
69
+
70
+ if (!(normalizedQuestion.rubricType === RUBRIC_TYPES.SIMPLE_RUBRIC || normalizedQuestion.rubricType === 'rubricless')) {
71
+ _context.next = 5;
72
+ break;
73
+ }
74
+
75
+ return _context.abrupt("return", new Promise(function (resolve) {
76
+ resolve(env && env.role && env.role === 'instructor' ? _objectSpread(_objectSpread({}, normalizedQuestion), {}, {
77
+ rubrics: _objectSpread(_objectSpread({}, normalizedQuestion.rubrics), {}, {
78
+ multiTraitRubric: _objectSpread(_objectSpread({}, normalizedQuestion.rubrics.multiTraitRubric), {}, {
79
+ visible: false
80
+ })
81
+ })
82
+ }) : {});
83
+ }));
84
+
85
+ case 5:
86
+ if (!env.role || env.role === 'student' && normalizedQuestion.rubrics && normalizedQuestion.rubrics.multiTraitRubric) {
87
+ normalizedQuestion.rubrics.multiTraitRubric.visible = normalizedQuestion.visibleToStudent;
88
+ } else {
89
+ normalizedQuestion.rubrics.multiTraitRubric.visible = true;
90
+ } // todo update pie-ui instead of parsing this here:
91
+
92
+
93
+ _ref = normalizedQuestion.rubrics.multiTraitRubric || {}, scales = _ref.scales, excludeZero = _ref.excludeZero;
94
+ parsedScales = (scales || []).map(function (scale) {
95
+ return _objectSpread(_objectSpread({}, scale), {}, {
96
+ excludeZero: excludeZero
97
+ });
98
+ });
99
+ return _context.abrupt("return", _objectSpread(_objectSpread({}, normalizedQuestion), {}, {
100
+ rubrics: _objectSpread(_objectSpread({}, normalizedQuestion.rubrics), {}, {
101
+ simpleRubric: _objectSpread(_objectSpread({}, normalizedQuestion.rubrics.simpleRubric), {}, {
102
+ visible: false
103
+ }),
104
+ rubricless: _objectSpread(_objectSpread({}, normalizedQuestion.rubrics.rubricless), {}, {
105
+ visible: false
106
+ }),
107
+ multiTraitRubric: _objectSpread(_objectSpread({}, normalizedQuestion.rubrics.multiTraitRubric), {}, {
108
+ scales: parsedScales
109
+ })
110
+ })
111
+ }));
112
+
113
+ case 9:
114
+ case "end":
115
+ return _context.stop();
116
+ }
117
+ }
118
+ }, _callee);
119
+ }));
120
+ return _model.apply(this, arguments);
121
+ }
122
+
123
+ var getScore = function getScore() {
124
+ return 0;
125
+ };
126
+ /**
127
+ * @param {Object} model - the main model
128
+ * @param {*} session
129
+ * @param {Object} env
130
+ */
131
+
132
+
133
+ exports.getScore = getScore;
134
+
135
+ function outcome() {
136
+ return new Promise(function (resolve) {
137
+ return resolve({
138
+ score: 0,
139
+ empty: true
140
+ });
141
+ });
142
+ }
143
+
144
+ var createCorrectResponseSession = function createCorrectResponseSession(question, env) {
145
+ return new Promise(function (resolve) {
146
+ if (env.mode !== 'evaluate' && env.role === 'instructor') {
147
+ resolve({
148
+ id: '1'
149
+ });
150
+ } else {
151
+ resolve(null);
152
+ }
153
+ });
154
+ }; // IMPORTANT! This function is a duplicate of rubric/controller/validate function!
155
+ // If you make any changes to this function, please make sure you also update rubric/controller/validate function!“.
156
+
157
+
158
+ exports.createCorrectResponseSession = createCorrectResponseSession;
159
+
160
+ var validateSimpleRubric = function validateSimpleRubric(model) {
161
+ var points = model.points,
162
+ excludeZero = model.excludeZero;
163
+ var errors = {};
164
+ var pointsDescriptorsErrors = {};
165
+ (points || []).forEach(function (point, index) {
166
+ if (index === 0 && excludeZero) {
167
+ // if excludeZero is true, the 0 point is not displayed, so it should not be validated
168
+ return;
169
+ }
170
+
171
+ if (!point || point === '<div></div>') {
172
+ pointsDescriptorsErrors[index] = 'Points descriptors cannot be empty.';
173
+ } else {
174
+ var identicalPointDescr = points.slice(index + 1).some(function (p) {
175
+ return (0, _utils.markupToText)(p) === (0, _utils.markupToText)(point);
176
+ });
177
+
178
+ if (identicalPointDescr) {
179
+ pointsDescriptorsErrors[index] = 'Points descriptors should be unique.';
180
+ }
181
+ }
182
+ });
183
+
184
+ if (Object.keys(pointsDescriptorsErrors).length > 0) {
185
+ errors.pointsDescriptorsErrors = pointsDescriptorsErrors;
186
+ }
187
+
188
+ return errors;
189
+ }; // IMPORTANT! This function is a duplicate of multi-trait-rubric/controller/validate function!
190
+ // If you make any changes to this function, please make sure you also update multi-trait-rubric/controller/validate function!“.
191
+
192
+
193
+ var validateMultiTraitRubric = function validateMultiTraitRubric(model) {
194
+ var scales = model.scales,
195
+ _model$description = model.description,
196
+ description = _model$description === void 0 ? false : _model$description,
197
+ _model$pointLabels = model.pointLabels,
198
+ pointLabels = _model$pointLabels === void 0 ? false : _model$pointLabels;
199
+ var errors = {};
200
+ var traitsErrors = {};
201
+ var scorePointsErrors = {};
202
+ (scales || []).forEach(function (scale, scaleIndex) {
203
+ var _scale$traits = scale.traits,
204
+ traits = _scale$traits === void 0 ? [] : _scale$traits;
205
+ var _scale$scorePointsLab = scale.scorePointsLabels,
206
+ scorePointsLabels = _scale$scorePointsLab === void 0 ? [] : _scale$scorePointsLab;
207
+ var scaleErrors = {};
208
+ var scorePointsLabelsErrors = {};
209
+
210
+ if (pointLabels) {
211
+ scorePointsLabels.forEach(function (scorePointLabel, scoreIndex) {
212
+ if (!scorePointLabel || scorePointLabel === '<div></div>') {
213
+ scorePointsLabelsErrors[scoreIndex] = 'Points labels should not be empty.';
214
+ } else {
215
+ var identicalScorePointLabel = scorePointsLabels.slice(scoreIndex + 1).some(function (s) {
216
+ return (0, _utils.markupToText)(s) === (0, _utils.markupToText)(scorePointLabel);
217
+ });
218
+
219
+ if (identicalScorePointLabel) {
220
+ scorePointsLabelsErrors[scoreIndex] = 'Points labels should be unique.';
221
+ }
222
+ }
223
+ });
224
+ }
225
+
226
+ if (Object.keys(scorePointsLabelsErrors).length > 0) {
227
+ scorePointsErrors[scaleIndex] = scorePointsLabelsErrors;
228
+ }
229
+
230
+ traits.forEach(function (trait, traitIndex) {
231
+ if (!trait.name || trait.name === '<div></div>') {
232
+ scaleErrors[traitIndex] = {
233
+ name: 'Trait names should not be empty.'
234
+ };
235
+ } else {
236
+ var identicalTraitName = traits.slice(traitIndex + 1).some(function (t) {
237
+ return (0, _utils.markupToText)(t.name) === (0, _utils.markupToText)(trait.name);
238
+ });
239
+
240
+ if (identicalTraitName) {
241
+ scaleErrors[traitIndex] = {
242
+ name: 'Trait names should be unique.'
243
+ };
244
+ }
245
+ }
246
+
247
+ if (description && (!trait.description || trait.description === '<div></div>')) {
248
+ scaleErrors[traitIndex] = _objectSpread(_objectSpread({}, scaleErrors[traitIndex]), {}, {
249
+ description: 'Trait description should not be empty'
250
+ });
251
+ } else {
252
+ var identicalTraitDescr = traits.slice(traitIndex + 1).some(function (t) {
253
+ return (0, _utils.markupToText)(t.description) === (0, _utils.markupToText)(trait.description);
254
+ });
255
+
256
+ if (description && identicalTraitDescr) {
257
+ scaleErrors[traitIndex] = _objectSpread(_objectSpread({}, scaleErrors[traitIndex]), {}, {
258
+ description: 'Trait descriptions should be unique.'
259
+ });
260
+ }
261
+ }
262
+ });
263
+
264
+ if (Object.keys(scaleErrors).length > 0) {
265
+ traitsErrors[scaleIndex] = scaleErrors;
266
+ }
267
+ });
268
+
269
+ if (Object.keys(traitsErrors).length > 0) {
270
+ errors.traitsErrors = traitsErrors;
271
+ }
272
+
273
+ if (Object.keys(scorePointsErrors).length > 0) {
274
+ errors.scorePointsErrors = scorePointsErrors;
275
+ }
276
+
277
+ return errors;
278
+ };
279
+
280
+ var validate = function validate() {
281
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
282
+ var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
283
+ var _model$rubrics = model.rubrics,
284
+ rubrics = _model$rubrics === void 0 ? {} : _model$rubrics,
285
+ rubricType = model.rubricType;
286
+ var _rubrics$multiTraitRu = rubrics.multiTraitRubric,
287
+ multiTraitRubric = _rubrics$multiTraitRu === void 0 ? {} : _rubrics$multiTraitRu,
288
+ _rubrics$simpleRubric = rubrics.simpleRubric,
289
+ simpleRubric = _rubrics$simpleRubric === void 0 ? {} : _rubrics$simpleRubric;
290
+ var errors = {};
291
+
292
+ switch (rubricType) {
293
+ case RUBRIC_TYPES.SIMPLE_RUBRIC:
294
+ default:
295
+ errors = validateSimpleRubric(simpleRubric);
296
+ break;
297
+
298
+ case RUBRIC_TYPES.MULTI_TRAIT_RUBRIC:
299
+ errors = validateMultiTraitRubric(multiTraitRubric);
300
+ break;
301
+ }
302
+
303
+ return errors;
304
+ };
305
+
306
+ exports.validate = validate;
307
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.js"],"names":["RUBRIC_TYPES","SIMPLE_RUBRIC","MULTI_TRAIT_RUBRIC","createDefaultModel","model","Promise","resolve","defaults","normalize","question","session","env","normalizedQuestion","rubricType","role","rubrics","multiTraitRubric","visible","visibleToStudent","scales","excludeZero","parsedScales","map","scale","simpleRubric","rubricless","getScore","outcome","score","empty","createCorrectResponseSession","mode","id","validateSimpleRubric","points","errors","pointsDescriptorsErrors","forEach","point","index","identicalPointDescr","slice","some","p","Object","keys","length","validateMultiTraitRubric","description","pointLabels","traitsErrors","scorePointsErrors","scaleIndex","traits","scorePointsLabels","scaleErrors","scorePointsLabelsErrors","scorePointLabel","scoreIndex","identicalScorePointLabel","s","trait","traitIndex","name","identicalTraitName","t","identicalTraitDescr","validate","config"],"mappings":"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","sourcesContent":["import defaults from './defaults';\nimport { markupToText } from './utils';\n\n// todo the import from pie-lib/rubric might break webpack\nconst RUBRIC_TYPES = {\n SIMPLE_RUBRIC: 'simpleRubric',\n MULTI_TRAIT_RUBRIC: 'multiTraitRubric',\n 'rubricless': 'rubricless',\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => resolve({ ...defaults.model, ...model }));\n}\n\nexport const normalize = (question) => ({ ...defaults.model, ...question });\n\n/**\n * @param {*} question\n * @param {*} session\n * @param {*} env\n */\nexport async function model(question, session, env) {\n const normalizedQuestion = normalize(question);\n\n if (normalizedQuestion.rubricType === RUBRIC_TYPES.SIMPLE_RUBRIC || normalizedQuestion.rubricType === 'rubricless') {\n return new Promise((resolve) => {\n resolve(\n env && env.role && env.role === 'instructor'\n ? {\n ...normalizedQuestion,\n rubrics: {\n ...normalizedQuestion.rubrics,\n multiTraitRubric: {\n ...normalizedQuestion.rubrics.multiTraitRubric,\n visible: false,\n },\n },\n }\n : {},\n );\n });\n } else {\n if (\n !env.role ||\n (env.role === 'student' && normalizedQuestion.rubrics && normalizedQuestion.rubrics.multiTraitRubric)\n ) {\n normalizedQuestion.rubrics.multiTraitRubric.visible = normalizedQuestion.visibleToStudent;\n } else {\n normalizedQuestion.rubrics.multiTraitRubric.visible = true;\n }\n\n // todo update pie-ui instead of parsing this here:\n const { scales, excludeZero } = normalizedQuestion.rubrics.multiTraitRubric || {};\n const parsedScales = (scales || []).map((scale) => ({ ...scale, excludeZero }));\n\n return {\n ...normalizedQuestion,\n rubrics: {\n ...normalizedQuestion.rubrics,\n simpleRubric: {\n ...normalizedQuestion.rubrics.simpleRubric,\n visible: false,\n },\n rubricless: {\n ...normalizedQuestion.rubrics.rubricless,\n visible: false,\n },\n multiTraitRubric: {\n ...normalizedQuestion.rubrics.multiTraitRubric,\n scales: parsedScales,\n },\n },\n };\n }\n}\n\nexport const getScore = () => 0;\n\n/**\n * @param {Object} model - the main model\n * @param {*} session\n * @param {Object} env\n */\nexport function outcome() {\n return new Promise((resolve) => resolve({ score: 0, empty: true }));\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n resolve({ id: '1' });\n } else {\n resolve(null);\n }\n });\n};\n\n// IMPORTANT! This function is a duplicate of rubric/controller/validate function!\n// If you make any changes to this function, please make sure you also update rubric/controller/validate function!“.\nconst validateSimpleRubric = (model) => {\n const { points, excludeZero } = model;\n const errors = {};\n const pointsDescriptorsErrors = {};\n\n (points || []).forEach((point, index) => {\n if (index === 0 && excludeZero) {\n // if excludeZero is true, the 0 point is not displayed, so it should not be validated\n return;\n }\n\n if (!point || point === '<div></div>') {\n pointsDescriptorsErrors[index] = 'Points descriptors cannot be empty.';\n } else {\n const identicalPointDescr = points.slice(index + 1).some(p => markupToText(p) === markupToText(point));\n\n if (identicalPointDescr) {\n pointsDescriptorsErrors[index] = 'Points descriptors should be unique.';\n }\n }\n });\n\n if (Object.keys(pointsDescriptorsErrors).length > 0) {\n errors.pointsDescriptorsErrors = pointsDescriptorsErrors;\n }\n\n return errors;\n};\n\n// IMPORTANT! This function is a duplicate of multi-trait-rubric/controller/validate function!\n// If you make any changes to this function, please make sure you also update multi-trait-rubric/controller/validate function!“.\nconst validateMultiTraitRubric = (model) => {\n const { scales, description = false, pointLabels = false } = model;\n const errors = {};\n const traitsErrors = {};\n const scorePointsErrors = {};\n\n (scales || []).forEach((scale, scaleIndex) => {\n const { traits = [] } = scale;\n const { scorePointsLabels = [] } = scale;\n const scaleErrors = {};\n const scorePointsLabelsErrors = {};\n\n if(pointLabels) {\n scorePointsLabels.forEach((scorePointLabel, scoreIndex) => {\n if (!scorePointLabel || scorePointLabel === '<div></div>') {\n scorePointsLabelsErrors[scoreIndex] = 'Points labels should not be empty.';\n } else {\n const identicalScorePointLabel = scorePointsLabels.slice(scoreIndex + 1).some(s => markupToText(s) === markupToText(scorePointLabel));\n\n if (identicalScorePointLabel) {\n scorePointsLabelsErrors[scoreIndex] = 'Points labels should be unique.';\n }\n }\n })\n }\n\n if(Object.keys(scorePointsLabelsErrors).length > 0){\n scorePointsErrors[scaleIndex] = scorePointsLabelsErrors;\n }\n\n traits.forEach((trait, traitIndex) => {\n if(!trait.name || trait.name === '<div></div>') {\n scaleErrors[traitIndex] = {name: 'Trait names should not be empty.'};\n }\n else{\n const identicalTraitName = traits.slice(traitIndex + 1).some(t => markupToText(t.name) === markupToText(trait.name));\n\n if (identicalTraitName) {\n scaleErrors[traitIndex] = {name: 'Trait names should be unique.'};\n }\n }\n if(description && (!trait.description || trait.description === '<div></div>')) {\n scaleErrors[traitIndex] = {... scaleErrors[traitIndex], description: 'Trait description should not be empty'};\n }\n else{\n const identicalTraitDescr = traits.slice(traitIndex + 1).some(t => markupToText(t.description) === markupToText(trait.description));\n\n if (description && identicalTraitDescr) {\n scaleErrors[traitIndex] = {... scaleErrors[traitIndex], description: 'Trait descriptions should be unique.'};\n }\n }\n\n });\n if(Object.keys(scaleErrors).length > 0){\n traitsErrors[scaleIndex] = scaleErrors;\n }\n });\n\n if(Object.keys(traitsErrors).length > 0){\n errors.traitsErrors = traitsErrors;\n }\n\n if(Object.keys(scorePointsErrors).length > 0){\n errors.scorePointsErrors = scorePointsErrors;\n }\n\n return errors;\n};\n\n\nexport const validate = (model = {}, config = {}) => {\n const { rubrics = {}, rubricType } = model;\n const { multiTraitRubric = {}, simpleRubric = {} } = rubrics;\n let errors = {};\n\n switch (rubricType) {\n case RUBRIC_TYPES.SIMPLE_RUBRIC:\n default:\n errors = validateSimpleRubric(simpleRubric);\n break;\n case RUBRIC_TYPES.MULTI_TRAIT_RUBRIC:\n errors = validateMultiTraitRubric(multiTraitRubric);\n break;\n }\n\n return errors;\n};\n"],"file":"index.js"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.markupToText = void 0;
7
+
8
+ var markupToText = function markupToText(s) {
9
+ return (s || '').replace(/(<([^>]+)>)/ig, '');
10
+ };
11
+
12
+ exports.markupToText = markupToText;
13
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils.js"],"names":["markupToText","s","replace"],"mappings":";;;;;;;AAAO,IAAMA,YAAY,GAAG,SAAfA,YAAe,CAACC,CAAD,EAAO;AAC/B,SAAO,CAACA,CAAC,IAAI,EAAN,EAAUC,OAAV,CAAkB,eAAlB,EAAmC,EAAnC,CAAP;AACH,CAFM","sourcesContent":["export const markupToText = (s) => {\n return (s || '').replace(/(<([^>]+)>)/ig, '');\n};\n"],"file":"utils.js"}
@@ -7,7 +7,7 @@
7
7
  "test": "echo \"Error: no test specified\" && exit 1"
8
8
  },
9
9
  "dependencies": {
10
- "@pie-lib/pie-toolbox": "1.8.3-next.17",
10
+ "@pie-lib/pie-toolbox": "1.8.1",
11
11
  "lodash": "^4.17.15"
12
12
  },
13
13
  "author": "",