@pie-element/hotspot 4.8.0 → 4.8.1-beta.587
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 +474 -0
- package/configure/CHANGELOG.md +417 -0
- package/configure/lib/button.js.map +1 -1
- package/configure/lib/defaults.js +24 -2
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/hotspot-container.js +44 -23
- 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 +133 -27
- package/configure/lib/root.js.map +1 -1
- package/configure/lib/upload-control.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 +2 -1
- package/configure/src/__tests__/__snapshots__/root.test.js.snap +56 -4
- package/configure/src/__tests__/hotspot-container.test.js +98 -71
- package/configure/src/__tests__/hotspot-drawable.test.js +48 -49
- package/configure/src/__tests__/index.test.js +28 -51
- package/configure/src/__tests__/root.test.js +162 -82
- package/configure/src/__tests__/utils.test.js +112 -98
- package/configure/src/button.jsx +4 -4
- package/configure/src/defaults.js +36 -18
- package/configure/src/hotspot-container.jsx +107 -97
- package/configure/src/hotspot-drawable.jsx +59 -53
- package/configure/src/hotspot-palette.jsx +12 -25
- package/configure/src/hotspot-polygon.jsx +20 -22
- package/configure/src/hotspot-rectangle.jsx +5 -15
- package/configure/src/index.js +32 -18
- package/configure/src/root.jsx +120 -51
- package/configure/src/upload-control.jsx +9 -20
- package/configure/src/utils.js +51 -22
- package/controller/CHANGELOG.md +61 -0
- package/controller/lib/defaults.js +2 -2
- package/controller/lib/defaults.js.map +1 -1
- package/controller/lib/index.js +57 -9
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +2 -2
- package/controller/src/__tests__/index.test.js +99 -55
- package/controller/src/defaults.js +5 -9
- package/controller/src/index.js +58 -34
- package/controller/src/utils.js +9 -6
- package/docs/config-schema.json +217 -0
- package/docs/config-schema.json.md +169 -0
- package/docs/demo/config.js +2 -2
- package/docs/demo/generate.js +54 -35
- package/docs/demo/session.js +2 -2
- package/docs/pie-schema.json +59 -0
- package/docs/pie-schema.json.md +47 -0
- package/lib/hotspot/container.js +44 -7
- package/lib/hotspot/container.js.map +1 -1
- package/lib/hotspot/icons.js.map +1 -1
- package/lib/hotspot/image.js +35 -8
- 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 +51 -32
- package/lib/hotspot/polygon.js.map +1 -1
- package/lib/hotspot/rectangle.js +51 -32
- 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 +7 -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 +214 -0
- package/src/__tests__/{image-test.jsx → image.test.jsx} +10 -2
- package/src/__tests__/polygon.test.jsx +235 -0
- package/src/__tests__/rectangle.test.jsx +237 -0
- package/src/__tests__/{session-updater-test.jsx → session-updater.test.jsx} +22 -31
- package/src/hotspot/container.jsx +60 -23
- package/src/hotspot/icons.js +4 -2
- package/src/hotspot/image.jsx +26 -13
- package/src/hotspot/index.jsx +73 -33
- package/src/hotspot/polygon.jsx +51 -40
- package/src/hotspot/rectangle.jsx +51 -40
- package/src/index.js +10 -18
- package/src/session-updater.js +1 -1
- package/src/__tests__/__snapshots__/image-test.jsx.snap +0 -21
- package/src/__tests__/container-test.jsx +0 -143
- package/src/__tests__/polygon-test.jsx +0 -76
- package/src/__tests__/rectangle-test.jsx +0 -77
package/configure/lib/index.js
CHANGED
|
@@ -35,13 +35,13 @@ var _root = _interopRequireDefault(require("./root"));
|
|
|
35
35
|
|
|
36
36
|
var _defaults = _interopRequireDefault(require("./defaults"));
|
|
37
37
|
|
|
38
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object);
|
|
38
|
+
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; }
|
|
39
39
|
|
|
40
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]
|
|
40
|
+
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; }
|
|
41
41
|
|
|
42
42
|
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); }; }
|
|
43
43
|
|
|
44
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try {
|
|
44
|
+
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; } }
|
|
45
45
|
|
|
46
46
|
var log = (0, _debug["default"])('hotspot:configure');
|
|
47
47
|
|
|
@@ -157,6 +157,16 @@ var HotspotConfigure = /*#__PURE__*/function (_HTMLElement) {
|
|
|
157
157
|
|
|
158
158
|
this._render();
|
|
159
159
|
}
|
|
160
|
+
}, {
|
|
161
|
+
key: "insertSound",
|
|
162
|
+
value: function insertSound(handler) {
|
|
163
|
+
this.dispatchEvent(new _pieConfigureEvents.InsertSoundEvent(handler));
|
|
164
|
+
}
|
|
165
|
+
}, {
|
|
166
|
+
key: "onDeleteSound",
|
|
167
|
+
value: function onDeleteSound(src, done) {
|
|
168
|
+
this.dispatchEvent(new _pieConfigureEvents.DeleteSoundEvent(src, done));
|
|
169
|
+
}
|
|
160
170
|
}, {
|
|
161
171
|
key: "_render",
|
|
162
172
|
value: function _render() {
|
|
@@ -175,6 +185,10 @@ var HotspotConfigure = /*#__PURE__*/function (_HTMLElement) {
|
|
|
175
185
|
add: this.insertImage,
|
|
176
186
|
"delete": this.onDeleteImage
|
|
177
187
|
},
|
|
188
|
+
uploadSoundSupport: {
|
|
189
|
+
add: this.insertSound.bind(this),
|
|
190
|
+
"delete": this.onDeleteSound.bind(this)
|
|
191
|
+
},
|
|
178
192
|
onUpdateShapes: this.onUpdateShapes,
|
|
179
193
|
onModelChangedByConfig: this.onModelChangedByConfig,
|
|
180
194
|
onTeacherInstructionsChanged: this.onTeacherInstructionsChanged
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["log","HotspotConfigure","c","_configuration","_render","m","propertyType","_model","shapes","rectangles","polygons","map","shape","correct","onModelChanged","colorType","color","prompt","rationale","teacherInstructions","dimensions","imageUrl","handler","dispatchEvent","InsertImageEvent","src","done","DeleteImageEvent","createDefaultModel","sensibleDefaults","configuration","bind","s","reset","resetValue","ModelUpdatedEvent","dispatchModelUpdated","element","React","createElement","Root","model","onColorChanged","onImageUpload","onRationaleChanged","onConfigurationChanged","onPromptChanged","onUpdateImageDimension","imageSupport","add","insertImage","onDeleteImage","onUpdateShapes","onModelChangedByConfig","onTeacherInstructionsChanged","ReactDOM","render","HTMLElement","hotspotList","hotspotColor","outlineList","outlineColor"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["log","HotspotConfigure","c","_configuration","_render","m","propertyType","_model","shapes","rectangles","polygons","map","shape","correct","onModelChanged","colorType","color","prompt","rationale","teacherInstructions","dimensions","imageUrl","handler","dispatchEvent","InsertImageEvent","src","done","DeleteImageEvent","createDefaultModel","sensibleDefaults","configuration","bind","s","reset","resetValue","ModelUpdatedEvent","dispatchModelUpdated","InsertSoundEvent","DeleteSoundEvent","element","React","createElement","Root","model","onColorChanged","onImageUpload","onRationaleChanged","onConfigurationChanged","onPromptChanged","onUpdateImageDimension","imageSupport","add","insertImage","onDeleteImage","uploadSoundSupport","insertSound","onDeleteSound","onUpdateShapes","onModelChangedByConfig","onTeacherInstructionsChanged","ReactDOM","render","HTMLElement","hotspotList","hotspotColor","outlineList","outlineColor"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport debug from 'debug';\nimport {\n ModelUpdatedEvent,\n DeleteImageEvent,\n InsertImageEvent,\n InsertSoundEvent,\n DeleteSoundEvent,\n} from '@pie-framework/pie-configure-events';\n\nimport Root from './root';\nimport sensibleDefaults from './defaults';\n\nconst log = debug('hotspot:configure');\n\nexport default class HotspotConfigure extends HTMLElement {\n static createDefaultModel = (model = {}) => ({\n ...sensibleDefaults.model,\n ...model,\n hotspotList: model.hotspotList || [model.hotspotColor] || sensibleDefaults.model.hotspotList,\n outlineList: model.outlineList || [model.outlineColor] || sensibleDefaults.model.outlineList,\n shapes: model.shapes || sensibleDefaults.model.shapes || {},\n });\n\n constructor() {\n super();\n this._model = HotspotConfigure.createDefaultModel();\n this._configuration = sensibleDefaults.configuration;\n this.onModelChanged = this.onModelChanged.bind(this);\n }\n\n set model(s) {\n this._model = HotspotConfigure.createDefaultModel(s);\n this._render();\n }\n\n set configuration(c) {\n this._configuration = c;\n this._render();\n }\n\n dispatchModelUpdated(reset) {\n const resetValue = !!reset;\n\n this.dispatchEvent(new ModelUpdatedEvent(this._model, resetValue));\n }\n\n onModelChanged(m, reset) {\n this._model = m;\n this.dispatchModelUpdated(reset);\n this._render();\n }\n\n onConfigurationChanged = (c) => {\n this._configuration = c;\n this._render();\n };\n\n onModelChangedByConfig = (m, propertyType) => {\n const _model = m;\n\n if (propertyType === 'multipleCorrect') {\n const { rectangles = [], polygons = [] } = _model.shapes || {};\n\n _model.shapes.rectangles = rectangles.map((shape) => ({ ...shape, correct: false }));\n _model.shapes.polygons = polygons.map((shape) => ({ ...shape, correct: false }));\n }\n\n this.onModelChanged(_model);\n };\n\n onColorChanged = (colorType, color) => {\n this.onModelChanged({\n ...this._model,\n [colorType]: color,\n });\n };\n\n onPromptChanged = (prompt) => {\n this.onModelChanged({\n ...this._model,\n prompt,\n });\n };\n\n onRationaleChanged = (rationale) => {\n this.onModelChanged({\n ...this._model,\n rationale,\n });\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n this.onModelChanged({\n ...this._model,\n teacherInstructions,\n });\n };\n\n onUpdateImageDimension = (dimensions) => {\n this.onModelChanged({\n ...this._model,\n dimensions,\n });\n };\n\n onUpdateShapes = (shapes) => {\n this.onModelChanged({\n ...this._model,\n shapes,\n });\n };\n\n onImageUpload = (imageUrl) => {\n this.onModelChanged({\n ...this._model,\n imageUrl,\n });\n };\n\n insertImage = (handler) => {\n this.dispatchEvent(new InsertImageEvent(handler));\n };\n\n onDeleteImage = (src, done) => {\n this.dispatchEvent(new DeleteImageEvent(src, done));\n };\n\n insertSound(handler) {\n this.dispatchEvent(new InsertSoundEvent(handler));\n }\n\n onDeleteSound(src, done) {\n this.dispatchEvent(new DeleteSoundEvent(src, done));\n }\n\n _render() {\n log('_render');\n let element = React.createElement(Root, {\n configuration: this._configuration,\n model: this._model,\n onColorChanged: this.onColorChanged,\n onImageUpload: this.onImageUpload,\n onRationaleChanged: this.onRationaleChanged,\n onConfigurationChanged: this.onConfigurationChanged,\n onPromptChanged: this.onPromptChanged,\n onUpdateImageDimension: this.onUpdateImageDimension,\n imageSupport: {\n add: this.insertImage,\n delete: this.onDeleteImage,\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n onUpdateShapes: this.onUpdateShapes,\n onModelChangedByConfig: this.onModelChangedByConfig,\n onTeacherInstructionsChanged: this.onTeacherInstructionsChanged,\n });\n\n ReactDOM.render(element, this);\n }\n}\n"],"file":"index.js"}
|
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,
|
|
@@ -115,42 +122,69 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
115
122
|
onUpdateShapes = _this$props2.onUpdateShapes;
|
|
116
123
|
|
|
117
124
|
var _ref = configuration || {},
|
|
125
|
+
_ref$maxImageWidth = _ref.maxImageWidth,
|
|
126
|
+
maxImageWidth = _ref$maxImageWidth === void 0 ? {} : _ref$maxImageWidth,
|
|
127
|
+
_ref$maxImageHeight = _ref.maxImageHeight,
|
|
128
|
+
maxImageHeight = _ref$maxImageHeight === void 0 ? {} : _ref$maxImageHeight,
|
|
118
129
|
_ref$multipleCorrect = _ref.multipleCorrect,
|
|
119
130
|
multipleCorrect = _ref$multipleCorrect === void 0 ? {} : _ref$multipleCorrect,
|
|
120
131
|
_ref$partialScoring = _ref.partialScoring,
|
|
121
132
|
partialScoring = _ref$partialScoring === void 0 ? {} : _ref$partialScoring,
|
|
133
|
+
_ref$preserveAspectRa = _ref.preserveAspectRatio,
|
|
134
|
+
preserveAspectRatio = _ref$preserveAspectRa === void 0 ? {} : _ref$preserveAspectRa,
|
|
122
135
|
_ref$prompt = _ref.prompt,
|
|
123
136
|
prompt = _ref$prompt === void 0 ? {} : _ref$prompt,
|
|
124
|
-
_ref$teacherInstructi = _ref.teacherInstructions,
|
|
125
|
-
teacherInstructions = _ref$teacherInstructi === void 0 ? {} : _ref$teacherInstructi,
|
|
126
137
|
_ref$rationale = _ref.rationale,
|
|
127
138
|
rationale = _ref$rationale === void 0 ? {} : _ref$rationale,
|
|
128
|
-
|
|
129
|
-
|
|
139
|
+
settingsPanelDisabled = _ref.settingsPanelDisabled,
|
|
140
|
+
_ref$spellCheck = _ref.spellCheck,
|
|
141
|
+
spellCheck = _ref$spellCheck === void 0 ? {} : _ref$spellCheck,
|
|
142
|
+
_ref$teacherInstructi = _ref.teacherInstructions,
|
|
143
|
+
teacherInstructions = _ref$teacherInstructi === void 0 ? {} : _ref$teacherInstructi,
|
|
144
|
+
_ref$withRubric = _ref.withRubric,
|
|
145
|
+
withRubric = _ref$withRubric === void 0 ? {} : _ref$withRubric;
|
|
130
146
|
|
|
131
147
|
var _ref2 = model || {},
|
|
132
|
-
|
|
148
|
+
errors = _ref2.errors,
|
|
133
149
|
promptEnabled = _ref2.promptEnabled,
|
|
134
|
-
rationaleEnabled = _ref2.rationaleEnabled
|
|
135
|
-
|
|
150
|
+
rationaleEnabled = _ref2.rationaleEnabled,
|
|
151
|
+
spellCheckEnabled = _ref2.spellCheckEnabled,
|
|
152
|
+
teacherInstructionsEnabled = _ref2.teacherInstructionsEnabled,
|
|
153
|
+
toolbarEditorPosition = _ref2.toolbarEditorPosition;
|
|
154
|
+
|
|
155
|
+
var _ref3 = errors || {},
|
|
156
|
+
shapesError = _ref3.shapesError,
|
|
157
|
+
selectionsError = _ref3.selectionsError;
|
|
158
|
+
|
|
159
|
+
var validationMessage = (0, _utils.generateValidationMessage)(configuration);
|
|
160
|
+
var defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;
|
|
161
|
+
var defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;
|
|
162
|
+
var toolbarOpts = {
|
|
163
|
+
position: toolbarEditorPosition === 'top' ? 'top' : 'bottom'
|
|
164
|
+
};
|
|
165
|
+
var panelSettings = {
|
|
166
|
+
multipleCorrect: multipleCorrect.settings && toggle(multipleCorrect.label),
|
|
167
|
+
partialScoring: partialScoring.settings && toggle(partialScoring.label),
|
|
168
|
+
promptEnabled: prompt.settings && toggle(prompt.label)
|
|
169
|
+
};
|
|
170
|
+
var panelProperties = {
|
|
171
|
+
teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
|
|
172
|
+
rationaleEnabled: rationale.settings && toggle(rationale.label),
|
|
173
|
+
spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),
|
|
174
|
+
rubricEnabled: (withRubric === null || withRubric === void 0 ? void 0 : withRubric.settings) && toggle(withRubric === null || withRubric === void 0 ? void 0 : withRubric.label)
|
|
175
|
+
};
|
|
136
176
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
137
177
|
className: classes.base
|
|
138
178
|
}, /*#__PURE__*/_react["default"].createElement(_configUi.layout.ConfigLayout, {
|
|
179
|
+
hideSettings: settingsPanelDisabled,
|
|
139
180
|
settings: /*#__PURE__*/_react["default"].createElement(Panel, {
|
|
140
181
|
model: model,
|
|
141
182
|
onChangeModel: onModelChangedByConfig,
|
|
142
183
|
configuration: configuration,
|
|
143
184
|
onChangeConfiguration: onConfigurationChanged,
|
|
144
185
|
groups: {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
partialScoring: partialScoring.settings && toggle(partialScoring.label),
|
|
148
|
-
promptEnabled: prompt.settings && toggle(prompt.label)
|
|
149
|
-
},
|
|
150
|
-
Properties: {
|
|
151
|
-
teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),
|
|
152
|
-
rationaleEnabled: rationale.settings && toggle(rationale.label)
|
|
153
|
-
}
|
|
186
|
+
Settings: panelSettings,
|
|
187
|
+
Properties: panelProperties
|
|
154
188
|
}
|
|
155
189
|
})
|
|
156
190
|
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -162,7 +196,17 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
162
196
|
markup: model.teacherInstructions || '',
|
|
163
197
|
onChange: onTeacherInstructionsChanged,
|
|
164
198
|
imageSupport: imageSupport,
|
|
165
|
-
nonEmpty: false
|
|
199
|
+
nonEmpty: false,
|
|
200
|
+
toolbarOpts: toolbarOpts,
|
|
201
|
+
spellCheck: spellCheckEnabled,
|
|
202
|
+
maxImageWidth: maxImageWidth && maxImageWidth.teacherInstructions || defaultImageMaxWidth,
|
|
203
|
+
maxImageHeight: maxImageHeight && maxImageHeight.teacherInstructions || defaultImageMaxHeight,
|
|
204
|
+
uploadSoundSupport: uploadSoundSupport,
|
|
205
|
+
languageCharactersProps: [{
|
|
206
|
+
language: 'spanish'
|
|
207
|
+
}, {
|
|
208
|
+
language: 'special'
|
|
209
|
+
}]
|
|
166
210
|
})), promptEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
167
211
|
label: prompt.label,
|
|
168
212
|
className: classes.prompt
|
|
@@ -170,18 +214,54 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
170
214
|
markup: model.prompt || '',
|
|
171
215
|
onChange: onPromptChanged,
|
|
172
216
|
imageSupport: imageSupport,
|
|
173
|
-
nonEmpty: false
|
|
217
|
+
nonEmpty: false,
|
|
218
|
+
toolbarOpts: toolbarOpts,
|
|
219
|
+
spellCheck: spellCheckEnabled,
|
|
220
|
+
maxImageWidth: defaultImageMaxWidth,
|
|
221
|
+
maxImageHeight: defaultImageMaxHeight,
|
|
222
|
+
uploadSoundSupport: uploadSoundSupport,
|
|
223
|
+
languageCharactersProps: [{
|
|
224
|
+
language: 'spanish'
|
|
225
|
+
}, {
|
|
226
|
+
language: 'special'
|
|
227
|
+
}]
|
|
174
228
|
})), rationaleEnabled && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
175
229
|
label: rationale.label,
|
|
176
230
|
className: classes.prompt
|
|
177
231
|
}, /*#__PURE__*/_react["default"].createElement(_editableHtml["default"], {
|
|
178
232
|
markup: model.rationale || '',
|
|
179
233
|
onChange: onRationaleChanged,
|
|
180
|
-
imageSupport: imageSupport
|
|
181
|
-
|
|
182
|
-
|
|
234
|
+
imageSupport: imageSupport,
|
|
235
|
+
toolbarOpts: toolbarOpts,
|
|
236
|
+
spellCheck: spellCheckEnabled,
|
|
237
|
+
maxImageWidth: maxImageWidth && maxImageWidth.rationale || defaultImageMaxWidth,
|
|
238
|
+
maxImageHeight: maxImageHeight && maxImageHeight.rationale || defaultImageMaxHeight,
|
|
239
|
+
uploadSoundSupport: uploadSoundSupport,
|
|
240
|
+
languageCharactersProps: [{
|
|
241
|
+
language: 'spanish'
|
|
242
|
+
}, {
|
|
243
|
+
language: 'special'
|
|
244
|
+
}]
|
|
245
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
246
|
+
className: (0, _classnames["default"])(classes.label, classes.flexContainer)
|
|
247
|
+
}, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
|
248
|
+
className: classes.subheading,
|
|
183
249
|
variant: "subheading"
|
|
184
|
-
}, "Define Hotspot"), /*#__PURE__*/_react["default"].createElement(
|
|
250
|
+
}, "Define Hotspot"), /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
|
|
251
|
+
classes: {
|
|
252
|
+
tooltip: classes.tooltip
|
|
253
|
+
},
|
|
254
|
+
disableFocusListener: true,
|
|
255
|
+
disableTouchListener: true,
|
|
256
|
+
placement: 'left',
|
|
257
|
+
title: validationMessage
|
|
258
|
+
}, /*#__PURE__*/_react["default"].createElement(_Info["default"], {
|
|
259
|
+
fontSize: 'small',
|
|
260
|
+
color: 'primary',
|
|
261
|
+
style: {
|
|
262
|
+
"float": 'right'
|
|
263
|
+
}
|
|
264
|
+
}))), /*#__PURE__*/_react["default"].createElement(_hotspotPalette["default"], {
|
|
185
265
|
hotspotColor: model.hotspotColor,
|
|
186
266
|
hotspotList: model.hotspotList,
|
|
187
267
|
outlineColor: model.outlineColor,
|
|
@@ -196,6 +276,7 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
196
276
|
dimensions: model.dimensions,
|
|
197
277
|
imageUrl: model.imageUrl,
|
|
198
278
|
multipleCorrect: model.multipleCorrect,
|
|
279
|
+
hasErrors: !!shapesError || !!selectionsError,
|
|
199
280
|
hotspotColor: model.hotspotColor,
|
|
200
281
|
outlineColor: model.outlineColor,
|
|
201
282
|
onUpdateImageDimension: onUpdateImageDimension,
|
|
@@ -204,7 +285,11 @@ var Root = /*#__PURE__*/function (_React$Component) {
|
|
|
204
285
|
shapes: model.shapes,
|
|
205
286
|
strokeWidth: model.strokeWidth,
|
|
206
287
|
preserveAspectRatioEnabled: preserveAspectRatio.enabled
|
|
207
|
-
}),
|
|
288
|
+
}), shapesError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
289
|
+
className: classes.errorText
|
|
290
|
+
}, shapesError), selectionsError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
291
|
+
className: classes.errorText
|
|
292
|
+
}, selectionsError), model.imageUrl && /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
|
208
293
|
className: classes.label,
|
|
209
294
|
variant: "subheading"
|
|
210
295
|
}, "Image Dimensions"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -260,12 +345,29 @@ var styles = function styles(theme) {
|
|
|
260
345
|
paddingTop: theme.spacing.unit * 2,
|
|
261
346
|
width: '100%'
|
|
262
347
|
},
|
|
348
|
+
subheading: {
|
|
349
|
+
marginRight: theme.spacing.unit
|
|
350
|
+
},
|
|
263
351
|
regular: {
|
|
264
352
|
marginBottom: theme.spacing.unit * 3
|
|
265
353
|
},
|
|
266
354
|
switchElement: {
|
|
267
355
|
justifyContent: 'space-between',
|
|
268
356
|
margin: 0
|
|
357
|
+
},
|
|
358
|
+
flexContainer: {
|
|
359
|
+
display: 'flex',
|
|
360
|
+
alignItems: 'center'
|
|
361
|
+
},
|
|
362
|
+
tooltip: {
|
|
363
|
+
fontSize: '12px',
|
|
364
|
+
whiteSpace: 'pre',
|
|
365
|
+
maxWidth: '500px'
|
|
366
|
+
},
|
|
367
|
+
errorText: {
|
|
368
|
+
fontSize: '12px',
|
|
369
|
+
color: theme.palette.error.main,
|
|
370
|
+
paddingTop: theme.spacing.unit
|
|
269
371
|
}
|
|
270
372
|
};
|
|
271
373
|
};
|
|
@@ -278,6 +380,10 @@ Root.propTypes = {
|
|
|
278
380
|
add: _propTypes["default"].func,
|
|
279
381
|
"delete": _propTypes["default"].func
|
|
280
382
|
}),
|
|
383
|
+
uploadSoundSupport: _propTypes["default"].shape({
|
|
384
|
+
add: _propTypes["default"].func,
|
|
385
|
+
"delete": _propTypes["default"].func
|
|
386
|
+
}),
|
|
281
387
|
onImageUpload: _propTypes["default"].func.isRequired,
|
|
282
388
|
onColorChanged: _propTypes["default"].func.isRequired,
|
|
283
389
|
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","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\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 />\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 />\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 />\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","maxImageWidth","maxImageHeight","multipleCorrect","partialScoring","prompt","rationale","settingsPanelDisabled","spellCheck","teacherInstructions","withRubric","errors","promptEnabled","rationaleEnabled","spellCheckEnabled","teacherInstructionsEnabled","toolbarEditorPosition","shapesError","selectionsError","validationMessage","defaultImageMaxWidth","defaultImageMaxHeight","toolbarOpts","position","panelSettings","label","panelProperties","rubricEnabled","base","Settings","Properties","regular","language","flexContainer","subheading","tooltip","hotspotColor","hotspotList","outlineColor","outlineList","handleColorChange","imageUrl","strokeWidth","errorText","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","palette","error","main","propTypes","PropTypes","object","isRequired","shape","add","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { settings, layout, InputContainer, NumberTextField } 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 { updateImageDimensions, generateValidationMessage, 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 uploadSoundSupport,\n onConfigurationChanged,\n onImageUpload,\n onModelChangedByConfig,\n onPromptChanged,\n onRationaleChanged,\n onUpdateImageDimension,\n onTeacherInstructionsChanged,\n onUpdateShapes,\n } = this.props;\n const {\n maxImageWidth = {},\n maxImageHeight = {},\n multipleCorrect = {},\n partialScoring = {},\n preserveAspectRatio = {},\n prompt = {},\n rationale = {},\n settingsPanelDisabled,\n spellCheck = {},\n teacherInstructions = {},\n withRubric = {},\n } = configuration || {};\n const {\n errors,\n promptEnabled,\n rationaleEnabled,\n spellCheckEnabled,\n teacherInstructionsEnabled,\n toolbarEditorPosition,\n } = model || {};\n const { shapesError, selectionsError } = errors || {};\n const validationMessage = generateValidationMessage(configuration);\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n const panelSettings = {\n multipleCorrect: multipleCorrect.settings && toggle(multipleCorrect.label),\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n };\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n return (\n <div className={classes.base}>\n <layout.ConfigLayout\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n onChangeModel={onModelChangedByConfig}\n configuration={configuration}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\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\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 label={rationale.label} className={classes.prompt}>\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\n <HotspotPalette\n hotspotColor={model.hotspotColor}\n hotspotList={model.hotspotList}\n outlineColor={model.outlineColor}\n outlineList={model.outlineList}\n onHotspotColorChange={(color) => this.handleColorChange('hotspot', color)}\n onOutlineColorChange={(color) => this.handleColorChange('outline', color)}\n />\n\n <HotspotContainer\n dimensions={model.dimensions}\n imageUrl={model.imageUrl}\n multipleCorrect={model.multipleCorrect}\n hasErrors={!!shapesError || !!selectionsError}\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 {shapesError && <div className={classes.errorText}>{shapesError}</div>}\n {selectionsError && <div className={classes.errorText}>{selectionsError}</div>}\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\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: theme.spacing.unit,\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: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/upload-control.jsx"],"names":["UploadControl","classNameButton","classNameSection","classes","label","onInputClick","onUploadImage","setRef","input","ref","styles","display","propTypes","PropTypes","object","isRequired","string","func","defaultProps"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AAEA,IAAMA,aAAa,GAAG,SAAhBA,aAAgB;AAAA,
|
|
1
|
+
{"version":3,"sources":["../src/upload-control.jsx"],"names":["UploadControl","classNameButton","classNameSection","classes","label","onInputClick","onUploadImage","setRef","input","ref","styles","display","propTypes","PropTypes","object","isRequired","string","func","defaultProps"],"mappings":";;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AAEA,IAAMA,aAAa,GAAG,SAAhBA,aAAgB;AAAA,MAAGC,eAAH,QAAGA,eAAH;AAAA,MAAoBC,gBAApB,QAAoBA,gBAApB;AAAA,MAAsCC,OAAtC,QAAsCA,OAAtC;AAAA,MAA+CC,KAA/C,QAA+CA,KAA/C;AAAA,MAAsDC,YAAtD,QAAsDA,YAAtD;AAAA,MAAoEC,aAApE,QAAoEA,aAApE;AAAA,MAAmFC,MAAnF,QAAmFA,MAAnF;AAAA,sBACpB;AAAK,IAAA,SAAS,EAAEL;AAAhB,kBACE,gCAAC,kBAAD;AAAQ,IAAA,SAAS,EAAED,eAAnB;AAAoC,IAAA,KAAK,EAAEG,KAA3C;AAAkD,IAAA,OAAO,EAAEC;AAA3D,IADF,eAEE;AACE,IAAA,MAAM,EAAC,SADT;AAEE,IAAA,SAAS,EAAEF,OAAO,CAACK,KAFrB;AAGE,IAAA,QAAQ,EAAEF,aAHZ;AAIE,IAAA,GAAG,EAAE,aAACG,KAAD,EAAS;AACZF,MAAAA,MAAM,CAACE,KAAD,CAAN;AACD,KANH;AAOE,IAAA,IAAI,EAAC;AAPP,IAFF,CADoB;AAAA,CAAtB;;AAeA,IAAMC,MAAM,GAAG,SAATA,MAAS;AAAA,SAAO;AACpBF,IAAAA,KAAK,EAAE;AACLG,MAAAA,OAAO,EAAE;AADJ;AADa,GAAP;AAAA,CAAf;;AAMAX,aAAa,CAACY,SAAd,GAA0B;AACxBT,EAAAA,OAAO,EAAEU,sBAAUC,MAAV,CAAiBC,UADF;AAExBd,EAAAA,eAAe,EAAEY,sBAAUG,MAFH;AAGxBd,EAAAA,gBAAgB,EAAEW,sBAAUG,MAHJ;AAIxBZ,EAAAA,KAAK,EAAES,sBAAUG,MAAV,CAAiBD,UAJA;AAKxBV,EAAAA,YAAY,EAAEQ,sBAAUI,IAAV,CAAeF,UALL;AAMxBT,EAAAA,aAAa,EAAEO,sBAAUI,IAAV,CAAeF,UANN;AAOxBR,EAAAA,MAAM,EAAEM,sBAAUI,IAAV,CAAeF;AAPC,CAA1B;AAUAf,aAAa,CAACkB,YAAd,GAA6B;AAC3BjB,EAAAA,eAAe,EAAE,EADU;AAE3BC,EAAAA,gBAAgB,EAAE;AAFS,CAA7B;;eAKe,uBAAWQ,MAAX,EAAmBV,aAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles/index';\n\nimport Button from './button';\n\nconst UploadControl = ({ classNameButton, classNameSection, classes, label, onInputClick, onUploadImage, setRef }) => (\n <div className={classNameSection}>\n <Button className={classNameButton} label={label} onClick={onInputClick} />\n <input\n accept=\"image/*\"\n className={classes.input}\n onChange={onUploadImage}\n ref={(ref) => {\n setRef(ref);\n }}\n type=\"file\"\n />\n </div>\n);\n\nconst styles = () => ({\n input: {\n display: 'none',\n },\n});\n\nUploadControl.propTypes = {\n classes: PropTypes.object.isRequired,\n classNameButton: PropTypes.string,\n classNameSection: PropTypes.string,\n label: PropTypes.string.isRequired,\n onInputClick: PropTypes.func.isRequired,\n onUploadImage: PropTypes.func.isRequired,\n setRef: PropTypes.func.isRequired,\n};\n\nUploadControl.defaultProps = {\n classNameButton: '',\n classNameSection: '',\n};\n\nexport default withStyles(styles)(UploadControl);\n"],"file":"upload-control.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) =>\n (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(\n (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 ),\n shapesArray,\n )\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 =\n `\\nThere should be at least ${minShapes} ` + (maxShapes ? `and at most ${maxShapes} ` : '') + 'shapes defined.';\n\n const selectionsMessage =\n `\\nThere should be at least 1 ` +\n (maxSelections ? `and at most ${maxSelections} ` : '') +\n 'shape' +\n (maxSelections ? 's' : '') +\n ' 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.4.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": "12.0.0-beta.3",
|
|
14
|
+
"@pie-lib/editable-html": "10.0.0-beta.4",
|
|
15
15
|
"classnames": "^2.2.6",
|
|
16
16
|
"debug": "^3.1.0",
|
|
17
17
|
"konva": "^3.2.4",
|