@pie-element/hotspot 4.8.4-next.135 → 4.8.4-next.1353
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 +263 -0
- package/configure/CHANGELOG.md +233 -0
- package/configure/lib/defaults.js +20 -0
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/hotspot-container.js +26 -12
- package/configure/lib/hotspot-container.js.map +1 -1
- package/configure/lib/hotspot-drawable.js +11 -5
- package/configure/lib/hotspot-drawable.js.map +1 -1
- package/configure/lib/hotspot-palette.js +1 -1
- package/configure/lib/hotspot-palette.js.map +1 -1
- package/configure/lib/hotspot-polygon.js +1 -1
- package/configure/lib/hotspot-polygon.js.map +1 -1
- package/configure/lib/hotspot-rectangle.js +1 -1
- package/configure/lib/hotspot-rectangle.js.map +1 -1
- package/configure/lib/index.js +17 -3
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/root.js +107 -13
- package/configure/lib/root.js.map +1 -1
- package/configure/lib/utils.js +18 -4
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +4 -4
- package/configure/src/__tests__/__snapshots__/hotspot-container.test.js.snap +1 -0
- package/configure/src/__tests__/__snapshots__/root.test.js.snap +53 -4
- package/configure/src/defaults.js +20 -0
- package/configure/src/hotspot-container.jsx +16 -5
- package/configure/src/hotspot-drawable.jsx +8 -2
- package/configure/src/index.js +14 -0
- package/configure/src/root.jsx +87 -9
- package/configure/src/utils.js +23 -1
- package/controller/CHANGELOG.md +50 -0
- package/controller/lib/index.js +44 -5
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +1 -1
- package/controller/src/index.js +26 -0
- package/docs/config-schema.json +212 -0
- package/docs/config-schema.json.md +165 -0
- package/docs/demo/generate.js +1 -0
- package/docs/pie-schema.json +49 -0
- package/docs/pie-schema.json.md +36 -0
- package/lib/hotspot/container.js +25 -7
- package/lib/hotspot/container.js.map +1 -1
- package/lib/hotspot/image.js +1 -1
- package/lib/hotspot/image.js.map +1 -1
- package/lib/hotspot/index.js +72 -18
- package/lib/hotspot/index.js.map +1 -1
- package/lib/hotspot/polygon.js +46 -20
- package/lib/hotspot/polygon.js.map +1 -1
- package/lib/hotspot/rectangle.js +46 -20
- package/lib/hotspot/rectangle.js.map +1 -1
- package/lib/index.js +4 -1
- package/lib/index.js.map +1 -1
- package/lib/session-updater.js.map +1 -1
- package/package.json +6 -4
- package/src/__tests__/__snapshots__/{container-test.jsx.snap → container.test.jsx.snap} +8 -0
- package/src/__tests__/__snapshots__/image.test.jsx.snap +43 -0
- package/src/__tests__/__snapshots__/{polygon-test.jsx.snap → polygon.test.jsx.snap} +11 -0
- package/src/__tests__/__snapshots__/{rectangle-test.jsx.snap → rectangle.test.jsx.snap} +11 -0
- package/src/__tests__/{container-test.jsx → container.test.jsx} +57 -0
- package/src/__tests__/{image-test.jsx → image.test.jsx} +0 -0
- package/src/__tests__/polygon.test.jsx +224 -0
- package/src/__tests__/rectangle.test.jsx +233 -0
- package/src/__tests__/{session-updater-test.jsx → session-updater.test.jsx} +0 -0
- package/src/hotspot/container.jsx +23 -3
- package/src/hotspot/index.jsx +68 -8
- package/src/hotspot/polygon.jsx +40 -17
- package/src/hotspot/rectangle.jsx +40 -17
- package/src/index.js +5 -0
- package/src/__tests__/__snapshots__/image-test.jsx.snap +0 -21
- package/src/__tests__/polygon-test.jsx +0 -77
- package/src/__tests__/rectangle-test.jsx +0 -78
package/configure/lib/root.js
CHANGED
|
@@ -29,23 +29,29 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
29
29
|
|
|
30
30
|
var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
|
|
31
31
|
|
|
32
|
+
var _styles = require("@material-ui/core/styles");
|
|
33
|
+
|
|
32
34
|
var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
|
|
33
35
|
|
|
34
|
-
var
|
|
36
|
+
var _Info = _interopRequireDefault(require("@material-ui/icons/Info"));
|
|
37
|
+
|
|
38
|
+
var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip"));
|
|
35
39
|
|
|
36
40
|
var _hotspotPalette = _interopRequireDefault(require("./hotspot-palette"));
|
|
37
41
|
|
|
38
42
|
var _hotspotContainer = _interopRequireDefault(require("./hotspot-container"));
|
|
39
43
|
|
|
44
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
45
|
+
|
|
40
46
|
var _utils = require("./utils");
|
|
41
47
|
|
|
42
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
48
|
+
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; }
|
|
43
49
|
|
|
44
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
50
|
+
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; }
|
|
45
51
|
|
|
46
52
|
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); }; }
|
|
47
53
|
|
|
48
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try {
|
|
54
|
+
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; } }
|
|
49
55
|
|
|
50
56
|
var Panel = _configUi.settings.Panel,
|
|
51
57
|
toggle = _configUi.settings.toggle;
|
|
@@ -105,6 +111,7 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
105
111
|
configuration = _this$props2.configuration,
|
|
106
112
|
model = _this$props2.model,
|
|
107
113
|
imageSupport = _this$props2.imageSupport,
|
|
114
|
+
uploadSoundSupport = _this$props2.uploadSoundSupport,
|
|
108
115
|
onConfigurationChanged = _this$props2.onConfigurationChanged,
|
|
109
116
|
onImageUpload = _this$props2.onImageUpload,
|
|
110
117
|
onModelChangedByConfig = _this$props2.onModelChangedByConfig,
|
|
@@ -125,15 +132,32 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
125
132
|
teacherInstructions = _ref$teacherInstructi === void 0 ? {} : _ref$teacherInstructi,
|
|
126
133
|
_ref$rationale = _ref.rationale,
|
|
127
134
|
rationale = _ref$rationale === void 0 ? {} : _ref$rationale,
|
|
135
|
+
_ref$spellCheck = _ref.spellCheck,
|
|
136
|
+
spellCheck = _ref$spellCheck === void 0 ? {} : _ref$spellCheck,
|
|
128
137
|
_ref$preserveAspectRa = _ref.preserveAspectRatio,
|
|
129
|
-
preserveAspectRatio = _ref$preserveAspectRa === void 0 ? {} : _ref$preserveAspectRa
|
|
138
|
+
preserveAspectRatio = _ref$preserveAspectRa === void 0 ? {} : _ref$preserveAspectRa,
|
|
139
|
+
_ref$maxImageWidth = _ref.maxImageWidth,
|
|
140
|
+
maxImageWidth = _ref$maxImageWidth === void 0 ? {} : _ref$maxImageWidth,
|
|
141
|
+
_ref$maxImageHeight = _ref.maxImageHeight,
|
|
142
|
+
maxImageHeight = _ref$maxImageHeight === void 0 ? {} : _ref$maxImageHeight,
|
|
143
|
+
withRubric = _ref.withRubric;
|
|
130
144
|
|
|
131
145
|
var _ref2 = model || {},
|
|
132
146
|
teacherInstructionsEnabled = _ref2.teacherInstructionsEnabled,
|
|
133
147
|
promptEnabled = _ref2.promptEnabled,
|
|
134
|
-
rationaleEnabled = _ref2.rationaleEnabled
|
|
148
|
+
rationaleEnabled = _ref2.rationaleEnabled,
|
|
149
|
+
spellCheckEnabled = _ref2.spellCheckEnabled,
|
|
150
|
+
errors = _ref2.errors,
|
|
151
|
+
rubricEnabled = _ref2.rubricEnabled;
|
|
152
|
+
|
|
153
|
+
var _ref3 = errors || {},
|
|
154
|
+
shapesError = _ref3.shapesError,
|
|
155
|
+
selectionsError = _ref3.selectionsError;
|
|
135
156
|
|
|
136
157
|
var toolbarOpts = {};
|
|
158
|
+
var validationMessage = (0, _utils.generateValidationMessage)(configuration);
|
|
159
|
+
var defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;
|
|
160
|
+
var defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;
|
|
137
161
|
|
|
138
162
|
switch (model.toolbarEditorPosition) {
|
|
139
163
|
case 'top':
|
|
@@ -161,7 +185,9 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
161
185
|
},
|
|
162
186
|
Properties: {
|
|
163
187
|
teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
|
|
164
|
-
rationaleEnabled: rationale.settings && toggle(rationale.label)
|
|
188
|
+
rationaleEnabled: rationale.settings && toggle(rationale.label),
|
|
189
|
+
spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
|
|
190
|
+
rubricEnabled: withRubric.settings && toggle(withRubric.label)
|
|
165
191
|
}
|
|
166
192
|
}
|
|
167
193
|
})
|
|
@@ -175,7 +201,16 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
175
201
|
onChange: onTeacherInstructionsChanged,
|
|
176
202
|
imageSupport: imageSupport,
|
|
177
203
|
nonEmpty: false,
|
|
178
|
-
toolbarOpts: toolbarOpts
|
|
204
|
+
toolbarOpts: toolbarOpts,
|
|
205
|
+
spellCheck: spellCheckEnabled,
|
|
206
|
+
maxImageWidth: maxImageWidth && maxImageWidth.teacherInstructions || defaultImageMaxWidth,
|
|
207
|
+
maxImageHeight: maxImageHeight && maxImageHeight.teacherInstructions || defaultImageMaxHeight,
|
|
208
|
+
uploadSoundSupport: uploadSoundSupport,
|
|
209
|
+
languageCharactersProps: [{
|
|
210
|
+
language: 'spanish'
|
|
211
|
+
}, {
|
|
212
|
+
language: 'special'
|
|
213
|
+
}]
|
|
179
214
|
})), promptEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
180
215
|
label: prompt.label,
|
|
181
216
|
className: classes.prompt
|
|
@@ -184,7 +219,16 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
184
219
|
onChange: onPromptChanged,
|
|
185
220
|
imageSupport: imageSupport,
|
|
186
221
|
nonEmpty: false,
|
|
187
|
-
toolbarOpts: toolbarOpts
|
|
222
|
+
toolbarOpts: toolbarOpts,
|
|
223
|
+
spellCheck: spellCheckEnabled,
|
|
224
|
+
maxImageWidth: defaultImageMaxWidth,
|
|
225
|
+
maxImageHeight: defaultImageMaxHeight,
|
|
226
|
+
uploadSoundSupport: uploadSoundSupport,
|
|
227
|
+
languageCharactersProps: [{
|
|
228
|
+
language: 'spanish'
|
|
229
|
+
}, {
|
|
230
|
+
language: 'special'
|
|
231
|
+
}]
|
|
188
232
|
})), rationaleEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
189
233
|
label: rationale.label,
|
|
190
234
|
className: classes.prompt
|
|
@@ -192,11 +236,40 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
192
236
|
markup: model.rationale || '',
|
|
193
237
|
onChange: onRationaleChanged,
|
|
194
238
|
imageSupport: imageSupport,
|
|
195
|
-
toolbarOpts: toolbarOpts
|
|
196
|
-
|
|
197
|
-
|
|
239
|
+
toolbarOpts: toolbarOpts,
|
|
240
|
+
spellCheck: spellCheckEnabled,
|
|
241
|
+
maxImageWidth: maxImageWidth && maxImageWidth.rationale || defaultImageMaxWidth,
|
|
242
|
+
maxImageHeight: maxImageHeight && maxImageHeight.rationale || defaultImageMaxHeight,
|
|
243
|
+
uploadSoundSupport: uploadSoundSupport,
|
|
244
|
+
languageCharactersProps: [{
|
|
245
|
+
language: 'spanish'
|
|
246
|
+
}, {
|
|
247
|
+
language: 'special'
|
|
248
|
+
}]
|
|
249
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
250
|
+
className: (0, _classnames["default"])(classes.label, classes.flexContainer)
|
|
251
|
+
}, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
|
252
|
+
className: classes.subheading,
|
|
198
253
|
variant: "subheading"
|
|
199
|
-
}, "Define Hotspot"), /*#__PURE__*/_react["default"].createElement(
|
|
254
|
+
}, "Define Hotspot"), /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
|
|
255
|
+
classes: {
|
|
256
|
+
tooltip: classes.tooltip
|
|
257
|
+
},
|
|
258
|
+
disableFocusListener: true,
|
|
259
|
+
disableTouchListener: true,
|
|
260
|
+
placement: 'left',
|
|
261
|
+
title: validationMessage
|
|
262
|
+
}, /*#__PURE__*/_react["default"].createElement(_Info["default"], {
|
|
263
|
+
fontSize: 'small',
|
|
264
|
+
color: 'primary',
|
|
265
|
+
style: {
|
|
266
|
+
"float": 'right'
|
|
267
|
+
}
|
|
268
|
+
}))), shapesError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
269
|
+
className: classes.errorText
|
|
270
|
+
}, shapesError), selectionsError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
271
|
+
className: classes.errorText
|
|
272
|
+
}, selectionsError), /*#__PURE__*/_react["default"].createElement(_hotspotPalette["default"], {
|
|
200
273
|
hotspotColor: model.hotspotColor,
|
|
201
274
|
hotspotList: model.hotspotList,
|
|
202
275
|
outlineColor: model.outlineColor,
|
|
@@ -275,12 +348,29 @@ var styles = function styles(theme) {
|
|
|
275
348
|
paddingTop: theme.spacing.unit * 2,
|
|
276
349
|
width: '100%'
|
|
277
350
|
},
|
|
351
|
+
subheading: {
|
|
352
|
+
marginRight: '5px'
|
|
353
|
+
},
|
|
278
354
|
regular: {
|
|
279
355
|
marginBottom: theme.spacing.unit * 3
|
|
280
356
|
},
|
|
281
357
|
switchElement: {
|
|
282
358
|
justifyContent: 'space-between',
|
|
283
359
|
margin: 0
|
|
360
|
+
},
|
|
361
|
+
flexContainer: {
|
|
362
|
+
display: 'flex',
|
|
363
|
+
alignItems: 'center'
|
|
364
|
+
},
|
|
365
|
+
tooltip: {
|
|
366
|
+
fontSize: '12px',
|
|
367
|
+
whiteSpace: 'pre',
|
|
368
|
+
maxWidth: '500px'
|
|
369
|
+
},
|
|
370
|
+
errorText: {
|
|
371
|
+
fontSize: '12px',
|
|
372
|
+
color: 'red',
|
|
373
|
+
padding: '5px 0'
|
|
284
374
|
}
|
|
285
375
|
};
|
|
286
376
|
};
|
|
@@ -293,6 +383,10 @@ Root.propTypes = {
|
|
|
293
383
|
add: _propTypes["default"].func,
|
|
294
384
|
"delete": _propTypes["default"].func
|
|
295
385
|
}),
|
|
386
|
+
uploadSoundSupport: _propTypes["default"].shape({
|
|
387
|
+
add: _propTypes["default"].func,
|
|
388
|
+
"delete": _propTypes["default"].func
|
|
389
|
+
}),
|
|
296
390
|
onImageUpload: _propTypes["default"].func.isRequired,
|
|
297
391
|
onColorChanged: _propTypes["default"].func.isRequired,
|
|
298
392
|
onPromptChanged: _propTypes["default"].func.isRequired,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/root.jsx"],"names":["Panel","settings","toggle","Root","fieldType","color","onColorChanged","props","cType","value","resizeType","model","dimensions","shapes","configuration","preserveAspectRatio","onUpdateImageDimension","onUpdateShapes","nextImageDimensions","updatedDimensions","enabled","shapesArray","updatedShapes","classes","imageSupport","onConfigurationChanged","onImageUpload","onModelChangedByConfig","onPromptChanged","onRationaleChanged","onTeacherInstructionsChanged","multipleCorrect","partialScoring","prompt","teacherInstructions","rationale","teacherInstructionsEnabled","promptEnabled","rationaleEnabled","toolbarOpts","toolbarEditorPosition","position","base","label","Properties","regular","hotspotColor","hotspotList","outlineColor","outlineList","handleColorChange","imageUrl","strokeWidth","width","e","handleOnUpdateImageDimensions","field","height","React","Component","styles","theme","marginTop","spacing","unit","container","display","flex","paddingTop","marginBottom","switchElement","justifyContent","margin","propTypes","PropTypes","object","isRequired","shape","add","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n settings,\n layout,\n InputContainer,\n NumberTextField\n} from '@pie-lib/config-ui';\nimport PropTypes from 'prop-types';\nimport EditableHtml from '@pie-lib/editable-html';\nimport Typography from '@material-ui/core/Typography';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport HotspotPalette from './hotspot-palette';\nimport HotspotContainer from './hotspot-container';\nimport { updateImageDimensions, getUpdatedShapes, getAllShapes, groupShapes } from './utils';\n\nconst { Panel, toggle } = settings;\n\nexport class Root extends React.Component {\n handleColorChange = (fieldType, color) => {\n const { onColorChanged } = this.props;\n const cType = `${fieldType}Color`;\n\n onColorChanged(cType, color);\n };\n\n handleOnUpdateImageDimensions = (value, resizeType) => {\n const {\n model: { dimensions, shapes },\n configuration: { preserveAspectRatio = {} },\n onUpdateImageDimension,\n onUpdateShapes,\n } = this.props;\n\n const nextImageDimensions = { ...dimensions, [resizeType]: value };\n\n // if preserveAspectRatio.enabled, updateImageDimensions function makes sure aspect ratio is kept\n const updatedDimensions = updateImageDimensions(\n dimensions,\n nextImageDimensions,\n preserveAspectRatio.enabled,\n resizeType\n );\n // transform shapes map into shapes array\n const shapesArray = getAllShapes(shapes);\n // transform all the shapes to fit the re-sized image\n const updatedShapes = getUpdatedShapes(dimensions, updatedDimensions, shapesArray);\n // transform shapes array back into shapes map\n\n onUpdateShapes(groupShapes(updatedShapes));\n onUpdateImageDimension(updatedDimensions);\n };\n\n render() {\n const {\n classes,\n configuration,\n model,\n imageSupport,\n onConfigurationChanged,\n onImageUpload,\n onModelChangedByConfig,\n onPromptChanged,\n onRationaleChanged,\n onUpdateImageDimension,\n onTeacherInstructionsChanged,\n onUpdateShapes\n } = this.props;\n const {\n multipleCorrect = {},\n partialScoring = {},\n prompt = {},\n teacherInstructions = {},\n rationale = {},\n preserveAspectRatio = {}\n } = configuration || {};\n const { teacherInstructionsEnabled, promptEnabled, rationaleEnabled } = model || {};\n const toolbarOpts = {};\n\n switch (model.toolbarEditorPosition) {\n case 'top':\n toolbarOpts.position = 'top';\n break;\n default:\n toolbarOpts.position = 'bottom';\n break;\n }\n\n return (\n <div className={classes.base}>\n <layout.ConfigLayout\n settings={\n <Panel\n model={model}\n onChangeModel={onModelChangedByConfig}\n configuration={configuration}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n 'Settings': {\n multipleCorrect:\n multipleCorrect.settings && toggle(multipleCorrect.label),\n partialScoring:\n partialScoring.settings && toggle(partialScoring.label),\n promptEnabled:\n prompt.settings && toggle(prompt.label),\n },\n Properties: {\n teacherInstructionsEnabled:\n teacherInstructions.settings && toggle(teacherInstructions.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label)\n }\n }}\n />\n }\n >\n <div className={classes.regular}>\n {teacherInstructionsEnabled && (\n <InputContainer label={teacherInstructions.label} className={classes.prompt}>\n <EditableHtml\n markup={model.teacherInstructions || ''}\n onChange={onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n {promptEnabled && (\n <InputContainer label={prompt.label} className={classes.prompt}>\n <EditableHtml\n markup={model.prompt || ''}\n onChange={onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n\n {rationaleEnabled && (\n <InputContainer\n label={rationale.label}\n className={classes.prompt}\n >\n <EditableHtml\n markup={model.rationale || ''}\n onChange={onRationaleChanged}\n imageSupport={imageSupport}\n toolbarOpts={toolbarOpts}\n />\n </InputContainer>\n )}\n\n <Typography className={classes.label} variant=\"subheading\">\n Define Hotspot\n </Typography>\n\n <HotspotPalette\n hotspotColor={model.hotspotColor}\n hotspotList={model.hotspotList}\n outlineColor={model.outlineColor}\n outlineList={model.outlineList}\n onHotspotColorChange={color =>\n this.handleColorChange('hotspot', color)\n }\n onOutlineColorChange={color =>\n this.handleColorChange('outline', color)\n }\n />\n\n <HotspotContainer\n dimensions={model.dimensions}\n imageUrl={model.imageUrl}\n multipleCorrect={model.multipleCorrect}\n hotspotColor={model.hotspotColor}\n outlineColor={model.outlineColor}\n onUpdateImageDimension={onUpdateImageDimension}\n onUpdateShapes={onUpdateShapes}\n onImageUpload={onImageUpload}\n shapes={model.shapes}\n strokeWidth={model.strokeWidth}\n preserveAspectRatioEnabled={preserveAspectRatio.enabled}\n />\n\n {model.imageUrl && (\n <div>\n <Typography className={classes.label} variant=\"subheading\">\n Image Dimensions\n </Typography>\n\n <div className={classes.dimensions}>\n <NumberTextField\n key=\"hotspot-manual-width\"\n label=\"Width\"\n value={model.dimensions.width}\n min={0}\n onChange={(e, value) => this.handleOnUpdateImageDimensions(value, 'width')}\n showErrorWhenOutsideRange\n className={classes.field}\n />\n <NumberTextField\n key=\"hotspot-manual-height\"\n label=\"Height\"\n value={model.dimensions.height}\n min={0}\n onChange={(e, value) => this.handleOnUpdateImageDimensions(value, 'height')}\n showErrorWhenOutsideRange\n className={classes.field}\n />\n </div>\n </div>\n )}\n </div>\n </layout.ConfigLayout>\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n base: {\n marginTop: theme.spacing.unit * 3\n },\n container: {\n display: 'flex',\n marginTop: theme.spacing.unit\n },\n dimensions: {\n display: 'flex'\n },\n field: {\n flex: 1,\n width: '90%'\n },\n label: {\n marginTop: theme.spacing.unit * 4\n },\n prompt: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%'\n },\n regular: {\n marginBottom: theme.spacing.unit * 3\n },\n switchElement: {\n justifyContent: 'space-between',\n margin: 0\n }\n});\n\nRoot.propTypes = {\n classes: PropTypes.object.isRequired,\n configuration: PropTypes.object,\n model: PropTypes.object.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func\n }),\n onImageUpload: PropTypes.func.isRequired,\n onColorChanged: PropTypes.func.isRequired,\n onPromptChanged: PropTypes.func.isRequired,\n onUpdateImageDimension: PropTypes.func.isRequired,\n onUpdateShapes: PropTypes.func.isRequired,\n onModelChangedByConfig: PropTypes.func.isRequired,\n onRationaleChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n onTeacherInstructionsChanged: PropTypes.func.isRequired,\n};\n\nexport default withStyles(styles)(Root);\n"],"file":"root.js"}
|
|
1
|
+
{"version":3,"sources":["../src/root.jsx"],"names":["Panel","settings","toggle","Root","fieldType","color","onColorChanged","props","cType","value","resizeType","model","dimensions","shapes","configuration","preserveAspectRatio","onUpdateImageDimension","onUpdateShapes","nextImageDimensions","updatedDimensions","enabled","shapesArray","updatedShapes","classes","imageSupport","uploadSoundSupport","onConfigurationChanged","onImageUpload","onModelChangedByConfig","onPromptChanged","onRationaleChanged","onTeacherInstructionsChanged","multipleCorrect","partialScoring","prompt","teacherInstructions","rationale","spellCheck","maxImageWidth","maxImageHeight","withRubric","teacherInstructionsEnabled","promptEnabled","rationaleEnabled","spellCheckEnabled","errors","rubricEnabled","shapesError","selectionsError","toolbarOpts","validationMessage","defaultImageMaxWidth","defaultImageMaxHeight","toolbarEditorPosition","position","base","label","Properties","regular","language","flexContainer","subheading","tooltip","errorText","hotspotColor","hotspotList","outlineColor","outlineList","handleColorChange","imageUrl","strokeWidth","width","e","handleOnUpdateImageDimensions","field","height","React","Component","styles","theme","marginTop","spacing","unit","container","display","flex","paddingTop","marginRight","marginBottom","switchElement","justifyContent","margin","alignItems","fontSize","whiteSpace","maxWidth","padding","propTypes","PropTypes","object","isRequired","shape","add","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n settings,\n layout,\n InputContainer,\n NumberTextField\n} from '@pie-lib/config-ui';\nimport PropTypes from 'prop-types';\nimport EditableHtml from '@pie-lib/editable-html';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Info from '@material-ui/icons/Info';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport HotspotPalette from './hotspot-palette';\nimport HotspotContainer from './hotspot-container';\nimport classNames from 'classnames';\nimport {\n updateImageDimensions,\n generateValidationMessage,\n getUpdatedShapes,\n getAllShapes,\n groupShapes\n} from './utils';\n\nconst { Panel, toggle } = settings;\n\nexport class Root extends React.Component {\n handleColorChange = (fieldType, color) => {\n const { onColorChanged } = this.props;\n const cType = `${fieldType}Color`;\n\n onColorChanged(cType, color);\n };\n\n handleOnUpdateImageDimensions = (value, resizeType) => {\n const {\n model: { dimensions, shapes },\n configuration: { preserveAspectRatio = {} },\n onUpdateImageDimension,\n onUpdateShapes,\n } = this.props;\n\n const nextImageDimensions = { ...dimensions, [resizeType]: value };\n\n // if preserveAspectRatio.enabled, updateImageDimensions function makes sure aspect ratio is kept\n const updatedDimensions = updateImageDimensions(\n dimensions,\n nextImageDimensions,\n preserveAspectRatio.enabled,\n resizeType\n );\n // transform shapes map into shapes array\n const shapesArray = getAllShapes(shapes);\n // transform all the shapes to fit the re-sized image\n const updatedShapes = getUpdatedShapes(dimensions, updatedDimensions, shapesArray);\n // transform shapes array back into shapes map\n\n onUpdateShapes(groupShapes(updatedShapes));\n onUpdateImageDimension(updatedDimensions);\n };\n\n render() {\n const {\n classes,\n configuration,\n model,\n imageSupport,\n uploadSoundSupport,\n onConfigurationChanged,\n onImageUpload,\n onModelChangedByConfig,\n onPromptChanged,\n onRationaleChanged,\n onUpdateImageDimension,\n onTeacherInstructionsChanged,\n onUpdateShapes\n } = this.props;\n const {\n multipleCorrect = {},\n partialScoring = {},\n prompt = {},\n teacherInstructions = {},\n rationale = {},\n spellCheck = {},\n preserveAspectRatio = {},\n maxImageWidth = {},\n maxImageHeight = {},\n withRubric\n } = configuration || {};\n const {\n teacherInstructionsEnabled,\n promptEnabled,\n rationaleEnabled,\n spellCheckEnabled,\n errors,\n rubricEnabled\n } = model || {};\n const { shapesError, selectionsError } = errors || {};\n const toolbarOpts = {};\n\n const validationMessage = generateValidationMessage(configuration);\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n switch (model.toolbarEditorPosition) {\n case 'top':\n toolbarOpts.position = 'top';\n break;\n default:\n toolbarOpts.position = 'bottom';\n break;\n }\n\n return (\n <div className={classes.base}>\n <layout.ConfigLayout\n settings={\n <Panel\n model={model}\n onChangeModel={onModelChangedByConfig}\n configuration={configuration}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n 'Settings': {\n multipleCorrect:\n multipleCorrect.settings && toggle(multipleCorrect.label),\n partialScoring:\n partialScoring.settings && toggle(partialScoring.label),\n promptEnabled:\n prompt.settings && toggle(prompt.label),\n },\n Properties: {\n teacherInstructionsEnabled:\n teacherInstructions.settings && toggle(teacherInstructions.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n spellCheckEnabled:\n spellCheck.settings && toggle(spellCheck.label),\n rubricEnabled: withRubric.settings && toggle(withRubric.label)\n }\n }}\n />\n }\n >\n <div className={classes.regular}>\n {teacherInstructionsEnabled && (\n <InputContainer label={teacherInstructions.label} className={classes.prompt}>\n <EditableHtml\n markup={model.teacherInstructions || ''}\n onChange={onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n maxImageWidth={maxImageWidth && maxImageWidth.teacherInstructions || defaultImageMaxWidth}\n maxImageHeight={maxImageHeight && maxImageHeight.teacherInstructions || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n {promptEnabled && (\n <InputContainer label={prompt.label} className={classes.prompt}>\n <EditableHtml\n markup={model.prompt || ''}\n onChange={onPromptChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n\n {rationaleEnabled && (\n <InputContainer\n label={rationale.label}\n className={classes.prompt}\n >\n <EditableHtml\n markup={model.rationale || ''}\n onChange={onRationaleChanged}\n imageSupport={imageSupport}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n maxImageWidth={maxImageWidth && maxImageWidth.rationale || defaultImageMaxWidth}\n maxImageHeight={maxImageHeight && maxImageHeight.rationale || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n />\n </InputContainer>\n )}\n\n <div className={classNames(classes.label, classes.flexContainer)}>\n <Typography className={classes.subheading} variant=\"subheading\">\n Define Hotspot\n </Typography>\n <Tooltip\n classes={{ tooltip: classes.tooltip }}\n disableFocusListener\n disableTouchListener\n placement={'left'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ float: 'right' }}/>\n </Tooltip>\n </div>\n {shapesError && <div className={classes.errorText}>{shapesError}</div>}\n {selectionsError && <div className={classes.errorText}>{selectionsError}</div>}\n\n <HotspotPalette\n hotspotColor={model.hotspotColor}\n hotspotList={model.hotspotList}\n outlineColor={model.outlineColor}\n outlineList={model.outlineList}\n onHotspotColorChange={color =>\n this.handleColorChange('hotspot', color)\n }\n onOutlineColorChange={color =>\n this.handleColorChange('outline', color)\n }\n />\n\n <HotspotContainer\n dimensions={model.dimensions}\n imageUrl={model.imageUrl}\n multipleCorrect={model.multipleCorrect}\n hotspotColor={model.hotspotColor}\n outlineColor={model.outlineColor}\n onUpdateImageDimension={onUpdateImageDimension}\n onUpdateShapes={onUpdateShapes}\n onImageUpload={onImageUpload}\n shapes={model.shapes}\n strokeWidth={model.strokeWidth}\n preserveAspectRatioEnabled={preserveAspectRatio.enabled}\n />\n\n {model.imageUrl && (\n <div>\n <Typography className={classes.label} variant=\"subheading\">\n Image Dimensions\n </Typography>\n\n <div className={classes.dimensions}>\n <NumberTextField\n key=\"hotspot-manual-width\"\n label=\"Width\"\n value={model.dimensions.width}\n min={0}\n onChange={(e, value) => this.handleOnUpdateImageDimensions(value, 'width')}\n showErrorWhenOutsideRange\n className={classes.field}\n />\n <NumberTextField\n key=\"hotspot-manual-height\"\n label=\"Height\"\n value={model.dimensions.height}\n min={0}\n onChange={(e, value) => this.handleOnUpdateImageDimensions(value, 'height')}\n showErrorWhenOutsideRange\n className={classes.field}\n />\n </div>\n </div>\n )}\n </div>\n </layout.ConfigLayout>\n </div>\n );\n }\n}\n\nconst styles = theme => ({\n base: {\n marginTop: theme.spacing.unit * 3\n },\n container: {\n display: 'flex',\n marginTop: theme.spacing.unit\n },\n dimensions: {\n display: 'flex'\n },\n field: {\n flex: 1,\n width: '90%'\n },\n label: {\n marginTop: theme.spacing.unit * 4\n },\n prompt: {\n paddingTop: theme.spacing.unit * 2,\n width: '100%'\n },\n subheading: {\n marginRight: '5px'\n },\n regular: {\n marginBottom: theme.spacing.unit * 3\n },\n switchElement: {\n justifyContent: 'space-between',\n margin: 0\n },\n flexContainer: {\n display: 'flex',\n alignItems: 'center'\n },\n tooltip: {\n fontSize: '12px',\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n errorText: {\n fontSize: '12px',\n color: 'red',\n padding: '5px 0'\n }\n});\n\nRoot.propTypes = {\n classes: PropTypes.object.isRequired,\n configuration: PropTypes.object,\n model: PropTypes.object.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func\n }),\n uploadSoundSupport: PropTypes.shape({\n add: PropTypes.func,\n delete: PropTypes.func\n }),\n onImageUpload: PropTypes.func.isRequired,\n onColorChanged: PropTypes.func.isRequired,\n onPromptChanged: PropTypes.func.isRequired,\n onUpdateImageDimension: PropTypes.func.isRequired,\n onUpdateShapes: PropTypes.func.isRequired,\n onModelChangedByConfig: PropTypes.func.isRequired,\n onRationaleChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n onTeacherInstructionsChanged: PropTypes.func.isRequired,\n};\n\nexport default withStyles(styles)(Root);\n"],"file":"root.js"}
|
package/configure/lib/utils.js
CHANGED
|
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.
|
|
8
|
+
exports.updateImageDimensions = exports.groupShapes = exports.getUpdatedShapes = exports.getUpdatedRectangle = exports.getUpdatedPlygon = exports.getAllShapes = exports.generateValidationMessage = void 0;
|
|
9
9
|
|
|
10
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
11
|
|
|
@@ -15,9 +15,11 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
|
|
|
15
15
|
|
|
16
16
|
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
var _excluded = ["group"];
|
|
19
19
|
|
|
20
|
-
function
|
|
20
|
+
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; }
|
|
21
|
+
|
|
22
|
+
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; }
|
|
21
23
|
|
|
22
24
|
var updateImageDimensions = function updateImageDimensions(initialDim, nextDim, keepAspectRatio, resizeType) {
|
|
23
25
|
// if we want to keep image aspect ratio
|
|
@@ -133,7 +135,7 @@ var groupShapes = function groupShapes(shapesArray) {
|
|
|
133
135
|
if (shapesArray.length) {
|
|
134
136
|
return shapesArray.reduce(function (acc, _ref) {
|
|
135
137
|
var group = _ref.group,
|
|
136
|
-
shapeProps = (0, _objectWithoutProperties2["default"])(_ref,
|
|
138
|
+
shapeProps = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
|
|
137
139
|
acc[group] = [].concat((0, _toConsumableArray2["default"])(acc[group] || []), [shapeProps]);
|
|
138
140
|
return acc;
|
|
139
141
|
}, shapesMap);
|
|
@@ -143,4 +145,16 @@ var groupShapes = function groupShapes(shapesArray) {
|
|
|
143
145
|
};
|
|
144
146
|
|
|
145
147
|
exports.groupShapes = groupShapes;
|
|
148
|
+
|
|
149
|
+
var generateValidationMessage = function generateValidationMessage(config) {
|
|
150
|
+
var minShapes = config.minShapes,
|
|
151
|
+
maxShapes = config.maxShapes,
|
|
152
|
+
maxSelections = config.maxSelections;
|
|
153
|
+
var shapesMessage = "\nThere should be at least ".concat(minShapes, " ") + (maxShapes ? "and at most ".concat(maxShapes, " ") : '') + 'shapes defined.';
|
|
154
|
+
var selectionsMessage = "\nThere should be at least 1 " + (maxSelections ? "and at most ".concat(maxSelections, " ") : '') + 'shape' + (maxSelections ? 's' : '') + ' selected.';
|
|
155
|
+
var message = 'Validation requirements:' + shapesMessage + selectionsMessage;
|
|
156
|
+
return message;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
exports.generateValidationMessage = generateValidationMessage;
|
|
146
160
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils.js"],"names":["updateImageDimensions","initialDim","nextDim","keepAspectRatio","resizeType","imageAspectRatio","width","height","getDelta","referenceInitialValue","referenceNextValue","currentValue","getUpdatedRectangle","shape","x","y","getUpdatedPlygon","points","map","point","getUpdatedShapes","shapes","group","getAllShapes","shapesMap","shapesArray","shapesKeys","Object","keys","length","reduce","acc","currentShapeKey","concat","index","groupShapes","rectangles","polygons","shapeProps"],"mappings":";;;;;;;;;;;;;;;AAAA
|
|
1
|
+
{"version":3,"sources":["../src/utils.js"],"names":["updateImageDimensions","initialDim","nextDim","keepAspectRatio","resizeType","imageAspectRatio","width","height","getDelta","referenceInitialValue","referenceNextValue","currentValue","getUpdatedRectangle","shape","x","y","getUpdatedPlygon","points","map","point","getUpdatedShapes","shapes","group","getAllShapes","shapesMap","shapesArray","shapesKeys","Object","keys","length","reduce","acc","currentShapeKey","concat","index","groupShapes","rectangles","polygons","shapeProps","generateValidationMessage","config","minShapes","maxShapes","maxSelections","shapesMessage","selectionsMessage","message"],"mappings":"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","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\n\nconst updateImageDimensions = (initialDim, nextDim, keepAspectRatio, resizeType) => {\n // if we want to keep image aspect ratio\n if (keepAspectRatio) {\n const imageAspectRatio = initialDim.width / initialDim.height;\n\n if (resizeType === 'height') {\n // if we want to change image height => we update the width accordingly\n return {\n width: nextDim.height * imageAspectRatio,\n height: nextDim.height\n }\n }\n\n // if we want to change image width => we update the height accordingly\n return {\n width: nextDim.width,\n height: nextDim.width / imageAspectRatio\n }\n }\n\n // if we don't want to keep aspect ratio, we just update both values\n return {\n width: nextDim.width,\n height: nextDim.height\n }\n};\n\n// referenceInitialValue = the initial value of the Stage\n// referenceNextValue = the next value of the Stage\n// currentValue = the value that has to be re-sized influenced by the changes that were made on the Stage\nconst getDelta = (referenceInitialValue, referenceNextValue, currentValue) => (referenceNextValue / referenceInitialValue) * currentValue;\n\nconst getUpdatedRectangle = (initialDim, nextDim, shape) => ({\n ...shape,\n width: getDelta(initialDim.width, nextDim.width, shape.width),\n height: getDelta(initialDim.height, nextDim.height, shape.height),\n x: getDelta(initialDim.width, nextDim.width, shape.x),\n y: getDelta(initialDim.height, nextDim.height, shape.y),\n});\n\nconst getUpdatedPlygon = (initialDim, nextDim, shape) => ({\n ...shape,\n points: shape.points.map(point => ({\n x: getDelta(initialDim.width, nextDim.width, point.x),\n y: getDelta(initialDim.height, nextDim.height, point.y),\n }))\n});\n\n// initialDim = the initial dimensions: { width, height } of the Stage\n// nextDim = the next dimensions: { width, height } of the Stage\n// shapes = array of shapes that have to be re-sized and re-positioned\nconst getUpdatedShapes = (initialDim, nextDim, shapes) => {\n return shapes.map(shape => {\n if (shape.group === 'rectangles') {\n return getUpdatedRectangle(initialDim, nextDim, shape);\n }\n\n if (shape.group === 'polygons') {\n return getUpdatedPlygon(initialDim, nextDim, shape);\n }\n });\n};\n\n// converts shapes map to shapes array\n// example:\n// from: { rectangles: [r1], polygons: [p1, p2]}\n// to: [{ ...r1, group: 'rectangles' }, { ...p1, group: 'polygons' }, { ...p2, group: 'polygons' }]\n// if a shape has index defined, keep it, otherwise initialize it\n// index is used for the UNDO function\nconst getAllShapes = (shapesMap) => {\n shapesMap = shapesMap || {};\n const shapesArray = [];\n const shapesKeys = Object.keys(shapesMap);\n\n return shapesKeys.length\n ? shapesKeys.reduce((acc, currentShapeKey) =>\n acc.concat(\n shapesMap[currentShapeKey]\n ? shapesMap[currentShapeKey].map((shape, index) => ({\n ...shape,\n group: currentShapeKey,\n index: shape.index || acc.length + index\n }))\n : []),\n shapesArray)\n : shapesArray;\n};\n\n// converts shapes array to shapes map\n// is the reverse of getAllShapes function\n// example:\n// from: [{ ...r1, group: 'rectangles' }, { ...p1, group: 'polygons' }, { ...p2, group: 'polygons' }]\n// to: { rectangles: [r1], polygons: [p1, p2]}\nconst groupShapes = (shapesArray) => {\n shapesArray = shapesArray || [];\n const shapesMap = {\n rectangles: [],\n polygons: []\n };\n\n if (shapesArray.length) {\n return shapesArray.reduce((acc, { group, ...shapeProps }) => {\n acc[group] = [...(acc[group] || []), shapeProps];\n return acc;\n }, shapesMap);\n }\n\n return cloneDeep(shapesMap);\n};\n\nconst generateValidationMessage = config => {\n const { minShapes, maxShapes, maxSelections } = config;\n\n const shapesMessage = `\\nThere should be at least ${minShapes} ` +\n (maxShapes ? `and at most ${maxShapes} ` : '') + 'shapes defined.';\n\n const selectionsMessage = `\\nThere should be at least 1 ` +\n (maxSelections ? `and at most ${maxSelections} ` : '') + 'shape' +\n (maxSelections ? 's' : '') + ' selected.';\n\n const message = 'Validation requirements:' + shapesMessage + selectionsMessage;\n\n return message;\n};\n\nexport {\n updateImageDimensions,\n generateValidationMessage,\n getUpdatedShapes,\n getAllShapes,\n groupShapes,\n getUpdatedRectangle,\n getUpdatedPlygon\n};\n"],"file":"utils.js"}
|
package/configure/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/hotspot-configure",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "5.1.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@material-ui/core": "^3.9.2",
|
|
11
11
|
"@material-ui/icons": "^3.0.2",
|
|
12
|
-
"@pie-framework/pie-configure-events": "^1.
|
|
13
|
-
"@pie-lib/config-ui": "^
|
|
14
|
-
"@pie-lib/editable-html": "^
|
|
12
|
+
"@pie-framework/pie-configure-events": "^1.3.0",
|
|
13
|
+
"@pie-lib/config-ui": "^11.0.19",
|
|
14
|
+
"@pie-lib/editable-html": "^9.2.2",
|
|
15
15
|
"classnames": "^2.2.6",
|
|
16
16
|
"debug": "^3.1.0",
|
|
17
17
|
"konva": "^3.2.4",
|
|
@@ -7,6 +7,17 @@ exports[`Root render renders 1`] = `
|
|
|
7
7
|
<Panel
|
|
8
8
|
configuration={
|
|
9
9
|
Object {
|
|
10
|
+
"maxImageHeight": Object {
|
|
11
|
+
"prompt": 300,
|
|
12
|
+
"rationale": 300,
|
|
13
|
+
"teacherInstructions": 300,
|
|
14
|
+
},
|
|
15
|
+
"maxImageWidth": Object {
|
|
16
|
+
"prompt": 300,
|
|
17
|
+
"rationale": 300,
|
|
18
|
+
"teacherInstructions": 300,
|
|
19
|
+
},
|
|
20
|
+
"minShapes": 2,
|
|
10
21
|
"multipleCorrect": Object {
|
|
11
22
|
"label": "Multiple Correct Responses",
|
|
12
23
|
"settings": true,
|
|
@@ -28,16 +39,27 @@ exports[`Root render renders 1`] = `
|
|
|
28
39
|
"label": "Rationale",
|
|
29
40
|
"settings": true,
|
|
30
41
|
},
|
|
42
|
+
"spellCheck": Object {
|
|
43
|
+
"enabled": true,
|
|
44
|
+
"label": "Spellcheck",
|
|
45
|
+
"settings": false,
|
|
46
|
+
},
|
|
31
47
|
"teacherInstructions": Object {
|
|
32
48
|
"label": "Teacher Instructions",
|
|
33
49
|
"settings": true,
|
|
34
50
|
},
|
|
51
|
+
"withRubric": Object {
|
|
52
|
+
"label": "Add Rubric",
|
|
53
|
+
"settings": true,
|
|
54
|
+
},
|
|
35
55
|
}
|
|
36
56
|
}
|
|
37
57
|
groups={
|
|
38
58
|
Object {
|
|
39
59
|
"Properties": Object {
|
|
40
60
|
"rationaleEnabled": undefined,
|
|
61
|
+
"rubricEnabled": undefined,
|
|
62
|
+
"spellCheckEnabled": false,
|
|
41
63
|
"teacherInstructionsEnabled": undefined,
|
|
42
64
|
},
|
|
43
65
|
"Settings": Object {
|
|
@@ -170,11 +192,38 @@ exports[`Root render renders 1`] = `
|
|
|
170
192
|
}
|
|
171
193
|
>
|
|
172
194
|
<div>
|
|
173
|
-
<
|
|
174
|
-
|
|
195
|
+
<div
|
|
196
|
+
className=""
|
|
175
197
|
>
|
|
176
|
-
|
|
177
|
-
|
|
198
|
+
<WithStyles(Typography)
|
|
199
|
+
variant="subheading"
|
|
200
|
+
>
|
|
201
|
+
Define Hotspot
|
|
202
|
+
</WithStyles(Typography)>
|
|
203
|
+
<WithStyles(Tooltip)
|
|
204
|
+
classes={
|
|
205
|
+
Object {
|
|
206
|
+
"tooltip": undefined,
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
disableFocusListener={true}
|
|
210
|
+
disableTouchListener={true}
|
|
211
|
+
placement="left"
|
|
212
|
+
title="Validation requirements:
|
|
213
|
+
There should be at least 2 shapes defined.
|
|
214
|
+
There should be at least 1 shape selected."
|
|
215
|
+
>
|
|
216
|
+
<pure(InfoIcon)
|
|
217
|
+
color="primary"
|
|
218
|
+
fontSize="small"
|
|
219
|
+
style={
|
|
220
|
+
Object {
|
|
221
|
+
"float": "right",
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/>
|
|
225
|
+
</WithStyles(Tooltip)>
|
|
226
|
+
</div>
|
|
178
227
|
<WithStyles(Palette)
|
|
179
228
|
hotspotColor="rgba(137, 183, 244, 0.65)"
|
|
180
229
|
hotspotList={
|
|
@@ -44,6 +44,11 @@ export default {
|
|
|
44
44
|
settings: true,
|
|
45
45
|
label: 'Prompt'
|
|
46
46
|
},
|
|
47
|
+
spellCheck: {
|
|
48
|
+
label: 'Spellcheck',
|
|
49
|
+
settings:false,
|
|
50
|
+
enabled:true
|
|
51
|
+
},
|
|
47
52
|
teacherInstructions: {
|
|
48
53
|
settings: true,
|
|
49
54
|
label: 'Teacher Instructions'
|
|
@@ -52,6 +57,21 @@ export default {
|
|
|
52
57
|
settings: false,
|
|
53
58
|
enabled: true,
|
|
54
59
|
label: 'Preserve aspect ratio'
|
|
60
|
+
},
|
|
61
|
+
minShapes: 2,
|
|
62
|
+
maxImageWidth: {
|
|
63
|
+
teacherInstructions: 300,
|
|
64
|
+
prompt: 300,
|
|
65
|
+
rationale: 300,
|
|
66
|
+
},
|
|
67
|
+
maxImageHeight: {
|
|
68
|
+
teacherInstructions: 300,
|
|
69
|
+
prompt: 300,
|
|
70
|
+
rationale: 300,
|
|
71
|
+
},
|
|
72
|
+
withRubric: {
|
|
73
|
+
settings: true,
|
|
74
|
+
label: 'Add Rubric'
|
|
55
75
|
}
|
|
56
76
|
}
|
|
57
77
|
};
|
|
@@ -33,11 +33,13 @@ export class Container extends Component {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
handleFileRead = (file) => {
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
if (file instanceof Blob) {
|
|
37
|
+
const { onImageUpload } = this.props;
|
|
38
|
+
const reader = new FileReader();
|
|
38
39
|
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
reader.onloadend = () => onImageUpload(reader.result);
|
|
41
|
+
reader.readAsDataURL(file)
|
|
42
|
+
}
|
|
41
43
|
};
|
|
42
44
|
|
|
43
45
|
handleUploadImage = (e) => {
|
|
@@ -49,6 +51,14 @@ export class Container extends Component {
|
|
|
49
51
|
enableDropzone = () => this.setState({ dropzoneActive: true });
|
|
50
52
|
disableDropzone = () => this.setState({ dropzoneActive: false });
|
|
51
53
|
|
|
54
|
+
handleOnPaste = (e) => {
|
|
55
|
+
const { files } = e.clipboardData;
|
|
56
|
+
|
|
57
|
+
if (files && isImage(files[0])) {
|
|
58
|
+
this.handleFileRead(files[0]);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
|
|
52
62
|
handleOnDrop = (e) => {
|
|
53
63
|
e.preventDefault();
|
|
54
64
|
|
|
@@ -139,7 +149,8 @@ export class Container extends Component {
|
|
|
139
149
|
onDragExit: this.handleOnDragExit,
|
|
140
150
|
onDragLeave: this.handleOnDragExit,
|
|
141
151
|
onDragOver: this.handleOnDragOver,
|
|
142
|
-
onDrop: this.handleOnDrop
|
|
152
|
+
onDrop: this.handleOnDrop,
|
|
153
|
+
onPaste: this.handleOnPaste
|
|
143
154
|
} : {}}
|
|
144
155
|
>
|
|
145
156
|
<div className={classes.toolbar}>
|
|
@@ -9,6 +9,8 @@ import Rectangle from './hotspot-rectangle';
|
|
|
9
9
|
import Polygon from './hotspot-polygon';
|
|
10
10
|
import { updateImageDimensions, getUpdatedShapes } from './utils';
|
|
11
11
|
|
|
12
|
+
const IMAGE_MAX_WIDTH = 800;
|
|
13
|
+
|
|
12
14
|
export class Drawable extends React.Component {
|
|
13
15
|
static getDerivedStateFromProps(nextProps, prevState) {
|
|
14
16
|
let dimensions = nextProps.dimensions;
|
|
@@ -153,8 +155,12 @@ export class Drawable extends React.Component {
|
|
|
153
155
|
const elementStyle = getComputedStyle(target);
|
|
154
156
|
const newHeight = parseFloat(elementStyle.height);
|
|
155
157
|
const newWidth = parseFloat(elementStyle.width);
|
|
158
|
+
const aspectWidth = newWidth / IMAGE_MAX_WIDTH;
|
|
156
159
|
|
|
157
|
-
const dimensions = {
|
|
160
|
+
const dimensions = newWidth > IMAGE_MAX_WIDTH ? {
|
|
161
|
+
height: newHeight / aspectWidth,
|
|
162
|
+
width: IMAGE_MAX_WIDTH
|
|
163
|
+
} : {
|
|
158
164
|
height: newHeight,
|
|
159
165
|
width: newWidth
|
|
160
166
|
};
|
|
@@ -209,7 +215,7 @@ export class Drawable extends React.Component {
|
|
|
209
215
|
const resizeValid = this.checkIfResizeValid(width, height);
|
|
210
216
|
const hasMinimumWidth = width > 150 && height > 150;
|
|
211
217
|
|
|
212
|
-
if (resizeValid && hasMinimumWidth) {
|
|
218
|
+
if (resizeValid && hasMinimumWidth && box) {
|
|
213
219
|
box.style.width = `${width}px`;
|
|
214
220
|
box.style.height = `${height}px`;
|
|
215
221
|
|