@pie-element/multi-trait-rubric 6.0.1 → 11.0.3-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.
package/esm/controller.js CHANGED
@@ -1,52 +1,19 @@
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);
1
+ function _extends() {
2
+ _extends = Object.assign || function (target) {
3
+ for (var i = 1; i < arguments.length; i++) {
4
+ var source = arguments[i];
5
+
6
+ for (var key in source) {
7
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
8
+ target[key] = source[key];
9
+ }
30
10
  }
11
+ }
31
12
 
32
- _next(undefined);
33
- });
13
+ return target;
34
14
  };
35
- }
36
15
 
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;
16
+ return _extends.apply(this, arguments);
50
17
  }
51
18
 
52
19
  var defaults = {
@@ -61,18 +28,14 @@ var defaults = {
61
28
  visibleToStudent: true
62
29
  };
63
30
 
64
- var markupToText = s => {
31
+ const markupToText = s => {
65
32
  return (s || '').replace(/(<([^>]+)>)/ig, '');
66
33
  };
67
34
 
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)));
35
+ function createDefaultModel(model = {}) {
36
+ return new Promise(resolve => resolve(_extends({}, defaults, model)));
74
37
  }
75
- var normalize = question => _objectSpread(_objectSpread({}, defaults), question);
38
+ const normalize = question => _extends({}, defaults, question);
76
39
  /**
77
40
  *
78
41
  * @param {*} question
@@ -80,36 +43,28 @@ var normalize = question => _objectSpread(_objectSpread({}, defaults), question)
80
43
  * @param {*} env
81
44
  */
82
45
 
83
- function model(_x, _x2, _x3) {
84
- return _model.apply(this, arguments);
85
- }
46
+ async function model(question, session, env) {
47
+ const normalizedQuestion = normalize(question);
86
48
 
87
- function _model() {
88
- _model = _asyncToGenerator(function* (question, session, env) {
89
- var normalizedQuestion = normalize(question);
49
+ if (!env.role || env.role === 'student') {
50
+ normalizedQuestion.visible = normalizedQuestion.visibleToStudent;
51
+ } else {
52
+ normalizedQuestion.visible = true;
53
+ } // todo update pie-ui instead of parsing this here:
90
54
 
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
- });
55
+
56
+ const {
57
+ scales,
58
+ excludeZero
59
+ } = normalizedQuestion || {};
60
+ const parsedScales = (scales || []).map(scale => _extends({}, scale, {
61
+ excludeZero
62
+ }));
63
+ return _extends({}, normalizedQuestion, {
64
+ scales: parsedScales
108
65
  });
109
- return _model.apply(this, arguments);
110
66
  }
111
-
112
- var getScore = () => 0;
67
+ const getScore = () => 0;
113
68
  /**
114
69
  * @param {Object} model - the main model
115
70
  * @param {*} session
@@ -122,7 +77,7 @@ function outcome() {
122
77
  empty: true
123
78
  }));
124
79
  }
125
- var createCorrectResponseSession = (question, env) => {
80
+ const createCorrectResponseSession = (question, env) => {
126
81
  return new Promise(resolve => {
127
82
  if (env.mode !== 'evaluate' && env.role === 'instructor') {
128
83
  resolve({
@@ -134,31 +89,31 @@ var createCorrectResponseSession = (question, env) => {
134
89
  });
135
90
  }; // IMPORTANT! If you make any changes to this function, please make sure you also update complex-rubric/controller/validateMultiTraitRubric function!“.
136
91
 
137
- var validate = (model, config) => {
138
- var {
92
+ const validate = (model, config) => {
93
+ const {
139
94
  scales,
140
95
  description = false,
141
96
  pointLabels = false
142
97
  } = model;
143
- var errors = {};
144
- var traitsErrors = {};
145
- var scorePointsErrors = {};
98
+ const errors = {};
99
+ const traitsErrors = {};
100
+ const scorePointsErrors = {};
146
101
  (scales || []).forEach((scale, scaleIndex) => {
147
- var {
102
+ const {
148
103
  traits = []
149
104
  } = scale;
150
- var {
105
+ const {
151
106
  scorePointsLabels = []
152
107
  } = scale;
153
- var scaleErrors = {};
154
- var scorePointsLabelsErrors = {};
108
+ const scaleErrors = {};
109
+ const scorePointsLabelsErrors = {};
155
110
 
156
111
  if (pointLabels) {
157
112
  scorePointsLabels.forEach((scorePointLabel, scoreIndex) => {
158
113
  if (!scorePointLabel || scorePointLabel === '<div></div>') {
159
114
  scorePointsLabelsErrors[scoreIndex] = 'Points labels should not be empty.';
160
115
  } else {
161
- var identicalScorePointLabel = scorePointsLabels.slice(scoreIndex + 1).some(s => markupToText(s) === markupToText(scorePointLabel));
116
+ const identicalScorePointLabel = scorePointsLabels.slice(scoreIndex + 1).some(s => markupToText(s) === markupToText(scorePointLabel));
162
117
 
163
118
  if (identicalScorePointLabel) {
164
119
  scorePointsLabelsErrors[scoreIndex] = 'Points labels should be unique.';
@@ -177,7 +132,7 @@ var validate = (model, config) => {
177
132
  name: 'Trait names should not be empty.'
178
133
  };
179
134
  } else {
180
- var identicalTraitName = traits.slice(traitIndex + 1).some(t => markupToText(t.name) === markupToText(trait.name));
135
+ const identicalTraitName = traits.slice(traitIndex + 1).some(t => markupToText(t.name) === markupToText(trait.name));
181
136
 
182
137
  if (identicalTraitName) {
183
138
  scaleErrors[traitIndex] = {
@@ -187,14 +142,14 @@ var validate = (model, config) => {
187
142
  }
188
143
 
189
144
  if (description && (!trait.description || trait.description === '<div></div>')) {
190
- scaleErrors[traitIndex] = _objectSpread(_objectSpread({}, scaleErrors[traitIndex]), {}, {
145
+ scaleErrors[traitIndex] = _extends({}, scaleErrors[traitIndex], {
191
146
  description: 'Trait description should not be empty'
192
147
  });
193
148
  } else {
194
- var identicalTraitDescr = traits.slice(traitIndex + 1).some(t => markupToText(t.description) === markupToText(trait.description));
149
+ const identicalTraitDescr = traits.slice(traitIndex + 1).some(t => markupToText(t.description) === markupToText(trait.description));
195
150
 
196
151
  if (description && identicalTraitDescr) {
197
- scaleErrors[traitIndex] = _objectSpread(_objectSpread({}, scaleErrors[traitIndex]), {}, {
152
+ scaleErrors[traitIndex] = _extends({}, scaleErrors[traitIndex], {
198
153
  description: 'Trait descriptions should be unique.'
199
154
  });
200
155
  }
@@ -1 +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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"}
1
+ {"version":3,"file":"controller.js","sources":["../controller/src/defaults.js","../controller/src/utils.js","../controller/src/index.js"],"sourcesContent":["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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"}