@pie-element/inline-dropdown 3.7.1-next.99 → 3.8.3-next.1008
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/CHANGELOG.md +177 -0
- package/configure/CHANGELOG.md +152 -0
- package/configure/lib/defaults.js +23 -1
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/index.js +3 -3
- package/configure/lib/inline-dropdown-toolbar.js +13 -7
- package/configure/lib/inline-dropdown-toolbar.js.map +1 -1
- package/configure/lib/main.js +160 -18
- package/configure/lib/main.js.map +1 -1
- package/configure/lib/markupUtils.js +9 -2
- package/configure/lib/markupUtils.js.map +1 -1
- package/configure/lib/utils.js +16 -0
- package/configure/lib/utils.js.map +1 -0
- package/configure/package.json +4 -4
- package/controller/CHANGELOG.md +46 -0
- package/controller/lib/index.js +39 -6
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/docs/config-schema.json +100 -0
- package/docs/config-schema.json.md +77 -1
- package/docs/demo/generate.js +20 -10
- package/docs/pie-schema.json +49 -0
- package/docs/pie-schema.json.md +33 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/inline-dropdown.js +65 -18
- package/lib/inline-dropdown.js.map +1 -1
- package/package.json +6 -6
package/controller/lib/index.js
CHANGED
|
@@ -5,9 +5,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
+
exports.getScore = exports.createCorrectResponseSession = void 0;
|
|
8
9
|
exports.model = model;
|
|
10
|
+
exports.normalize = void 0;
|
|
9
11
|
exports.outcome = outcome;
|
|
10
|
-
exports.
|
|
12
|
+
exports.validate = void 0;
|
|
11
13
|
|
|
12
14
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
13
15
|
|
|
@@ -25,9 +27,9 @@ var _controllerUtils = require("@pie-lib/controller-utils");
|
|
|
25
27
|
|
|
26
28
|
var _utils = require("./utils");
|
|
27
29
|
|
|
28
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
30
|
+
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; }
|
|
29
31
|
|
|
30
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
32
|
+
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; }
|
|
31
33
|
|
|
32
34
|
var getFeedback = function getFeedback(correct) {
|
|
33
35
|
if (correct) {
|
|
@@ -42,7 +44,8 @@ var normalize = function normalize(question) {
|
|
|
42
44
|
promptEnabled: true,
|
|
43
45
|
rationaleEnabled: true,
|
|
44
46
|
teacherInstructionsEnabled: true,
|
|
45
|
-
studentInstructionsEnabled: true
|
|
47
|
+
studentInstructionsEnabled: true,
|
|
48
|
+
choiceRationaleEnabled: true
|
|
46
49
|
}, question);
|
|
47
50
|
};
|
|
48
51
|
/**
|
|
@@ -59,7 +62,7 @@ exports.normalize = normalize;
|
|
|
59
62
|
function model(question, session, env, updateSession) {
|
|
60
63
|
return new Promise( /*#__PURE__*/function () {
|
|
61
64
|
var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(resolve) {
|
|
62
|
-
var normalizedQuestion, _ref2, _ref2$value, value, choices, feedback, allCorrectResponses, respAreaLength, correctResponses, _loop, i, _ret, lockChoiceOrder, keys, _i, key, teacherInstructions, rationale, out;
|
|
65
|
+
var normalizedQuestion, _ref2, _ref2$value, value, choices, feedback, allCorrectResponses, respAreaLength, correctResponses, _loop, i, _ret, lockChoiceOrder, keys, _i, key, teacherInstructions, rationale, choicesWillNullRationales, out;
|
|
63
66
|
|
|
64
67
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
65
68
|
while (1) {
|
|
@@ -165,19 +168,30 @@ function model(question, session, env, updateSession) {
|
|
|
165
168
|
case 29:
|
|
166
169
|
teacherInstructions = null;
|
|
167
170
|
rationale = null;
|
|
171
|
+
choicesWillNullRationales = (Object.keys(choices) || []).reduce(function (acc, currentValue) {
|
|
172
|
+
acc[currentValue] = (choices[currentValue] || []).map(function (choice) {
|
|
173
|
+
return _objectSpread(_objectSpread({}, choice), {}, {
|
|
174
|
+
rationale: null
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
return acc;
|
|
178
|
+
}, {});
|
|
168
179
|
|
|
169
180
|
if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {
|
|
170
181
|
rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;
|
|
171
182
|
teacherInstructions = normalizedQuestion.teacherInstructionsEnabled ? normalizedQuestion.teacherInstructions : null;
|
|
183
|
+
choices = normalizedQuestion.choiceRationaleEnabled ? normalizedQuestion.choices : choicesWillNullRationales;
|
|
172
184
|
} else {
|
|
173
185
|
rationale = null;
|
|
174
186
|
teacherInstructions = null;
|
|
187
|
+
choices = choicesWillNullRationales;
|
|
175
188
|
}
|
|
176
189
|
|
|
177
190
|
out = {
|
|
178
191
|
disabled: env.mode !== 'gather',
|
|
179
192
|
mode: env.mode,
|
|
180
193
|
prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,
|
|
194
|
+
displayType: normalizedQuestion.displayType,
|
|
181
195
|
markup: normalizedQuestion.markup,
|
|
182
196
|
choices: choices,
|
|
183
197
|
feedback: feedback,
|
|
@@ -187,7 +201,7 @@ function model(question, session, env, updateSession) {
|
|
|
187
201
|
};
|
|
188
202
|
resolve(out);
|
|
189
203
|
|
|
190
|
-
case
|
|
204
|
+
case 35:
|
|
191
205
|
case "end":
|
|
192
206
|
return _context.stop();
|
|
193
207
|
}
|
|
@@ -302,4 +316,23 @@ var createCorrectResponseSession = function createCorrectResponseSession(questio
|
|
|
302
316
|
};
|
|
303
317
|
|
|
304
318
|
exports.createCorrectResponseSession = createCorrectResponseSession;
|
|
319
|
+
|
|
320
|
+
var validate = function validate() {
|
|
321
|
+
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
322
|
+
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
323
|
+
var markup = model.markup;
|
|
324
|
+
var maxResponseAreas = config.maxResponseAreas;
|
|
325
|
+
var errors = {};
|
|
326
|
+
var nbOfResponseAreas = ((markup || '').match(/\{\{(\d+)\}\}/g) || []).length;
|
|
327
|
+
|
|
328
|
+
if (nbOfResponseAreas > maxResponseAreas) {
|
|
329
|
+
errors.responseAreasError = "No more than ".concat(maxResponseAreas, " response areas should be defined.");
|
|
330
|
+
} else if (nbOfResponseAreas < 1) {
|
|
331
|
+
errors.responseAreasError = 'There should be defined at least 1 response area.';
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
return errors;
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
exports.validate = validate;
|
|
305
338
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["getFeedback","correct","normalize","question","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","model","session","env","updateSession","Promise","resolve","normalizedQuestion","value","choices","obj","area","key","choice","feedback","mode","allCorrectResponses","respAreaLength","Object","keys","length","correctResponses","i","result","answer","correctChoice","isCorrect","lockChoiceOrder","teacherInstructions","rationale","role","out","disabled","prompt","markup","responseCorrect","getScore","undefined","config","maxScore","correctCount","total","str","toFixed","parseFloat","outcome","score","empty","partialScoringEnabled","partialScoring","enabled","Math","floor","createCorrectResponseSession","forEach","correctChoices","filter","c","id"],"mappings":"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","sourcesContent":["import map from 'lodash/map';\nimport reduce from 'lodash/reduce';\nimport isEmpty from 'lodash/isEmpty';\nimport {\n lockChoices,\n getShuffledChoices,\n partialScoring,\n} from '@pie-lib/controller-utils';\n\nimport { getAllCorrectResponses } from './utils';\n\nconst getFeedback = (correct) => {\n if (correct) {\n return 'correct';\n }\n\n return 'incorrect';\n};\n\nexport const normalize = (question) => ({\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async (resolve) => {\n const normalizedQuestion = normalize(question);\n const { value = {} } = session || {};\n let choices = reduce(\n normalizedQuestion.choices,\n (obj, area, key) => {\n obj[key] = map(area, (choice) => choice);\n\n return obj;\n },\n {}\n );\n\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n const allCorrectResponses = getAllCorrectResponses(normalizedQuestion);\n const respAreaLength = Object.keys(allCorrectResponses).length;\n let correctResponses = 0;\n\n for (let i = 0; i < respAreaLength; i++) {\n const result = reduce(\n allCorrectResponses,\n (obj, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n const isCorrect =\n answer && correctChoice && correctChoice === answer;\n\n obj.feedback[key] = getFeedback(isCorrect);\n\n if (isCorrect) {\n obj.correctResponses += 1;\n }\n\n return obj;\n },\n { correctResponses: 0, feedback: {} }\n );\n\n if (result.correctResponses >= correctResponses) {\n correctResponses = result.correctResponses;\n feedback = result.feedback;\n }\n\n if (result.correctResponses === respAreaLength) {\n break;\n }\n }\n }\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n const keys = Object.keys(choices);\n let i;\n\n for (i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n choices[key] = await getShuffledChoices(\n choices[key],\n session,\n updateSession,\n 'value'\n );\n }\n }\n\n let teacherInstructions = null;\n let rationale = null;\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n rationale = normalizedQuestion.rationaleEnabled\n ? normalizedQuestion.rationale\n : null;\n teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n rationale = null;\n teacherInstructions = null;\n }\n\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n prompt: normalizedQuestion.promptEnabled\n ? normalizedQuestion.prompt\n : null,\n markup: normalizedQuestion.markup,\n choices,\n feedback,\n\n responseCorrect:\n env.mode === 'evaluate'\n ? getScore(normalizedQuestion, session) === 1\n : undefined,\n rationale,\n teacherInstructions,\n };\n\n resolve(out);\n });\n}\n\nexport const getScore = (config, session) => {\n const { value = {} } = session || {};\n const maxScore =\n config && config.choices ? Object.keys(config.choices).length : 0;\n const allCorrectResponses = getAllCorrectResponses(config);\n let correctCount = 0;\n\n for (let i = 0; i < maxScore; i++) {\n const result = reduce(\n allCorrectResponses,\n (total, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n\n if (correctChoice && answer && correctChoice === answer) {\n return total;\n }\n\n return total - 1;\n },\n maxScore\n );\n\n if (result > correctCount) {\n correctCount = result;\n }\n\n if (result === maxScore) {\n break;\n }\n }\n\n const str = (correctCount / maxScore).toFixed(2);\n\n return parseFloat(str);\n};\n\n/**\n *\n * The score is partial by default for checkbox mode, allOrNothing for radio mode.\n * To disable partial scoring for checkbox mode you either set model.partialScoring = false or env.partialScoring =\n * false. the value in `env` will override the value in `model`.\n * @param {Object} model - the main model\n * @param {boolean} model.partialScoring - is partial scoring enabled (if undefined set to to true)\n * @param {*} session\n * @param {Object} env\n * @param {boolean} env.partialScoring - is partial scoring enabled (if undefined default to true) This overrides\n * `model.partialScoring`.\n */\nexport function outcome(model, session, env = {}) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const score = getScore(model, session);\n\n resolve({\n score: partialScoringEnabled ? score : Math.floor(score),\n empty: false,\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { choices } = question;\n const value = {};\n\n if (choices) {\n Object.keys(choices).forEach((key, i) => {\n const correctChoices =\n choices[key] && choices[key].filter((c) => c.correct);\n\n value[i] = correctChoices && correctChoices[0].value;\n });\n }\n\n resolve({\n id: '1',\n value,\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["getFeedback","correct","normalize","question","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","choiceRationaleEnabled","model","session","env","updateSession","Promise","resolve","normalizedQuestion","value","choices","obj","area","key","choice","feedback","mode","allCorrectResponses","respAreaLength","Object","keys","length","correctResponses","i","result","answer","correctChoice","isCorrect","lockChoiceOrder","teacherInstructions","rationale","choicesWillNullRationales","reduce","acc","currentValue","map","role","out","disabled","prompt","displayType","markup","responseCorrect","getScore","undefined","config","maxScore","correctCount","total","str","toFixed","parseFloat","outcome","score","empty","partialScoringEnabled","partialScoring","enabled","Math","floor","createCorrectResponseSession","forEach","correctChoices","filter","c","id","validate","maxResponseAreas","errors","nbOfResponseAreas","match","responseAreasError"],"mappings":"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","sourcesContent":["import map from 'lodash/map';\nimport reduce from 'lodash/reduce';\nimport isEmpty from 'lodash/isEmpty';\nimport {\n lockChoices,\n getShuffledChoices,\n partialScoring,\n} from '@pie-lib/controller-utils';\n\nimport { getAllCorrectResponses } from './utils';\n\nconst getFeedback = (correct) => {\n if (correct) {\n return 'correct';\n }\n\n return 'incorrect';\n};\n\nexport const normalize = (question) => ({\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n choiceRationaleEnabled: true,\n ...question,\n});\n\n/**\n *\n * @param {*} question\n * @param {*} session\n * @param {*} env\n * @param {*} updateSession - optional - a function that will set the properties passed into it on the session.\n */\nexport function model(question, session, env, updateSession) {\n return new Promise(async (resolve) => {\n const normalizedQuestion = normalize(question);\n const { value = {} } = session || {};\n let choices = reduce(\n normalizedQuestion.choices,\n (obj, area, key) => {\n obj[key] = map(area, (choice) => choice);\n\n return obj;\n },\n {}\n );\n\n let feedback = {};\n\n if (env.mode === 'evaluate') {\n const allCorrectResponses = getAllCorrectResponses(normalizedQuestion);\n const respAreaLength = Object.keys(allCorrectResponses).length;\n let correctResponses = 0;\n\n for (let i = 0; i < respAreaLength; i++) {\n const result = reduce(\n allCorrectResponses,\n (obj, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n const isCorrect =\n answer && correctChoice && correctChoice === answer;\n\n obj.feedback[key] = getFeedback(isCorrect);\n\n if (isCorrect) {\n obj.correctResponses += 1;\n }\n\n return obj;\n },\n { correctResponses: 0, feedback: {} }\n );\n\n if (result.correctResponses >= correctResponses) {\n correctResponses = result.correctResponses;\n feedback = result.feedback;\n }\n\n if (result.correctResponses === respAreaLength) {\n break;\n }\n }\n }\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n const keys = Object.keys(choices);\n let i;\n\n for (i = 0; i < keys.length; i++) {\n const key = keys[i];\n\n choices[key] = await getShuffledChoices(\n choices[key],\n session,\n updateSession,\n 'value'\n );\n }\n }\n\n let teacherInstructions = null;\n let rationale = null;\n\n const choicesWillNullRationales = (Object.keys(choices) || []).reduce(\n (acc, currentValue) => {\n acc[currentValue] = (choices[currentValue] || []).map((choice) => ({\n ...choice,\n rationale: null,\n }));\n\n return acc;\n },\n {}\n );\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n rationale = normalizedQuestion.rationaleEnabled\n ? normalizedQuestion.rationale\n : null;\n teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n\n choices = normalizedQuestion.choiceRationaleEnabled\n ? normalizedQuestion.choices\n : choicesWillNullRationales;\n } else {\n rationale = null;\n teacherInstructions = null;\n choices = choicesWillNullRationales;\n }\n\n const out = {\n disabled: env.mode !== 'gather',\n mode: env.mode,\n prompt: normalizedQuestion.promptEnabled\n ? normalizedQuestion.prompt\n : null,\n displayType: normalizedQuestion.displayType,\n markup: normalizedQuestion.markup,\n choices,\n feedback,\n\n responseCorrect:\n env.mode === 'evaluate'\n ? getScore(normalizedQuestion, session) === 1\n : undefined,\n rationale,\n teacherInstructions,\n };\n\n resolve(out);\n });\n}\n\nexport const getScore = (config, session) => {\n const { value = {} } = session || {};\n const maxScore =\n config && config.choices ? Object.keys(config.choices).length : 0;\n const allCorrectResponses = getAllCorrectResponses(config);\n let correctCount = 0;\n\n for (let i = 0; i < maxScore; i++) {\n const result = reduce(\n allCorrectResponses,\n (total, choices, key) => {\n const answer = (value && value[key]) || '';\n const correctChoice = choices[i] || '';\n\n if (correctChoice && answer && correctChoice === answer) {\n return total;\n }\n\n return total - 1;\n },\n maxScore\n );\n\n if (result > correctCount) {\n correctCount = result;\n }\n\n if (result === maxScore) {\n break;\n }\n }\n\n const str = (correctCount / maxScore).toFixed(2);\n\n return parseFloat(str);\n};\n\n/**\n *\n * The score is partial by default for checkbox mode, allOrNothing for radio mode.\n * To disable partial scoring for checkbox mode you either set model.partialScoring = false or env.partialScoring =\n * false. the value in `env` will override the value in `model`.\n * @param {Object} model - the main model\n * @param {boolean} model.partialScoring - is partial scoring enabled (if undefined set to to true)\n * @param {*} session\n * @param {Object} env\n * @param {boolean} env.partialScoring - is partial scoring enabled (if undefined default to true) This overrides\n * `model.partialScoring`.\n */\nexport function outcome(model, session, env = {}) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const score = getScore(model, session);\n\n resolve({\n score: partialScoringEnabled ? score : Math.floor(score),\n empty: false,\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { choices } = question;\n const value = {};\n\n if (choices) {\n Object.keys(choices).forEach((key, i) => {\n const correctChoices =\n choices[key] && choices[key].filter((c) => c.correct);\n\n value[i] = correctChoices && correctChoices[0].value;\n });\n }\n\n resolve({\n id: '1',\n value,\n });\n } else {\n resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { markup } = model;\n const { maxResponseAreas } = config;\n const errors = {};\n\n const nbOfResponseAreas = ((markup || '').match(/\\{\\{(\\d+)\\}\\}/g) || []).length;\n\n if (nbOfResponseAreas > maxResponseAreas) {\n errors.responseAreasError = `No more than ${maxResponseAreas} response areas should be defined.`;\n } else if (nbOfResponseAreas < 1) {\n errors.responseAreasError = 'There should be defined at least 1 response area.';\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/package.json
CHANGED
package/docs/config-schema.json
CHANGED
|
@@ -83,6 +83,38 @@
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
},
|
|
86
|
+
"spellCheck": {
|
|
87
|
+
"title": "ConfigureProp",
|
|
88
|
+
"type": "object",
|
|
89
|
+
"properties": {
|
|
90
|
+
"settings": {
|
|
91
|
+
"description": "Indicates if the item has to be displayed in the Settings Panel",
|
|
92
|
+
"type": "boolean",
|
|
93
|
+
"title": "settings"
|
|
94
|
+
},
|
|
95
|
+
"label": {
|
|
96
|
+
"description": "Indicates the label for the item that has to be displayed in the Settings Panel",
|
|
97
|
+
"type": "string",
|
|
98
|
+
"title": "label"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"choiceRationale": {
|
|
103
|
+
"title": "ConfigureProp",
|
|
104
|
+
"type": "object",
|
|
105
|
+
"properties": {
|
|
106
|
+
"settings": {
|
|
107
|
+
"description": "Indicates if the item has to be displayed in the Settings Panel",
|
|
108
|
+
"type": "boolean",
|
|
109
|
+
"title": "settings"
|
|
110
|
+
},
|
|
111
|
+
"label": {
|
|
112
|
+
"description": "Indicates the label for the item that has to be displayed in the Settings Panel",
|
|
113
|
+
"type": "string",
|
|
114
|
+
"title": "label"
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
},
|
|
86
118
|
"scoringType": {
|
|
87
119
|
"title": "ConfigureProp",
|
|
88
120
|
"type": "object",
|
|
@@ -131,6 +163,53 @@
|
|
|
131
163
|
}
|
|
132
164
|
}
|
|
133
165
|
},
|
|
166
|
+
"maxResponseAreas": {
|
|
167
|
+
"description": "Maximum number of response areas",
|
|
168
|
+
"type": "number",
|
|
169
|
+
"title": "maxResponseAreas"
|
|
170
|
+
},
|
|
171
|
+
"maxImageWidth": {
|
|
172
|
+
"title": "ConfigureMaxImageDimensionsProp",
|
|
173
|
+
"type": "object",
|
|
174
|
+
"properties": {
|
|
175
|
+
"teacherInstructions": {
|
|
176
|
+
"description": "Indicates the max dimension for images in teacher instructions",
|
|
177
|
+
"type": "number",
|
|
178
|
+
"title": "teacherInstructions"
|
|
179
|
+
},
|
|
180
|
+
"prompt": {
|
|
181
|
+
"description": "Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified",
|
|
182
|
+
"type": "number",
|
|
183
|
+
"title": "prompt"
|
|
184
|
+
},
|
|
185
|
+
"rationale": {
|
|
186
|
+
"description": "Indicates the max dimension for images in rationale",
|
|
187
|
+
"type": "number",
|
|
188
|
+
"title": "rationale"
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
"maxImageHeight": {
|
|
193
|
+
"title": "ConfigureMaxImageDimensionsProp",
|
|
194
|
+
"type": "object",
|
|
195
|
+
"properties": {
|
|
196
|
+
"teacherInstructions": {
|
|
197
|
+
"description": "Indicates the max dimension for images in teacher instructions",
|
|
198
|
+
"type": "number",
|
|
199
|
+
"title": "teacherInstructions"
|
|
200
|
+
},
|
|
201
|
+
"prompt": {
|
|
202
|
+
"description": "Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified",
|
|
203
|
+
"type": "number",
|
|
204
|
+
"title": "prompt"
|
|
205
|
+
},
|
|
206
|
+
"rationale": {
|
|
207
|
+
"description": "Indicates the max dimension for images in rationale",
|
|
208
|
+
"type": "number",
|
|
209
|
+
"title": "rationale"
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
},
|
|
134
213
|
"showPrompt": {
|
|
135
214
|
"description": "Determines whether prompt field will be displayed or not",
|
|
136
215
|
"default": true,
|
|
@@ -166,6 +245,27 @@
|
|
|
166
245
|
"title": "label"
|
|
167
246
|
}
|
|
168
247
|
}
|
|
248
|
+
},
|
|
249
|
+
"ConfigureMaxImageDimensionsProp": {
|
|
250
|
+
"title": "ConfigureMaxImageDimensionsProp",
|
|
251
|
+
"type": "object",
|
|
252
|
+
"properties": {
|
|
253
|
+
"teacherInstructions": {
|
|
254
|
+
"description": "Indicates the max dimension for images in teacher instructions",
|
|
255
|
+
"type": "number",
|
|
256
|
+
"title": "teacherInstructions"
|
|
257
|
+
},
|
|
258
|
+
"prompt": {
|
|
259
|
+
"description": "Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified",
|
|
260
|
+
"type": "number",
|
|
261
|
+
"title": "prompt"
|
|
262
|
+
},
|
|
263
|
+
"rationale": {
|
|
264
|
+
"description": "Indicates the max dimension for images in rationale",
|
|
265
|
+
"type": "number",
|
|
266
|
+
"title": "rationale"
|
|
267
|
+
}
|
|
268
|
+
}
|
|
169
269
|
}
|
|
170
270
|
},
|
|
171
271
|
"$schema": "http://json-schema.org/draft-07/schema#"
|
|
@@ -62,6 +62,30 @@ Indicates if the item has to be displayed in the Settings Panel
|
|
|
62
62
|
|
|
63
63
|
Indicates the label for the item that has to be displayed in the Settings Panel
|
|
64
64
|
|
|
65
|
+
# `spellCheck` (object)
|
|
66
|
+
|
|
67
|
+
Properties of the `spellCheck` object:
|
|
68
|
+
|
|
69
|
+
## `settings` (boolean)
|
|
70
|
+
|
|
71
|
+
Indicates if the item has to be displayed in the Settings Panel
|
|
72
|
+
|
|
73
|
+
## `label` (string)
|
|
74
|
+
|
|
75
|
+
Indicates the label for the item that has to be displayed in the Settings Panel
|
|
76
|
+
|
|
77
|
+
# `choiceRationale` (object)
|
|
78
|
+
|
|
79
|
+
Properties of the `choiceRationale` object:
|
|
80
|
+
|
|
81
|
+
## `settings` (boolean)
|
|
82
|
+
|
|
83
|
+
Indicates if the item has to be displayed in the Settings Panel
|
|
84
|
+
|
|
85
|
+
## `label` (string)
|
|
86
|
+
|
|
87
|
+
Indicates the label for the item that has to be displayed in the Settings Panel
|
|
88
|
+
|
|
65
89
|
# `scoringType` (object)
|
|
66
90
|
|
|
67
91
|
Properties of the `scoringType` object:
|
|
@@ -98,6 +122,42 @@ Indicates if the item has to be displayed in the Settings Panel
|
|
|
98
122
|
|
|
99
123
|
Indicates the label for the item that has to be displayed in the Settings Panel
|
|
100
124
|
|
|
125
|
+
# `maxResponseAreas` (number)
|
|
126
|
+
|
|
127
|
+
Maximum number of response areas
|
|
128
|
+
|
|
129
|
+
# `maxImageWidth` (object)
|
|
130
|
+
|
|
131
|
+
Properties of the `maxImageWidth` object:
|
|
132
|
+
|
|
133
|
+
## `teacherInstructions` (number)
|
|
134
|
+
|
|
135
|
+
Indicates the max dimension for images in teacher instructions
|
|
136
|
+
|
|
137
|
+
## `prompt` (number)
|
|
138
|
+
|
|
139
|
+
Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified
|
|
140
|
+
|
|
141
|
+
## `rationale` (number)
|
|
142
|
+
|
|
143
|
+
Indicates the max dimension for images in rationale
|
|
144
|
+
|
|
145
|
+
# `maxImageHeight` (object)
|
|
146
|
+
|
|
147
|
+
Properties of the `maxImageHeight` object:
|
|
148
|
+
|
|
149
|
+
## `teacherInstructions` (number)
|
|
150
|
+
|
|
151
|
+
Indicates the max dimension for images in teacher instructions
|
|
152
|
+
|
|
153
|
+
## `prompt` (number)
|
|
154
|
+
|
|
155
|
+
Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified
|
|
156
|
+
|
|
157
|
+
## `rationale` (number)
|
|
158
|
+
|
|
159
|
+
Indicates the max dimension for images in rationale
|
|
160
|
+
|
|
101
161
|
# `showPrompt` (boolean)
|
|
102
162
|
|
|
103
163
|
Determines whether prompt field will be displayed or not
|
|
@@ -132,4 +192,20 @@ Indicates if the item has to be displayed in the Settings Panel
|
|
|
132
192
|
|
|
133
193
|
### `label` (string)
|
|
134
194
|
|
|
135
|
-
Indicates the label for the item that has to be displayed in the Settings Panel
|
|
195
|
+
Indicates the label for the item that has to be displayed in the Settings Panel
|
|
196
|
+
|
|
197
|
+
## `ConfigureMaxImageDimensionsProp` (object)
|
|
198
|
+
|
|
199
|
+
Properties of the `ConfigureMaxImageDimensionsProp` object:
|
|
200
|
+
|
|
201
|
+
### `teacherInstructions` (number)
|
|
202
|
+
|
|
203
|
+
Indicates the max dimension for images in teacher instructions
|
|
204
|
+
|
|
205
|
+
### `prompt` (number)
|
|
206
|
+
|
|
207
|
+
Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified
|
|
208
|
+
|
|
209
|
+
### `rationale` (number)
|
|
210
|
+
|
|
211
|
+
Indicates the max dimension for images in rationale
|
package/docs/demo/generate.js
CHANGED
|
@@ -13,55 +13,65 @@ exports.model = (id, element) => ({
|
|
|
13
13
|
{
|
|
14
14
|
label: 'cow ',
|
|
15
15
|
value: '0',
|
|
16
|
-
correct: true
|
|
16
|
+
correct: true,
|
|
17
|
+
rationale: 'rationale cow'
|
|
17
18
|
},
|
|
18
19
|
{
|
|
19
20
|
label: 'dog ',
|
|
20
21
|
value: '1',
|
|
21
|
-
correct: false
|
|
22
|
+
correct: false,
|
|
23
|
+
rationale: 'rationale dog'
|
|
22
24
|
},
|
|
23
25
|
{
|
|
24
26
|
label: 'cat ',
|
|
25
27
|
value: '2',
|
|
26
|
-
correct: false
|
|
28
|
+
correct: false,
|
|
29
|
+
rationale: 'rationale car'
|
|
27
30
|
}
|
|
28
31
|
],
|
|
29
32
|
'1': [
|
|
30
33
|
{
|
|
31
34
|
label: 'over ',
|
|
32
35
|
value: '0',
|
|
33
|
-
correct: true
|
|
36
|
+
correct: true,
|
|
37
|
+
rationale: 'rationale over'
|
|
34
38
|
},
|
|
35
39
|
{
|
|
36
40
|
label: 'under ',
|
|
37
41
|
value: '1',
|
|
38
|
-
correct: false
|
|
42
|
+
correct: false,
|
|
43
|
+
rationale: 'rationale under'
|
|
39
44
|
},
|
|
40
45
|
{
|
|
41
46
|
label: 'across ',
|
|
42
47
|
value: '2',
|
|
43
|
-
correct: false
|
|
48
|
+
correct: false,
|
|
49
|
+
rationale: 'rationale across'
|
|
44
50
|
}
|
|
45
51
|
],
|
|
46
52
|
'2': [
|
|
47
53
|
{
|
|
48
54
|
label: 'moon ',
|
|
49
55
|
value: '0',
|
|
50
|
-
correct: true
|
|
56
|
+
correct: true,
|
|
57
|
+
rationale: 'rationale moon'
|
|
51
58
|
},
|
|
52
59
|
{
|
|
53
60
|
label: 'sun',
|
|
54
61
|
value: '2',
|
|
55
|
-
correct: false
|
|
62
|
+
correct: false,
|
|
63
|
+
rationale: 'rationale sun'
|
|
56
64
|
},
|
|
57
65
|
{
|
|
58
66
|
label: 'house ',
|
|
59
67
|
value: '3',
|
|
60
|
-
correct: false
|
|
68
|
+
correct: false,
|
|
69
|
+
rationale: 'rationale house'
|
|
61
70
|
}
|
|
62
71
|
]
|
|
63
72
|
},
|
|
64
73
|
alternateResponse: {
|
|
65
74
|
'2': ['2']
|
|
66
|
-
}
|
|
75
|
+
},
|
|
76
|
+
choiceRationaleEnabled: false
|
|
67
77
|
});
|
package/docs/pie-schema.json
CHANGED
|
@@ -28,6 +28,11 @@
|
|
|
28
28
|
"description": "Indicates if choice is correct",
|
|
29
29
|
"type": "boolean",
|
|
30
30
|
"title": "correct"
|
|
31
|
+
},
|
|
32
|
+
"rationale": {
|
|
33
|
+
"description": "Rationale for the choice",
|
|
34
|
+
"type": "string",
|
|
35
|
+
"title": "rationale"
|
|
31
36
|
}
|
|
32
37
|
},
|
|
33
38
|
"required": [
|
|
@@ -107,6 +112,16 @@
|
|
|
107
112
|
"type": "boolean",
|
|
108
113
|
"title": "rationaleEnabled"
|
|
109
114
|
},
|
|
115
|
+
"spellCheckEnabled": {
|
|
116
|
+
"description": "Indicates if spellcheck is enabled for the author. Default value is true",
|
|
117
|
+
"type": "boolean",
|
|
118
|
+
"title": "spellCheckEnabled"
|
|
119
|
+
},
|
|
120
|
+
"choiceRationaleEnabled": {
|
|
121
|
+
"description": "Indicates if Choice Level Rationales are enabled",
|
|
122
|
+
"type": "boolean",
|
|
123
|
+
"title": "choiceRationaleEnabled"
|
|
124
|
+
},
|
|
110
125
|
"studentInstructionsEnabled": {
|
|
111
126
|
"description": "Indicates if Student Instructions are enabled",
|
|
112
127
|
"type": "boolean",
|
|
@@ -117,6 +132,11 @@
|
|
|
117
132
|
"type": "boolean",
|
|
118
133
|
"title": "teacherInstructionsEnabled"
|
|
119
134
|
},
|
|
135
|
+
"displayType": {
|
|
136
|
+
"description": "Indicates display type for the container of the pie-ui element",
|
|
137
|
+
"type": "string",
|
|
138
|
+
"title": "displayType"
|
|
139
|
+
},
|
|
120
140
|
"toolbarEditorPosition": {
|
|
121
141
|
"description": "Indicates the editor's toolbar position which can be 'bottom' or 'top'",
|
|
122
142
|
"default": ": 'bottom'",
|
|
@@ -140,7 +160,9 @@
|
|
|
140
160
|
},
|
|
141
161
|
"required": [
|
|
142
162
|
"alternateResponses",
|
|
163
|
+
"choiceRationaleEnabled",
|
|
143
164
|
"choices",
|
|
165
|
+
"displayType",
|
|
144
166
|
"element",
|
|
145
167
|
"id",
|
|
146
168
|
"lockChoiceOrder",
|
|
@@ -149,6 +171,7 @@
|
|
|
149
171
|
"rationale",
|
|
150
172
|
"rationaleEnabled",
|
|
151
173
|
"scoringType",
|
|
174
|
+
"spellCheckEnabled",
|
|
152
175
|
"studentInstructionsEnabled",
|
|
153
176
|
"teacherInstructionsEnabled"
|
|
154
177
|
],
|
|
@@ -169,6 +192,27 @@
|
|
|
169
192
|
}
|
|
170
193
|
}
|
|
171
194
|
},
|
|
195
|
+
"ConfigureMaxImageDimensionsProp": {
|
|
196
|
+
"title": "ConfigureMaxImageDimensionsProp",
|
|
197
|
+
"type": "object",
|
|
198
|
+
"properties": {
|
|
199
|
+
"teacherInstructions": {
|
|
200
|
+
"description": "Indicates the max dimension for images in teacher instructions",
|
|
201
|
+
"type": "number",
|
|
202
|
+
"title": "teacherInstructions"
|
|
203
|
+
},
|
|
204
|
+
"prompt": {
|
|
205
|
+
"description": "Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified",
|
|
206
|
+
"type": "number",
|
|
207
|
+
"title": "prompt"
|
|
208
|
+
},
|
|
209
|
+
"rationale": {
|
|
210
|
+
"description": "Indicates the max dimension for images in rationale",
|
|
211
|
+
"type": "number",
|
|
212
|
+
"title": "rationale"
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
},
|
|
172
216
|
"Choice": {
|
|
173
217
|
"title": "Choice",
|
|
174
218
|
"type": "object",
|
|
@@ -187,6 +231,11 @@
|
|
|
187
231
|
"description": "Indicates if choice is correct",
|
|
188
232
|
"type": "boolean",
|
|
189
233
|
"title": "correct"
|
|
234
|
+
},
|
|
235
|
+
"rationale": {
|
|
236
|
+
"description": "Rationale for the choice",
|
|
237
|
+
"type": "string",
|
|
238
|
+
"title": "rationale"
|
|
190
239
|
}
|
|
191
240
|
},
|
|
192
241
|
"required": [
|
package/docs/pie-schema.json.md
CHANGED
|
@@ -56,6 +56,14 @@ Indicates teacher instructions
|
|
|
56
56
|
|
|
57
57
|
Indicates if Rationale are enabled
|
|
58
58
|
|
|
59
|
+
# `spellCheckEnabled` (boolean, required)
|
|
60
|
+
|
|
61
|
+
Indicates if spellcheck is enabled for the author. Default value is true
|
|
62
|
+
|
|
63
|
+
# `choiceRationaleEnabled` (boolean, required)
|
|
64
|
+
|
|
65
|
+
Indicates if Choice Level Rationales are enabled
|
|
66
|
+
|
|
59
67
|
# `studentInstructionsEnabled` (boolean, required)
|
|
60
68
|
|
|
61
69
|
Indicates if Student Instructions are enabled
|
|
@@ -64,6 +72,10 @@ Indicates if Student Instructions are enabled
|
|
|
64
72
|
|
|
65
73
|
Indicates if Teacher Instructions are enabled
|
|
66
74
|
|
|
75
|
+
# `displayType` (string, required)
|
|
76
|
+
|
|
77
|
+
Indicates display type for the container of the pie-ui element
|
|
78
|
+
|
|
67
79
|
# `toolbarEditorPosition` (string, enum)
|
|
68
80
|
|
|
69
81
|
Indicates the editor's toolbar position which can be 'bottom' or 'top'
|
|
@@ -101,6 +113,22 @@ Indicates if the item has to be displayed in the Settings Panel
|
|
|
101
113
|
|
|
102
114
|
Indicates the label for the item that has to be displayed in the Settings Panel
|
|
103
115
|
|
|
116
|
+
## `ConfigureMaxImageDimensionsProp` (object)
|
|
117
|
+
|
|
118
|
+
Properties of the `ConfigureMaxImageDimensionsProp` object:
|
|
119
|
+
|
|
120
|
+
### `teacherInstructions` (number)
|
|
121
|
+
|
|
122
|
+
Indicates the max dimension for images in teacher instructions
|
|
123
|
+
|
|
124
|
+
### `prompt` (number)
|
|
125
|
+
|
|
126
|
+
Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified
|
|
127
|
+
|
|
128
|
+
### `rationale` (number)
|
|
129
|
+
|
|
130
|
+
Indicates the max dimension for images in rationale
|
|
131
|
+
|
|
104
132
|
## `Choice` (object)
|
|
105
133
|
|
|
106
134
|
Properties of the `Choice` object:
|
|
@@ -115,4 +143,8 @@ The label of the choice
|
|
|
115
143
|
|
|
116
144
|
### `correct` (boolean)
|
|
117
145
|
|
|
118
|
-
Indicates if choice is correct
|
|
146
|
+
Indicates if choice is correct
|
|
147
|
+
|
|
148
|
+
### `rationale` (string)
|
|
149
|
+
|
|
150
|
+
Rationale for the choice
|
package/lib/index.js
CHANGED
|
@@ -35,7 +35,7 @@ var _inlineDropdown = _interopRequireDefault(require("./inline-dropdown"));
|
|
|
35
35
|
|
|
36
36
|
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); }; }
|
|
37
37
|
|
|
38
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try {
|
|
38
|
+
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; } }
|
|
39
39
|
|
|
40
40
|
var RootInlineDropdown = /*#__PURE__*/function (_HTMLElement) {
|
|
41
41
|
(0, _inherits2["default"])(RootInlineDropdown, _HTMLElement);
|
|
@@ -54,6 +54,7 @@ var RootInlineDropdown = /*#__PURE__*/function (_HTMLElement) {
|
|
|
54
54
|
rationale: _this._model.rationale,
|
|
55
55
|
teacherInstructions: _this._model.teacherInstructions,
|
|
56
56
|
disabled: _this._model.disabled,
|
|
57
|
+
displayType: _this._model.displayType,
|
|
57
58
|
markup: _this._model.markup,
|
|
58
59
|
mode: _this._model.mode,
|
|
59
60
|
choices: _this._model.choices,
|