@pie-element/match 4.7.3-next.133 → 4.7.3-next.1332

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["log","getResponseCorrectness","model","answers","env","isPartialScoring","partialScoring","enabled","rows","checkboxMode","choiceMode","Object","keys","length","totalCorrectAnswers","getTotalCorrectAnswers","getTotalCorrect","correctAnswers","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","incorrectAnswers","forEach","row","answer","id","values","v","i","matchingTable","layout","noOfTotalCorrectAnswers","value","getPartialScore","totalCorrect","total","extraAnswers","score","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","undefined","completed","empty","out","createDefaultModel","defaults","normalize","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","updateSession","normalizedQuestion","correctResponse","correctInfo","lockChoiceOrder","fb","feedback","then","allowFeedback","prompt","config","shuffled","disabled","view","role","teacherInstructions","rationale","assign","createCorrectResponseSession","r"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env = {}) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const rows = model.rows;\n const checkboxMode = model.choiceMode === 'checkbox';\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = checkboxMode ? getTotalCorrectAnswers(model) : getTotalCorrect(model);\n const correctAnswers = checkboxMode\n ? getCheckboxes(rows, answers).correctAnswers\n : getCorrectRadios(rows, answers);\n\n if (totalCorrectAnswers === correctAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers = {}) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCheckboxes = (rows, answers) => {\n let correctAnswers = 0;\n let incorrectAnswers = 0;\n\n rows.forEach(row => {\n const answer = answers[row.id];\n\n if (answer) {\n row.values.forEach((v, i) => {\n if (answer[i] && answer[i] === v ) {\n correctAnswers += 1;\n } else if (answer[i] && answer[i] !== v ){\n incorrectAnswers += 1;\n }\n });\n }\n });\n\n return { correctAnswers, incorrectAnswers };\n};\n\nconst getCorrectRadios = (rows, answers) => {\n let correctAnswers = 0;\n\n rows.forEach(row => {\n if (isEqual(row.values, answers[row.id])) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = question => {\n const checkboxMode = question.choiceMode === 'checkbox';\n const matchingTable = checkboxMode ? question.layout - 1 : 1;\n return (question.rows.length || 0) * matchingTable;\n};\n\nconst getTotalCorrectAnswers = question => {\n let noOfTotalCorrectAnswers = 0;\n\n question.rows.forEach(row => {\n row.values.forEach(value => {\n if(value) {\n noOfTotalCorrectAnswers += 1;\n }\n });\n });\n\n return noOfTotalCorrectAnswers;\n};\n\nconst getPartialScore = (question, answers) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n\n if(checkboxMode) {\n const { correctAnswers, incorrectAnswers } = getCheckboxes(question.rows, answers);\n const totalCorrect = getTotalCorrectAnswers(question);\n\n const total = totalCorrect === 0 ? 1 : totalCorrect;\n\n if (correctAnswers + incorrectAnswers > totalCorrect) {\n const extraAnswers = (correctAnswers + incorrectAnswers) - totalCorrect;\n const score = parseFloat(((correctAnswers - extraAnswers) / total).toFixed(2));\n\n return score < 0 ? 0 : score;\n } else {\n return parseFloat((correctAnswers / total).toFixed(2));\n }\n } else {\n const correctAnswers = getCorrectRadios(question.rows, answers);\n const totalCorrect = getTotalCorrect(question) === 0 ? 1 : getTotalCorrect(question);\n\n return parseFloat((correctAnswers / totalCorrect).toFixed(2));\n }\n};\n\nconst getOutComeScore = (question, env, answers = {}) => {\n const correctness = getCorrectness(question, env, answers);\n const isPartialScoring = partialScoring.enabled(question, env);\n\n return correctness === 'correct'\n ? 1\n : correctness === 'partial' && isPartialScoring\n ? getPartialScore(question, answers)\n : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise(resolve => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const out = {\n score: getOutComeScore(question, env, session.answers)\n };\n\n resolve(out);\n }\n });\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise(resolve => {\n resolve({\n ...defaults,\n ...model\n });\n });\n}\n\nexport const normalize = question => ({\n feedbackEnabled: true,\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 = cloneDeep(normalize(question));\n let correctness, score;\n\n if ((!session || isEmpty(session)) && env.mode === 'evaluate') {\n correctness = 'unanswered';\n score = '0%';\n } else {\n correctness = getCorrectness(normalizedQuestion, env, session && session.answers);\n score = `${getOutComeScore(normalizedQuestion, env, session && session.answers) *\n 100}%`;\n }\n\n const correctResponse = {};\n const correctInfo = {\n score,\n correctness\n };\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n normalizedQuestion.rows = await getShuffledChoices(\n normalizedQuestion.rows,\n session,\n updateSession,\n 'id'\n );\n }\n\n normalizedQuestion.rows.forEach(row => {\n correctResponse[row.id] = row.values;\n\n if (env.mode !== 'evaluate') {\n delete row.values;\n }\n });\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctInfo.correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then(feedback => {\n const out = {\n allowFeedback: normalizedQuestion.feedbackEnabled,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n config: {\n ...normalizedQuestion,\n shuffled: !normalizedQuestion.lockChoiceOrder\n },\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view'\n };\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n Object.assign(out, {\n correctResponse,\n correctness: correctInfo,\n });\n }\n\n log('out: ', out);\n resolve(out);\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise(resolve => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { rows } = question;\n const answers = {};\n\n rows.forEach(r => {\n answers[r.id] = r.values;\n });\n\n resolve({\n answers,\n id: '1'\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["log","getResponseCorrectness","model","answers","env","isPartialScoring","partialScoring","enabled","rows","checkboxMode","choiceMode","Object","keys","length","totalCorrectAnswers","getTotalCorrectAnswers","getTotalCorrect","correctAnswers","incorrectAnswers","checkboxes","getCheckboxes","getCorrectRadios","getCorrectness","question","mode","forEach","row","answer","id","values","v","i","matchingTable","layout","noOfTotalCorrectAnswers","value","getPartialScore","totalCorrect","total","extraAnswers","score","parseFloat","toFixed","getOutComeScore","correctness","outcome","session","Promise","resolve","undefined","completed","empty","out","createDefaultModel","defaults","normalize","feedbackEnabled","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","updateSession","normalizedQuestion","correctResponse","correctInfo","lockChoiceOrder","fb","feedback","then","allowFeedback","prompt","config","shuffled","disabled","view","role","teacherInstructions","rationale","assign","createCorrectResponseSession","r","validate","rowsErrors","hasCorrectResponse","errors","correctResponseError"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport isEmpty from 'lodash/isEmpty';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { lockChoices, getShuffledChoices, partialScoring } from '@pie-lib/controller-utils';\nimport debug from 'debug';\n\nconst log = debug('@pie-element:match:controller');\n\nimport defaults from './defaults';\n\nconst getResponseCorrectness = (model, answers, env = {}) => {\n const isPartialScoring = partialScoring.enabled(model, env);\n const rows = model.rows;\n const checkboxMode = model.choiceMode === 'checkbox';\n\n if (!answers || Object.keys(answers).length === 0) {\n return 'unanswered';\n }\n\n const totalCorrectAnswers = checkboxMode ? getTotalCorrectAnswers(model) : getTotalCorrect(model);\n let correctAnswers;\n let incorrectAnswers = 0;\n\n if (checkboxMode) {\n const checkboxes = getCheckboxes(rows, answers);\n\n correctAnswers = checkboxes.correctAnswers;\n incorrectAnswers = checkboxes.incorrectAnswers;\n } else {\n correctAnswers = getCorrectRadios(rows, answers);\n }\n\n if (totalCorrectAnswers === correctAnswers && !incorrectAnswers) {\n return 'correct';\n } else if (correctAnswers === 0) {\n return 'incorrect';\n } else if (isPartialScoring) {\n return 'partial';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectness = (question, env, answers = {}) => {\n if (env.mode === 'evaluate') {\n return getResponseCorrectness(question, answers, env);\n }\n};\n\nconst getCheckboxes = (rows, answers) => {\n let correctAnswers = 0;\n let incorrectAnswers = 0;\n\n rows.forEach(row => {\n const answer = answers[row.id];\n\n if (answer) {\n row.values.forEach((v, i) => {\n if (answer[i] && answer[i] === v) {\n correctAnswers += 1;\n } else if (answer[i] && answer[i] !== v) {\n incorrectAnswers += 1;\n }\n });\n }\n });\n\n return { correctAnswers, incorrectAnswers };\n};\n\nconst getCorrectRadios = (rows, answers) => {\n let correctAnswers = 0;\n\n rows.forEach(row => {\n if (isEqual(row.values, answers[row.id])) {\n correctAnswers += 1;\n }\n });\n\n return correctAnswers;\n};\n\nconst getTotalCorrect = question => {\n const checkboxMode = question.choiceMode === 'checkbox';\n const matchingTable = checkboxMode ? question.layout - 1 : 1;\n return (question.rows.length || 0) * matchingTable;\n};\n\nconst getTotalCorrectAnswers = question => {\n let noOfTotalCorrectAnswers = 0;\n\n question.rows.forEach(row => {\n row.values.forEach(value => {\n if (value) {\n noOfTotalCorrectAnswers += 1;\n }\n });\n });\n\n return noOfTotalCorrectAnswers;\n};\n\nconst getPartialScore = (question, answers) => {\n const checkboxMode = question.choiceMode === 'checkbox';\n\n if (checkboxMode) {\n const { correctAnswers, incorrectAnswers } = getCheckboxes(question.rows, answers);\n const totalCorrect = getTotalCorrectAnswers(question);\n\n const total = totalCorrect === 0 ? 1 : totalCorrect;\n\n if (correctAnswers + incorrectAnswers > totalCorrect) {\n const extraAnswers = (correctAnswers + incorrectAnswers) - totalCorrect;\n const score = parseFloat(((correctAnswers - extraAnswers) / total).toFixed(2));\n\n return score < 0 ? 0 : score;\n } else {\n return parseFloat((correctAnswers / total).toFixed(2));\n }\n } else {\n const correctAnswers = getCorrectRadios(question.rows, answers);\n const totalCorrect = getTotalCorrect(question) === 0 ? 1 : getTotalCorrect(question);\n\n return parseFloat((correctAnswers / totalCorrect).toFixed(2));\n }\n};\n\nconst getOutComeScore = (question, env, answers = {}) => {\n const correctness = getCorrectness(question, env, answers);\n const isPartialScoring = partialScoring.enabled(question, env);\n\n return correctness === 'correct'\n ? 1\n : correctness === 'partial' && isPartialScoring\n ? getPartialScore(question, answers)\n : 0;\n};\n\nexport const outcome = (question, session, env) => {\n return new Promise(resolve => {\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n const out = {\n score: getOutComeScore(question, env, session.answers)\n };\n\n resolve(out);\n }\n });\n};\n\nexport function createDefaultModel(model = {}) {\n return new Promise(resolve => {\n resolve({\n ...defaults,\n ...model\n });\n });\n}\n\nexport const normalize = question => ({\n feedbackEnabled: true,\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 = cloneDeep(normalize(question));\n let correctness, score;\n\n if ((!session || isEmpty(session)) && env.mode === 'evaluate') {\n correctness = 'unanswered';\n score = '0%';\n } else {\n correctness = getCorrectness(normalizedQuestion, env, session && session.answers);\n score = `${getOutComeScore(normalizedQuestion, env, session && session.answers) *\n 100}%`;\n }\n\n const correctResponse = {};\n const correctInfo = {\n score,\n correctness\n };\n\n const lockChoiceOrder = lockChoices(normalizedQuestion, session, env);\n\n if (!lockChoiceOrder) {\n normalizedQuestion.rows = await getShuffledChoices(\n normalizedQuestion.rows,\n session,\n updateSession,\n 'id'\n );\n }\n\n normalizedQuestion.rows.forEach(row => {\n correctResponse[row.id] = row.values;\n\n if (env.mode !== 'evaluate') {\n delete row.values;\n }\n });\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctInfo.correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then(feedback => {\n const out = {\n allowFeedback: normalizedQuestion.feedbackEnabled,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n config: {\n ...normalizedQuestion,\n shuffled: !normalizedQuestion.lockChoiceOrder\n },\n feedback,\n disabled: env.mode !== 'gather',\n view: env.mode === 'view'\n };\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n out.config.rationale = null;\n out.config.teacherInstructions = null;\n }\n\n if (env.mode === 'evaluate') {\n Object.assign(out, {\n correctResponse,\n correctness: correctInfo,\n });\n }\n\n log('out: ', out);\n resolve(out);\n });\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise(resolve => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { rows } = question;\n const answers = {};\n\n rows.forEach(r => {\n answers[r.id] = r.values;\n });\n\n resolve({\n answers,\n id: '1'\n });\n } else {\n resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}, config = {}) => {\n const { rows, choiceMode } = model;\n const rowsErrors = {};\n\n (rows || []).forEach(row => {\n const { id, values = [] } = row;\n let hasCorrectResponse = false;\n\n values.forEach(value => {\n if (value) {\n hasCorrectResponse = true;\n }\n });\n\n if (!hasCorrectResponse) {\n rowsErrors[id] = 'No correct response defined.';\n }\n });\n\n const errors = {};\n\n if (!isEmpty(rowsErrors)) {\n errors.rowsErrors = rowsErrors;\n errors.correctResponseError = choiceMode === 'radio'\n ? 'There should be a correct response defined for every row.'\n : 'There should be at least one correct response defined for every row.';\n }\n\n return errors;\n};\n"],"file":"index.js"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/match-controller",
3
3
  "private": true,
4
- "version": "4.4.2",
4
+ "version": "4.4.8",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -131,6 +131,22 @@
131
131
  }
132
132
  }
133
133
  },
134
+ "spellCheck": {
135
+ "title": "ConfigureProp",
136
+ "type": "object",
137
+ "properties": {
138
+ "settings": {
139
+ "description": "Indicates if the item has to be displayed in the Settings Panel",
140
+ "type": "boolean",
141
+ "title": "settings"
142
+ },
143
+ "label": {
144
+ "description": "Indicates the label for the item that has to be displayed in the Settings Panel",
145
+ "type": "string",
146
+ "title": "label"
147
+ }
148
+ }
149
+ },
134
150
  "rationale": {
135
151
  "title": "ConfigureProp",
136
152
  "type": "object",
@@ -195,6 +211,58 @@
195
211
  }
196
212
  }
197
213
  },
214
+ "maxImageWidth": {
215
+ "title": "ConfigureMaxImageDimensionsProp",
216
+ "type": "object",
217
+ "properties": {
218
+ "teacherInstructions": {
219
+ "description": "Indicates the max dimension for images in teacher instructions",
220
+ "type": "number",
221
+ "title": "teacherInstructions"
222
+ },
223
+ "prompt": {
224
+ "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",
225
+ "type": "number",
226
+ "title": "prompt"
227
+ },
228
+ "rationale": {
229
+ "description": "Indicates the max dimension for images in rationale",
230
+ "type": "number",
231
+ "title": "rationale"
232
+ },
233
+ "rowTitles": {
234
+ "description": "Indicates the max dimension for images in row labels",
235
+ "type": "number",
236
+ "title": "rowTitles"
237
+ }
238
+ }
239
+ },
240
+ "maxImageHeight": {
241
+ "title": "ConfigureMaxImageDimensionsProp",
242
+ "type": "object",
243
+ "properties": {
244
+ "teacherInstructions": {
245
+ "description": "Indicates the max dimension for images in teacher instructions",
246
+ "type": "number",
247
+ "title": "teacherInstructions"
248
+ },
249
+ "prompt": {
250
+ "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",
251
+ "type": "number",
252
+ "title": "prompt"
253
+ },
254
+ "rationale": {
255
+ "description": "Indicates the max dimension for images in rationale",
256
+ "type": "number",
257
+ "title": "rationale"
258
+ },
259
+ "rowTitles": {
260
+ "description": "Indicates the max dimension for images in row labels",
261
+ "type": "number",
262
+ "title": "rowTitles"
263
+ }
264
+ }
265
+ },
198
266
  "showPrompt": {
199
267
  "description": "Determines whether prompt field will be displayed or not",
200
268
  "default": true,
@@ -230,6 +298,32 @@
230
298
  "title": "label"
231
299
  }
232
300
  }
301
+ },
302
+ "ConfigureMaxImageDimensionsProp": {
303
+ "title": "ConfigureMaxImageDimensionsProp",
304
+ "type": "object",
305
+ "properties": {
306
+ "teacherInstructions": {
307
+ "description": "Indicates the max dimension for images in teacher instructions",
308
+ "type": "number",
309
+ "title": "teacherInstructions"
310
+ },
311
+ "prompt": {
312
+ "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",
313
+ "type": "number",
314
+ "title": "prompt"
315
+ },
316
+ "rationale": {
317
+ "description": "Indicates the max dimension for images in rationale",
318
+ "type": "number",
319
+ "title": "rationale"
320
+ },
321
+ "rowTitles": {
322
+ "description": "Indicates the max dimension for images in row labels",
323
+ "type": "number",
324
+ "title": "rowTitles"
325
+ }
326
+ }
233
327
  }
234
328
  },
235
329
  "$schema": "http://json-schema.org/draft-07/schema#"
@@ -98,6 +98,18 @@ Indicates if the item has to be displayed in the Settings Panel
98
98
 
99
99
  Indicates the label for the item that has to be displayed in the Settings Panel
100
100
 
101
+ # `spellCheck` (object)
102
+
103
+ Properties of the `spellCheck` object:
104
+
105
+ ## `settings` (boolean)
106
+
107
+ Indicates if the item has to be displayed in the Settings Panel
108
+
109
+ ## `label` (string)
110
+
111
+ Indicates the label for the item that has to be displayed in the Settings Panel
112
+
101
113
  # `rationale` (object)
102
114
 
103
115
  Properties of the `rationale` object:
@@ -146,6 +158,46 @@ Indicates if the item has to be displayed in the Settings Panel
146
158
 
147
159
  Indicates the label for the item that has to be displayed in the Settings Panel
148
160
 
161
+ # `maxImageWidth` (object)
162
+
163
+ Properties of the `maxImageWidth` object:
164
+
165
+ ## `teacherInstructions` (number)
166
+
167
+ Indicates the max dimension for images in teacher instructions
168
+
169
+ ## `prompt` (number)
170
+
171
+ Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified
172
+
173
+ ## `rationale` (number)
174
+
175
+ Indicates the max dimension for images in rationale
176
+
177
+ ## `rowTitles` (number)
178
+
179
+ Indicates the max dimension for images in row labels
180
+
181
+ # `maxImageHeight` (object)
182
+
183
+ Properties of the `maxImageHeight` object:
184
+
185
+ ## `teacherInstructions` (number)
186
+
187
+ Indicates the max dimension for images in teacher instructions
188
+
189
+ ## `prompt` (number)
190
+
191
+ Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified
192
+
193
+ ## `rationale` (number)
194
+
195
+ Indicates the max dimension for images in rationale
196
+
197
+ ## `rowTitles` (number)
198
+
199
+ Indicates the max dimension for images in row labels
200
+
149
201
  # `showPrompt` (boolean)
150
202
 
151
203
  Determines whether prompt field will be displayed or not
@@ -180,4 +232,24 @@ Indicates if the item has to be displayed in the Settings Panel
180
232
 
181
233
  ### `label` (string)
182
234
 
183
- Indicates the label for the item that has to be displayed in the Settings Panel
235
+ Indicates the label for the item that has to be displayed in the Settings Panel
236
+
237
+ ## `ConfigureMaxImageDimensionsProp` (object)
238
+
239
+ Properties of the `ConfigureMaxImageDimensionsProp` object:
240
+
241
+ ### `teacherInstructions` (number)
242
+
243
+ Indicates the max dimension for images in teacher instructions
244
+
245
+ ### `prompt` (number)
246
+
247
+ Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified
248
+
249
+ ### `rationale` (number)
250
+
251
+ Indicates the max dimension for images in rationale
252
+
253
+ ### `rowTitles` (number)
254
+
255
+ Indicates the max dimension for images in row labels
@@ -288,6 +288,11 @@
288
288
  "type": "boolean",
289
289
  "title": "rationaleEnabled"
290
290
  },
291
+ "spellCheckEnabled": {
292
+ "description": "Indicates if spellcheck is enabled for the author. Default value is true",
293
+ "type": "boolean",
294
+ "title": "spellCheckEnabled"
295
+ },
291
296
  "studentInstructionsEnabled": {
292
297
  "description": "Indicates if Student Instructions are enabled",
293
298
  "type": "boolean",
@@ -329,6 +334,7 @@
329
334
  "rationale",
330
335
  "rationaleEnabled",
331
336
  "rows",
337
+ "spellCheckEnabled",
332
338
  "studentInstructionsEnabled",
333
339
  "teacherInstructionsEnabled"
334
340
  ],
@@ -349,6 +355,32 @@
349
355
  }
350
356
  }
351
357
  },
358
+ "ConfigureMaxImageDimensionsProp": {
359
+ "title": "ConfigureMaxImageDimensionsProp",
360
+ "type": "object",
361
+ "properties": {
362
+ "teacherInstructions": {
363
+ "description": "Indicates the max dimension for images in teacher instructions",
364
+ "type": "number",
365
+ "title": "teacherInstructions"
366
+ },
367
+ "prompt": {
368
+ "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",
369
+ "type": "number",
370
+ "title": "prompt"
371
+ },
372
+ "rationale": {
373
+ "description": "Indicates the max dimension for images in rationale",
374
+ "type": "number",
375
+ "title": "rationale"
376
+ },
377
+ "rowTitles": {
378
+ "description": "Indicates the max dimension for images in row labels",
379
+ "type": "number",
380
+ "title": "rowTitles"
381
+ }
382
+ }
383
+ },
352
384
  "ComplexFeedbackType": {
353
385
  "title": "ComplexFeedbackType",
354
386
  "type": "object",
@@ -108,6 +108,10 @@ Indicates if Feedback is enabled
108
108
 
109
109
  Indicates if Rationale are enabled
110
110
 
111
+ # `spellCheckEnabled` (boolean, required)
112
+
113
+ Indicates if spellcheck is enabled for the author. Default value is true
114
+
111
115
  # `studentInstructionsEnabled` (boolean, required)
112
116
 
113
117
  Indicates if Student Instructions are enabled
@@ -153,6 +157,26 @@ Indicates if the item has to be displayed in the Settings Panel
153
157
 
154
158
  Indicates the label for the item that has to be displayed in the Settings Panel
155
159
 
160
+ ## `ConfigureMaxImageDimensionsProp` (object)
161
+
162
+ Properties of the `ConfigureMaxImageDimensionsProp` object:
163
+
164
+ ### `teacherInstructions` (number)
165
+
166
+ Indicates the max dimension for images in teacher instructions
167
+
168
+ ### `prompt` (number)
169
+
170
+ Indicates the max dimension for images in prompt - this is also the default dimension for all other input fields if it's not specified
171
+
172
+ ### `rationale` (number)
173
+
174
+ Indicates the max dimension for images in rationale
175
+
176
+ ### `rowTitles` (number)
177
+
178
+ Indicates the max dimension for images in row labels
179
+
156
180
  ## `ComplexFeedbackType` (object)
157
181
 
158
182
  Properties of the `ComplexFeedbackType` object:
@@ -37,13 +37,13 @@ var _styles = require("@material-ui/core/styles");
37
37
 
38
38
  var _renderUi = require("@pie-lib/render-ui");
39
39
 
40
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
40
+ 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; }
41
41
 
42
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
42
+ 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; }
43
43
 
44
44
  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); }; }
45
45
 
46
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
46
+ 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; } }
47
47
 
48
48
  var AnswerGrid = /*#__PURE__*/function (_React$Component) {
49
49
  (0, _inherits2["default"])(AnswerGrid, _React$Component);
@@ -96,7 +96,6 @@ var AnswerGrid = /*#__PURE__*/function (_React$Component) {
96
96
  var _this2 = this;
97
97
 
98
98
  var _this$props2 = this.props,
99
- allowFeedback = _this$props2.allowFeedback,
100
99
  classes = _this$props2.classes,
101
100
  showCorrect = _this$props2.showCorrect,
102
101
  headers = _this$props2.headers,
@@ -106,6 +105,7 @@ var AnswerGrid = /*#__PURE__*/function (_React$Component) {
106
105
  disabled = _this$props2.disabled,
107
106
  view = _this$props2.view;
108
107
  var Tag = choiceMode === 'radio' ? _Radio["default"] : _Checkbox["default"];
108
+ var evaluate = disabled && !view;
109
109
 
110
110
  if (!rows || rows.length === 0) {
111
111
  return /*#__PURE__*/_react["default"].createElement("div", {
@@ -160,7 +160,7 @@ var AnswerGrid = /*#__PURE__*/function (_React$Component) {
160
160
  }, /*#__PURE__*/_react["default"].createElement("div", {
161
161
  className: classes.rowItem
162
162
  }, /*#__PURE__*/_react["default"].createElement(Tag, {
163
- className: (0, _classnames["default"])((_cx2 = {}, (0, _defineProperty2["default"])(_cx2, classes.correct, allowFeedback && (showCorrect && rowItem === true || disabled && !view && _this2.answerIsCorrect(row.id, rowItem, answerIndex))), (0, _defineProperty2["default"])(_cx2, classes.tag, true), (0, _defineProperty2["default"])(_cx2, classes.checked, rowItem === true), (0, _defineProperty2["default"])(_cx2, classes.tagDisabled, disabled), (0, _defineProperty2["default"])(_cx2, classes.incorrect, allowFeedback && disabled && !view && _this2.answerIsIncorrect(row.id, rowItem, answerIndex)), _cx2)),
163
+ className: (0, _classnames["default"])((_cx2 = {}, (0, _defineProperty2["default"])(_cx2, classes.correct, showCorrect && rowItem === true || evaluate && _this2.answerIsCorrect(row.id, rowItem, answerIndex)), (0, _defineProperty2["default"])(_cx2, classes.tag, true), (0, _defineProperty2["default"])(_cx2, classes.checked, rowItem === true && !evaluate), (0, _defineProperty2["default"])(_cx2, classes.tagDisabled, disabled), (0, _defineProperty2["default"])(_cx2, classes.incorrect, evaluate && _this2.answerIsIncorrect(row.id, rowItem, answerIndex)), _cx2)),
164
164
  disabled: disabled,
165
165
  onChange: _this2.onRowValueChange(row.id, answerIndex),
166
166
  checked: rowItem === true
@@ -174,7 +174,6 @@ var AnswerGrid = /*#__PURE__*/function (_React$Component) {
174
174
 
175
175
  exports.AnswerGrid = AnswerGrid;
176
176
  (0, _defineProperty2["default"])(AnswerGrid, "propTypes", {
177
- allowFeedback: _propTypes["default"].bool.isRequired,
178
177
  classes: _propTypes["default"].object.isRequired,
179
178
  correctAnswers: _propTypes["default"].object,
180
179
  view: _propTypes["default"].bool.isRequired,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/answer-grid.jsx"],"names":["AnswerGrid","rowId","answerIndex","event","props","onAnswerChange","choiceMode","answers","newAnswers","i","length","target","checked","rowValue","rowValueIndex","correctAnswers","allowFeedback","classes","showCorrect","headers","rows","disabled","view","Tag","Radio","Checkbox","controlsContainer","empty","table","map","header","idx","rowHeader","rowItem","questionText","__html","row","separator","title","id","column","correct","answerIsCorrect","tag","tagDisabled","incorrect","answerIsIncorrect","onRowValueChange","React","Component","PropTypes","bool","isRequired","object","func","string","array","styles","theme","marginLeft","marginRight","marginTop","spacing","unit","marginBottom","padding","color","margin","rowContainer","display","alignItems","textAlign","border","borderTop","primaryLight","width","text","primary","cursor","pointerEvents","opacity","backgroundColor","background","borderCollapse","borderSpacing"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport cx from 'classnames';\nimport Radio from '@material-ui/core/Radio';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\nimport { color } from '@pie-lib/render-ui';\n\nexport class AnswerGrid extends React.Component {\n static propTypes = {\n allowFeedback: PropTypes.bool.isRequired,\n classes: PropTypes.object.isRequired,\n correctAnswers: PropTypes.object,\n view: PropTypes.bool.isRequired,\n showCorrect: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n onAnswerChange: PropTypes.func.isRequired,\n choiceMode: PropTypes.string.isRequired,\n rows: PropTypes.array.isRequired,\n headers: PropTypes.array.isRequired,\n answers: PropTypes.object.isRequired\n };\n\n onRowValueChange = (rowId, answerIndex) => event => {\n const { onAnswerChange, choiceMode, answers } = this.props;\n const newAnswers = { ...answers };\n\n if (choiceMode === 'radio') {\n for (let i = 0; i < newAnswers[rowId].length; i++) {\n newAnswers[rowId][i] = false;\n }\n }\n\n newAnswers[rowId][answerIndex] = event.target.checked;\n\n onAnswerChange(newAnswers);\n };\n\n answerIsCorrect = (rowId, rowValue, rowValueIndex) => {\n const { correctAnswers } = this.props;\n\n return correctAnswers[rowId][rowValueIndex] === rowValue && rowValue === true;\n };\n\n // needs a separate method because what isn't correct isn't necessarily incorrect\n answerIsIncorrect = (rowId, rowValue, rowValueIndex) => {\n const { correctAnswers } = this.props;\n\n return correctAnswers[rowId][rowValueIndex] === true && rowValue === false\n || correctAnswers[rowId][rowValueIndex] === false && rowValue === true;\n };\n\n render() {\n const { allowFeedback, classes, showCorrect, headers, rows, choiceMode, answers, disabled, view } = this.props;\n const Tag = choiceMode === 'radio' ? Radio : Checkbox;\n\n if (!rows || rows.length === 0) {\n return (\n <div className={classes.controlsContainer}>\n <Typography className={classes.empty} component=\"div\">\n There are currently no questions to show.\n </Typography>\n </div>);\n }\n\n return (\n <div className={classes.controlsContainer}>\n <table className={classes.table}>\n <colgroup>\n {(headers || []).map((header, idx) => (<col key={`col-${idx}`}/>))}\n </colgroup>\n\n <thead>\n <tr>\n {(headers || []).map((header, idx) => (\n <th\n className={classes.rowHeader}\n key={`th-${idx}`}\n data-colno={`${idx}`}\n scope=\"row\"\n >\n <div\n className={cx(classes.rowItem, { [classes.questionText]: idx === 0 })}\n dangerouslySetInnerHTML={{ __html: header }}\n />\n </th>\n ))}\n </tr>\n </thead>\n\n {(rows || []).map((row, idx) => (\n <tbody key={`row-${idx}`} role=\"group\">\n <tr className={classes.separator}>\n <td\n key={`td-title-${idx}`}\n data-colno={'0'}\n >\n <div\n className={cx(classes.rowItem, classes.questionText)}\n dangerouslySetInnerHTML={{ __html: row.title }}\n />\n </td>\n\n {(answers[row.id] || []).map((rowItem, answerIndex) => (\n <td\n key={`td-${idx}-${answerIndex}`}\n className={classes.column}\n data-colno={`${answerIndex + 1}`}\n >\n <div className={classes.rowItem}>\n <Tag\n className={cx({\n [classes.correct]: allowFeedback && (\n (showCorrect && rowItem === true) ||\n (disabled && !view && this.answerIsCorrect(row.id, rowItem, answerIndex))\n ),\n [classes.tag]: true,\n [classes.checked]: rowItem === true,\n [classes.tagDisabled]: disabled,\n [classes.incorrect]: allowFeedback && disabled && !view && this.answerIsIncorrect(row.id, rowItem, answerIndex)\n })}\n disabled={disabled}\n onChange={this.onRowValueChange(row.id, answerIndex)}\n checked={rowItem === true}\n />\n </div>\n </td>\n ))}\n </tr>\n </tbody>\n ))}\n </table>\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n controlsContainer: {\n marginLeft: 'auto',\n marginRight: 'auto',\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n column: {\n padding: '5px 0',\n },\n correct: {\n color: `${color.correct()} !important`\n },\n incorrect: {\n color: `${color.incorrect()} !important`\n },\n empty: {\n margin: theme.spacing.unit * 2\n },\n rowContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n rowHeader: {\n padding: 0\n },\n rowItem: {\n padding: '12px',\n textAlign: 'center'\n },\n separator: {\n border: 0,\n borderTop: `2.5px solid ${color.primaryLight()}`,\n width: '100%'\n },\n tag: {\n padding: '6px',\n color: color.text(),\n '&:hover': {\n color: color.primaryLight()\n }\n },\n checked: {\n color: `${color.primary()} !important`\n },\n tagDisabled: {\n color: color.disabled(),\n cursor: 'not-allowed !important',\n pointerEvents: 'initial !important',\n opacity: 0.7,\n '&:hover': {\n color: color.disabled()\n }\n },\n table: {\n color: color.text(),\n backgroundColor: color.background(),\n borderCollapse: 'collapse',\n borderSpacing: 0,\n marginBottom: 0\n },\n questionText: {\n textAlign: 'left'\n },\n});\n\nexport default withStyles(styles)(AnswerGrid);\n"],"file":"answer-grid.js"}
1
+ {"version":3,"sources":["../src/answer-grid.jsx"],"names":["AnswerGrid","rowId","answerIndex","event","props","onAnswerChange","choiceMode","answers","newAnswers","i","length","target","checked","rowValue","rowValueIndex","correctAnswers","classes","showCorrect","headers","rows","disabled","view","Tag","Radio","Checkbox","evaluate","controlsContainer","empty","table","map","header","idx","rowHeader","rowItem","questionText","__html","row","separator","title","id","column","correct","answerIsCorrect","tag","tagDisabled","incorrect","answerIsIncorrect","onRowValueChange","React","Component","PropTypes","object","isRequired","bool","func","string","array","styles","theme","marginLeft","marginRight","marginTop","spacing","unit","marginBottom","padding","color","margin","rowContainer","display","alignItems","textAlign","border","borderTop","primaryLight","width","text","primary","cursor","pointerEvents","opacity","backgroundColor","background","borderCollapse","borderSpacing"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport cx from 'classnames';\nimport Radio from '@material-ui/core/Radio';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\nimport { color } from '@pie-lib/render-ui';\n\nexport class AnswerGrid extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n correctAnswers: PropTypes.object,\n view: PropTypes.bool.isRequired,\n showCorrect: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n onAnswerChange: PropTypes.func.isRequired,\n choiceMode: PropTypes.string.isRequired,\n rows: PropTypes.array.isRequired,\n headers: PropTypes.array.isRequired,\n answers: PropTypes.object.isRequired\n };\n\n onRowValueChange = (rowId, answerIndex) => event => {\n const { onAnswerChange, choiceMode, answers } = this.props;\n const newAnswers = { ...answers };\n\n if (choiceMode === 'radio') {\n for (let i = 0; i < newAnswers[rowId].length; i++) {\n newAnswers[rowId][i] = false;\n }\n }\n\n newAnswers[rowId][answerIndex] = event.target.checked;\n\n onAnswerChange(newAnswers);\n };\n\n answerIsCorrect = (rowId, rowValue, rowValueIndex) => {\n const { correctAnswers } = this.props;\n\n return correctAnswers[rowId][rowValueIndex] === rowValue && rowValue === true;\n };\n\n // needs a separate method because what isn't correct isn't necessarily incorrect\n answerIsIncorrect = (rowId, rowValue, rowValueIndex) => {\n const { correctAnswers } = this.props;\n\n return correctAnswers[rowId][rowValueIndex] === true && rowValue === false\n || correctAnswers[rowId][rowValueIndex] === false && rowValue === true;\n };\n\n render() {\n const { classes, showCorrect, headers, rows, choiceMode, answers, disabled, view } = this.props;\n const Tag = choiceMode === 'radio' ? Radio : Checkbox;\n const evaluate = disabled && !view;\n\n if (!rows || rows.length === 0) {\n return (\n <div className={classes.controlsContainer}>\n <Typography className={classes.empty} component=\"div\">\n There are currently no questions to show.\n </Typography>\n </div>);\n }\n\n return (\n <div className={classes.controlsContainer}>\n <table className={classes.table}>\n <colgroup>\n {(headers || []).map((header, idx) => (<col key={`col-${idx}`}/>))}\n </colgroup>\n\n <thead>\n <tr>\n {(headers || []).map((header, idx) => (\n <th\n className={classes.rowHeader}\n key={`th-${idx}`}\n data-colno={`${idx}`}\n scope=\"row\"\n >\n <div\n className={cx(classes.rowItem, { [classes.questionText]: idx === 0 })}\n dangerouslySetInnerHTML={{ __html: header }}\n />\n </th>\n ))}\n </tr>\n </thead>\n\n {(rows || []).map((row, idx) => (\n <tbody key={`row-${idx}`} role=\"group\">\n <tr className={classes.separator}>\n <td\n key={`td-title-${idx}`}\n data-colno={'0'}\n >\n <div\n className={cx(classes.rowItem, classes.questionText)}\n dangerouslySetInnerHTML={{ __html: row.title }}\n />\n </td>\n\n {(answers[row.id] || []).map((rowItem, answerIndex) => (\n <td\n key={`td-${idx}-${answerIndex}`}\n className={classes.column}\n data-colno={`${answerIndex + 1}`}\n >\n <div className={classes.rowItem}>\n <Tag\n className={cx({\n [classes.correct]: (\n (showCorrect && rowItem === true) ||\n (evaluate && this.answerIsCorrect(row.id, rowItem, answerIndex))\n ),\n [classes.tag]: true,\n [classes.checked]: rowItem === true && !evaluate,\n [classes.tagDisabled]: disabled,\n [classes.incorrect]: evaluate && this.answerIsIncorrect(row.id, rowItem, answerIndex)\n })}\n disabled={disabled}\n onChange={this.onRowValueChange(row.id, answerIndex)}\n checked={rowItem === true}\n />\n </div>\n </td>\n ))}\n </tr>\n </tbody>\n ))}\n </table>\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n controlsContainer: {\n marginLeft: 'auto',\n marginRight: 'auto',\n marginTop: theme.spacing.unit,\n marginBottom: theme.spacing.unit\n },\n column: {\n padding: '5px 0',\n },\n correct: {\n color: `${color.correct()} !important`\n },\n incorrect: {\n color: `${color.incorrect()} !important`\n },\n empty: {\n margin: theme.spacing.unit * 2\n },\n rowContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n rowHeader: {\n padding: 0\n },\n rowItem: {\n padding: '12px',\n textAlign: 'center'\n },\n separator: {\n border: 0,\n borderTop: `2.5px solid ${color.primaryLight()}`,\n width: '100%'\n },\n tag: {\n padding: '6px',\n color: color.text(),\n '&:hover': {\n color: color.primaryLight()\n }\n },\n checked: {\n color: `${color.primary()} !important`\n },\n tagDisabled: {\n color: color.disabled(),\n cursor: 'not-allowed !important',\n pointerEvents: 'initial !important',\n opacity: 0.7,\n '&:hover': {\n color: color.disabled()\n }\n },\n table: {\n color: color.text(),\n backgroundColor: color.background(),\n borderCollapse: 'collapse',\n borderSpacing: 0,\n marginBottom: 0\n },\n questionText: {\n textAlign: 'left'\n },\n});\n\nexport default withStyles(styles)(AnswerGrid);\n"],"file":"answer-grid.js"}
package/lib/index.js CHANGED
@@ -11,7 +11,7 @@ Object.defineProperty(exports, "Component", {
11
11
  return _main["default"];
12
12
  }
13
13
  });
14
- exports["default"] = exports.isComplete = void 0;
14
+ exports.isComplete = exports["default"] = void 0;
15
15
 
16
16
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
17
17
 
@@ -39,7 +39,7 @@ var _get = _interopRequireDefault(require("lodash/get"));
39
39
 
40
40
  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); }; }
41
41
 
42
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
42
+ 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; } }
43
43
 
44
44
  var isComplete = function isComplete(session, model) {
45
45
  var rows = (0, _get["default"])(model, 'config.rows');
@@ -78,6 +78,9 @@ var Match = /*#__PURE__*/function (_HTMLElement) {
78
78
  }
79
79
  }, {
80
80
  key: "session",
81
+ get: function get() {
82
+ return this._session;
83
+ },
81
84
  set: function set(s) {
82
85
  this._session = s;
83
86
 
@@ -89,6 +92,8 @@ var Match = /*#__PURE__*/function (_HTMLElement) {
89
92
  this._session.answers = s.answers;
90
93
  var complete = isComplete(this._session, this._model);
91
94
  this.dispatchEvent(new _piePlayerEvents.SessionChangedEvent(this.tagName.toLowerCase(), complete));
95
+
96
+ this._render();
92
97
  }
93
98
  }, {
94
99
  key: "connectedCallback",
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["isComplete","session","model","rows","ids","map","r","id","reduce","acc","arr","answers","hasChoice","Array","isArray","includes","Match","m","_model","_render","s","_session","complete","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","el","React","createElement","Main","onSessionChange","sessionChanged","bind","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;AAIO,IAAMA,UAAU,GAAG,SAAbA,UAAa,CAACC,OAAD,EAAUC,KAAV,EAAoB;AAC5C,MAAMC,IAAI,GAAG,qBAAID,KAAJ,EAAW,aAAX,CAAb;AACA,MAAME,GAAG,GAAGD,IAAI,CAACE,GAAL,CAAS,UAAAC,CAAC;AAAA,WAAIA,CAAC,CAACC,EAAN;AAAA,GAAV,CAAZ;AACA,SAAOH,GAAG,CAACI,MAAJ,CAAW,UAACC,GAAD,EAAMF,EAAN,EAAa;AAC7B,QAAI,CAACE,GAAL,EAAU;AACR,aAAO,KAAP;AACD;;AACD,QAAMC,GAAG,GAAGT,OAAO,CAACU,OAAR,IAAmBV,OAAO,CAACU,OAAR,CAAgBJ,EAAhB,CAA/B;AACA,QAAMK,SAAS,GAAGC,KAAK,CAACC,OAAN,CAAcJ,GAAd,KAAsBA,GAAG,CAACK,QAAJ,CAAa,IAAb,CAAxC;AACA,WAAOH,SAAS,IAAIH,GAApB;AACD,GAPM,EAOJ,IAPI,CAAP;AAQD,CAXM;;;;IAacO,K;;;;;AACnB,mBAAc;AAAA;AAAA;AAEb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKC,MAAL,GAAcD,CAAd;;AACA,WAAKE,OAAL;AACD;;;SAED,aAAYC,CAAZ,EAAe;AACb,WAAKC,QAAL,GAAgBD,CAAhB;;AACA,WAAKD,OAAL;AACD;;;WAED,wBAAeC,CAAf,EAAkB;AAChB,WAAKC,QAAL,CAAcV,OAAd,GAAwBS,CAAC,CAACT,OAA1B;AACA,UAAMW,QAAQ,GAAGtB,UAAU,CAAC,KAAKqB,QAAN,EAAgB,KAAKH,MAArB,CAA3B;AACA,WAAKK,aAAL,CACE,IAAIC,oCAAJ,CAAwB,KAAKC,OAAL,CAAaC,WAAb,EAAxB,EAAoDJ,QAApD,CADF;AAGD;;;WAED,6BAAoB;AAClB,WAAKH,OAAL;AACD;;;WAED,mBAAU;AAAA;;AACR,UAAI,CAAC,KAAKD,MAAN,IAAgB,CAAC,KAAKG,QAA1B,EAAoC;AAClC;AACD;;AAED,UAAMM,EAAE,gBAAGC,kBAAMC,aAAN,CAAoBC,gBAApB,EAA0B;AACnC5B,QAAAA,KAAK,EAAE,KAAKgB,MADuB;AAEnCjB,QAAAA,OAAO,EAAE,KAAKoB,QAFqB;AAGnCU,QAAAA,eAAe,EAAE,KAAKC,cAAL,CAAoBC,IAApB,CAAyB,IAAzB;AAHkB,OAA1B,CAAX;;AAMAC,2BAASC,MAAT,CAAgBR,EAAhB,EAAoB,IAApB,EAA0B,YAAM;AAC9B,uCAAW,KAAX;AACD,OAFD;AAGD;;;kDAzCgCS,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Main from './main';\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/math-rendering';\n\nimport get from 'lodash/get';\n\nexport { Main as Component };\n\nexport const isComplete = (session, model) => {\n const rows = get(model, 'config.rows');\n const ids = rows.map(r => r.id);\n return ids.reduce((acc, id) => {\n if (!acc) {\n return false;\n }\n const arr = session.answers && session.answers[id];\n const hasChoice = Array.isArray(arr) && arr.includes(true);\n return hasChoice && acc;\n }, true);\n};\n\nexport default class Match extends HTMLElement {\n constructor() {\n super();\n }\n\n set model(m) {\n this._model = m;\n this._render();\n }\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n sessionChanged(s) {\n this._session.answers = s.answers;\n const complete = isComplete(this._session, this._model);\n this.dispatchEvent(\n new SessionChangedEvent(this.tagName.toLowerCase(), complete)\n );\n }\n\n connectedCallback() {\n this._render();\n }\n\n _render() {\n if (!this._model || !this._session) {\n return;\n }\n\n const el = React.createElement(Main, {\n model: this._model,\n session: this._session,\n onSessionChange: this.sessionChanged.bind(this)\n });\n\n ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["isComplete","session","model","rows","ids","map","r","id","reduce","acc","arr","answers","hasChoice","Array","isArray","includes","Match","m","_model","_render","_session","s","complete","dispatchEvent","SessionChangedEvent","tagName","toLowerCase","el","React","createElement","Main","onSessionChange","sessionChanged","bind","ReactDOM","render","HTMLElement"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;AAIO,IAAMA,UAAU,GAAG,SAAbA,UAAa,CAACC,OAAD,EAAUC,KAAV,EAAoB;AAC5C,MAAMC,IAAI,GAAG,qBAAID,KAAJ,EAAW,aAAX,CAAb;AACA,MAAME,GAAG,GAAGD,IAAI,CAACE,GAAL,CAAS,UAAAC,CAAC;AAAA,WAAIA,CAAC,CAACC,EAAN;AAAA,GAAV,CAAZ;AACA,SAAOH,GAAG,CAACI,MAAJ,CAAW,UAACC,GAAD,EAAMF,EAAN,EAAa;AAC7B,QAAI,CAACE,GAAL,EAAU;AACR,aAAO,KAAP;AACD;;AACD,QAAMC,GAAG,GAAGT,OAAO,CAACU,OAAR,IAAmBV,OAAO,CAACU,OAAR,CAAgBJ,EAAhB,CAA/B;AACA,QAAMK,SAAS,GAAGC,KAAK,CAACC,OAAN,CAAcJ,GAAd,KAAsBA,GAAG,CAACK,QAAJ,CAAa,IAAb,CAAxC;AACA,WAAOH,SAAS,IAAIH,GAApB;AACD,GAPM,EAOJ,IAPI,CAAP;AAQD,CAXM;;;;IAacO,K;;;;;AACnB,mBAAc;AAAA;AAAA;AAEb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKC,MAAL,GAAcD,CAAd;;AACA,WAAKE,OAAL;AACD;;;SAOD,eAAc;AACZ,aAAO,KAAKC,QAAZ;AACD,K;SAPD,aAAYC,CAAZ,EAAe;AACb,WAAKD,QAAL,GAAgBC,CAAhB;;AACA,WAAKF,OAAL;AACD;;;WAMD,wBAAeE,CAAf,EAAkB;AAChB,WAAKD,QAAL,CAAcT,OAAd,GAAwBU,CAAC,CAACV,OAA1B;AACA,UAAMW,QAAQ,GAAGtB,UAAU,CAAC,KAAKoB,QAAN,EAAgB,KAAKF,MAArB,CAA3B;AAEA,WAAKK,aAAL,CACE,IAAIC,oCAAJ,CAAwB,KAAKC,OAAL,CAAaC,WAAb,EAAxB,EAAoDJ,QAApD,CADF;;AAIA,WAAKH,OAAL;AACD;;;WAED,6BAAoB;AAClB,WAAKA,OAAL;AACD;;;WAED,mBAAU;AAAA;;AACR,UAAI,CAAC,KAAKD,MAAN,IAAgB,CAAC,KAAKE,QAA1B,EAAoC;AAClC;AACD;;AAED,UAAMO,EAAE,gBAAGC,kBAAMC,aAAN,CAAoBC,gBAApB,EAA0B;AACnC5B,QAAAA,KAAK,EAAE,KAAKgB,MADuB;AAEnCjB,QAAAA,OAAO,EAAE,KAAKmB,QAFqB;AAGnCW,QAAAA,eAAe,EAAE,KAAKC,cAAL,CAAoBC,IAApB,CAAyB,IAAzB;AAHkB,OAA1B,CAAX;;AAMAC,2BAASC,MAAT,CAAgBR,EAAhB,EAAoB,IAApB,EAA0B,YAAM;AAC9B,uCAAW,KAAX;AACD,OAFD;AAGD;;;kDAhDgCS,W","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Main from './main';\nimport { SessionChangedEvent } from '@pie-framework/pie-player-events';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport get from 'lodash/get';\n\nexport { Main as Component };\n\nexport const isComplete = (session, model) => {\n const rows = get(model, 'config.rows');\n const ids = rows.map(r => r.id);\n return ids.reduce((acc, id) => {\n if (!acc) {\n return false;\n }\n const arr = session.answers && session.answers[id];\n const hasChoice = Array.isArray(arr) && arr.includes(true);\n return hasChoice && acc;\n }, true);\n};\n\nexport default class Match extends HTMLElement {\n constructor() {\n super();\n }\n\n set model(m) {\n this._model = m;\n this._render();\n }\n\n set session(s) {\n this._session = s;\n this._render();\n }\n\n get session() {\n return this._session;\n }\n\n sessionChanged(s) {\n this._session.answers = s.answers;\n const complete = isComplete(this._session, this._model);\n\n this.dispatchEvent(\n new SessionChangedEvent(this.tagName.toLowerCase(), complete)\n );\n\n this._render();\n }\n\n connectedCallback() {\n this._render();\n }\n\n _render() {\n if (!this._model || !this._session) {\n return;\n }\n\n const el = React.createElement(Main, {\n model: this._model,\n session: this._session,\n onSessionChange: this.sessionChanged.bind(this)\n });\n\n ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n}\n"],"file":"index.js"}