@pie-element/multi-trait-rubric 3.8.2-next.1 → 3.8.2-next.2
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/configure/lib/common.js +572 -0
- package/configure/lib/common.js.map +1 -0
- package/configure/lib/defaults.js +143 -0
- package/configure/lib/defaults.js.map +1 -0
- package/configure/lib/index.js +170 -0
- package/configure/lib/index.js.map +1 -0
- package/configure/lib/main.js +596 -0
- package/configure/lib/main.js.map +1 -0
- package/configure/lib/modals.js +361 -0
- package/configure/lib/modals.js.map +1 -0
- package/configure/lib/scale.js +552 -0
- package/configure/lib/scale.js.map +1 -0
- package/configure/lib/trait.js +370 -0
- package/configure/lib/trait.js.map +1 -0
- package/configure/lib/traitsHeader.js +287 -0
- package/configure/lib/traitsHeader.js.map +1 -0
- package/configure/lib/utils.js +14 -0
- package/configure/lib/utils.js.map +1 -0
- package/configure/package.json +1 -1
- package/controller/lib/defaults.js +94 -0
- package/controller/lib/defaults.js.map +1 -0
- package/controller/lib/index.js +215 -0
- package/controller/lib/index.js.map +1 -0
- package/controller/lib/utils.js +13 -0
- package/controller/lib/utils.js.map +1 -0
- package/controller/package.json +1 -1
- package/lib/index.js +85 -0
- package/lib/index.js.map +1 -0
- package/lib/main.js +161 -0
- package/lib/main.js.map +1 -0
- package/lib/scale.js +330 -0
- package/lib/scale.js.map +1 -0
- package/lib/trait.js +103 -0
- package/lib/trait.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1,215 @@
|
|
|
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
|
+
function createDefaultModel() {
|
|
31
|
+
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
32
|
+
return new Promise(function (resolve) {
|
|
33
|
+
return resolve(_objectSpread(_objectSpread({}, _defaults["default"]), model));
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
var normalize = function normalize(question) {
|
|
38
|
+
return _objectSpread(_objectSpread({}, _defaults["default"]), question);
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
*
|
|
42
|
+
* @param {*} question
|
|
43
|
+
* @param {*} session
|
|
44
|
+
* @param {*} env
|
|
45
|
+
*/
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
exports.normalize = normalize;
|
|
49
|
+
|
|
50
|
+
function model(_x, _x2, _x3) {
|
|
51
|
+
return _model.apply(this, arguments);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function _model() {
|
|
55
|
+
_model = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(question, session, env) {
|
|
56
|
+
var normalizedQuestion, _ref, scales, excludeZero, parsedScales;
|
|
57
|
+
|
|
58
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
59
|
+
while (1) {
|
|
60
|
+
switch (_context.prev = _context.next) {
|
|
61
|
+
case 0:
|
|
62
|
+
normalizedQuestion = normalize(question);
|
|
63
|
+
|
|
64
|
+
if (!env.role || env.role === 'student') {
|
|
65
|
+
normalizedQuestion.visible = normalizedQuestion.visibleToStudent;
|
|
66
|
+
} else {
|
|
67
|
+
normalizedQuestion.visible = true;
|
|
68
|
+
} // todo update pie-ui instead of parsing this here:
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
_ref = normalizedQuestion || {}, scales = _ref.scales, excludeZero = _ref.excludeZero;
|
|
72
|
+
parsedScales = (scales || []).map(function (scale) {
|
|
73
|
+
return _objectSpread(_objectSpread({}, scale), {}, {
|
|
74
|
+
excludeZero: excludeZero
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
return _context.abrupt("return", _objectSpread(_objectSpread({}, normalizedQuestion), {}, {
|
|
78
|
+
scales: parsedScales
|
|
79
|
+
}));
|
|
80
|
+
|
|
81
|
+
case 5:
|
|
82
|
+
case "end":
|
|
83
|
+
return _context.stop();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}, _callee);
|
|
87
|
+
}));
|
|
88
|
+
return _model.apply(this, arguments);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
var getScore = function getScore() {
|
|
92
|
+
return 0;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* @param {Object} model - the main model
|
|
96
|
+
* @param {*} session
|
|
97
|
+
* @param {Object} env
|
|
98
|
+
*/
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
exports.getScore = getScore;
|
|
102
|
+
|
|
103
|
+
function outcome() {
|
|
104
|
+
return new Promise(function (resolve) {
|
|
105
|
+
return resolve({
|
|
106
|
+
score: 0,
|
|
107
|
+
empty: true
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
var createCorrectResponseSession = function createCorrectResponseSession(question, env) {
|
|
113
|
+
return new Promise(function (resolve) {
|
|
114
|
+
if (env.mode !== 'evaluate' && env.role === 'instructor') {
|
|
115
|
+
resolve({
|
|
116
|
+
id: '1'
|
|
117
|
+
});
|
|
118
|
+
} else {
|
|
119
|
+
resolve(null);
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}; // IMPORTANT! If you make any changes to this function, please make sure you also update complex-rubric/controller/validateMultiTraitRubric function!“.
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
exports.createCorrectResponseSession = createCorrectResponseSession;
|
|
126
|
+
|
|
127
|
+
var validate = function validate(model, config) {
|
|
128
|
+
var scales = model.scales,
|
|
129
|
+
_model$description = model.description,
|
|
130
|
+
description = _model$description === void 0 ? false : _model$description,
|
|
131
|
+
_model$pointLabels = model.pointLabels,
|
|
132
|
+
pointLabels = _model$pointLabels === void 0 ? false : _model$pointLabels;
|
|
133
|
+
var errors = {};
|
|
134
|
+
var traitsErrors = {};
|
|
135
|
+
var scorePointsErrors = {};
|
|
136
|
+
(scales || []).forEach(function (scale, scaleIndex) {
|
|
137
|
+
var _scale$traits = scale.traits,
|
|
138
|
+
traits = _scale$traits === void 0 ? [] : _scale$traits;
|
|
139
|
+
var _scale$scorePointsLab = scale.scorePointsLabels,
|
|
140
|
+
scorePointsLabels = _scale$scorePointsLab === void 0 ? [] : _scale$scorePointsLab;
|
|
141
|
+
var scaleErrors = {};
|
|
142
|
+
var scorePointsLabelsErrors = {};
|
|
143
|
+
|
|
144
|
+
if (pointLabels) {
|
|
145
|
+
scorePointsLabels.forEach(function (scorePointLabel, scoreIndex) {
|
|
146
|
+
if (!scorePointLabel || scorePointLabel === '<div></div>') {
|
|
147
|
+
scorePointsLabelsErrors[scoreIndex] = 'Points labels should not be empty.';
|
|
148
|
+
} else {
|
|
149
|
+
var identicalScorePointLabel = scorePointsLabels.slice(scoreIndex + 1).some(function (s) {
|
|
150
|
+
return (0, _utils.markupToText)(s) === (0, _utils.markupToText)(scorePointLabel);
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
if (identicalScorePointLabel) {
|
|
154
|
+
scorePointsLabelsErrors[scoreIndex] = 'Points labels should be unique.';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (Object.keys(scorePointsLabelsErrors).length > 0) {
|
|
161
|
+
scorePointsErrors[scaleIndex] = scorePointsLabelsErrors;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
traits.forEach(function (trait, traitIndex) {
|
|
165
|
+
if (!trait.name || trait.name === '<div></div>') {
|
|
166
|
+
scaleErrors[traitIndex] = {
|
|
167
|
+
name: 'Trait names should not be empty.'
|
|
168
|
+
};
|
|
169
|
+
} else {
|
|
170
|
+
var identicalTraitName = traits.slice(traitIndex + 1).some(function (t) {
|
|
171
|
+
return (0, _utils.markupToText)(t.name) === (0, _utils.markupToText)(trait.name);
|
|
172
|
+
});
|
|
173
|
+
|
|
174
|
+
if (identicalTraitName) {
|
|
175
|
+
scaleErrors[traitIndex] = {
|
|
176
|
+
name: 'Trait names should be unique.'
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
if (description && (!trait.description || trait.description === '<div></div>')) {
|
|
182
|
+
scaleErrors[traitIndex] = _objectSpread(_objectSpread({}, scaleErrors[traitIndex]), {}, {
|
|
183
|
+
description: 'Trait description should not be empty'
|
|
184
|
+
});
|
|
185
|
+
} else {
|
|
186
|
+
var identicalTraitDescr = traits.slice(traitIndex + 1).some(function (t) {
|
|
187
|
+
return (0, _utils.markupToText)(t.description) === (0, _utils.markupToText)(trait.description);
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
if (description && identicalTraitDescr) {
|
|
191
|
+
scaleErrors[traitIndex] = _objectSpread(_objectSpread({}, scaleErrors[traitIndex]), {}, {
|
|
192
|
+
description: 'Trait descriptions should be unique.'
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
if (Object.keys(scaleErrors).length > 0) {
|
|
199
|
+
traitsErrors[scaleIndex] = scaleErrors;
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
if (Object.keys(traitsErrors).length > 0) {
|
|
204
|
+
errors.traitsErrors = traitsErrors;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
if (Object.keys(scorePointsErrors).length > 0) {
|
|
208
|
+
errors.scorePointsErrors = scorePointsErrors;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return errors;
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
exports.validate = validate;
|
|
215
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["createDefaultModel","model","Promise","resolve","defaults","normalize","question","session","env","normalizedQuestion","role","visible","visibleToStudent","scales","excludeZero","parsedScales","map","scale","getScore","outcome","score","empty","createCorrectResponseSession","mode","id","validate","config","description","pointLabels","errors","traitsErrors","scorePointsErrors","forEach","scaleIndex","traits","scorePointsLabels","scaleErrors","scorePointsLabelsErrors","scorePointLabel","scoreIndex","identicalScorePointLabel","slice","some","s","Object","keys","length","trait","traitIndex","name","identicalTraitName","t","identicalTraitDescr"],"mappings":"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","sourcesContent":["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\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.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"],"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"}
|
package/controller/package.json
CHANGED
package/lib/index.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
15
|
+
|
|
16
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
17
|
+
|
|
18
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
19
|
+
|
|
20
|
+
var _wrapNativeSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/wrapNativeSuper"));
|
|
21
|
+
|
|
22
|
+
var _react = _interopRequireDefault(require("react"));
|
|
23
|
+
|
|
24
|
+
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
25
|
+
|
|
26
|
+
var _piePlayerEvents = require("@pie-framework/pie-player-events");
|
|
27
|
+
|
|
28
|
+
var _main = _interopRequireDefault(require("./main"));
|
|
29
|
+
|
|
30
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
31
|
+
|
|
32
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
33
|
+
|
|
34
|
+
var MultiTraitRubric = /*#__PURE__*/function (_HTMLElement) {
|
|
35
|
+
(0, _inherits2["default"])(MultiTraitRubric, _HTMLElement);
|
|
36
|
+
|
|
37
|
+
var _super = _createSuper(MultiTraitRubric);
|
|
38
|
+
|
|
39
|
+
function MultiTraitRubric() {
|
|
40
|
+
var _this;
|
|
41
|
+
|
|
42
|
+
(0, _classCallCheck2["default"])(this, MultiTraitRubric);
|
|
43
|
+
_this = _super.call(this);
|
|
44
|
+
_this._model = {};
|
|
45
|
+
_this._session = null;
|
|
46
|
+
return _this;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
(0, _createClass2["default"])(MultiTraitRubric, [{
|
|
50
|
+
key: "model",
|
|
51
|
+
set: function set(s) {
|
|
52
|
+
this._model = s;
|
|
53
|
+
this.dispatchEvent(new _piePlayerEvents.ModelSetEvent(this.tagName.toLowerCase(), this._session, !!this._model));
|
|
54
|
+
|
|
55
|
+
this._render();
|
|
56
|
+
}
|
|
57
|
+
}, {
|
|
58
|
+
key: "session",
|
|
59
|
+
get: function get() {
|
|
60
|
+
return this._session;
|
|
61
|
+
},
|
|
62
|
+
set: function set(s) {
|
|
63
|
+
this._session = s;
|
|
64
|
+
}
|
|
65
|
+
}, {
|
|
66
|
+
key: "connectedCallback",
|
|
67
|
+
value: function connectedCallback() {
|
|
68
|
+
this._render();
|
|
69
|
+
}
|
|
70
|
+
}, {
|
|
71
|
+
key: "_render",
|
|
72
|
+
value: function _render() {
|
|
73
|
+
var el = /*#__PURE__*/_react["default"].createElement(_main["default"], {
|
|
74
|
+
model: this._model,
|
|
75
|
+
session: this._session
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
_reactDom["default"].render(el, this);
|
|
79
|
+
}
|
|
80
|
+
}]);
|
|
81
|
+
return MultiTraitRubric;
|
|
82
|
+
}( /*#__PURE__*/(0, _wrapNativeSuper2["default"])(HTMLElement));
|
|
83
|
+
|
|
84
|
+
exports["default"] = MultiTraitRubric;
|
|
85
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["MultiTraitRubric","_model","_session","s","dispatchEvent","ModelSetEvent","tagName","toLowerCase","_render","el","React","createElement","Main","model","session","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;IAEqBA,gB;;;;;AACnB,8BAAc;AAAA;;AAAA;AACZ;AACA,UAAKC,MAAL,GAAc,EAAd;AACA,UAAKC,QAAL,GAAgB,IAAhB;AAHY;AAIb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKF,MAAL,GAAcE,CAAd;AACA,WAAKC,aAAL,CAAmB,IAAIC,8BAAJ,CAAkB,KAAKC,OAAL,CAAaC,WAAb,EAAlB,EAA8C,KAAKL,QAAnD,EAA6D,CAAC,CAAC,KAAKD,MAApE,CAAnB;;AAEA,WAAKO,OAAL;AACD;;;SAMD,eAAc;AACZ,aAAO,KAAKN,QAAZ;AACD,K;SAND,aAAYC,CAAZ,EAAe;AACb,WAAKD,QAAL,GAAgBC,CAAhB;AACD;;;WAMD,6BAAoB;AAClB,WAAKK,OAAL;AACD;;;WAED,mBAAU;AACR,UAAMC,EAAE,gBAAGC,kBAAMC,aAAN,CAAoBC,gBAApB,EAA0B;AAAEC,QAAAA,KAAK,EAAE,KAAKZ,MAAd;AAAsBa,QAAAA,OAAO,EAAE,KAAKZ;AAApC,OAA1B,CAAX;;AAEAa,2BAASC,MAAT,CAAgBP,EAAhB,EAAoB,IAApB;AACD;;;kDA9B2CQ,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { ModelSetEvent } from '@pie-framework/pie-player-events';\nimport Main from './main';\n\nexport default class MultiTraitRubric extends HTMLElement {\n constructor() {\n super();\n this._model = {};\n this._session = null;\n }\n\n set model(s) {\n this._model = s;\n this.dispatchEvent(new ModelSetEvent(this.tagName.toLowerCase(), this._session, !!this._model));\n\n this._render();\n }\n\n set session(s) {\n this._session = s;\n }\n\n get session() {\n return this._session;\n }\n\n connectedCallback() {\n this._render();\n }\n\n _render() {\n const el = React.createElement(Main, { model: this._model, session: this._session });\n\n ReactDOM.render(el, this);\n }\n}\n"],"file":"index.js"}
|
package/lib/main.js
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
|
|
10
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
11
|
+
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
|
|
14
|
+
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
|
|
15
|
+
|
|
16
|
+
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
17
|
+
|
|
18
|
+
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
|
|
19
|
+
|
|
20
|
+
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
21
|
+
|
|
22
|
+
var _react = _interopRequireDefault(require("react"));
|
|
23
|
+
|
|
24
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
25
|
+
|
|
26
|
+
var _scale = _interopRequireDefault(require("./scale"));
|
|
27
|
+
|
|
28
|
+
var _Link = _interopRequireDefault(require("@material-ui/core/Link"));
|
|
29
|
+
|
|
30
|
+
var _Collapse = _interopRequireDefault(require("@material-ui/core/Collapse"));
|
|
31
|
+
|
|
32
|
+
var _renderUi = require("@pie-lib/pie-toolbox/render-ui");
|
|
33
|
+
|
|
34
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
|
|
35
|
+
|
|
36
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
37
|
+
|
|
38
|
+
var Main = /*#__PURE__*/function (_React$Component) {
|
|
39
|
+
(0, _inherits2["default"])(Main, _React$Component);
|
|
40
|
+
|
|
41
|
+
var _super = _createSuper(Main);
|
|
42
|
+
|
|
43
|
+
function Main(props) {
|
|
44
|
+
var _this;
|
|
45
|
+
|
|
46
|
+
(0, _classCallCheck2["default"])(this, Main);
|
|
47
|
+
_this = _super.call(this, props);
|
|
48
|
+
_this.state = {
|
|
49
|
+
rubricOpen: false,
|
|
50
|
+
linkPrefix: 'Show'
|
|
51
|
+
};
|
|
52
|
+
_this.toggleRubric = _this.toggleRubric.bind((0, _assertThisInitialized2["default"])(_this));
|
|
53
|
+
return _this;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
(0, _createClass2["default"])(Main, [{
|
|
57
|
+
key: "toggleRubric",
|
|
58
|
+
value: function toggleRubric() {
|
|
59
|
+
this.setState({
|
|
60
|
+
rubricOpen: !this.state.rubricOpen
|
|
61
|
+
});
|
|
62
|
+
this.setState({
|
|
63
|
+
linkPrefix: this.state.rubricOpen ? 'Show' : 'Hide'
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}, {
|
|
67
|
+
key: "render",
|
|
68
|
+
value: function render() {
|
|
69
|
+
var model = this.props.model;
|
|
70
|
+
var animationsDisabled = this.props.animationsDisabled;
|
|
71
|
+
|
|
72
|
+
var _ref = model || {},
|
|
73
|
+
halfScoring = _ref.halfScoring,
|
|
74
|
+
scales = _ref.scales,
|
|
75
|
+
visible = _ref.visible,
|
|
76
|
+
pointLabels = _ref.pointLabels,
|
|
77
|
+
description = _ref.description,
|
|
78
|
+
standards = _ref.standards,
|
|
79
|
+
arrowsDisabled = _ref.arrowsDisabled;
|
|
80
|
+
|
|
81
|
+
animationsDisabled = animationsDisabled || model.animationsDisabled;
|
|
82
|
+
|
|
83
|
+
if (!scales || !visible) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
var rubricItem = /*#__PURE__*/_react["default"].createElement("div", {
|
|
88
|
+
style: {
|
|
89
|
+
fontFamily: 'Cerebri Sans',
|
|
90
|
+
color: _renderUi.color.text(),
|
|
91
|
+
backgroundColor: _renderUi.color.background()
|
|
92
|
+
}
|
|
93
|
+
}, halfScoring ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
94
|
+
style: {
|
|
95
|
+
marginBottom: '16px'
|
|
96
|
+
}
|
|
97
|
+
}, "* Half-point or in-between scores are permitted under this rubric.") : null, scales.map(function (scale, scaleIndex) {
|
|
98
|
+
return /*#__PURE__*/_react["default"].createElement(_scale["default"], {
|
|
99
|
+
key: "scale_".concat(scaleIndex),
|
|
100
|
+
scale: scale,
|
|
101
|
+
scaleIndex: scaleIndex,
|
|
102
|
+
showPointsLabels: pointLabels,
|
|
103
|
+
showDescription: description,
|
|
104
|
+
showStandards: standards,
|
|
105
|
+
arrowsDisabled: arrowsDisabled
|
|
106
|
+
});
|
|
107
|
+
}));
|
|
108
|
+
|
|
109
|
+
if (animationsDisabled) {
|
|
110
|
+
return rubricItem;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
114
|
+
style: {
|
|
115
|
+
color: _renderUi.color.text(),
|
|
116
|
+
backgroundColor: _renderUi.color.background()
|
|
117
|
+
}
|
|
118
|
+
}, /*#__PURE__*/_react["default"].createElement(_Link["default"], {
|
|
119
|
+
style: {
|
|
120
|
+
backgroundColor: _renderUi.color.background()
|
|
121
|
+
},
|
|
122
|
+
href: this.dudUrl,
|
|
123
|
+
onClick: this.toggleRubric
|
|
124
|
+
}, this.state.linkPrefix, " Rubric"), /*#__PURE__*/_react["default"].createElement(_Collapse["default"], {
|
|
125
|
+
style: {
|
|
126
|
+
marginTop: '16px'
|
|
127
|
+
},
|
|
128
|
+
"in": this.state.rubricOpen,
|
|
129
|
+
timeout: "auto"
|
|
130
|
+
}, rubricItem));
|
|
131
|
+
}
|
|
132
|
+
}]);
|
|
133
|
+
return Main;
|
|
134
|
+
}(_react["default"].Component);
|
|
135
|
+
|
|
136
|
+
Main.propTypes = {
|
|
137
|
+
model: _propTypes["default"].shape({
|
|
138
|
+
halfScoring: _propTypes["default"].bool,
|
|
139
|
+
scales: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
140
|
+
excludeZero: _propTypes["default"].bool,
|
|
141
|
+
maxPoints: _propTypes["default"].number,
|
|
142
|
+
scorePointsLabels: _propTypes["default"].arrayOf(_propTypes["default"].string),
|
|
143
|
+
traitLabel: _propTypes["default"].string,
|
|
144
|
+
traits: _propTypes["default"].arrayOf(_propTypes["default"].shape({
|
|
145
|
+
name: _propTypes["default"].string,
|
|
146
|
+
description: _propTypes["default"].string,
|
|
147
|
+
scorePointsDescriptors: _propTypes["default"].arrayOf(_propTypes["default"].string),
|
|
148
|
+
standards: _propTypes["default"].arrayOf(_propTypes["default"].string)
|
|
149
|
+
}))
|
|
150
|
+
})),
|
|
151
|
+
visible: _propTypes["default"].bool,
|
|
152
|
+
pointLabels: _propTypes["default"].bool,
|
|
153
|
+
description: _propTypes["default"].bool,
|
|
154
|
+
standards: _propTypes["default"].bool,
|
|
155
|
+
animationsDisabled: _propTypes["default"].bool
|
|
156
|
+
}),
|
|
157
|
+
animationsDisabled: _propTypes["default"].bool
|
|
158
|
+
};
|
|
159
|
+
var _default = Main;
|
|
160
|
+
exports["default"] = _default;
|
|
161
|
+
//# sourceMappingURL=main.js.map
|
package/lib/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/main.jsx"],"names":["Main","props","state","rubricOpen","linkPrefix","toggleRubric","bind","setState","model","animationsDisabled","halfScoring","scales","visible","pointLabels","description","standards","arrowsDisabled","rubricItem","fontFamily","color","text","backgroundColor","background","marginBottom","map","scale","scaleIndex","dudUrl","marginTop","React","Component","propTypes","PropTypes","shape","bool","arrayOf","excludeZero","maxPoints","number","scorePointsLabels","string","traitLabel","traits","name","scorePointsDescriptors"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AACA;;;;;;IAEMA,I;;;;;AACJ,gBAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AACA,UAAKC,KAAL,GAAa;AACXC,MAAAA,UAAU,EAAE,KADD;AAEXC,MAAAA,UAAU,EAAE;AAFD,KAAb;AAIA,UAAKC,YAAL,GAAoB,MAAKA,YAAL,CAAkBC,IAAlB,gDAApB;AANiB;AAOlB;;;;WAED,wBAAe;AACb,WAAKC,QAAL,CAAc;AAAEJ,QAAAA,UAAU,EAAE,CAAC,KAAKD,KAAL,CAAWC;AAA1B,OAAd;AACA,WAAKI,QAAL,CAAc;AAAEH,QAAAA,UAAU,EAAE,KAAKF,KAAL,CAAWC,UAAX,GAAwB,MAAxB,GAAiC;AAA/C,OAAd;AACD;;;WAED,kBAAS;AACP,UAAQK,KAAR,GAAkB,KAAKP,KAAvB,CAAQO,KAAR;AACA,UAAMC,kBAAN,GAA6B,KAAKR,KAAlC,CAAMQ,kBAAN;;AACA,iBAA8FD,KAAK,IAAI,EAAvG;AAAA,UAAQE,WAAR,QAAQA,WAAR;AAAA,UAAqBC,MAArB,QAAqBA,MAArB;AAAA,UAA6BC,OAA7B,QAA6BA,OAA7B;AAAA,UAAsCC,WAAtC,QAAsCA,WAAtC;AAAA,UAAmDC,WAAnD,QAAmDA,WAAnD;AAAA,UAAgEC,SAAhE,QAAgEA,SAAhE;AAAA,UAA2EC,cAA3E,QAA2EA,cAA3E;;AACAP,MAAAA,kBAAkB,GAAGA,kBAAkB,IAAID,KAAK,CAACC,kBAAjD;;AAEA,UAAI,CAACE,MAAD,IAAW,CAACC,OAAhB,EAAyB;AACvB,eAAO,IAAP;AACD;;AAED,UAAMK,UAAU,gBACd;AAAK,QAAA,KAAK,EAAE;AAAEC,UAAAA,UAAU,EAAE,cAAd;AAA8BC,UAAAA,KAAK,EAAEA,gBAAMC,IAAN,EAArC;AAAmDC,UAAAA,eAAe,EAAEF,gBAAMG,UAAN;AAApE;AAAZ,SACGZ,WAAW,gBACV;AAAK,QAAA,KAAK,EAAE;AAAEa,UAAAA,YAAY,EAAE;AAAhB;AAAZ,8EADU,GAER,IAHN,EAKGZ,MAAM,CAACa,GAAP,CAAW,UAACC,KAAD,EAAQC,UAAR;AAAA,4BACV,gCAAC,iBAAD;AACE,UAAA,GAAG,kBAAWA,UAAX,CADL;AAEE,UAAA,KAAK,EAAED,KAFT;AAGE,UAAA,UAAU,EAAEC,UAHd;AAIE,UAAA,gBAAgB,EAAEb,WAJpB;AAKE,UAAA,eAAe,EAAEC,WALnB;AAME,UAAA,aAAa,EAAEC,SANjB;AAOE,UAAA,cAAc,EAAEC;AAPlB,UADU;AAAA,OAAX,CALH,CADF;;AAoBA,UAAIP,kBAAJ,EAAwB;AACtB,eAAOQ,UAAP;AACD;;AAED,0BACE;AAAK,QAAA,KAAK,EAAE;AAAEE,UAAAA,KAAK,EAAEA,gBAAMC,IAAN,EAAT;AAAuBC,UAAAA,eAAe,EAAEF,gBAAMG,UAAN;AAAxC;AAAZ,sBACE,gCAAC,gBAAD;AAAM,QAAA,KAAK,EAAE;AAAED,UAAAA,eAAe,EAAEF,gBAAMG,UAAN;AAAnB,SAAb;AAAsD,QAAA,IAAI,EAAE,KAAKK,MAAjE;AAAyE,QAAA,OAAO,EAAE,KAAKtB;AAAvF,SACG,KAAKH,KAAL,CAAWE,UADd,YADF,eAIE,gCAAC,oBAAD;AAAU,QAAA,KAAK,EAAE;AAAEwB,UAAAA,SAAS,EAAE;AAAb,SAAjB;AAAwC,cAAI,KAAK1B,KAAL,CAAWC,UAAvD;AAAmE,QAAA,OAAO,EAAC;AAA3E,SACGc,UADH,CAJF,CADF;AAUD;;;EA3DgBY,kBAAMC,S;;AA8DzB9B,IAAI,CAAC+B,SAAL,GAAiB;AACfvB,EAAAA,KAAK,EAAEwB,sBAAUC,KAAV,CAAgB;AACrBvB,IAAAA,WAAW,EAAEsB,sBAAUE,IADF;AAErBvB,IAAAA,MAAM,EAAEqB,sBAAUG,OAAV,CACNH,sBAAUC,KAAV,CAAgB;AACdG,MAAAA,WAAW,EAAEJ,sBAAUE,IADT;AAEdG,MAAAA,SAAS,EAAEL,sBAAUM,MAFP;AAGdC,MAAAA,iBAAiB,EAAEP,sBAAUG,OAAV,CAAkBH,sBAAUQ,MAA5B,CAHL;AAIdC,MAAAA,UAAU,EAAET,sBAAUQ,MAJR;AAKdE,MAAAA,MAAM,EAAEV,sBAAUG,OAAV,CACNH,sBAAUC,KAAV,CAAgB;AACdU,QAAAA,IAAI,EAAEX,sBAAUQ,MADF;AAEd1B,QAAAA,WAAW,EAAEkB,sBAAUQ,MAFT;AAGdI,QAAAA,sBAAsB,EAAEZ,sBAAUG,OAAV,CAAkBH,sBAAUQ,MAA5B,CAHV;AAIdzB,QAAAA,SAAS,EAAEiB,sBAAUG,OAAV,CAAkBH,sBAAUQ,MAA5B;AAJG,OAAhB,CADM;AALM,KAAhB,CADM,CAFa;AAkBrB5B,IAAAA,OAAO,EAAEoB,sBAAUE,IAlBE;AAmBrBrB,IAAAA,WAAW,EAAEmB,sBAAUE,IAnBF;AAoBrBpB,IAAAA,WAAW,EAAEkB,sBAAUE,IApBF;AAqBrBnB,IAAAA,SAAS,EAAEiB,sBAAUE,IArBA;AAsBrBzB,IAAAA,kBAAkB,EAAEuB,sBAAUE;AAtBT,GAAhB,CADQ;AAyBfzB,EAAAA,kBAAkB,EAAEuB,sBAAUE;AAzBf,CAAjB;eA4BelC,I","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Scale from './scale';\nimport Link from '@material-ui/core/Link';\nimport Collapse from '@material-ui/core/Collapse';\nimport { color } from '@pie-lib/pie-toolbox/render-ui';\n\nclass Main extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n rubricOpen: false,\n linkPrefix: 'Show',\n };\n this.toggleRubric = this.toggleRubric.bind(this);\n }\n\n toggleRubric() {\n this.setState({ rubricOpen: !this.state.rubricOpen });\n this.setState({ linkPrefix: this.state.rubricOpen ? 'Show' : 'Hide' });\n }\n\n render() {\n const { model } = this.props;\n let { animationsDisabled } = this.props;\n const { halfScoring, scales, visible, pointLabels, description, standards, arrowsDisabled } = model || {};\n animationsDisabled = animationsDisabled || model.animationsDisabled;\n\n if (!scales || !visible) {\n return null;\n }\n\n const rubricItem = (\n <div style={{ fontFamily: 'Cerebri Sans', color: color.text(), backgroundColor: color.background() }}>\n {halfScoring ? (\n <div style={{ marginBottom: '16px' }}>* Half-point or in-between scores are permitted under this rubric.</div>\n ) : null}\n\n {scales.map((scale, scaleIndex) => (\n <Scale\n key={`scale_${scaleIndex}`}\n scale={scale}\n scaleIndex={scaleIndex}\n showPointsLabels={pointLabels}\n showDescription={description}\n showStandards={standards}\n arrowsDisabled={arrowsDisabled}\n />\n ))}\n </div>\n );\n\n if (animationsDisabled) {\n return rubricItem;\n }\n\n return (\n <div style={{ color: color.text(), backgroundColor: color.background() }}>\n <Link style={{ backgroundColor: color.background() }} href={this.dudUrl} onClick={this.toggleRubric}>\n {this.state.linkPrefix} Rubric\n </Link>\n <Collapse style={{ marginTop: '16px' }} in={this.state.rubricOpen} timeout=\"auto\">\n {rubricItem}\n </Collapse>\n </div>\n );\n }\n}\n\nMain.propTypes = {\n model: PropTypes.shape({\n halfScoring: PropTypes.bool,\n scales: PropTypes.arrayOf(\n PropTypes.shape({\n excludeZero: PropTypes.bool,\n maxPoints: PropTypes.number,\n scorePointsLabels: PropTypes.arrayOf(PropTypes.string),\n traitLabel: PropTypes.string,\n traits: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n description: PropTypes.string,\n scorePointsDescriptors: PropTypes.arrayOf(PropTypes.string),\n standards: PropTypes.arrayOf(PropTypes.string),\n }),\n ),\n }),\n ),\n visible: PropTypes.bool,\n pointLabels: PropTypes.bool,\n description: PropTypes.bool,\n standards: PropTypes.bool,\n animationsDisabled: PropTypes.bool,\n }),\n animationsDisabled: PropTypes.bool,\n};\n\nexport default Main;\n"],"file":"main.js"}
|