@pie-element/hotspot 4.10.16-next.1 → 4.11.0
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 +88 -0
- package/LICENSE.md +5 -0
- package/configure/CHANGELOG.md +75 -0
- package/configure/lib/button.js +1 -1
- package/configure/lib/defaults.js +3 -2
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/hotspot-container.js +1 -1
- package/configure/lib/hotspot-drawable.js +2 -2
- package/configure/lib/hotspot-palette.js +1 -1
- package/configure/lib/hotspot-polygon.js +1 -1
- package/configure/lib/hotspot-rectangle.js +1 -1
- package/configure/lib/index.js +1 -1
- package/configure/lib/root.js +23 -18
- package/configure/lib/root.js.map +1 -1
- package/configure/lib/upload-control.js +1 -1
- package/configure/lib/utils.js +14 -2
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +3 -3
- package/configure/src/__tests__/__snapshots__/root.test.js.snap +32 -4
- package/configure/src/defaults.js +2 -1
- package/configure/src/hotspot-drawable.jsx +1 -1
- package/configure/src/root.jsx +33 -26
- package/configure/src/utils.js +23 -1
- package/controller/CHANGELOG.md +12 -0
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/index.js +1 -1
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +1 -1
- package/controller/package.json +1 -1
- package/lib/hotspot/container.js +1 -1
- package/lib/hotspot/icons.js +1 -1
- package/lib/hotspot/image.js +1 -1
- package/lib/hotspot/index.js +1 -1
- package/lib/hotspot/polygon.js +1 -1
- package/lib/hotspot/rectangle.js +1 -1
- package/lib/index.js +4 -1
- package/lib/session-updater.js +1 -1
- package/package.json +4 -4
- package/src/index.js +5 -0
- package/configure/lib/__tests__/hotspot-container.test.js +0 -281
- package/configure/lib/__tests__/hotspot-drawable.test.js +0 -241
- package/configure/lib/__tests__/index.test.js +0 -224
- package/configure/lib/__tests__/root.test.js +0 -443
- package/configure/lib/__tests__/utils.test.js +0 -335
- package/controller/lib/__tests__/index.test.js +0 -921
- package/controller/lib/__tests__/utils.test.js +0 -8
- package/docs/demo/pie.manifest.json +0 -11
- package/lib/__tests__/container-test.js +0 -185
- package/lib/__tests__/image-test.js +0 -63
- package/lib/__tests__/polygon-test.js +0 -99
- package/lib/__tests__/rectangle-test.js +0 -92
- package/lib/__tests__/session-updater-test.js +0 -78
package/configure/lib/root.js
CHANGED
|
@@ -29,10 +29,10 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
29
29
|
|
|
30
30
|
var _editableHtml = _interopRequireDefault(require("@pie-lib/editable-html"));
|
|
31
31
|
|
|
32
|
-
var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
|
|
33
|
-
|
|
34
32
|
var _styles = require("@material-ui/core/styles");
|
|
35
33
|
|
|
34
|
+
var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
|
|
35
|
+
|
|
36
36
|
var _Info = _interopRequireDefault(require("@material-ui/icons/Info"));
|
|
37
37
|
|
|
38
38
|
var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip"));
|
|
@@ -41,6 +41,8 @@ var _hotspotPalette = _interopRequireDefault(require("./hotspot-palette"));
|
|
|
41
41
|
|
|
42
42
|
var _hotspotContainer = _interopRequireDefault(require("./hotspot-container"));
|
|
43
43
|
|
|
44
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
45
|
+
|
|
44
46
|
var _utils = require("./utils");
|
|
45
47
|
|
|
46
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; }
|
|
@@ -132,10 +134,7 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
132
134
|
_ref$spellCheck = _ref.spellCheck,
|
|
133
135
|
spellCheck = _ref$spellCheck === void 0 ? {} : _ref$spellCheck,
|
|
134
136
|
_ref$preserveAspectRa = _ref.preserveAspectRatio,
|
|
135
|
-
preserveAspectRatio = _ref$preserveAspectRa === void 0 ? {} : _ref$preserveAspectRa
|
|
136
|
-
maxSelections = _ref.maxSelections,
|
|
137
|
-
minShapes = _ref.minShapes,
|
|
138
|
-
maxShapes = _ref.maxShapes;
|
|
137
|
+
preserveAspectRatio = _ref$preserveAspectRa === void 0 ? {} : _ref$preserveAspectRa;
|
|
139
138
|
|
|
140
139
|
var _ref2 = model || {},
|
|
141
140
|
teacherInstructionsEnabled = _ref2.teacherInstructionsEnabled,
|
|
@@ -144,16 +143,13 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
144
143
|
spellCheckEnabled = _ref2.spellCheckEnabled,
|
|
145
144
|
errors = _ref2.errors;
|
|
146
145
|
|
|
147
|
-
var toolbarOpts = {};
|
|
148
|
-
var configSettings = maxSelections || minShapes || maxShapes;
|
|
149
|
-
var maxSelectionsValidation = maxSelections ? "\nNo more than ".concat(maxSelections, " shapes should be selected.") : '';
|
|
150
|
-
var minShapesValidation = minShapes ? "\nThere should be at least ".concat(minShapes, " shapes defined.") : '';
|
|
151
|
-
var maxShapesValidation = maxShapes ? "\nNo more than ".concat(maxShapes, " shapes should be defined.") : '';
|
|
152
|
-
|
|
153
146
|
var _ref3 = errors || {},
|
|
154
147
|
shapesError = _ref3.shapesError,
|
|
155
148
|
selectionsError = _ref3.selectionsError;
|
|
156
149
|
|
|
150
|
+
var toolbarOpts = {};
|
|
151
|
+
var validationMessage = (0, _utils.generateValidationMessage)(configuration);
|
|
152
|
+
|
|
157
153
|
switch (model.toolbarEditorPosition) {
|
|
158
154
|
case 'top':
|
|
159
155
|
toolbarOpts.position = 'top';
|
|
@@ -216,24 +212,26 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
216
212
|
imageSupport: imageSupport,
|
|
217
213
|
toolbarOpts: toolbarOpts,
|
|
218
214
|
spellCheck: spellCheckEnabled
|
|
219
|
-
})), /*#__PURE__*/_react["default"].createElement(
|
|
220
|
-
className: classes.label,
|
|
215
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
216
|
+
className: (0, _classnames["default"])(classes.label, classes.flexContainer)
|
|
217
|
+
}, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
|
218
|
+
className: classes.subheading,
|
|
221
219
|
variant: "subheading"
|
|
222
|
-
}, "Define Hotspot"),
|
|
220
|
+
}, "Define Hotspot"), /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
|
|
223
221
|
classes: {
|
|
224
222
|
tooltip: classes.tooltip
|
|
225
223
|
},
|
|
226
224
|
disableFocusListener: true,
|
|
227
225
|
disableTouchListener: true,
|
|
228
226
|
placement: 'left',
|
|
229
|
-
title:
|
|
227
|
+
title: validationMessage
|
|
230
228
|
}, /*#__PURE__*/_react["default"].createElement(_Info["default"], {
|
|
231
229
|
fontSize: 'small',
|
|
232
230
|
color: 'primary',
|
|
233
231
|
style: {
|
|
234
232
|
"float": 'right'
|
|
235
233
|
}
|
|
236
|
-
})), shapesError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
234
|
+
}))), shapesError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
237
235
|
className: classes.errorText
|
|
238
236
|
}, shapesError), selectionsError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
239
237
|
className: classes.errorText
|
|
@@ -316,6 +314,9 @@ var styles = function styles(theme) {
|
|
|
316
314
|
paddingTop: theme.spacing.unit * 2,
|
|
317
315
|
width: '100%'
|
|
318
316
|
},
|
|
317
|
+
subheading: {
|
|
318
|
+
marginRight: '5px'
|
|
319
|
+
},
|
|
319
320
|
regular: {
|
|
320
321
|
marginBottom: theme.spacing.unit * 3
|
|
321
322
|
},
|
|
@@ -323,6 +324,10 @@ var styles = function styles(theme) {
|
|
|
323
324
|
justifyContent: 'space-between',
|
|
324
325
|
margin: 0
|
|
325
326
|
},
|
|
327
|
+
flexContainer: {
|
|
328
|
+
display: 'flex',
|
|
329
|
+
alignItems: 'center'
|
|
330
|
+
},
|
|
326
331
|
tooltip: {
|
|
327
332
|
fontSize: '12px',
|
|
328
333
|
whiteSpace: 'pre',
|
|
@@ -358,4 +363,4 @@ Root.propTypes = {
|
|
|
358
363
|
var _default = (0, _styles.withStyles)(styles)(Root);
|
|
359
364
|
|
|
360
365
|
exports["default"] = _default;
|
|
361
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yb290LmpzeCJdLCJuYW1lcyI6WyJQYW5lbCIsInNldHRpbmdzIiwidG9nZ2xlIiwiUm9vdCIsImZpZWxkVHlwZSIsImNvbG9yIiwib25Db2xvckNoYW5nZWQiLCJwcm9wcyIsImNUeXBlIiwidmFsdWUiLCJyZXNpemVUeXBlIiwibW9kZWwiLCJkaW1lbnNpb25zIiwic2hhcGVzIiwiY29uZmlndXJhdGlvbiIsInByZXNlcnZlQXNwZWN0UmF0aW8iLCJvblVwZGF0ZUltYWdlRGltZW5zaW9uIiwib25VcGRhdGVTaGFwZXMiLCJuZXh0SW1hZ2VEaW1lbnNpb25zIiwidXBkYXRlZERpbWVuc2lvbnMiLCJlbmFibGVkIiwic2hhcGVzQXJyYXkiLCJ1cGRhdGVkU2hhcGVzIiwiY2xhc3NlcyIsImltYWdlU3VwcG9ydCIsIm9uQ29uZmlndXJhdGlvbkNoYW5nZWQiLCJvbkltYWdlVXBsb2FkIiwib25Nb2RlbENoYW5nZWRCeUNvbmZpZyIsIm9uUHJvbXB0Q2hhbmdlZCIsIm9uUmF0aW9uYWxlQ2hhbmdlZCIsIm9uVGVhY2hlckluc3RydWN0aW9uc0NoYW5nZWQiLCJtdWx0aXBsZUNvcnJlY3QiLCJwYXJ0aWFsU2NvcmluZyIsInByb21wdCIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJyYXRpb25hbGUiLCJzcGVsbENoZWNrIiwibWF4U2VsZWN0aW9ucyIsIm1pblNoYXBlcyIsIm1heFNoYXBlcyIsInRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkIiwicHJvbXB0RW5hYmxlZCIsInJhdGlvbmFsZUVuYWJsZWQiLCJzcGVsbENoZWNrRW5hYmxlZCIsImVycm9ycyIsInRvb2xiYXJPcHRzIiwiY29uZmlnU2V0dGluZ3MiLCJtYXhTZWxlY3Rpb25zVmFsaWRhdGlvbiIsIm1pblNoYXBlc1ZhbGlkYXRpb24iLCJtYXhTaGFwZXNWYWxpZGF0aW9uIiwic2hhcGVzRXJyb3IiLCJzZWxlY3Rpb25zRXJyb3IiLCJ0b29sYmFyRWRpdG9yUG9zaXRpb24iLCJwb3NpdGlvbiIsImJhc2UiLCJsYWJlbCIsIlByb3BlcnRpZXMiLCJyZWd1bGFyIiwidG9vbHRpcCIsImVycm9yVGV4dCIsImhvdHNwb3RDb2xvciIsImhvdHNwb3RMaXN0Iiwib3V0bGluZUNvbG9yIiwib3V0bGluZUxpc3QiLCJoYW5kbGVDb2xvckNoYW5nZSIsImltYWdlVXJsIiwic3Ryb2tlV2lkdGgiLCJ3aWR0aCIsImUiLCJoYW5kbGVPblVwZGF0ZUltYWdlRGltZW5zaW9ucyIsImZpZWxkIiwiaGVpZ2h0IiwiUmVhY3QiLCJDb21wb25lbnQiLCJzdHlsZXMiLCJ0aGVtZSIsIm1hcmdpblRvcCIsInNwYWNpbmciLCJ1bml0IiwiY29udGFpbmVyIiwiZGlzcGxheSIsImZsZXgiLCJwYWRkaW5nVG9wIiwibWFyZ2luQm90dG9tIiwic3dpdGNoRWxlbWVudCIsImp1c3RpZnlDb250ZW50IiwibWFyZ2luIiwiZm9udFNpemUiLCJ3aGl0ZVNwYWNlIiwibWF4V2lkdGgiLCJwYWRkaW5nIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiaXNSZXF1aXJlZCIsInNoYXBlIiwiYWRkIiwiZnVuYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFNQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQUVBLElBQVFBLEtBQVIsR0FBMEJDLGtCQUExQixDQUFRRCxLQUFSO0FBQUEsSUFBZUUsTUFBZixHQUEwQkQsa0JBQTFCLENBQWVDLE1BQWY7O0lBRWFDLEk7Ozs7Ozs7Ozs7Ozs7OzswR0FDUyxVQUFDQyxTQUFELEVBQVlDLEtBQVosRUFBc0I7QUFDeEMsVUFBUUMsY0FBUixHQUEyQixNQUFLQyxLQUFoQyxDQUFRRCxjQUFSO0FBQ0EsVUFBTUUsS0FBSyxhQUFNSixTQUFOLFVBQVg7QUFFQUUsTUFBQUEsY0FBYyxDQUFDRSxLQUFELEVBQVFILEtBQVIsQ0FBZDtBQUNELEs7c0hBRStCLFVBQUNJLEtB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XG5pbXBvcnQge1xuICBzZXR0aW5ncyxcbiAgbGF5b3V0LFxuICBJbnB1dENvbnRhaW5lcixcbiAgTnVtYmVyVGV4dEZpZWxkXG59IGZyb20gJ0BwaWUtbGliL2NvbmZpZy11aSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEVkaXRhYmxlSHRtbCBmcm9tICdAcGllLWxpYi9lZGl0YWJsZS1odG1sJztcbmltcG9ydCBUeXBvZ3JhcGh5IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL1R5cG9ncmFwaHknO1xuaW1wb3J0IHsgd2l0aFN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7XG5pbXBvcnQgSW5mbyBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvSW5mbyc7XG5pbXBvcnQgVG9vbHRpcCBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9Ub29sdGlwJztcblxuaW1wb3J0IEhvdHNwb3RQYWxldHRlIGZyb20gJy4vaG90c3BvdC1wYWxldHRlJztcbmltcG9ydCBIb3RzcG90Q29udGFpbmVyIGZyb20gJy4vaG90c3BvdC1jb250YWluZXInO1xuaW1wb3J0IHsgdXBkYXRlSW1hZ2VEaW1lbnNpb25zLCBnZXRVcGRhdGVkU2hhcGVzLCBnZXRBbGxTaGFwZXMsIGdyb3VwU2hhcGVzIH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IHsgUGFuZWwsIHRvZ2dsZSB9ID0gc2V0dGluZ3M7XG5cbmV4cG9ydCBjbGFzcyBSb290IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgaGFuZGxlQ29sb3JDaGFuZ2UgPSAoZmllbGRUeXBlLCBjb2xvcikgPT4ge1xuICAgIGNvbnN0IHsgb25Db2xvckNoYW5nZWQgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgY1R5cGUgPSBgJHtmaWVsZFR5cGV9Q29sb3JgO1xuXG4gICAgb25Db2xvckNoYW5nZWQoY1R5cGUsIGNvbG9yKTtcbiAgfTtcblxuICBoYW5kbGVPblVwZGF0ZUltYWdlRGltZW5zaW9ucyA9ICh2YWx1ZSwgcmVzaXplVHlwZSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG1vZGVsOiB7IGRpbWVuc2lvbnMsIHNoYXBlcyB9LFxuICAgICAgY29uZmlndXJhdGlvbjogeyBwcmVzZXJ2ZUFzcGVjdFJhdGlvID0ge30gfSxcbiAgICAgIG9uVXBkYXRlSW1hZ2VEaW1lbnNpb24sXG4gICAgICBvblVwZGF0ZVNoYXBlcyxcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIGNvbnN0IG5leHRJbWFnZURpbWVuc2lvbnMgPSB7IC4uLmRpbWVuc2lvbnMsIFtyZXNpemVUeXBlXTogdmFsdWUgfTtcblxuICAgIC8vIGlmIHByZXNlcnZlQXNwZWN0UmF0aW8uZW5hYmxlZCwgdXBkYXRlSW1hZ2VEaW1lbnNpb25zIGZ1bmN0aW9uIG1ha2VzIHN1cmUgYXNwZWN0IHJhdGlvIGlzIGtlcHRcbiAgICBjb25zdCB1cGRhdGVkRGltZW5zaW9ucyA9IHVwZGF0ZUltYWdlRGltZW5zaW9ucyhcbiAgICAgIGRpbWVuc2lvbnMsXG4gICAgICBuZXh0SW1hZ2VEaW1lbnNpb25zLFxuICAgICAgcHJlc2VydmVBc3BlY3RSYXRpby5lbmFibGVkLFxuICAgICAgcmVzaXplVHlwZVxuICAgICk7XG4gICAgLy8gdHJhbnNmb3JtIHNoYXBlcyBtYXAgaW50byBzaGFwZXMgYXJyYXlcbiAgICBjb25zdCBzaGFwZXNBcnJheSA9IGdldEFsbFNoYXBlcyhzaGFwZXMpO1xuICAgIC8vIHRyYW5zZm9ybSBhbGwgdGhlIHNoYXBlcyB0byBmaXQgdGhlIHJlLXNpemVkIGltYWdlXG4gICAgY29uc3QgdXBkYXRlZFNoYXBlcyA9IGdldFVwZGF0ZWRTaGFwZXMoZGltZW5zaW9ucywgdXBkYXRlZERpbWVuc2lvbnMsIHNoYXBlc0FycmF5KTtcbiAgICAvLyB0cmFuc2Zvcm0gc2hhcGVzIGFycmF5IGJhY2sgaW50byBzaGFwZXMgbWFwXG5cbiAgICBvblVwZGF0ZVNoYXBlcyhncm91cFNoYXBlcyh1cGRhdGVkU2hhcGVzKSk7XG4gICAgb25VcGRhdGVJbWFnZURpbWVuc2lvbih1cGRhdGVkRGltZW5zaW9ucyk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzZXMsXG4gICAgICBjb25maWd1cmF0aW9uLFxuICAgICAgbW9kZWwsXG4gICAgICBpbWFnZVN1cHBvcnQsXG4gICAgICBvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkLFxuICAgICAgb25JbWFnZVVwbG9hZCxcbiAgICAgIG9uTW9kZWxDaGFuZ2VkQnlDb25maWcsXG4gICAgICBvblByb21wdENoYW5nZWQsXG4gICAgICBvblJhdGlvbmFsZUNoYW5nZWQsXG4gICAgICBvblVwZGF0ZUltYWdlRGltZW5zaW9uLFxuICAgICAgb25UZWFjaGVySW5zdHJ1Y3Rpb25zQ2hhbmdlZCxcbiAgICAgIG9uVXBkYXRlU2hhcGVzXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgbXVsdGlwbGVDb3JyZWN0ID0ge30sXG4gICAgICBwYXJ0aWFsU2NvcmluZyA9IHt9LFxuICAgICAgcHJvbXB0ID0ge30sXG4gICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zID0ge30sXG4gICAgICByYXRpb25hbGUgPSB7fSxcbiAgICAgIHNwZWxsQ2hlY2sgPSB7fSxcbiAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8gPSB7fSxcbiAgICAgIG1heFNlbGVjdGlvbnMsXG4gICAgICBtaW5TaGFwZXMsXG4gICAgICBtYXhTaGFwZXNcbiAgICB9ID0gY29uZmlndXJhdGlvbiB8fCB7fTtcbiAgICBjb25zdCB7IHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkLCBwcm9tcHRFbmFibGVkLCByYXRpb25hbGVFbmFibGVkLCBzcGVsbENoZWNrRW5hYmxlZCwgZXJyb3JzIH0gPSBtb2RlbCB8fCB7fTtcbiAgICBjb25zdCB0b29sYmFyT3B0cyA9IHt9O1xuICAgIGNvbnN0IGNvbmZpZ1NldHRpbmdzID0gbWF4U2VsZWN0aW9ucyB8fCBtaW5TaGFwZXMgfHwgbWF4U2hhcGVzO1xuICAgIGNvbnN0IG1heFNlbGVjdGlvbnNWYWxpZGF0aW9uID0gbWF4U2VsZWN0aW9ucyA/IGBcXG5ObyBtb3JlIHRoYW4gJHttYXhTZWxlY3Rpb25zfSBzaGFwZXMgc2hvdWxkIGJlIHNlbGVjdGVkLmAgOiAnJztcbiAgICBjb25zdCBtaW5TaGFwZXNWYWxpZGF0aW9uID0gbWluU2hhcGVzID8gYFxcblRoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCAke21pblNoYXBlc30gc2hhcGVzIGRlZmluZWQuYCA6ICcnO1xuICAgIGNvbnN0IG1heFNoYXBlc1ZhbGlkYXRpb24gPSBtYXhTaGFwZXMgPyBgXFxuTm8gbW9yZSB0aGFuICR7bWF4U2hhcGVzfSBzaGFwZXMgc2hvdWxkIGJlIGRlZmluZWQuYCA6ICcnO1xuXG4gICAgY29uc3QgeyBzaGFwZXNFcnJvciwgc2VsZWN0aW9uc0Vycm9yIH0gPSBlcnJvcnMgfHwge307XG5cbiAgICBzd2l0Y2ggKG1vZGVsLnRvb2xiYXJFZGl0b3JQb3NpdGlvbikge1xuICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgdG9vbGJhck9wdHMucG9zaXRpb24gPSAndG9wJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0b29sYmFyT3B0cy5wb3NpdGlvbiA9ICdib3R0b20nO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuYmFzZX0+XG4gICAgICAgIDxsYXlvdXQuQ29uZmlnTGF5b3V0XG4gICAgICAgICAgc2V0dGluZ3M9e1xuICAgICAgICAgICAgPFBhbmVsXG4gICAgICAgICAgICAgIG1vZGVsPXttb2RlbH1cbiAgICAgICAgICAgICAgb25DaGFuZ2VNb2RlbD17b25Nb2RlbENoYW5nZWRCeUNvbmZpZ31cbiAgICAgICAgICAgICAgY29uZmlndXJhdGlvbj17Y29uZmlndXJhdGlvbn1cbiAgICAgICAgICAgICAgb25DaGFuZ2VDb25maWd1cmF0aW9uPXtvbkNvbmZpZ3VyYXRpb25DaGFuZ2VkfVxuICAgICAgICAgICAgICBncm91cHM9e3tcbiAgICAgICAgICAgICAgICAnU2V0dGluZ3MnOiB7XG4gICAgICAgICAgICAgICAgICBtdWx0aXBsZUNvcnJlY3Q6XG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlQ29ycmVjdC5zZXR0aW5ncyAmJiB0b2dnbGUobXVsdGlwbGVDb3JyZWN0LmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgIHBhcnRpYWxTY29yaW5nOlxuICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsU2NvcmluZy5zZXR0aW5ncyAmJiB0b2dnbGUocGFydGlhbFNjb3JpbmcubGFiZWwpLFxuICAgICAgICAgICAgICAgICAgcHJvbXB0RW5hYmxlZDpcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LnNldHRpbmdzICYmIHRvZ2dsZShwcm9tcHQubGFiZWwpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgdGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQ6XG4gICAgICAgICAgICAgICAgICAgIHRlYWNoZXJJbnN0cnVjdGlvbnMuc2V0dGluZ3MgJiYgdG9nZ2xlKHRlYWNoZXJJbnN0cnVjdGlvbnMubGFiZWwpLFxuICAgICAgICAgICAgICAgICAgcmF0aW9uYWxlRW5hYmxlZDogcmF0aW9uYWxlLnNldHRpbmdzICYmIHRvZ2dsZShyYXRpb25hbGUubGFiZWwpLFxuICAgICAgICAgICAgICAgICAgc3BlbGxDaGVja0VuYWJsZWQ6XG4gICAgICAgICAgICAgICAgICAgIHNwZWxsQ2hlY2suc2V0dGluZ3MgJiYgdG9nZ2xlKHNwZWxsQ2hlY2subGFiZWwpLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMucmVndWxhcn0+XG4gICAgICAgICAgICB7dGVhY2hlckluc3RydWN0aW9uc0VuYWJsZWQgJiYgKFxuICAgICAgICAgICAgICA8SW5wdXRDb250YWluZXIgbGFiZWw9e3RlYWNoZXJJbnN0cnVjdGlvbnMubGFiZWx9IGNsYXNzTmFtZT17Y2xhc3Nlcy5wcm9tcHR9PlxuICAgICAgICAgICAgICAgIDxFZGl0YWJsZUh0bWxcbiAgICAgICAgICAgICAgICAgIG1hcmt1cD17bW9kZWwudGVhY2hlckluc3RydWN0aW9ucyB8fCAnJ31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvblRlYWNoZXJJbnN0cnVjdGlvbnNDaGFuZ2VkfVxuICAgICAgICAgICAgICAgICAgaW1hZ2VTdXBwb3J0PXtpbWFnZVN1cHBvcnR9XG4gICAgICAgICAgICAgICAgICBub25FbXB0eT17ZmFsc2V9XG4gICAgICAgICAgICAgICAgICB0b29sYmFyT3B0cz17dG9vbGJhck9wdHN9XG4gICAgICAgICAgICAgICAgICBzcGVsbENoZWNrPXtzcGVsbENoZWNrRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0lucHV0Q29udGFpbmVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHtwcm9tcHRFbmFibGVkICYmIChcbiAgICAgICAgICAgICAgPElucHV0Q29udGFpbmVyIGxhYmVsPXtwcm9tcHQubGFiZWx9IGNsYXNzTmFtZT17Y2xhc3Nlcy5wcm9tcHR9PlxuICAgICAgICAgICAgICAgIDxFZGl0YWJsZUh0bWxcbiAgICAgICAgICAgICAgICAgIG1hcmt1cD17bW9kZWwucHJvbXB0IHx8ICcnfVxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e29uUHJvbXB0Q2hhbmdlZH1cbiAgICAgICAgICAgICAgICAgIGltYWdlU3VwcG9ydD17aW1hZ2VTdXBwb3J0fVxuICAgICAgICAgICAgICAgICAgbm9uRW1wdHk9e2ZhbHNlfVxuICAgICAgICAgICAgICAgICAgdG9vbGJhck9wdHM9e3Rvb2xiYXJPcHRzfVxuICAgICAgICAgICAgICAgICAgc3BlbGxDaGVjaz17c3BlbGxDaGVja0VuYWJsZWR9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9JbnB1dENvbnRhaW5lcj5cbiAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgIHtyYXRpb25hbGVFbmFibGVkICYmIChcbiAgICAgICAgICAgICAgPElucHV0Q29udGFpbmVyXG4gICAgICAgICAgICAgICAgbGFiZWw9e3JhdGlvbmFsZS5sYWJlbH1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMucHJvbXB0fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEVkaXRhYmxlSHRtbFxuICAgICAgICAgICAgICAgICAgbWFya3VwPXttb2RlbC5yYXRpb25hbGUgfHwgJyd9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17b25SYXRpb25hbGVDaGFuZ2VkfVxuICAgICAgICAgICAgICAgICAgaW1hZ2VTdXBwb3J0PXtpbWFnZVN1cHBvcnR9XG4gICAgICAgICAgICAgICAgICB0b29sYmFyT3B0cz17dG9vbGJhck9wdHN9XG4gICAgICAgICAgICAgICAgICBzcGVsbENoZWNrPXtzcGVsbENoZWNrRW5hYmxlZH1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L0lucHV0Q29udGFpbmVyPlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAgPFR5cG9ncmFwaHkgY2xhc3NOYW1lPXtjbGFzc2VzLmxhYmVsfSB2YXJpYW50PVwic3ViaGVhZGluZ1wiPlxuICAgICAgICAgICAgICBEZWZpbmUgSG90c3BvdFxuICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuXG4gICAgICAgICAgICB7Y29uZmlnU2V0dGluZ3MgJiYgPFRvb2x0aXBcbiAgICAgICAgICAgICAgY2xhc3Nlcz17e3Rvb2x0aXA6IGNsYXNzZXMudG9vbHRpcH19XG4gICAgICAgICAgICAgIGRpc2FibGVGb2N1c0xpc3RlbmVyXG4gICAgICAgICAgICAgIGRpc2FibGVUb3VjaExpc3RlbmVyXG4gICAgICAgICAgICAgIHBsYWNlbWVudD17J2xlZnQnfVxuICAgICAgICAgICAgICB0aXRsZT17YFZhbGlkYXRpb24gcmVxdWlyZW1lbnRzOiR7bWF4U2VsZWN0aW9uc1ZhbGlkYXRpb259JHttaW5TaGFwZXNWYWxpZGF0aW9ufSR7bWF4U2hhcGVzVmFsaWRhdGlvbn1gfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SW5mbyBmb250U2l6ZT17J3NtYWxsJ30gY29sb3I9eydwcmltYXJ5J30gc3R5bGU9e3sgZmxvYXQ6ICdyaWdodCcgfX0vPlxuICAgICAgICAgICAgPC9Ub29sdGlwPn1cblxuICAgICAgICAgICAge3NoYXBlc0Vycm9yICYmIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmVycm9yVGV4dH0+e3NoYXBlc0Vycm9yfTwvZGl2Pn1cbiAgICAgICAgICAgIHtzZWxlY3Rpb25zRXJyb3IgJiYgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuZXJyb3JUZXh0fT57c2VsZWN0aW9uc0Vycm9yfTwvZGl2Pn1cblxuICAgICAgICAgICAgPEhvdHNwb3RQYWxldHRlXG4gICAgICAgICAgICAgIGhvdHNwb3RDb2xvcj17bW9kZWwuaG90c3BvdENvbG9yfVxuICAgICAgICAgICAgICBob3RzcG90TGlzdD17bW9kZWwuaG90c3BvdExpc3R9XG4gICAgICAgICAgICAgIG91dGxpbmVDb2xvcj17bW9kZWwub3V0bGluZUNvbG9yfVxuICAgICAgICAgICAgICBvdXRsaW5lTGlzdD17bW9kZWwub3V0bGluZUxpc3R9XG4gICAgICAgICAgICAgIG9uSG90c3BvdENvbG9yQ2hhbmdlPXtjb2xvciA9PlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29sb3JDaGFuZ2UoJ2hvdHNwb3QnLCBjb2xvcilcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvbk91dGxpbmVDb2xvckNoYW5nZT17Y29sb3IgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNvbG9yQ2hhbmdlKCdvdXRsaW5lJywgY29sb3IpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDxIb3RzcG90Q29udGFpbmVyXG4gICAgICAgICAgICAgIGRpbWVuc2lvbnM9e21vZGVsLmRpbWVuc2lvbnN9XG4gICAgICAgICAgICAgIGltYWdlVXJsPXttb2RlbC5pbWFnZVVybH1cbiAgICAgICAgICAgICAgbXVsdGlwbGVDb3JyZWN0PXttb2RlbC5tdWx0aXBsZUNvcnJlY3R9XG4gICAgICAgICAgICAgIGhvdHNwb3RDb2xvcj17bW9kZWwuaG90c3BvdENvbG9yfVxuICAgICAgICAgICAgICBvdXRsaW5lQ29sb3I9e21vZGVsLm91dGxpbmVDb2xvcn1cbiAgICAgICAgICAgICAgb25VcGRhdGVJbWFnZURpbWVuc2lvbj17b25VcGRhdGVJbWFnZURpbWVuc2lvbn1cbiAgICAgICAgICAgICAgb25VcGRhdGVTaGFwZXM9e29uVXBkYXRlU2hhcGVzfVxuICAgICAgICAgICAgICBvbkltYWdlVXBsb2FkPXtvbkltYWdlVXBsb2FkfVxuICAgICAgICAgICAgICBzaGFwZXM9e21vZGVsLnNoYXBlc31cbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9e21vZGVsLnN0cm9rZVdpZHRofVxuICAgICAgICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvRW5hYmxlZD17cHJlc2VydmVBc3BlY3RSYXRpby5lbmFibGVkfVxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAge21vZGVsLmltYWdlVXJsICYmIChcbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeSBjbGFzc05hbWU9e2NsYXNzZXMubGFiZWx9IHZhcmlhbnQ9XCJzdWJoZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgICBJbWFnZSBEaW1lbnNpb25zXG4gICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuZGltZW5zaW9uc30+XG4gICAgICAgICAgICAgICAgICA8TnVtYmVyVGV4dEZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGtleT1cImhvdHNwb3QtbWFudWFsLXdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJXaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXttb2RlbC5kaW1lbnNpb25zLndpZHRofVxuICAgICAgICAgICAgICAgICAgICBtaW49ezB9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgdmFsdWUpID0+IHRoaXMuaGFuZGxlT25VcGRhdGVJbWFnZURpbWVuc2lvbnModmFsdWUsICd3aWR0aCcpfVxuICAgICAgICAgICAgICAgICAgICBzaG93RXJyb3JXaGVuT3V0c2lkZVJhbmdlXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlcy5maWVsZH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8TnVtYmVyVGV4dEZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGtleT1cImhvdHNwb3QtbWFudWFsLWhlaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwiSGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU9e21vZGVsLmRpbWVuc2lvbnMuaGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICBtaW49ezB9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSwgdmFsdWUpID0+IHRoaXMuaGFuZGxlT25VcGRhdGVJbWFnZURpbWVuc2lvbnModmFsdWUsICdoZWlnaHQnKX1cbiAgICAgICAgICAgICAgICAgICAgc2hvd0Vycm9yV2hlbk91dHNpZGVSYW5nZVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXMuZmllbGR9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGF5b3V0LkNvbmZpZ0xheW91dD5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3Qgc3R5bGVzID0gdGhlbWUgPT4gKHtcbiAgYmFzZToge1xuICAgIG1hcmdpblRvcDogdGhlbWUuc3BhY2luZy51bml0ICogM1xuICB9LFxuICBjb250YWluZXI6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgbWFyZ2luVG9wOiB0aGVtZS5zcGFjaW5nLnVuaXRcbiAgfSxcbiAgZGltZW5zaW9uczoge1xuICAgIGRpc3BsYXk6ICdmbGV4J1xuICB9LFxuICBmaWVsZDoge1xuICAgIGZsZXg6IDEsXG4gICAgd2lkdGg6ICc5MCUnXG4gIH0sXG4gIGxhYmVsOiB7XG4gICAgbWFyZ2luVG9wOiB0aGVtZS5zcGFjaW5nLnVuaXQgKiA0XG4gIH0sXG4gIHByb21wdDoge1xuICAgIHBhZGRpbmdUb3A6IHRoZW1lLnNwYWNpbmcudW5pdCAqIDIsXG4gICAgd2lkdGg6ICcxMDAlJ1xuICB9LFxuICByZWd1bGFyOiB7XG4gICAgbWFyZ2luQm90dG9tOiB0aGVtZS5zcGFjaW5nLnVuaXQgKiAzXG4gIH0sXG4gIHN3aXRjaEVsZW1lbnQ6IHtcbiAgICBqdXN0aWZ5Q29udGVudDogJ3NwYWNlLWJldHdlZW4nLFxuICAgIG1hcmdpbjogMFxuICB9LFxuICB0b29sdGlwOiB7XG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICB3aGl0ZVNwYWNlOiAncHJlJyxcbiAgICBtYXhXaWR0aDogJzUwMHB4JyxcbiAgfSxcbiAgZXJyb3JUZXh0OiB7XG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICBjb2xvcjogJ3JlZCcsXG4gICAgcGFkZGluZzogJzVweCAwJ1xuICB9XG59KTtcblxuUm9vdC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgY29uZmlndXJhdGlvbjogUHJvcFR5cGVzLm9iamVjdCxcbiAgbW9kZWw6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgaW1hZ2VTdXBwb3J0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFkZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZGVsZXRlOiBQcm9wVHlwZXMuZnVuY1xuICB9KSxcbiAgb25JbWFnZVVwbG9hZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25Db2xvckNoYW5nZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uUHJvbXB0Q2hhbmdlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25VcGRhdGVJbWFnZURpbWVuc2lvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25VcGRhdGVTaGFwZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uTW9kZWxDaGFuZ2VkQnlDb25maWc6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uUmF0aW9uYWxlQ2hhbmdlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25Db25maWd1cmF0aW9uQ2hhbmdlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25UZWFjaGVySW5zdHJ1Y3Rpb25zQ2hhbmdlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTdHlsZXMoc3R5bGVzKShSb290KTtcbiJdfQ==
|
|
366
|
+
//# sourceMappingURL=root.js.map
|
|
@@ -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","spellCheck","teacherInstructionsEnabled","promptEnabled","rationaleEnabled","spellCheckEnabled","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 spellCheck = {},\n preserveAspectRatio = {}\n } = configuration || {};\n const { teacherInstructionsEnabled, promptEnabled, rationaleEnabled, spellCheckEnabled } = 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 spellCheckEnabled:\n spellCheck.settings && toggle(spellCheck.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 />\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 />\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 />\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","onConfigurationChanged","onImageUpload","onModelChangedByConfig","onPromptChanged","onRationaleChanged","onTeacherInstructionsChanged","multipleCorrect","partialScoring","prompt","teacherInstructions","rationale","spellCheck","teacherInstructionsEnabled","promptEnabled","rationaleEnabled","spellCheckEnabled","errors","shapesError","selectionsError","toolbarOpts","validationMessage","toolbarEditorPosition","position","base","label","Properties","regular","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 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 } = configuration || {};\n const { teacherInstructionsEnabled, promptEnabled, rationaleEnabled, spellCheckEnabled, errors } = model || {};\n const { shapesError, selectionsError } = errors || {};\n const toolbarOpts = {};\n\n const validationMessage = generateValidationMessage(configuration);\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 }\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 />\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 />\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 />\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 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"}
|
|
@@ -65,4 +65,4 @@ UploadControl.defaultProps = {
|
|
|
65
65
|
var _default = (0, _index.withStyles)(styles)(UploadControl);
|
|
66
66
|
|
|
67
67
|
exports["default"] = _default;
|
|
68
|
-
//# sourceMappingURL=
|
|
68
|
+
//# sourceMappingURL=upload-control.js.map
|
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.updateImageDimensions = exports.groupShapes = exports.getUpdatedShapes = exports.getUpdatedRectangle = exports.getUpdatedPlygon = exports.getAllShapes = void 0;
|
|
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
|
|
|
@@ -145,4 +145,16 @@ var groupShapes = function groupShapes(shapesArray) {
|
|
|
145
145
|
};
|
|
146
146
|
|
|
147
147
|
exports.groupShapes = groupShapes;
|
|
148
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy5qcyJdLCJuYW1lcyI6WyJ1cGRhdGVJbWFnZURpbWVuc2lvbnMiLCJpbml0aWFsRGltIiwibmV4dERpbSIsImtlZXBBc3BlY3RSYXRpbyIsInJlc2l6ZVR5cGUiLCJpbWFnZUFzcGVjdFJhdGlvIiwid2lkdGgiLCJoZWlnaHQiLCJnZXREZWx0YSIsInJlZmVyZW5jZUluaXRpYWxWYWx1ZSIsInJlZmVyZW5jZU5leHRWYWx1ZSIsImN1cnJlbnRWYWx1ZSIsImdldFVwZGF0ZWRSZWN0YW5nbGUiLCJzaGFwZSIsIngiLCJ5IiwiZ2V0VXBkYXRlZFBseWdvbiIsInBvaW50cyIsIm1hcCIsInBvaW50IiwiZ2V0VXBkYXRlZFNoYXBlcyIsInNoYXBlcyIsImdyb3VwIiwiZ2V0QWxsU2hhcGVzIiwic2hhcGVzTWFwIiwic2hhcGVzQXJyYXkiLCJzaGFwZXNLZXlzIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInJlZHVjZSIsImFjYyIsImN1cnJlbnRTaGFwZUtleSIsImNvbmNhdCIsImluZGV4IiwiZ3JvdXBTaGFwZXMiLCJyZWN0YW5nbGVzIiwicG9seWdvbnMiLCJzaGFwZVByb3BzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7QUFFQSxJQUFNQSxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXdCLENBQUNDLFVBQUQsRUFBYUMsT0FBYixFQUFzQkMsZUFBdEIsRUFBdUNDLFVBQXZDLEVBQXNEO0FBQ2xGO0FBQ0EsTUFBSUQsZUFBSixFQUFxQjtBQUNuQixRQUFNRSxnQkFBZ0IsR0FBR0osVUFBVSxDQUFDSyxLQUFYLEdBQW1CTCxVQUFVLENBQUNNLE1BQXZEOztBQUVBLFFBQUlILFVBQVUsS0FBSyxRQUFuQixFQUE2QjtBQUMzQjtBQUNBLGFBQU87QUFDTEUsUUFBQUEsS0FBSyxFQUFFSixPQUFPLENBQUNLLE1BQVIsR0FBaUJGLGdCQURuQjtBQUVMRSxRQUFBQSxNQUFNLEVBQUVMLE9BQU8sQ0FBQ0s7QUFGWCxP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QUFHLENBQUNULEtBQUQsQ0FBSCxpREFBa0JTLEdBQUcsQ0FBQ1QsS0FBRCxDQUFILElBQWMsRUFBaEMsSUFBcUNnQixVQUFyQztBQUNBLGFBQU9QLEdBQVA7QUFDRCxLQUhNLEVBR0pQLFNBSEksQ0FBUDtBQUlEOztBQUVELFNBQU8sMkJBQVVBLFNBQVYsQ0FBUDtBQUNELENBZkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG5jb25zdCB1cGRhdGVJbWFnZURpbWVuc2lvbnMgPSAoaW5pdGlhbERpbSwgbmV4dERpbSwga2VlcEFzcGVjdFJhdGlvLCByZXNpemVUeXBlKSA9PiB7XG4gIC8vIGlmIHdlIHdhbnQgdG8ga2VlcCBpbWFnZSBhc3BlY3QgcmF0aW9cbiAgaWYgKGtlZXBBc3BlY3RSYXRpbykge1xuICAgIGNvbnN0IGltYWdlQXNwZWN0UmF0aW8gPSBpbml0aWFsRGltLndpZHRoIC8gaW5pdGlhbERpbS5oZWlnaHQ7XG5cbiAgICBpZiAocmVzaXplVHlwZSA9PT0gJ2hlaWdodCcpIHtcbiAgICAgIC8vIGlmIHdlIHdhbnQgdG8gY2hhbmdlIGltYWdlIGhlaWdodCA9PiB3ZSB1cGRhdGUgdGhlIHdpZHRoIGFjY29yZGluZ2x5XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogbmV4dERpbS5oZWlnaHQgKiBpbWFnZUFzcGVjdFJhdGlvLFxuICAgICAgICBoZWlnaHQ6IG5leHREaW0uaGVpZ2h0XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgd2Ugd2FudCB0byBjaGFuZ2UgaW1hZ2Ugd2lkdGggPT4gd2UgdXBkYXRlIHRoZSBoZWlnaHQgYWNjb3JkaW5nbHlcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IG5leHREaW0ud2lkdGgsXG4gICAgICBoZWlnaHQ6IG5leHREaW0ud2lkdGggLyBpbWFnZUFzcGVjdFJhdGlvXG4gICAgfVxuICB9XG5cbiAgLy8gaWYgd2UgZG9uJ3Qgd2FudCB0byBrZWVwIGFzcGVjdCByYXRpbywgd2UganVzdCB1cGRhdGUgYm90aCB2YWx1ZXNcbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogbmV4dERpbS53aWR0aCxcbiAgICBoZWlnaHQ6IG5leHREaW0uaGVpZ2h0XG4gIH1cbn07XG5cbi8vIHJlZmVyZW5jZUluaXRpYWxWYWx1ZSA9IHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBTdGFnZVxuLy8gcmVmZXJlbmNlTmV4dFZhbHVlID0gdGhlIG5leHQgdmFsdWUgb2YgdGhlIFN0YWdlXG4vLyBjdXJyZW50VmFsdWUgPSB0aGUgdmFsdWUgdGhhdCBoYXMgdG8gYmUgcmUtc2l6ZWQgaW5mbHVlbmNlZCBieSB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSBvbiB0aGUgU3RhZ2VcbmNvbnN0IGdldERlbHRhID0gKHJlZmVyZW5jZUluaXRpYWxWYWx1ZSwgcmVmZXJlbmNlTmV4dFZhbHVlLCBjdXJyZW50VmFsdWUpID0+IChyZWZlcmVuY2VOZXh0VmFsdWUgLyByZWZlcmVuY2VJbml0aWFsVmFsdWUpICogY3VycmVudFZhbHVlO1xuXG5jb25zdCBnZXRVcGRhdGVkUmVjdGFuZ2xlID0gKGluaXRpYWxEaW0sIG5leHREaW0sIHNoYXBlKSA9PiAoe1xuICAuLi5zaGFwZSxcbiAgd2lkdGg6IGdldERlbHRhKGluaXRpYWxEaW0ud2lkdGgsIG5leHREaW0ud2lkdGgsIHNoYXBlLndpZHRoKSxcbiAgaGVpZ2h0OiBnZXREZWx0YShpbml0aWFsRGltLmhlaWdodCwgbmV4dERpbS5oZWlnaHQsIHNoYXBlLmhlaWdodCksXG4gIHg6IGdldERlbHRhKGluaXRpYWxEaW0ud2lkdGgsIG5leHREaW0ud2lkdGgsIHNoYXBlLngpLFxuICB5OiBnZXREZWx0YShpbml0aWFsRGltLmhlaWdodCwgbmV4dERpbS5oZWlnaHQsIHNoYXBlLnkpLFxufSk7XG5cbmNvbnN0IGdldFVwZGF0ZWRQbHlnb24gPSAoaW5pdGlhbERpbSwgbmV4dERpbSwgc2hhcGUpID0+ICh7XG4gIC4uLnNoYXBlLFxuICBwb2ludHM6IHNoYXBlLnBvaW50cy5tYXAocG9pbnQgPT4gKHtcbiAgICB4OiBnZXREZWx0YShpbml0aWFsRGltLndpZHRoLCBuZXh0RGltLndpZHRoLCBwb2ludC54KSxcbiAgICB5OiBnZXREZWx0YShpbml0aWFsRGltLmhlaWdodCwgbmV4dERpbS5oZWlnaHQsIHBvaW50LnkpLFxuICB9KSlcbn0pO1xuXG4vLyBpbml0aWFsRGltID0gdGhlIGluaXRpYWwgZGltZW5zaW9uczogeyB3aWR0aCwgaGVpZ2h0IH0gb2YgdGhlIFN0YWdlXG4vLyBuZXh0RGltID0gdGhlIG5leHQgZGltZW5zaW9uczogeyB3aWR0aCwgaGVpZ2h0IH0gb2YgdGhlIFN0YWdlXG4vLyBzaGFwZXMgPSBhcnJheSBvZiBzaGFwZXMgdGhhdCBoYXZlIHRvIGJlIHJlLXNpemVkIGFuZCByZS1wb3NpdGlvbmVkXG5jb25zdCBnZXRVcGRhdGVkU2hhcGVzID0gKGluaXRpYWxEaW0sIG5leHREaW0sIHNoYXBlcykgPT4ge1xuICByZXR1cm4gc2hhcGVzLm1hcChzaGFwZSA9PiB7XG4gICAgaWYgKHNoYXBlLmdyb3VwID09PSAncmVjdGFuZ2xlcycpIHtcbiAgICAgIHJldHVybiBnZXRVcGRhdGVkUmVjdGFuZ2xlKGluaXRpYWxEaW0sIG5leHREaW0sIHNoYXBlKTtcbiAgICB9XG5cbiAgICBpZiAoc2hhcGUuZ3JvdXAgPT09ICdwb2x5Z29ucycpIHtcbiAgICAgIHJldHVybiBnZXRVcGRhdGVkUGx5Z29uKGluaXRpYWxEaW0sIG5leHREaW0sIHNoYXBlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLy8gY29udmVydHMgc2hhcGVzIG1hcCB0byBzaGFwZXMgYXJyYXlcbi8vIGV4YW1wbGU6XG4vLyBmcm9tOiB7IHJlY3RhbmdsZXM6IFtyMV0sIHBvbHlnb25zOiBbcDEsIHAyXX1cbi8vIHRvOiBbeyAuLi5yMSwgZ3JvdXA6ICdyZWN0YW5nbGVzJyB9LCB7IC4uLnAxLCBncm91cDogJ3BvbHlnb25zJyB9LCB7IC4uLnAyLCBncm91cDogJ3BvbHlnb25zJyB9XVxuLy8gaWYgYSBzaGFwZSBoYXMgaW5kZXggZGVmaW5lZCwga2VlcCBpdCwgb3RoZXJ3aXNlIGluaXRpYWxpemUgaXRcbi8vIGluZGV4IGlzIHVzZWQgZm9yIHRoZSBVTkRPIGZ1bmN0aW9uXG5jb25zdCBnZXRBbGxTaGFwZXMgPSAoc2hhcGVzTWFwKSA9PiB7XG4gIHNoYXBlc01hcCA9IHNoYXBlc01hcCB8fCB7fTtcbiAgY29uc3Qgc2hhcGVzQXJyYXkgPSBbXTtcbiAgY29uc3Qgc2hhcGVzS2V5cyA9IE9iamVjdC5rZXlzKHNoYXBlc01hcCk7XG5cbiAgcmV0dXJuIHNoYXBlc0tleXMubGVuZ3RoXG4gICAgPyBzaGFwZXNLZXlzLnJlZHVjZSgoYWNjLCBjdXJyZW50U2hhcGVLZXkpID0+XG4gICAgICAgIGFjYy5jb25jYXQoXG4gICAgICAgICAgc2hhcGVzTWFwW2N1cnJlbnRTaGFwZUtleV1cbiAgICAgICAgICAgID8gc2hhcGVzTWFwW2N1cnJlbnRTaGFwZUtleV0ubWFwKChzaGFwZSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIC4uLnNoYXBlLFxuICAgICAgICAgICAgICBncm91cDogY3VycmVudFNoYXBlS2V5LFxuICAgICAgICAgICAgICBpbmRleDogc2hhcGUuaW5kZXggfHwgYWNjLmxlbmd0aCArIGluZGV4XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIDogW10pLFxuICAgICAgc2hhcGVzQXJyYXkpXG4gICAgOiBzaGFwZXNBcnJheTtcbn07XG5cbi8vIGNvbnZlcnRzIHNoYXBlcyBhcnJheSB0byBzaGFwZXMgbWFwXG4vLyBpcyB0aGUgcmV2ZXJzZSBvZiBnZXRBbGxTaGFwZXMgZnVuY3Rpb25cbi8vIGV4YW1wbGU6XG4vLyBmcm9tOiBbeyAuLi5yMSwgZ3JvdXA6ICdyZWN0YW5nbGVzJyB9LCB7IC4uLnAxLCBncm91cDogJ3BvbHlnb25zJyB9LCB7IC4uLnAyLCBncm91cDogJ3BvbHlnb25zJyB9XVxuLy8gdG86IHsgcmVjdGFuZ2xlczogW3IxXSwgcG9seWdvbnM6IFtwMSwgcDJdfVxuY29uc3QgZ3JvdXBTaGFwZXMgPSAoc2hhcGVzQXJyYXkpID0+IHtcbiAgc2hhcGVzQXJyYXkgPSBzaGFwZXNBcnJheSB8fCBbXTtcbiAgY29uc3Qgc2hhcGVzTWFwID0ge1xuICAgIHJlY3RhbmdsZXM6IFtdLFxuICAgIHBvbHlnb25zOiBbXVxuICB9O1xuXG4gIGlmIChzaGFwZXNBcnJheS5sZW5ndGgpIHtcbiAgICByZXR1cm4gc2hhcGVzQXJyYXkucmVkdWNlKChhY2MsIHsgZ3JvdXAsIC4uLnNoYXBlUHJvcHMgfSkgPT4ge1xuICAgICAgYWNjW2dyb3VwXSA9IFsuLi4oYWNjW2dyb3VwXSB8fCBbXSksIHNoYXBlUHJvcHNdO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCBzaGFwZXNNYXApO1xuICB9XG5cbiAgcmV0dXJuIGNsb25lRGVlcChzaGFwZXNNYXApO1xufTtcblxuXG5leHBvcnQgeyB1cGRhdGVJbWFnZURpbWVuc2lvbnMsIGdldFVwZGF0ZWRTaGFwZXMsIGdldEFsbFNoYXBlcywgZ3JvdXBTaGFwZXMsIGdldFVwZGF0ZWRSZWN0YW5nbGUsIGdldFVwZGF0ZWRQbHlnb24gfTtcbiJdfQ==
|
|
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;
|
|
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":"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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\n
|
|
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.
|
|
4
|
+
"version": "4.7.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
"@material-ui/core": "^3.9.2",
|
|
11
11
|
"@material-ui/icons": "^3.0.2",
|
|
12
12
|
"@pie-framework/pie-configure-events": "^1.2.0",
|
|
13
|
-
"@pie-lib/config-ui": "^10.
|
|
14
|
-
"@pie-lib/editable-html": "^7.
|
|
13
|
+
"@pie-lib/config-ui": "^10.12.1",
|
|
14
|
+
"@pie-lib/editable-html": "^7.22.1",
|
|
15
15
|
"classnames": "^2.2.6",
|
|
16
16
|
"debug": "^3.1.0",
|
|
17
17
|
"konva": "^3.2.4",
|
|
@@ -7,6 +7,7 @@ exports[`Root render renders 1`] = `
|
|
|
7
7
|
<Panel
|
|
8
8
|
configuration={
|
|
9
9
|
Object {
|
|
10
|
+
"minShapes": 2,
|
|
10
11
|
"multipleCorrect": Object {
|
|
11
12
|
"label": "Multiple Correct Responses",
|
|
12
13
|
"settings": true,
|
|
@@ -176,11 +177,38 @@ exports[`Root render renders 1`] = `
|
|
|
176
177
|
}
|
|
177
178
|
>
|
|
178
179
|
<div>
|
|
179
|
-
<
|
|
180
|
-
|
|
180
|
+
<div
|
|
181
|
+
className=""
|
|
181
182
|
>
|
|
182
|
-
|
|
183
|
-
|
|
183
|
+
<WithStyles(Typography)
|
|
184
|
+
variant="subheading"
|
|
185
|
+
>
|
|
186
|
+
Define Hotspot
|
|
187
|
+
</WithStyles(Typography)>
|
|
188
|
+
<WithStyles(Tooltip)
|
|
189
|
+
classes={
|
|
190
|
+
Object {
|
|
191
|
+
"tooltip": undefined,
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
disableFocusListener={true}
|
|
195
|
+
disableTouchListener={true}
|
|
196
|
+
placement="left"
|
|
197
|
+
title="Validation requirements:
|
|
198
|
+
There should be at least 2 shapes defined.
|
|
199
|
+
There should be at least 1 shape selected."
|
|
200
|
+
>
|
|
201
|
+
<pure(InfoIcon)
|
|
202
|
+
color="primary"
|
|
203
|
+
fontSize="small"
|
|
204
|
+
style={
|
|
205
|
+
Object {
|
|
206
|
+
"float": "right",
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/>
|
|
210
|
+
</WithStyles(Tooltip)>
|
|
211
|
+
</div>
|
|
184
212
|
<WithStyles(Palette)
|
|
185
213
|
hotspotColor="rgba(137, 183, 244, 0.65)"
|
|
186
214
|
hotspotList={
|
|
@@ -215,7 +215,7 @@ export class Drawable extends React.Component {
|
|
|
215
215
|
const resizeValid = this.checkIfResizeValid(width, height);
|
|
216
216
|
const hasMinimumWidth = width > 150 && height > 150;
|
|
217
217
|
|
|
218
|
-
if (resizeValid && hasMinimumWidth) {
|
|
218
|
+
if (resizeValid && hasMinimumWidth && box) {
|
|
219
219
|
box.style.width = `${width}px`;
|
|
220
220
|
box.style.height = `${height}px`;
|
|
221
221
|
|
package/configure/src/root.jsx
CHANGED
|
@@ -7,14 +7,20 @@ import {
|
|
|
7
7
|
} from '@pie-lib/config-ui';
|
|
8
8
|
import PropTypes from 'prop-types';
|
|
9
9
|
import EditableHtml from '@pie-lib/editable-html';
|
|
10
|
-
import Typography from '@material-ui/core/Typography';
|
|
11
10
|
import { withStyles } from '@material-ui/core/styles';
|
|
11
|
+
import Typography from '@material-ui/core/Typography';
|
|
12
12
|
import Info from '@material-ui/icons/Info';
|
|
13
13
|
import Tooltip from '@material-ui/core/Tooltip';
|
|
14
|
-
|
|
15
14
|
import HotspotPalette from './hotspot-palette';
|
|
16
15
|
import HotspotContainer from './hotspot-container';
|
|
17
|
-
import
|
|
16
|
+
import classNames from 'classnames';
|
|
17
|
+
import {
|
|
18
|
+
updateImageDimensions,
|
|
19
|
+
generateValidationMessage,
|
|
20
|
+
getUpdatedShapes,
|
|
21
|
+
getAllShapes,
|
|
22
|
+
groupShapes
|
|
23
|
+
} from './utils';
|
|
18
24
|
|
|
19
25
|
const { Panel, toggle } = settings;
|
|
20
26
|
|
|
@@ -75,19 +81,13 @@ export class Root extends React.Component {
|
|
|
75
81
|
teacherInstructions = {},
|
|
76
82
|
rationale = {},
|
|
77
83
|
spellCheck = {},
|
|
78
|
-
preserveAspectRatio = {}
|
|
79
|
-
maxSelections,
|
|
80
|
-
minShapes,
|
|
81
|
-
maxShapes
|
|
84
|
+
preserveAspectRatio = {}
|
|
82
85
|
} = configuration || {};
|
|
83
86
|
const { teacherInstructionsEnabled, promptEnabled, rationaleEnabled, spellCheckEnabled, errors } = model || {};
|
|
87
|
+
const { shapesError, selectionsError } = errors || {};
|
|
84
88
|
const toolbarOpts = {};
|
|
85
|
-
const configSettings = maxSelections || minShapes || maxShapes;
|
|
86
|
-
const maxSelectionsValidation = maxSelections ? `\nNo more than ${maxSelections} shapes should be selected.` : '';
|
|
87
|
-
const minShapesValidation = minShapes ? `\nThere should be at least ${minShapes} shapes defined.` : '';
|
|
88
|
-
const maxShapesValidation = maxShapes ? `\nNo more than ${maxShapes} shapes should be defined.` : '';
|
|
89
89
|
|
|
90
|
-
const
|
|
90
|
+
const validationMessage = generateValidationMessage(configuration);
|
|
91
91
|
|
|
92
92
|
switch (model.toolbarEditorPosition) {
|
|
93
93
|
case 'top':
|
|
@@ -168,20 +168,20 @@ export class Root extends React.Component {
|
|
|
168
168
|
</InputContainer>
|
|
169
169
|
)}
|
|
170
170
|
|
|
171
|
-
<
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
171
|
+
<div className={classNames(classes.label, classes.flexContainer)}>
|
|
172
|
+
<Typography className={classes.subheading} variant="subheading">
|
|
173
|
+
Define Hotspot
|
|
174
|
+
</Typography>
|
|
175
|
+
<Tooltip
|
|
176
|
+
classes={{ tooltip: classes.tooltip }}
|
|
177
|
+
disableFocusListener
|
|
178
|
+
disableTouchListener
|
|
179
|
+
placement={'left'}
|
|
180
|
+
title={validationMessage}
|
|
181
|
+
>
|
|
182
|
+
<Info fontSize={'small'} color={'primary'} style={{ float: 'right' }}/>
|
|
183
|
+
</Tooltip>
|
|
184
|
+
</div>
|
|
185
185
|
{shapesError && <div className={classes.errorText}>{shapesError}</div>}
|
|
186
186
|
{selectionsError && <div className={classes.errorText}>{selectionsError}</div>}
|
|
187
187
|
|
|
@@ -269,6 +269,9 @@ const styles = theme => ({
|
|
|
269
269
|
paddingTop: theme.spacing.unit * 2,
|
|
270
270
|
width: '100%'
|
|
271
271
|
},
|
|
272
|
+
subheading: {
|
|
273
|
+
marginRight: '5px'
|
|
274
|
+
},
|
|
272
275
|
regular: {
|
|
273
276
|
marginBottom: theme.spacing.unit * 3
|
|
274
277
|
},
|
|
@@ -276,6 +279,10 @@ const styles = theme => ({
|
|
|
276
279
|
justifyContent: 'space-between',
|
|
277
280
|
margin: 0
|
|
278
281
|
},
|
|
282
|
+
flexContainer: {
|
|
283
|
+
display: 'flex',
|
|
284
|
+
alignItems: 'center'
|
|
285
|
+
},
|
|
279
286
|
tooltip: {
|
|
280
287
|
fontSize: '12px',
|
|
281
288
|
whiteSpace: 'pre',
|
package/configure/src/utils.js
CHANGED
|
@@ -110,5 +110,27 @@ const groupShapes = (shapesArray) => {
|
|
|
110
110
|
return cloneDeep(shapesMap);
|
|
111
111
|
};
|
|
112
112
|
|
|
113
|
+
const generateValidationMessage = config => {
|
|
114
|
+
const { minShapes, maxShapes, maxSelections } = config;
|
|
113
115
|
|
|
114
|
-
|
|
116
|
+
const shapesMessage = `\nThere should be at least ${minShapes} ` +
|
|
117
|
+
(maxShapes ? `and at most ${maxShapes} ` : '') + 'shapes defined.';
|
|
118
|
+
|
|
119
|
+
const selectionsMessage = `\nThere should be at least 1 ` +
|
|
120
|
+
(maxSelections ? `and at most ${maxSelections} ` : '') + 'shape' +
|
|
121
|
+
(maxSelections ? 's' : '') + ' selected.';
|
|
122
|
+
|
|
123
|
+
const message = 'Validation requirements:' + shapesMessage + selectionsMessage;
|
|
124
|
+
|
|
125
|
+
return message;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
export {
|
|
129
|
+
updateImageDimensions,
|
|
130
|
+
generateValidationMessage,
|
|
131
|
+
getUpdatedShapes,
|
|
132
|
+
getAllShapes,
|
|
133
|
+
groupShapes,
|
|
134
|
+
getUpdatedRectangle,
|
|
135
|
+
getUpdatedPlygon
|
|
136
|
+
};
|
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [3.5.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-controller@3.4.8...@pie-element/hotspot-controller@3.5.0) (2022-05-03)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **hotspot:** added configurable validation PD-1702 ([18eb985](https://github.com/pie-framework/pie-elements/commit/18eb98568adf9248dc616a9ae71d9f8394b62fc1))
|
|
12
|
+
* **hotspot:** PD-1703 implement ui/ux for item validation ([a962183](https://github.com/pie-framework/pie-elements/commit/a962183d0941936b69a95b32002135507d769170))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
6
18
|
## [3.4.5](https://github.com/pie-framework/pie-elements/compare/@pie-element/hotspot-controller@3.4.3...@pie-element/hotspot-controller@3.4.5) (2021-11-11)
|
|
7
19
|
|
|
8
20
|
**Note:** Version bump only for package @pie-element/hotspot-controller
|