@pie-element/complex-rubric 5.3.3 → 5.3.4-next.3

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,281 @@
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
+ }
10
+ }
11
+ }
12
+
13
+ return target;
14
+ };
15
+
16
+ return _extends.apply(this, arguments);
17
+ }
18
+
19
+ // todo the import from pie-lib/rubric WILL break pslb
20
+ // so don't use it unless you also test "yarn build"
21
+ const RUBRIC_TYPES$1 = {
22
+ SIMPLE_RUBRIC: 'simpleRubric',
23
+ MULTI_TRAIT_RUBRIC: 'multiTraitRubric',
24
+ 'rubricless': 'rubricless'
25
+ };
26
+ const multiTraitDefaultModel = {
27
+ description: false,
28
+ excludeZero: false,
29
+ halfScoring: false,
30
+ pointLabels: true,
31
+ scales: [],
32
+ standards: false,
33
+ visibleToStudent: true
34
+ };
35
+ const rubricDefaultModel = {
36
+ points: ['', '', '', ''],
37
+ sampleAnswers: [null, null, null, null],
38
+ maxPoints: 3,
39
+ excludeZero: false
40
+ };
41
+ const rubriclessDefaultModel = {
42
+ maxPoints: 100,
43
+ excludeZero: false,
44
+ rubriclessInstructionEnabled: true
45
+ };
46
+ var defaults = {
47
+ rubricType: 'simpleRubric',
48
+ rubrics: {
49
+ [RUBRIC_TYPES$1.SIMPLE_RUBRIC]: rubricDefaultModel,
50
+ [RUBRIC_TYPES$1.MULTI_TRAIT_RUBRIC]: multiTraitDefaultModel,
51
+ [RUBRIC_TYPES$1.RUBRICLESS]: rubriclessDefaultModel
52
+ }
53
+ };
54
+
55
+ const markupToText = s => {
56
+ return (s || '').replace(/(<([^>]+)>)/ig, '');
57
+ };
58
+
59
+ // so don't use it unless you also test "yarn build"
60
+
61
+ const RUBRIC_TYPES = {
62
+ SIMPLE_RUBRIC: 'simpleRubric',
63
+ MULTI_TRAIT_RUBRIC: 'multiTraitRubric',
64
+ 'rubricless': 'rubricless'
65
+ };
66
+ function createDefaultModel(model = {}) {
67
+ return new Promise(resolve => resolve(_extends({}, defaults, model)));
68
+ }
69
+ const normalize = question => _extends({}, defaults, question);
70
+ /**
71
+ * @param {*} question
72
+ * @param {*} session
73
+ * @param {*} env
74
+ */
75
+
76
+ async function model(question, session, env) {
77
+ const normalizedQuestion = normalize(question);
78
+
79
+ if (normalizedQuestion.rubricType === RUBRIC_TYPES.SIMPLE_RUBRIC || normalizedQuestion.rubricType === RUBRIC_TYPES.RUBRICLESS) {
80
+ return new Promise(resolve => {
81
+ resolve(env && env.role && env.role === 'instructor' ? _extends({}, normalizedQuestion, {
82
+ rubrics: _extends({}, normalizedQuestion.rubrics, {
83
+ multiTraitRubric: _extends({}, normalizedQuestion.rubrics.multiTraitRubric, {
84
+ visible: false
85
+ })
86
+ })
87
+ }) : {});
88
+ });
89
+ } else {
90
+ if (!env.role || env.role === 'student' && normalizedQuestion.rubrics && normalizedQuestion.rubrics.multiTraitRubric) {
91
+ normalizedQuestion.rubrics.multiTraitRubric.visible = normalizedQuestion.visibleToStudent;
92
+ } else {
93
+ normalizedQuestion.rubrics.multiTraitRubric.visible = true;
94
+ } // todo update pie-ui instead of parsing this here:
95
+
96
+
97
+ const {
98
+ scales,
99
+ excludeZero
100
+ } = normalizedQuestion.rubrics.multiTraitRubric || {};
101
+ const parsedScales = (scales || []).map(scale => _extends({}, scale, {
102
+ excludeZero
103
+ }));
104
+ return _extends({}, normalizedQuestion, {
105
+ rubrics: _extends({}, normalizedQuestion.rubrics, {
106
+ simpleRubric: _extends({}, normalizedQuestion.rubrics.simpleRubric, {
107
+ visible: false
108
+ }),
109
+ rubricless: _extends({}, normalizedQuestion.rubrics.rubricless, {
110
+ visible: false
111
+ }),
112
+ multiTraitRubric: _extends({}, normalizedQuestion.rubrics.multiTraitRubric, {
113
+ scales: parsedScales
114
+ })
115
+ })
116
+ });
117
+ }
118
+ }
119
+ const getScore = () => 0;
120
+ /**
121
+ * @param {Object} model - the main model
122
+ * @param {*} session
123
+ * @param {Object} env
124
+ */
125
+
126
+ function outcome() {
127
+ return new Promise(resolve => resolve({
128
+ score: 0,
129
+ empty: true
130
+ }));
131
+ }
132
+ const createCorrectResponseSession = (question, env) => {
133
+ return new Promise(resolve => {
134
+ if (env.mode !== 'evaluate' && env.role === 'instructor') {
135
+ resolve({
136
+ id: '1'
137
+ });
138
+ } else {
139
+ resolve(null);
140
+ }
141
+ });
142
+ }; // IMPORTANT! This function is a duplicate of rubric/controller/validate function!
143
+ // If you make any changes to this function, please make sure you also update rubric/controller/validate function!“.
144
+
145
+ const validateSimpleRubric = model => {
146
+ const {
147
+ points
148
+ } = model;
149
+ const errors = {};
150
+ const pointsDescriptorsErrors = {};
151
+ (points || []).forEach((point, index) => {
152
+ if (!point || point === '<div></div>') {
153
+ pointsDescriptorsErrors[index] = 'Points descriptors cannot be empty.';
154
+ } else {
155
+ const identicalPointDescr = points.slice(index + 1).some(p => markupToText(p) === markupToText(point));
156
+
157
+ if (identicalPointDescr) {
158
+ pointsDescriptorsErrors[index] = 'Points descriptors should be unique.';
159
+ }
160
+ }
161
+ });
162
+
163
+ if (Object.keys(pointsDescriptorsErrors).length > 0) {
164
+ errors.pointsDescriptorsErrors = pointsDescriptorsErrors;
165
+ }
166
+
167
+ return errors;
168
+ }; // IMPORTANT! This function is a duplicate of multi-trait-rubric/controller/validate function!
169
+ // If you make any changes to this function, please make sure you also update multi-trait-rubric/controller/validate function!“.
170
+
171
+
172
+ const validateMultiTraitRubric = model => {
173
+ const {
174
+ scales,
175
+ description = false,
176
+ pointLabels = false
177
+ } = model;
178
+ const errors = {};
179
+ const traitsErrors = {};
180
+ const scorePointsErrors = {};
181
+ (scales || []).forEach((scale, scaleIndex) => {
182
+ const {
183
+ traits = []
184
+ } = scale;
185
+ const {
186
+ scorePointsLabels = []
187
+ } = scale;
188
+ const scaleErrors = {};
189
+ const scorePointsLabelsErrors = {};
190
+
191
+ if (pointLabels) {
192
+ scorePointsLabels.forEach((scorePointLabel, scoreIndex) => {
193
+ if (!scorePointLabel || scorePointLabel === '<div></div>') {
194
+ scorePointsLabelsErrors[scoreIndex] = 'Points labels should not be empty.';
195
+ } else {
196
+ const identicalScorePointLabel = scorePointsLabels.slice(scoreIndex + 1).some(s => markupToText(s) === markupToText(scorePointLabel));
197
+
198
+ if (identicalScorePointLabel) {
199
+ scorePointsLabelsErrors[scoreIndex] = 'Points labels should be unique.';
200
+ }
201
+ }
202
+ });
203
+ }
204
+
205
+ if (Object.keys(scorePointsLabelsErrors).length > 0) {
206
+ scorePointsErrors[scaleIndex] = scorePointsLabelsErrors;
207
+ }
208
+
209
+ traits.forEach((trait, traitIndex) => {
210
+ if (!trait.name || trait.name === '<div></div>') {
211
+ scaleErrors[traitIndex] = {
212
+ name: 'Trait names should not be empty.'
213
+ };
214
+ } else {
215
+ const identicalTraitName = traits.slice(traitIndex + 1).some(t => markupToText(t.name) === markupToText(trait.name));
216
+
217
+ if (identicalTraitName) {
218
+ scaleErrors[traitIndex] = {
219
+ name: 'Trait names should be unique.'
220
+ };
221
+ }
222
+ }
223
+
224
+ if (description && (!trait.description || trait.description === '<div></div>')) {
225
+ scaleErrors[traitIndex] = _extends({}, scaleErrors[traitIndex], {
226
+ description: 'Trait description should not be empty'
227
+ });
228
+ } else {
229
+ const identicalTraitDescr = traits.slice(traitIndex + 1).some(t => markupToText(t.description) === markupToText(trait.description));
230
+
231
+ if (description && identicalTraitDescr) {
232
+ scaleErrors[traitIndex] = _extends({}, scaleErrors[traitIndex], {
233
+ description: 'Trait descriptions should be unique.'
234
+ });
235
+ }
236
+ }
237
+ });
238
+
239
+ if (Object.keys(scaleErrors).length > 0) {
240
+ traitsErrors[scaleIndex] = scaleErrors;
241
+ }
242
+ });
243
+
244
+ if (Object.keys(traitsErrors).length > 0) {
245
+ errors.traitsErrors = traitsErrors;
246
+ }
247
+
248
+ if (Object.keys(scorePointsErrors).length > 0) {
249
+ errors.scorePointsErrors = scorePointsErrors;
250
+ }
251
+
252
+ return errors;
253
+ };
254
+
255
+ const validate = (model = {}, config = {}) => {
256
+ const {
257
+ rubrics = {},
258
+ rubricType
259
+ } = model;
260
+ const {
261
+ multiTraitRubric = {},
262
+ simpleRubric = {}
263
+ } = rubrics;
264
+ let errors = {};
265
+
266
+ switch (rubricType) {
267
+ case RUBRIC_TYPES.SIMPLE_RUBRIC:
268
+ default:
269
+ errors = validateSimpleRubric(simpleRubric);
270
+ break;
271
+
272
+ case RUBRIC_TYPES.MULTI_TRAIT_RUBRIC:
273
+ errors = validateMultiTraitRubric(multiTraitRubric);
274
+ break;
275
+ }
276
+
277
+ return errors;
278
+ };
279
+
280
+ export { createCorrectResponseSession, createDefaultModel, getScore, model, normalize, outcome, validate };
281
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sources":["../controller/src/defaults.js","../controller/src/utils.js","../controller/src/index.js"],"sourcesContent":["// todo the import from pie-lib/rubric WILL break pslb\n// so don't use it unless you also test \"yarn build\"\nconst RUBRIC_TYPES = {\n SIMPLE_RUBRIC: 'simpleRubric',\n MULTI_TRAIT_RUBRIC: 'multiTraitRubric',\n 'rubricless': 'rubricless',\n};\n\nconst multiTraitDefaultModel = {\n description: false,\n excludeZero: false,\n halfScoring: false,\n pointLabels: true,\n scales: [],\n standards: false,\n visibleToStudent: true,\n};\n\nconst rubricDefaultModel = {\n points: ['', '', '', ''],\n sampleAnswers: [null, null, null, null],\n maxPoints: 3,\n excludeZero: false,\n};\n\nconst rubriclessDefaultModel = {\n maxPoints: 100,\n excludeZero: false,\n rubriclessInstructionEnabled: true,\n};\n\nexport default {\n rubricType: 'simpleRubric',\n rubrics: {\n [RUBRIC_TYPES.SIMPLE_RUBRIC]: rubricDefaultModel,\n [RUBRIC_TYPES.MULTI_TRAIT_RUBRIC]: multiTraitDefaultModel,\n [RUBRIC_TYPES.RUBRICLESS]: rubriclessDefaultModel,\n },\n};\n","export const markupToText = (s) => {\n return (s || '').replace(/(<([^>]+)>)/ig, '');\n};\n","import defaults from './defaults';\nimport { markupToText } from './utils';\n\n\n// todo the import from pie-lib/rubric WILL break pslb\n// so don't use it unless you also test \"yarn build\"\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 }));\n}\n\nexport const normalize = (question) => ({ ...defaults, ...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 (\n normalizedQuestion.rubricType === RUBRIC_TYPES.SIMPLE_RUBRIC ||\n normalizedQuestion.rubricType === RUBRIC_TYPES.RUBRICLESS\n ) {\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 } = model;\n const errors = {};\n const pointsDescriptorsErrors = {};\n\n (points || []).forEach((point, index) => {\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\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\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"],"names":["RUBRIC_TYPES","SIMPLE_RUBRIC","MULTI_TRAIT_RUBRIC","multiTraitDefaultModel","description","excludeZero","halfScoring","pointLabels","scales","standards","visibleToStudent","rubricDefaultModel","points","sampleAnswers","maxPoints","rubriclessDefaultModel","rubriclessInstructionEnabled","rubricType","rubrics","RUBRICLESS","markupToText","s","replace","createDefaultModel","model","Promise","resolve","defaults","normalize","question","session","env","normalizedQuestion","role","multiTraitRubric","visible","parsedScales","map","scale","simpleRubric","rubricless","getScore","outcome","score","empty","createCorrectResponseSession","mode","id","validateSimpleRubric","errors","pointsDescriptorsErrors","forEach","point","index","identicalPointDescr","slice","some","p","Object","keys","length","validateMultiTraitRubric","traitsErrors","scorePointsErrors","scaleIndex","traits","scorePointsLabels","scaleErrors","scorePointsLabelsErrors","scorePointLabel","scoreIndex","identicalScorePointLabel","trait","traitIndex","name","identicalTraitName","t","identicalTraitDescr","validate","config"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AACA;AACA,MAAMA,cAAY,GAAG;AACnBC,EAAAA,aAAa,EAAE,cADI;AAEnBC,EAAAA,kBAAkB,EAAE,kBAFD;AAGnB,EAAc,YAAA,EAAA,YAAA;AAHK,CAArB,CAAA;AAMA,MAAMC,sBAAsB,GAAG;AAC7BC,EAAAA,WAAW,EAAE,KADgB;AAE7BC,EAAAA,WAAW,EAAE,KAFgB;AAG7BC,EAAAA,WAAW,EAAE,KAHgB;AAI7BC,EAAAA,WAAW,EAAE,IAJgB;AAK7BC,EAAAA,MAAM,EAAE,EALqB;AAM7BC,EAAAA,SAAS,EAAE,KANkB;AAO7BC,EAAAA,gBAAgB,EAAE,IAAA;AAPW,CAA/B,CAAA;AAUA,MAAMC,kBAAkB,GAAG;AACzBC,EAAAA,MAAM,EAAE,CAAC,EAAD,EAAK,EAAL,EAAS,EAAT,EAAa,EAAb,CADiB;AAEzBC,EAAAA,aAAa,EAAE,CAAC,IAAD,EAAO,IAAP,EAAa,IAAb,EAAmB,IAAnB,CAFU;AAGzBC,EAAAA,SAAS,EAAE,CAHc;AAIzBT,EAAAA,WAAW,EAAE,KAAA;AAJY,CAA3B,CAAA;AAOA,MAAMU,sBAAsB,GAAG;AAC7BD,EAAAA,SAAS,EAAE,GADkB;AAE7BT,EAAAA,WAAW,EAAE,KAFgB;AAG7BW,EAAAA,4BAA4B,EAAE,IAAA;AAHD,CAA/B,CAAA;AAMA,eAAe;AACbC,EAAAA,UAAU,EAAE,cADC;AAEbC,EAAAA,OAAO,EAAE;AACP,IAAA,CAAClB,cAAY,CAACC,aAAd,GAA8BU,kBADvB;AAEP,IAAA,CAACX,cAAY,CAACE,kBAAd,GAAmCC,sBAF5B;AAGP,IAACH,CAAAA,cAAY,CAACmB,UAAd,GAA2BJ,sBAAAA;AAHpB,GAAA;AAFI,CAAf;;AC/BO,MAAMK,YAAY,GAAIC,CAAD,IAAO;AAC/B,EAAO,OAAA,CAACA,CAAC,IAAI,EAAN,EAAUC,OAAV,CAAkB,eAAlB,EAAmC,EAAnC,CAAP,CAAA;AACH,CAFM;;ACKP;;AACA,MAAMtB,YAAY,GAAG;AACnBC,EAAAA,aAAa,EAAE,cADI;AAEnBC,EAAAA,kBAAkB,EAAE,kBAFD;AAGnB,EAAc,YAAA,EAAA,YAAA;AAHK,CAArB,CAAA;AAMO,SAASqB,kBAAT,CAA4BC,KAAK,GAAG,EAApC,EAAwC;AAC7C,EAAO,OAAA,IAAIC,OAAJ,CAAaC,OAAD,IAAaA,OAAO,CAAA,QAAA,CAAA,EAAA,EAAMC,QAAN,EAAmBH,KAAnB,CAAA,CAAhC,CAAP,CAAA;AACD,CAAA;AAEM,MAAMI,SAAS,GAAIC,QAAD,iBAAoBF,QAApB,EAAiCE,QAAjC,EAAlB;AAEP;AACA;AACA;AACA;AACA;;AACO,eAAeL,KAAf,CAAqBK,QAArB,EAA+BC,OAA/B,EAAwCC,GAAxC,EAA6C;AAClD,EAAA,MAAMC,kBAAkB,GAAGJ,SAAS,CAACC,QAAD,CAApC,CAAA;;AAEA,EAAA,IACEG,kBAAkB,CAACf,UAAnB,KAAkCjB,YAAY,CAACC,aAA/C,IACA+B,kBAAkB,CAACf,UAAnB,KAAkCjB,YAAY,CAACmB,UAFjD,EAGE;AACA,IAAA,OAAO,IAAIM,OAAJ,CAAaC,OAAD,IAAa;AAC9BA,MAAAA,OAAO,CACLK,GAAG,IAAIA,GAAG,CAACE,IAAX,IAAmBF,GAAG,CAACE,IAAJ,KAAa,YAAhC,gBAESD,kBAFT,EAAA;AAGMd,QAAAA,OAAO,EAAA,QAAA,CAAA,EAAA,EACFc,kBAAkB,CAACd,OADjB,EAAA;AAELgB,UAAAA,gBAAgB,EACXF,QAAAA,CAAAA,EAAAA,EAAAA,kBAAkB,CAACd,OAAnB,CAA2BgB,gBADhB,EAAA;AAEdC,YAAAA,OAAO,EAAE,KAAA;AAFK,WAAA,CAAA;AAFX,SAAA,CAAA;AAHb,OAAA,CAAA,GAWI,EAZC,CAAP,CAAA;AAcD,KAfM,CAAP,CAAA;AAgBD,GApBD,MAoBO;AACL,IACE,IAAA,CAACJ,GAAG,CAACE,IAAL,IACCF,GAAG,CAACE,IAAJ,KAAa,SAAb,IAA0BD,kBAAkB,CAACd,OAA7C,IAAwDc,kBAAkB,CAACd,OAAnB,CAA2BgB,gBAFtF,EAGE;AACAF,MAAAA,kBAAkB,CAACd,OAAnB,CAA2BgB,gBAA3B,CAA4CC,OAA5C,GAAsDH,kBAAkB,CAACtB,gBAAzE,CAAA;AACD,KALD,MAKO;AACLsB,MAAAA,kBAAkB,CAACd,OAAnB,CAA2BgB,gBAA3B,CAA4CC,OAA5C,GAAsD,IAAtD,CAAA;AACD,KARI;;;AAWL,IAAM,MAAA;AAAE3B,MAAAA,MAAF;AAAUH,MAAAA,WAAAA;AAAV,KAAA,GAA0B2B,kBAAkB,CAACd,OAAnB,CAA2BgB,gBAA3B,IAA+C,EAA/E,CAAA;AACA,IAAME,MAAAA,YAAY,GAAG,CAAC5B,MAAM,IAAI,EAAX,EAAe6B,GAAf,CAAoBC,KAAD,IAAA,QAAA,CAAA,EAAA,EAAiBA,KAAjB,EAAA;AAAwBjC,MAAAA,WAAAA;AAAxB,KAAA,CAAnB,CAArB,CAAA;AAEA,IAAA,OAAA,QAAA,CAAA,EAAA,EACK2B,kBADL,EAAA;AAEEd,MAAAA,OAAO,EAAA,QAAA,CAAA,EAAA,EACFc,kBAAkB,CAACd,OADjB,EAAA;AAELqB,QAAAA,YAAY,EACPP,QAAAA,CAAAA,EAAAA,EAAAA,kBAAkB,CAACd,OAAnB,CAA2BqB,YADpB,EAAA;AAEVJ,UAAAA,OAAO,EAAE,KAAA;AAFC,SAFP,CAAA;AAMLK,QAAAA,UAAU,EACLR,QAAAA,CAAAA,EAAAA,EAAAA,kBAAkB,CAACd,OAAnB,CAA2BsB,UADtB,EAAA;AAERL,UAAAA,OAAO,EAAE,KAAA;AAFD,SANL,CAAA;AAULD,QAAAA,gBAAgB,EACXF,QAAAA,CAAAA,EAAAA,EAAAA,kBAAkB,CAACd,OAAnB,CAA2BgB,gBADhB,EAAA;AAEd1B,UAAAA,MAAM,EAAE4B,YAAAA;AAFM,SAAA,CAAA;AAVX,OAAA,CAAA;AAFT,KAAA,CAAA,CAAA;AAkBD,GAAA;AACF,CAAA;AAEYK,MAAAA,QAAQ,GAAG,MAAM,EAAvB;AAEP;AACA;AACA;AACA;AACA;;AACO,SAASC,OAAT,GAAmB;AACxB,EAAA,OAAO,IAAIjB,OAAJ,CAAaC,OAAD,IAAaA,OAAO,CAAC;AAAEiB,IAAAA,KAAK,EAAE,CAAT;AAAYC,IAAAA,KAAK,EAAE,IAAA;AAAnB,GAAD,CAAhC,CAAP,CAAA;AACD,CAAA;MAEYC,4BAA4B,GAAG,CAAChB,QAAD,EAAWE,GAAX,KAAmB;AAC7D,EAAA,OAAO,IAAIN,OAAJ,CAAaC,OAAD,IAAa;AAC9B,IAAIK,IAAAA,GAAG,CAACe,IAAJ,KAAa,UAAb,IAA2Bf,GAAG,CAACE,IAAJ,KAAa,YAA5C,EAA0D;AACxDP,MAAAA,OAAO,CAAC;AAAEqB,QAAAA,EAAE,EAAE,GAAA;AAAN,OAAD,CAAP,CAAA;AACD,KAFD,MAEO;AACLrB,MAAAA,OAAO,CAAC,IAAD,CAAP,CAAA;AACD,KAAA;AACF,GANM,CAAP,CAAA;AAOD;AAGD;;AACA,MAAMsB,oBAAoB,GAAIxB,KAAD,IAAW;AACtC,EAAM,MAAA;AAAEZ,IAAAA,MAAAA;AAAF,GAAA,GAAaY,KAAnB,CAAA;AACA,EAAMyB,MAAAA,MAAM,GAAG,EAAf,CAAA;AACA,EAAMC,MAAAA,uBAAuB,GAAG,EAAhC,CAAA;AAEA,EAACtC,CAAAA,MAAM,IAAI,EAAX,EAAeuC,OAAf,CAAuB,CAACC,KAAD,EAAQC,KAAR,KAAkB;AAEvC,IAAA,IAAI,CAACD,KAAD,IAAUA,KAAK,KAAK,aAAxB,EAAuC;AACrCF,MAAAA,uBAAuB,CAACG,KAAD,CAAvB,GAAiC,qCAAjC,CAAA;AACD,KAFD,MAEO;AACL,MAAMC,MAAAA,mBAAmB,GAAG1C,MAAM,CAAC2C,KAAP,CAAaF,KAAK,GAAG,CAArB,CAAwBG,CAAAA,IAAxB,CAA8BC,CAAD,IAAOrC,YAAY,CAACqC,CAAD,CAAZ,KAAoBrC,YAAY,CAACgC,KAAD,CAApE,CAA5B,CAAA;;AAEA,MAAA,IAAIE,mBAAJ,EAAyB;AACvBJ,QAAAA,uBAAuB,CAACG,KAAD,CAAvB,GAAiC,sCAAjC,CAAA;AACD,OAAA;AACF,KAAA;AACF,GAXD,CAAA,CAAA;;AAaA,EAAIK,IAAAA,MAAM,CAACC,IAAP,CAAYT,uBAAZ,CAAqCU,CAAAA,MAArC,GAA8C,CAAlD,EAAqD;AACnDX,IAAAA,MAAM,CAACC,uBAAP,GAAiCA,uBAAjC,CAAA;AACD,GAAA;;AAED,EAAA,OAAOD,MAAP,CAAA;AACD,CAvBD;AA0BA;;;AACA,MAAMY,wBAAwB,GAAIrC,KAAD,IAAW;AAC1C,EAAM,MAAA;AAAEhB,IAAAA,MAAF;AAAUJ,IAAAA,WAAW,GAAG,KAAxB;AAA+BG,IAAAA,WAAW,GAAG,KAAA;AAA7C,GAAA,GAAuDiB,KAA7D,CAAA;AACA,EAAMyB,MAAAA,MAAM,GAAG,EAAf,CAAA;AACA,EAAMa,MAAAA,YAAY,GAAG,EAArB,CAAA;AACA,EAAMC,MAAAA,iBAAiB,GAAG,EAA1B,CAAA;AAEA,EAACvD,CAAAA,MAAM,IAAI,EAAX,EAAe2C,OAAf,CAAuB,CAACb,KAAD,EAAQ0B,UAAR,KAAuB;AAC5C,IAAM,MAAA;AAAEC,MAAAA,MAAM,GAAG,EAAA;AAAX,KAAA,GAAkB3B,KAAxB,CAAA;AACA,IAAM,MAAA;AAAE4B,MAAAA,iBAAiB,GAAG,EAAA;AAAtB,KAAA,GAA6B5B,KAAnC,CAAA;AACA,IAAM6B,MAAAA,WAAW,GAAG,EAApB,CAAA;AACA,IAAMC,MAAAA,uBAAuB,GAAG,EAAhC,CAAA;;AAEA,IAAA,IAAI7D,WAAJ,EAAiB;AACf2D,MAAAA,iBAAiB,CAACf,OAAlB,CAA0B,CAACkB,eAAD,EAAkBC,UAAlB,KAAiC;AACzD,QAAA,IAAI,CAACD,eAAD,IAAoBA,eAAe,KAAK,aAA5C,EAA2D;AACzDD,UAAAA,uBAAuB,CAACE,UAAD,CAAvB,GAAsC,oCAAtC,CAAA;AACD,SAFD,MAEO;AACL,UAAMC,MAAAA,wBAAwB,GAAGL,iBAAiB,CAC/CX,KAD8B,CACxBe,UAAU,GAAG,CADW,CAE9Bd,CAAAA,IAF8B,CAExBnC,CAAD,IAAOD,YAAY,CAACC,CAAD,CAAZ,KAAoBD,YAAY,CAACiD,eAAD,CAFd,CAAjC,CAAA;;AAIA,UAAA,IAAIE,wBAAJ,EAA8B;AAC5BH,YAAAA,uBAAuB,CAACE,UAAD,CAAvB,GAAsC,iCAAtC,CAAA;AACD,WAAA;AACF,SAAA;AACF,OAZD,CAAA,CAAA;AAaD,KAAA;;AAED,IAAIZ,IAAAA,MAAM,CAACC,IAAP,CAAYS,uBAAZ,CAAqCR,CAAAA,MAArC,GAA8C,CAAlD,EAAqD;AACnDG,MAAAA,iBAAiB,CAACC,UAAD,CAAjB,GAAgCI,uBAAhC,CAAA;AACD,KAAA;;AAEDH,IAAAA,MAAM,CAACd,OAAP,CAAe,CAACqB,KAAD,EAAQC,UAAR,KAAuB;AACpC,MAAI,IAAA,CAACD,KAAK,CAACE,IAAP,IAAeF,KAAK,CAACE,IAAN,KAAe,aAAlC,EAAiD;AAC/CP,QAAAA,WAAW,CAACM,UAAD,CAAX,GAA0B;AAAEC,UAAAA,IAAI,EAAE,kCAAA;AAAR,SAA1B,CAAA;AACD,OAFD,MAEO;AACL,QAAMC,MAAAA,kBAAkB,GAAGV,MAAM,CAC9BV,KADwB,CAClBkB,UAAU,GAAG,CADK,CAExBjB,CAAAA,IAFwB,CAElBoB,CAAD,IAAOxD,YAAY,CAACwD,CAAC,CAACF,IAAH,CAAZ,KAAyBtD,YAAY,CAACoD,KAAK,CAACE,IAAP,CAFzB,CAA3B,CAAA;;AAIA,QAAA,IAAIC,kBAAJ,EAAwB;AACtBR,UAAAA,WAAW,CAACM,UAAD,CAAX,GAA0B;AAAEC,YAAAA,IAAI,EAAE,+BAAA;AAAR,WAA1B,CAAA;AACD,SAAA;AACF,OAAA;;AACD,MAAA,IAAItE,WAAW,KAAK,CAACoE,KAAK,CAACpE,WAAP,IAAsBoE,KAAK,CAACpE,WAAN,KAAsB,aAAjD,CAAf,EAAgF;AAC9E+D,QAAAA,WAAW,CAACM,UAAD,CAAX,gBAA+BN,WAAW,CAACM,UAAD,CAA1C,EAAA;AAAwDrE,UAAAA,WAAW,EAAE,uCAAA;AAArE,SAAA,CAAA,CAAA;AACD,OAFD,MAEO;AACL,QAAMyE,MAAAA,mBAAmB,GAAGZ,MAAM,CAC/BV,KADyB,CACnBkB,UAAU,GAAG,CADM,CAEzBjB,CAAAA,IAFyB,CAEnBoB,CAAD,IAAOxD,YAAY,CAACwD,CAAC,CAACxE,WAAH,CAAZ,KAAgCgB,YAAY,CAACoD,KAAK,CAACpE,WAAP,CAF/B,CAA5B,CAAA;;AAIA,QAAIA,IAAAA,WAAW,IAAIyE,mBAAnB,EAAwC;AACtCV,UAAAA,WAAW,CAACM,UAAD,CAAX,gBAA+BN,WAAW,CAACM,UAAD,CAA1C,EAAA;AAAwDrE,YAAAA,WAAW,EAAE,sCAAA;AAArE,WAAA,CAAA,CAAA;AACD,SAAA;AACF,OAAA;AACF,KAvBD,CAAA,CAAA;;AAwBA,IAAIsD,IAAAA,MAAM,CAACC,IAAP,CAAYQ,WAAZ,CAAyBP,CAAAA,MAAzB,GAAkC,CAAtC,EAAyC;AACvCE,MAAAA,YAAY,CAACE,UAAD,CAAZ,GAA2BG,WAA3B,CAAA;AACD,KAAA;AACF,GArDD,CAAA,CAAA;;AAuDA,EAAIT,IAAAA,MAAM,CAACC,IAAP,CAAYG,YAAZ,CAA0BF,CAAAA,MAA1B,GAAmC,CAAvC,EAA0C;AACxCX,IAAAA,MAAM,CAACa,YAAP,GAAsBA,YAAtB,CAAA;AACD,GAAA;;AAED,EAAIJ,IAAAA,MAAM,CAACC,IAAP,CAAYI,iBAAZ,CAA+BH,CAAAA,MAA/B,GAAwC,CAA5C,EAA+C;AAC7CX,IAAAA,MAAM,CAACc,iBAAP,GAA2BA,iBAA3B,CAAA;AACD,GAAA;;AAED,EAAA,OAAOd,MAAP,CAAA;AACD,CAtED,CAAA;;AAwEO,MAAM6B,QAAQ,GAAG,CAACtD,KAAK,GAAG,EAAT,EAAauD,MAAM,GAAG,EAAtB,KAA6B;AACnD,EAAM,MAAA;AAAE7D,IAAAA,OAAO,GAAG,EAAZ;AAAgBD,IAAAA,UAAAA;AAAhB,GAAA,GAA+BO,KAArC,CAAA;AACA,EAAM,MAAA;AAAEU,IAAAA,gBAAgB,GAAG,EAArB;AAAyBK,IAAAA,YAAY,GAAG,EAAA;AAAxC,GAAA,GAA+CrB,OAArD,CAAA;AACA,EAAI+B,IAAAA,MAAM,GAAG,EAAb,CAAA;;AAEA,EAAA,QAAQhC,UAAR;AACE,IAAKjB,KAAAA,YAAY,CAACC,aAAlB,CAAA;AACA,IAAA;AACEgD,MAAAA,MAAM,GAAGD,oBAAoB,CAACT,YAAD,CAA7B,CAAA;AACA,MAAA,MAAA;;AACF,IAAKvC,KAAAA,YAAY,CAACE,kBAAlB;AACE+C,MAAAA,MAAM,GAAGY,wBAAwB,CAAC3B,gBAAD,CAAjC,CAAA;AACA,MAAA,MAAA;AAPJ,GAAA;;AAUA,EAAA,OAAOe,MAAP,CAAA;AACD;;;;"}
package/esm/element.js ADDED
@@ -0,0 +1,179 @@
1
+ import Rubric from '@pie-element/rubric';
2
+ import MultiTraitRubric from '@pie-element/multi-trait-rubric';
3
+ import { RUBRIC_TYPES } from '@pie-lib/rubric';
4
+
5
+ function _extends() {
6
+ _extends = Object.assign || function (target) {
7
+ for (var i = 1; i < arguments.length; i++) {
8
+ var source = arguments[i];
9
+
10
+ for (var key in source) {
11
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
12
+ target[key] = source[key];
13
+ }
14
+ }
15
+ }
16
+
17
+ return target;
18
+ };
19
+
20
+ return _extends.apply(this, arguments);
21
+ }
22
+
23
+ const RUBRIC_TAG_NAME = 'complex-rubric-simple';
24
+ const MULTI_TRAIT_RUBRIC_TAG_NAME = 'complex-rubric-multi-trait';
25
+
26
+ class ComplexRubricSimple extends Rubric {}
27
+
28
+ class ComplexRubricMultiTrait extends MultiTraitRubric {}
29
+
30
+ const defineRubrics = () => {
31
+ if (!customElements.get(RUBRIC_TAG_NAME)) {
32
+ customElements.define(RUBRIC_TAG_NAME, ComplexRubricSimple);
33
+ }
34
+
35
+ if (!customElements.get(MULTI_TRAIT_RUBRIC_TAG_NAME)) {
36
+ customElements.define(MULTI_TRAIT_RUBRIC_TAG_NAME, ComplexRubricMultiTrait);
37
+ }
38
+ };
39
+
40
+ defineRubrics();
41
+
42
+ class ComplexRubric extends HTMLElement {
43
+ constructor() {
44
+ super();
45
+ this._model = {};
46
+ this._type = RUBRIC_TYPES.SIMPLE_RUBRIC;
47
+ }
48
+
49
+ set type(t) {
50
+ this._type = t;
51
+ }
52
+
53
+ get type() {
54
+ return this._type;
55
+ }
56
+
57
+ set model(m) {
58
+ this._model = m;
59
+ const oldType = this._type;
60
+ this.type = m.rubricType;
61
+
62
+ switch (this._type) {
63
+ case RUBRIC_TYPES.SIMPLE_RUBRIC:
64
+ default:
65
+ customElements.whenDefined(RUBRIC_TAG_NAME).then(() => {
66
+ this.setRubricModel(this.simpleRubric);
67
+ });
68
+ break;
69
+
70
+ case RUBRIC_TYPES.MULTI_TRAIT_RUBRIC:
71
+ customElements.whenDefined(MULTI_TRAIT_RUBRIC_TAG_NAME).then(() => {
72
+ this.setMultiTraitRubricModel(this.multiTraitRubric);
73
+ });
74
+ break;
75
+
76
+ case RUBRIC_TYPES.RUBRICLESS:
77
+ customElements.whenDefined(RUBRIC_TAG_NAME).then(() => {
78
+ this.setRubriclessModel(this.rubricless);
79
+ });
80
+ break;
81
+ }
82
+
83
+ if (oldType !== this.type) {
84
+ this._render();
85
+ }
86
+ }
87
+
88
+ setRubricModel(simpleRubric) {
89
+ if (this._model && this._model.rubrics && this._model.rubrics.simpleRubric) {
90
+ const {
91
+ mode
92
+ } = this._model;
93
+ simpleRubric.model = _extends({}, this._model.rubrics.simpleRubric, {
94
+ mode
95
+ });
96
+ }
97
+ }
98
+
99
+ setMultiTraitRubricModel(multiTraitRubric) {
100
+ if (this._model && this._model.rubrics && this._model.rubrics.multiTraitRubric) {
101
+ const {
102
+ mode
103
+ } = this._model;
104
+ multiTraitRubric.model = _extends({}, this._model.rubrics.multiTraitRubric, {
105
+ mode
106
+ });
107
+ }
108
+ }
109
+
110
+ setRubriclessModel(rubricless) {
111
+ if (this._model && this._model.rubrics && this._model.rubrics.rubricless) {
112
+ const {
113
+ mode
114
+ } = this._model;
115
+ rubricless.model = _extends({}, this._model.rubrics.rubricless, {
116
+ mode
117
+ });
118
+ }
119
+ }
120
+
121
+ get multiTraitRubric() {
122
+ return this.querySelector(`${MULTI_TRAIT_RUBRIC_TAG_NAME}#multiTraitRubric`);
123
+ }
124
+
125
+ get simpleRubric() {
126
+ return this.querySelector(`${RUBRIC_TAG_NAME}#simpleRubric`);
127
+ }
128
+
129
+ get rubricless() {
130
+ return this.querySelector(`${RUBRIC_TAG_NAME}#rubricless`);
131
+ }
132
+
133
+ connectedCallback() {
134
+ this._render();
135
+ }
136
+
137
+ _render() {
138
+ let rubricTag;
139
+
140
+ if (this._type === RUBRIC_TYPES.SIMPLE_RUBRIC) {
141
+ rubricTag = `<${RUBRIC_TAG_NAME} id="simpleRubric" />`;
142
+ } else if (this._type === RUBRIC_TYPES.RUBRICLESS) {
143
+ rubricTag = `<${RUBRIC_TAG_NAME} id="rubricless" />`;
144
+ } else {
145
+ rubricTag = `<${MULTI_TRAIT_RUBRIC_TAG_NAME} id="multiTraitRubric" />`;
146
+ }
147
+
148
+ this.innerHTML = rubricTag; // when item is re-rendered (due to connectedCallback), if the custom element is already defined,
149
+ // we need to set the model and session, otherwise the setters are not reached again
150
+
151
+ switch (this._type) {
152
+ case RUBRIC_TYPES.SIMPLE_RUBRIC:
153
+ default:
154
+ if (customElements.get(RUBRIC_TAG_NAME)) {
155
+ this.setRubricModel(this.simpleRubric);
156
+ }
157
+
158
+ break;
159
+
160
+ case RUBRIC_TYPES.MULTI_TRAIT_RUBRIC:
161
+ if (customElements.get(MULTI_TRAIT_RUBRIC_TAG_NAME)) {
162
+ this.setMultiTraitRubricModel(this.multiTraitRubric);
163
+ }
164
+
165
+ break;
166
+
167
+ case RUBRIC_TYPES.RUBRICLESS:
168
+ if (customElements.get(RUBRIC_TAG_NAME)) {
169
+ this.setRubriclessModel(this.rubricless);
170
+ }
171
+
172
+ break;
173
+ }
174
+ }
175
+
176
+ }
177
+
178
+ export { ComplexRubric as default };
179
+ //# sourceMappingURL=element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.js","sources":["../src/index.js"],"sourcesContent":["import Rubric from '@pie-element/rubric';\nimport MultiTraitRubric from '@pie-element/multi-trait-rubric';\nimport { RUBRIC_TYPES } from '@pie-lib/rubric';\n\nconst RUBRIC_TAG_NAME = 'complex-rubric-simple';\nconst MULTI_TRAIT_RUBRIC_TAG_NAME = 'complex-rubric-multi-trait';\n\nclass ComplexRubricSimple extends Rubric {}\n\nclass ComplexRubricMultiTrait extends MultiTraitRubric {}\n\nconst defineRubrics = () => {\n if (!customElements.get(RUBRIC_TAG_NAME)) {\n customElements.define(RUBRIC_TAG_NAME, ComplexRubricSimple);\n }\n\n if (!customElements.get(MULTI_TRAIT_RUBRIC_TAG_NAME)) {\n customElements.define(MULTI_TRAIT_RUBRIC_TAG_NAME, ComplexRubricMultiTrait);\n }\n};\n\ndefineRubrics();\n\nclass ComplexRubric extends HTMLElement {\n constructor() {\n super();\n this._model = {};\n this._type = RUBRIC_TYPES.SIMPLE_RUBRIC;\n }\n\n set type(t) {\n this._type = t;\n }\n\n get type() {\n return this._type;\n }\n\n set model(m) {\n this._model = m;\n const oldType = this._type;\n this.type = m.rubricType;\n\n switch (this._type) {\n case RUBRIC_TYPES.SIMPLE_RUBRIC:\n default:\n customElements.whenDefined(RUBRIC_TAG_NAME).then(() => {\n this.setRubricModel(this.simpleRubric);\n });\n break;\n case RUBRIC_TYPES.MULTI_TRAIT_RUBRIC:\n customElements.whenDefined(MULTI_TRAIT_RUBRIC_TAG_NAME).then(() => {\n this.setMultiTraitRubricModel(this.multiTraitRubric);\n });\n break;\n case RUBRIC_TYPES.RUBRICLESS:\n customElements.whenDefined(RUBRIC_TAG_NAME).then(() => {\n this.setRubriclessModel(this.rubricless);\n });\n break;\n }\n\n if (oldType !== this.type) {\n this._render();\n }\n }\n\n setRubricModel(simpleRubric) {\n if (this._model && this._model.rubrics && this._model.rubrics.simpleRubric) {\n const { mode } = this._model;\n\n simpleRubric.model = {\n ...this._model.rubrics.simpleRubric,\n mode,\n };\n }\n }\n\n setMultiTraitRubricModel(multiTraitRubric) {\n if (this._model && this._model.rubrics && this._model.rubrics.multiTraitRubric) {\n const { mode } = this._model;\n\n multiTraitRubric.model = {\n ...this._model.rubrics.multiTraitRubric,\n mode,\n };\n }\n }\n\n setRubriclessModel(rubricless) {\n if (this._model && this._model.rubrics && this._model.rubrics.rubricless) {\n const { mode } = this._model;\n\n rubricless.model = {\n ...this._model.rubrics.rubricless,\n mode,\n };\n }\n }\n\n get multiTraitRubric() {\n return this.querySelector(`${MULTI_TRAIT_RUBRIC_TAG_NAME}#multiTraitRubric`);\n }\n\n get simpleRubric() {\n return this.querySelector(`${RUBRIC_TAG_NAME}#simpleRubric`);\n }\n\n get rubricless() {\n return this.querySelector(`${RUBRIC_TAG_NAME}#rubricless`);\n }\n\n connectedCallback() {\n this._render();\n }\n\n _render() {\n let rubricTag;\n if (this._type === RUBRIC_TYPES.SIMPLE_RUBRIC) {\n rubricTag = `<${RUBRIC_TAG_NAME} id=\"simpleRubric\" />`;\n } else if (this._type === RUBRIC_TYPES.RUBRICLESS) {\n rubricTag = `<${RUBRIC_TAG_NAME} id=\"rubricless\" />`;\n } else {\n rubricTag = `<${MULTI_TRAIT_RUBRIC_TAG_NAME} id=\"multiTraitRubric\" />`;\n }\n\n this.innerHTML = rubricTag;\n\n // when item is re-rendered (due to connectedCallback), if the custom element is already defined,\n // we need to set the model and session, otherwise the setters are not reached again\n switch (this._type) {\n case RUBRIC_TYPES.SIMPLE_RUBRIC:\n default:\n if (customElements.get(RUBRIC_TAG_NAME)) {\n this.setRubricModel(this.simpleRubric);\n }\n break;\n case RUBRIC_TYPES.MULTI_TRAIT_RUBRIC:\n if (customElements.get(MULTI_TRAIT_RUBRIC_TAG_NAME)) {\n this.setMultiTraitRubricModel(this.multiTraitRubric);\n }\n break;\n case RUBRIC_TYPES.RUBRICLESS:\n if (customElements.get(RUBRIC_TAG_NAME)) {\n this.setRubriclessModel(this.rubricless);\n }\n break;\n }\n }\n}\n\nexport default ComplexRubric;\n"],"names":["RUBRIC_TAG_NAME","MULTI_TRAIT_RUBRIC_TAG_NAME","ComplexRubricSimple","Rubric","ComplexRubricMultiTrait","MultiTraitRubric","defineRubrics","customElements","get","define","ComplexRubric","HTMLElement","constructor","_model","_type","RUBRIC_TYPES","SIMPLE_RUBRIC","type","t","model","m","oldType","rubricType","whenDefined","then","setRubricModel","simpleRubric","MULTI_TRAIT_RUBRIC","setMultiTraitRubricModel","multiTraitRubric","RUBRICLESS","setRubriclessModel","rubricless","_render","rubrics","mode","querySelector","connectedCallback","rubricTag","innerHTML"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "module"
3
+ }
package/esm/print.js ADDED
@@ -0,0 +1,163 @@
1
+ import Rubric from '@pie-element/rubric';
2
+ import MultiTraitRubric from '@pie-element/multi-trait-rubric';
3
+ import { RUBRIC_TYPES } from '@pie-lib/rubric';
4
+
5
+ function _extends() {
6
+ _extends = Object.assign || function (target) {
7
+ for (var i = 1; i < arguments.length; i++) {
8
+ var source = arguments[i];
9
+
10
+ for (var key in source) {
11
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
12
+ target[key] = source[key];
13
+ }
14
+ }
15
+ }
16
+
17
+ return target;
18
+ };
19
+
20
+ return _extends.apply(this, arguments);
21
+ }
22
+
23
+ const RUBRIC_TAG_NAME = 'complex-rubric-simple';
24
+ const MULTI_TRAIT_RUBRIC_TAG_NAME = 'complex-rubric-multi-trait';
25
+
26
+ class ComplexRubricSimple extends Rubric {}
27
+
28
+ class ComplexRubricMultiTrait extends MultiTraitRubric {}
29
+
30
+ const rubricTags = {
31
+ [RUBRIC_TYPES.SIMPLE_RUBRIC]: `<${RUBRIC_TAG_NAME} id="simpleRubric" />`,
32
+ [RUBRIC_TYPES.RUBRICLESS]: `<${RUBRIC_TAG_NAME} id="rubricless" />`,
33
+ [RUBRIC_TYPES.MULTI_TRAIT_RUBRIC]: `<${MULTI_TRAIT_RUBRIC_TAG_NAME} id="multiTraitRubric" />`
34
+ };
35
+
36
+ const preparePrintModel = (model, opts) => {
37
+ const instr = opts.role === 'instructor';
38
+
39
+ if (!instr) {
40
+ return {};
41
+ }
42
+
43
+ model.mode = 'evaluate';
44
+ model.animationsDisabled = true;
45
+ return model;
46
+ };
47
+
48
+ const defineRubrics = () => {
49
+ if (!customElements.get(RUBRIC_TAG_NAME)) {
50
+ customElements.define(RUBRIC_TAG_NAME, ComplexRubricSimple);
51
+ }
52
+
53
+ if (!customElements.get(MULTI_TRAIT_RUBRIC_TAG_NAME)) {
54
+ customElements.define(MULTI_TRAIT_RUBRIC_TAG_NAME, ComplexRubricMultiTrait);
55
+ }
56
+ };
57
+
58
+ defineRubrics();
59
+
60
+ class ComplexRubricPrint extends HTMLElement {
61
+ constructor() {
62
+ super();
63
+ this._model = {};
64
+ this._type = RUBRIC_TYPES.SIMPLE_RUBRIC;
65
+ this._options = null;
66
+ }
67
+
68
+ set type(t) {
69
+ this._type = t;
70
+ }
71
+
72
+ get type() {
73
+ return this._type;
74
+ }
75
+
76
+ set model(m) {
77
+ this._model = m;
78
+ const oldType = this._type;
79
+ this.type = m.rubricType;
80
+
81
+ switch (this._type) {
82
+ case RUBRIC_TYPES.SIMPLE_RUBRIC:
83
+ default:
84
+ customElements.whenDefined(RUBRIC_TAG_NAME).then(() => {
85
+ this.setRubricModel(this.simpleRubric);
86
+ });
87
+ break;
88
+
89
+ case RUBRIC_TYPES.MULTI_TRAIT_RUBRIC:
90
+ customElements.whenDefined(MULTI_TRAIT_RUBRIC_TAG_NAME).then(() => {
91
+ this.setMultiTraitRubricModel(this.multiTraitRubric);
92
+ });
93
+ break;
94
+
95
+ case RUBRIC_TYPES.RUBRICLESS:
96
+ customElements.whenDefined(RUBRIC_TAG_NAME).then(() => {
97
+ this.setRubriclessModel(this.rubricless);
98
+ });
99
+ break;
100
+ }
101
+
102
+ if (oldType !== this.type) {
103
+ this._render();
104
+ }
105
+ }
106
+
107
+ setRubricModel(simpleRubric) {
108
+ if (this._model && this._model.rubrics && this._model.rubrics.simpleRubric) {
109
+ simpleRubric.model = preparePrintModel(this._model.rubrics.simpleRubric, this._options);
110
+ }
111
+ }
112
+
113
+ setMultiTraitRubricModel(multiTraitRubric) {
114
+ if (this._model && this._model.rubrics && this._model.rubrics.multiTraitRubric) {
115
+ const {
116
+ scales,
117
+ excludeZero
118
+ } = this._model.rubrics.multiTraitRubric || {};
119
+ const parsedScales = (scales || []).map(scale => _extends({}, scale, {
120
+ excludeZero
121
+ }));
122
+ multiTraitRubric.model = _extends({}, preparePrintModel(this._model.rubrics.multiTraitRubric, this._options), {
123
+ visible: true,
124
+ arrowsDisabled: true,
125
+ scales: parsedScales
126
+ });
127
+ }
128
+ }
129
+
130
+ setRubriclessModel(rubricless) {
131
+ if (this._model && this._model.rubrics && this._model.rubrics.rubricless) {
132
+ rubricless.model = preparePrintModel(this._model.rubrics.rubricless, this._options);
133
+ }
134
+ }
135
+
136
+ set options(o) {
137
+ this._options = o;
138
+ }
139
+
140
+ get multiTraitRubric() {
141
+ return this.querySelector(`${MULTI_TRAIT_RUBRIC_TAG_NAME}#multiTraitRubric`);
142
+ }
143
+
144
+ get simpleRubric() {
145
+ return this.querySelector(`${RUBRIC_TAG_NAME}#simpleRubric`);
146
+ }
147
+
148
+ get rubricless() {
149
+ return this.querySelector(`${RUBRIC_TAG_NAME}#rubricless`);
150
+ }
151
+
152
+ connectedCallback() {
153
+ this._render();
154
+ }
155
+
156
+ _render() {
157
+ this.innerHTML = rubricTags[this._type] || '';
158
+ }
159
+
160
+ }
161
+
162
+ export { ComplexRubricPrint as default };
163
+ //# sourceMappingURL=print.js.map