@pie-element/multi-trait-rubric 6.0.0 → 6.0.1-esm.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.
@@ -0,0 +1,221 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
+ try {
3
+ var info = gen[key](arg);
4
+ var value = info.value;
5
+ } catch (error) {
6
+ reject(error);
7
+ return;
8
+ }
9
+
10
+ if (info.done) {
11
+ resolve(value);
12
+ } else {
13
+ Promise.resolve(value).then(_next, _throw);
14
+ }
15
+ }
16
+
17
+ function _asyncToGenerator(fn) {
18
+ return function () {
19
+ var self = this,
20
+ args = arguments;
21
+ return new Promise(function (resolve, reject) {
22
+ var gen = fn.apply(self, args);
23
+
24
+ function _next(value) {
25
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
26
+ }
27
+
28
+ function _throw(err) {
29
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
30
+ }
31
+
32
+ _next(undefined);
33
+ });
34
+ };
35
+ }
36
+
37
+ function _defineProperty(obj, key, value) {
38
+ if (key in obj) {
39
+ Object.defineProperty(obj, key, {
40
+ value: value,
41
+ enumerable: true,
42
+ configurable: true,
43
+ writable: true
44
+ });
45
+ } else {
46
+ obj[key] = value;
47
+ }
48
+
49
+ return obj;
50
+ }
51
+
52
+ var defaults = {
53
+ addScaleEnabled: true,
54
+ description: false,
55
+ excludeZero: false,
56
+ halfScoring: false,
57
+ maxPointsEnabled: true,
58
+ pointLabels: true,
59
+ scales: [],
60
+ standards: false,
61
+ visibleToStudent: true
62
+ };
63
+
64
+ var markupToText = s => {
65
+ return (s || '').replace(/(<([^>]+)>)/ig, '');
66
+ };
67
+
68
+ 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; }
69
+
70
+ 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) { _defineProperty(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; }
71
+ function createDefaultModel() {
72
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
73
+ return new Promise(resolve => resolve(_objectSpread(_objectSpread({}, defaults), model)));
74
+ }
75
+ var normalize = question => _objectSpread(_objectSpread({}, defaults), question);
76
+ /**
77
+ *
78
+ * @param {*} question
79
+ * @param {*} session
80
+ * @param {*} env
81
+ */
82
+
83
+ function model(_x, _x2, _x3) {
84
+ return _model.apply(this, arguments);
85
+ }
86
+
87
+ function _model() {
88
+ _model = _asyncToGenerator(function* (question, session, env) {
89
+ var normalizedQuestion = normalize(question);
90
+
91
+ if (!env.role || env.role === 'student') {
92
+ normalizedQuestion.visible = normalizedQuestion.visibleToStudent;
93
+ } else {
94
+ normalizedQuestion.visible = true;
95
+ } // todo update pie-ui instead of parsing this here:
96
+
97
+
98
+ var {
99
+ scales,
100
+ excludeZero
101
+ } = normalizedQuestion || {};
102
+ var parsedScales = (scales || []).map(scale => _objectSpread(_objectSpread({}, scale), {}, {
103
+ excludeZero
104
+ }));
105
+ return _objectSpread(_objectSpread({}, normalizedQuestion), {}, {
106
+ scales: parsedScales
107
+ });
108
+ });
109
+ return _model.apply(this, arguments);
110
+ }
111
+
112
+ var getScore = () => 0;
113
+ /**
114
+ * @param {Object} model - the main model
115
+ * @param {*} session
116
+ * @param {Object} env
117
+ */
118
+
119
+ function outcome() {
120
+ return new Promise(resolve => resolve({
121
+ score: 0,
122
+ empty: true
123
+ }));
124
+ }
125
+ var createCorrectResponseSession = (question, env) => {
126
+ return new Promise(resolve => {
127
+ if (env.mode !== 'evaluate' && env.role === 'instructor') {
128
+ resolve({
129
+ id: '1'
130
+ });
131
+ } else {
132
+ resolve(null);
133
+ }
134
+ });
135
+ }; // IMPORTANT! If you make any changes to this function, please make sure you also update complex-rubric/controller/validateMultiTraitRubric function!“.
136
+
137
+ var validate = (model, config) => {
138
+ var {
139
+ scales,
140
+ description = false,
141
+ pointLabels = false
142
+ } = model;
143
+ var errors = {};
144
+ var traitsErrors = {};
145
+ var scorePointsErrors = {};
146
+ (scales || []).forEach((scale, scaleIndex) => {
147
+ var {
148
+ traits = []
149
+ } = scale;
150
+ var {
151
+ scorePointsLabels = []
152
+ } = scale;
153
+ var scaleErrors = {};
154
+ var scorePointsLabelsErrors = {};
155
+
156
+ if (pointLabels) {
157
+ scorePointsLabels.forEach((scorePointLabel, scoreIndex) => {
158
+ if (!scorePointLabel || scorePointLabel === '<div></div>') {
159
+ scorePointsLabelsErrors[scoreIndex] = 'Points labels should not be empty.';
160
+ } else {
161
+ var identicalScorePointLabel = scorePointsLabels.slice(scoreIndex + 1).some(s => markupToText(s) === markupToText(scorePointLabel));
162
+
163
+ if (identicalScorePointLabel) {
164
+ scorePointsLabelsErrors[scoreIndex] = 'Points labels should be unique.';
165
+ }
166
+ }
167
+ });
168
+ }
169
+
170
+ if (Object.keys(scorePointsLabelsErrors).length > 0) {
171
+ scorePointsErrors[scaleIndex] = scorePointsLabelsErrors;
172
+ }
173
+
174
+ traits.forEach((trait, traitIndex) => {
175
+ if (!trait.name || trait.name === '<div></div>') {
176
+ scaleErrors[traitIndex] = {
177
+ name: 'Trait names should not be empty.'
178
+ };
179
+ } else {
180
+ var identicalTraitName = traits.slice(traitIndex + 1).some(t => markupToText(t.name) === markupToText(trait.name));
181
+
182
+ if (identicalTraitName) {
183
+ scaleErrors[traitIndex] = {
184
+ name: 'Trait names should be unique.'
185
+ };
186
+ }
187
+ }
188
+
189
+ if (description && (!trait.description || trait.description === '<div></div>')) {
190
+ scaleErrors[traitIndex] = _objectSpread(_objectSpread({}, scaleErrors[traitIndex]), {}, {
191
+ description: 'Trait description should not be empty'
192
+ });
193
+ } else {
194
+ var identicalTraitDescr = traits.slice(traitIndex + 1).some(t => markupToText(t.description) === markupToText(trait.description));
195
+
196
+ if (description && identicalTraitDescr) {
197
+ scaleErrors[traitIndex] = _objectSpread(_objectSpread({}, scaleErrors[traitIndex]), {}, {
198
+ description: 'Trait descriptions should be unique.'
199
+ });
200
+ }
201
+ }
202
+ });
203
+
204
+ if (Object.keys(scaleErrors).length > 0) {
205
+ traitsErrors[scaleIndex] = scaleErrors;
206
+ }
207
+ });
208
+
209
+ if (Object.keys(traitsErrors).length > 0) {
210
+ errors.traitsErrors = traitsErrors;
211
+ }
212
+
213
+ if (Object.keys(scorePointsErrors).length > 0) {
214
+ errors.scorePointsErrors = scorePointsErrors;
215
+ }
216
+
217
+ return errors;
218
+ };
219
+
220
+ export { createCorrectResponseSession, createDefaultModel, getScore, model, normalize, outcome, validate };
221
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sources":["../../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../controller/src/defaults.js","../controller/src/utils.js","../controller/src/index.js"],"sourcesContent":["function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","export default {\n addScaleEnabled: true,\n description: false,\n excludeZero: false,\n halfScoring: false,\n maxPointsEnabled: true,\n pointLabels: true,\n scales: [],\n standards: false,\n visibleToStudent: true,\n};\n","export const markupToText = (s) => {\n return (s || '').replace(/(<([^>]+)>)/ig, '');\n};\n","import defaults from './defaults';\nimport { markupToText } from './utils';\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => resolve({ ...defaults, ...model }));\n}\n\nexport const normalize = (question) => ({ ...defaults, ...question });\n\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 (!env.role || env.role === 'student') {\n normalizedQuestion.visible = normalizedQuestion.visibleToStudent;\n } else {\n normalizedQuestion.visible = true;\n }\n\n // todo update pie-ui instead of parsing this here:\n const { scales, excludeZero } = normalizedQuestion || {};\n const parsedScales = (scales || []).map((scale) => ({ ...scale, excludeZero }));\n\n return {\n ...normalizedQuestion,\n scales: parsedScales,\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! If you make any changes to this function, please make sure you also update complex-rubric/controller/validateMultiTraitRubric function!“.\nexport const validate = (model, config) => {\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\n .slice(scoreIndex + 1)\n .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 } else {\n const identicalTraitName = traits\n .slice(traitIndex + 1)\n .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 } else {\n const identicalTraitDescr = traits\n .slice(traitIndex + 1)\n .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 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"],"names":["addScaleEnabled","description","excludeZero","halfScoring","maxPointsEnabled","pointLabels","scales","standards","visibleToStudent","markupToText","s","replace","createDefaultModel","model","Promise","resolve","defaults","normalize","question","session","env","normalizedQuestion","role","visible","parsedScales","map","scale","getScore","outcome","score","empty","createCorrectResponseSession","mode","id","validate","config","errors","traitsErrors","scorePointsErrors","forEach","scaleIndex","traits","scorePointsLabels","scaleErrors","scorePointsLabelsErrors","scorePointLabel","scoreIndex","identicalScorePointLabel","slice","some","Object","keys","length","trait","traitIndex","name","identicalTraitName","t","identicalTraitDescr"],"mappings":"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"}