@pie-element/drawing-response 3.9.11 → 3.9.14
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 +24 -0
- package/configure/CHANGELOG.md +24 -0
- package/configure/lib/defaults.js +7 -2
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/image-container.js +14 -7
- package/configure/lib/image-container.js.map +1 -1
- package/configure/lib/index.js +0 -6
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/root.js +15 -7
- package/configure/lib/root.js.map +1 -1
- package/configure/package.json +3 -3
- package/configure/src/__tests__/__snapshots__/root.test.jsx.snap +7 -14
- package/configure/src/defaults.js +7 -2
- package/configure/src/image-container.jsx +72 -44
- package/configure/src/index.js +0 -6
- package/configure/src/root.jsx +31 -24
- package/controller/CHANGELOG.md +8 -0
- package/controller/lib/index.js +6 -3
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/controller/src/__tests__/index.test.js +18 -9
- package/controller/src/index.js +4 -1
- package/docs/config-schema.json +16 -0
- package/docs/config-schema.json.md +12 -0
- package/docs/demo/generate.js +1 -0
- package/docs/pie-schema.json +12 -0
- package/docs/pie-schema.json.md +8 -0
- package/lib/drawing-response/container.js +57 -11
- package/lib/drawing-response/container.js.map +1 -1
- package/lib/drawing-response/drawable-image.js +2 -1
- package/lib/drawing-response/drawable-image.js.map +1 -1
- package/lib/drawing-response/drawable-main.js +26 -10
- package/lib/drawing-response/drawable-main.js.map +1 -1
- package/lib/drawing-response/drawable-text.js +1 -1
- package/lib/drawing-response/drawable-text.js.map +1 -1
- package/lib/drawing-response/index.js +3 -0
- package/lib/drawing-response/index.js.map +1 -1
- package/package.json +4 -4
- package/src/drawing-response/__tests__/__snapshots__/container.test.jsx.snap +18 -2
- package/src/drawing-response/__tests__/__snapshots__/drawing-main.test.jsx.snap +12 -2
- package/src/drawing-response/__tests__/container.test.jsx +7 -0
- package/src/drawing-response/__tests__/drawing-main.test.jsx +2 -1
- package/src/drawing-response/container.jsx +40 -2
- package/src/drawing-response/drawable-image.jsx +2 -1
- package/src/drawing-response/drawable-main.jsx +24 -10
- package/src/drawing-response/drawable-text.jsx +1 -1
- package/src/drawing-response/index.jsx +3 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/drawing-response",
|
|
3
|
-
"version": "3.9.
|
|
3
|
+
"version": "3.9.14",
|
|
4
4
|
"description": "",
|
|
5
5
|
"repository": "pie-framework/pie-elements",
|
|
6
6
|
"publishConfig": {
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"@mdi/js": "^3.6.95",
|
|
12
12
|
"@mdi/react": "^1.1.1",
|
|
13
13
|
"@pie-framework/pie-player-events": "^0.1.0",
|
|
14
|
-
"@pie-lib/math-rendering": "^2.3.
|
|
15
|
-
"@pie-lib/render-ui": "^4.12.
|
|
14
|
+
"@pie-lib/math-rendering": "^2.3.13",
|
|
15
|
+
"@pie-lib/render-ui": "^4.12.5",
|
|
16
16
|
"classnames": "^2.2.6",
|
|
17
17
|
"enzyme-to-json": "^3.3.5",
|
|
18
18
|
"konva": "^3.4.1",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
},
|
|
25
25
|
"author": "pie framework developers",
|
|
26
26
|
"license": "ISC",
|
|
27
|
-
"gitHead": "
|
|
27
|
+
"gitHead": "b32a90d35916de8f2b77d7b3428b02efbd145313",
|
|
28
28
|
"scripts": {
|
|
29
29
|
"postpublish": "../../scripts/postpublish"
|
|
30
30
|
},
|
|
@@ -212,7 +212,14 @@ exports[`Container snapshot renders 1`] = `
|
|
|
212
212
|
/>
|
|
213
213
|
</div>
|
|
214
214
|
</div>
|
|
215
|
-
<div
|
|
215
|
+
<div
|
|
216
|
+
style={
|
|
217
|
+
Object {
|
|
218
|
+
"height": NaN,
|
|
219
|
+
"maxHeight": NaN,
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
>
|
|
216
223
|
<WithStyles(DrawableMain)
|
|
217
224
|
TextEntry={
|
|
218
225
|
TextDrawable {
|
|
@@ -240,6 +247,7 @@ exports[`Container snapshot renders 1`] = `
|
|
|
240
247
|
onSessionChange={[MockFunction]}
|
|
241
248
|
outlineColor="black"
|
|
242
249
|
paintColor="red"
|
|
250
|
+
scale={1}
|
|
243
251
|
session={Object {}}
|
|
244
252
|
toolActive={
|
|
245
253
|
Object {
|
|
@@ -466,7 +474,14 @@ exports[`Container snapshot renders disabled 1`] = `
|
|
|
466
474
|
/>
|
|
467
475
|
</div>
|
|
468
476
|
</div>
|
|
469
|
-
<div
|
|
477
|
+
<div
|
|
478
|
+
style={
|
|
479
|
+
Object {
|
|
480
|
+
"height": NaN,
|
|
481
|
+
"maxHeight": NaN,
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
>
|
|
470
485
|
<WithStyles(DrawableMain)
|
|
471
486
|
TextEntry={
|
|
472
487
|
TextDrawable {
|
|
@@ -495,6 +510,7 @@ exports[`Container snapshot renders disabled 1`] = `
|
|
|
495
510
|
onSessionChange={[MockFunction]}
|
|
496
511
|
outlineColor="black"
|
|
497
512
|
paintColor="red"
|
|
513
|
+
scale={1}
|
|
498
514
|
session={Object {}}
|
|
499
515
|
toolActive={
|
|
500
516
|
Object {
|
|
@@ -26,7 +26,12 @@ exports[`DrawingResponse DrawableMain snapshot renders 1`] = `
|
|
|
26
26
|
</div>
|
|
27
27
|
<div>
|
|
28
28
|
<WithStyles(DrawableImage)
|
|
29
|
-
dimensions={
|
|
29
|
+
dimensions={
|
|
30
|
+
Object {
|
|
31
|
+
"height": NaN,
|
|
32
|
+
"width": NaN,
|
|
33
|
+
}
|
|
34
|
+
}
|
|
30
35
|
url="url"
|
|
31
36
|
/>
|
|
32
37
|
<ForwardRef
|
|
@@ -58,7 +63,12 @@ exports[`DrawingResponse DrawableMain snapshot renders disabled 1`] = `
|
|
|
58
63
|
</div>
|
|
59
64
|
<div>
|
|
60
65
|
<WithStyles(DrawableImage)
|
|
61
|
-
dimensions={
|
|
66
|
+
dimensions={
|
|
67
|
+
Object {
|
|
68
|
+
"height": NaN,
|
|
69
|
+
"width": NaN,
|
|
70
|
+
}
|
|
71
|
+
}
|
|
62
72
|
url="url"
|
|
63
73
|
/>
|
|
64
74
|
<ForwardRef
|
|
@@ -29,7 +29,8 @@ export class Container extends Component {
|
|
|
29
29
|
session: PropTypes.object.isRequired,
|
|
30
30
|
onSessionChange: PropTypes.func.isRequired,
|
|
31
31
|
imageDimensions: PropTypes.object.isRequired,
|
|
32
|
-
imageUrl: PropTypes.string.isRequired
|
|
32
|
+
imageUrl: PropTypes.string.isRequired,
|
|
33
|
+
backgroundImageEnabled: PropTypes.bool.isRequired
|
|
33
34
|
};
|
|
34
35
|
|
|
35
36
|
constructor(props) {
|
|
@@ -37,6 +38,7 @@ export class Container extends Component {
|
|
|
37
38
|
const TextEntry = new DrawableText();
|
|
38
39
|
|
|
39
40
|
this.state = {
|
|
41
|
+
scale: 1,
|
|
40
42
|
drawableDimensions: {
|
|
41
43
|
height: 0,
|
|
42
44
|
width: 0
|
|
@@ -80,12 +82,42 @@ export class Container extends Component {
|
|
|
80
82
|
|
|
81
83
|
componentDidMount() {
|
|
82
84
|
this.setDimensions();
|
|
85
|
+
|
|
86
|
+
this.observer = new MutationObserver((mutations) => {
|
|
87
|
+
mutations.forEach(() => {
|
|
88
|
+
const target = document.getElementById('question-container')?.style?.cssText
|
|
89
|
+
const zoom = target?.substring(
|
|
90
|
+
target.indexOf('--pie-zoom') + 11,
|
|
91
|
+
target.lastIndexOf('%')
|
|
92
|
+
);
|
|
93
|
+
const zoomParsed = zoom?.replace(/\s/g, '');
|
|
94
|
+
|
|
95
|
+
if (zoomParsed) {
|
|
96
|
+
const newScale = parseFloat(zoomParsed) / 100;
|
|
97
|
+
if (newScale !== this.state.scale) {
|
|
98
|
+
this.setState({
|
|
99
|
+
scale: parseFloat(zoomParsed) / 100,
|
|
100
|
+
})
|
|
101
|
+
}
|
|
102
|
+
} else if (!zoomParsed && this.state.scale !== 1) {
|
|
103
|
+
this.setState({
|
|
104
|
+
scale: 1,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
const target = document.getElementById('question-container');
|
|
111
|
+
if (target) {
|
|
112
|
+
this.observer.observe(target, { attributes : true, attributeFilter : ['style'] })
|
|
113
|
+
}
|
|
83
114
|
}
|
|
84
115
|
|
|
85
116
|
componentWillUnmount() {
|
|
86
117
|
const { TextEntry } = this.state;
|
|
87
118
|
|
|
88
119
|
TextEntry.removeEventListeners();
|
|
120
|
+
this.observer?.disconnect();
|
|
89
121
|
}
|
|
90
122
|
|
|
91
123
|
handleMakeToolActive(tool) {
|
|
@@ -131,7 +163,8 @@ export class Container extends Component {
|
|
|
131
163
|
imageUrl,
|
|
132
164
|
imageDimensions,
|
|
133
165
|
onSessionChange,
|
|
134
|
-
session
|
|
166
|
+
session,
|
|
167
|
+
backgroundImageEnabled
|
|
135
168
|
} = this.props;
|
|
136
169
|
const {
|
|
137
170
|
drawableDimensions,
|
|
@@ -145,6 +178,8 @@ export class Container extends Component {
|
|
|
145
178
|
TextEntry
|
|
146
179
|
} = this.state;
|
|
147
180
|
|
|
181
|
+
const heightToUse = drawableDimensions * this.state.scale;
|
|
182
|
+
|
|
148
183
|
return (
|
|
149
184
|
<div className={classes.base}>
|
|
150
185
|
<DrawablePalette
|
|
@@ -185,8 +220,10 @@ export class Container extends Component {
|
|
|
185
220
|
this.drawable = drawable;
|
|
186
221
|
}}
|
|
187
222
|
className={classes.drawableHeight}
|
|
223
|
+
style={{ height: heightToUse, maxHeight: heightToUse }}
|
|
188
224
|
>
|
|
189
225
|
<DrawableMain
|
|
226
|
+
scale={this.state.scale}
|
|
190
227
|
session={session}
|
|
191
228
|
disabled={disabled}
|
|
192
229
|
onSessionChange={onSessionChange}
|
|
@@ -198,6 +235,7 @@ export class Container extends Component {
|
|
|
198
235
|
imageDimensions={imageDimensions}
|
|
199
236
|
toolActive={toolActive}
|
|
200
237
|
TextEntry={TextEntry}
|
|
238
|
+
backgroundImageEnabled={backgroundImageEnabled}
|
|
201
239
|
/>
|
|
202
240
|
</div>
|
|
203
241
|
</div>
|
|
@@ -5,11 +5,12 @@ import { withStyles } from '@material-ui/core/styles';
|
|
|
5
5
|
const DrawableImage = ({ classes, url, dimensions: { height, width } }) => (
|
|
6
6
|
<div className={classes.imageContainer}>
|
|
7
7
|
<img
|
|
8
|
+
alt="drawing-response-image"
|
|
8
9
|
className={classes.image}
|
|
9
10
|
src={url}
|
|
10
11
|
style={{
|
|
11
12
|
height,
|
|
12
|
-
maxWidth:
|
|
13
|
+
maxWidth: 598,
|
|
13
14
|
maxHeight: 350,
|
|
14
15
|
width,
|
|
15
16
|
}}
|
|
@@ -90,13 +90,13 @@ export class DrawableMain extends React.Component {
|
|
|
90
90
|
|
|
91
91
|
handleMouseDown = e => {
|
|
92
92
|
const { newDrawable, textIsSelected } = this.state;
|
|
93
|
-
const { toolActive, fillColor, outlineColor } = this.props;
|
|
93
|
+
const { toolActive, fillColor, outlineColor, scale } = this.props;
|
|
94
94
|
|
|
95
95
|
if (newDrawable.length === 0 && !textIsSelected) {
|
|
96
96
|
const { x, y } = e.target.getStage().getPointerPosition();
|
|
97
97
|
const newDrawable = factory(toolActive.type, {
|
|
98
|
-
startx: x,
|
|
99
|
-
starty: y,
|
|
98
|
+
startx: x / scale,
|
|
99
|
+
starty: y / scale,
|
|
100
100
|
fillColor,
|
|
101
101
|
outlineColor,
|
|
102
102
|
createdAt: new Date()
|
|
@@ -110,12 +110,13 @@ export class DrawableMain extends React.Component {
|
|
|
110
110
|
|
|
111
111
|
handleMouseUp = e => {
|
|
112
112
|
const { newDrawable, drawables } = this.state;
|
|
113
|
+
const { scale } = this.props;
|
|
113
114
|
|
|
114
115
|
if (newDrawable.length === 1) {
|
|
115
116
|
const { x, y } = e.target.getStage().getPointerPosition();
|
|
116
117
|
const drawableToAdd = newDrawable[0];
|
|
117
118
|
|
|
118
|
-
drawableToAdd.registerMovement(x, y);
|
|
119
|
+
drawableToAdd.registerMovement(x / scale, y / scale);
|
|
119
120
|
drawables.push(drawableToAdd);
|
|
120
121
|
|
|
121
122
|
this.setState(
|
|
@@ -130,12 +131,13 @@ export class DrawableMain extends React.Component {
|
|
|
130
131
|
|
|
131
132
|
handleMouseMove = e => {
|
|
132
133
|
const { newDrawable } = this.state;
|
|
134
|
+
const { scale } = this.props;
|
|
133
135
|
|
|
134
136
|
if (newDrawable.length === 1) {
|
|
135
137
|
const { x, y } = e.target.getStage().getPointerPosition();
|
|
136
138
|
const updatedNewDrawable = newDrawable[0];
|
|
137
139
|
|
|
138
|
-
updatedNewDrawable.registerMovement(x, y);
|
|
140
|
+
updatedNewDrawable.registerMovement(x / scale, y / scale);
|
|
139
141
|
|
|
140
142
|
this.setState({
|
|
141
143
|
newDrawable: [updatedNewDrawable]
|
|
@@ -185,7 +187,9 @@ export class DrawableMain extends React.Component {
|
|
|
185
187
|
paintColor,
|
|
186
188
|
outlineColor,
|
|
187
189
|
TextEntry,
|
|
188
|
-
|
|
190
|
+
backgroundImageEnabled = true,
|
|
191
|
+
toolActive: { type },
|
|
192
|
+
scale
|
|
189
193
|
} = this.props;
|
|
190
194
|
const { isOver, newDrawable } = this.state;
|
|
191
195
|
|
|
@@ -205,7 +209,8 @@ export class DrawableMain extends React.Component {
|
|
|
205
209
|
handleSessionChange: this.handleSessionChange,
|
|
206
210
|
stage: this.stage,
|
|
207
211
|
onMouseOverElement: this.onMouseOverElement,
|
|
208
|
-
onMouseOutElement: this.onMouseOutElement
|
|
212
|
+
onMouseOutElement: this.onMouseOutElement,
|
|
213
|
+
scale
|
|
209
214
|
};
|
|
210
215
|
|
|
211
216
|
let listeners = {};
|
|
@@ -221,6 +226,9 @@ export class DrawableMain extends React.Component {
|
|
|
221
226
|
}
|
|
222
227
|
}
|
|
223
228
|
|
|
229
|
+
const imageHeight = imageDimensions.height * scale;
|
|
230
|
+
const imageWidth = imageDimensions.width * scale;
|
|
231
|
+
|
|
224
232
|
return (
|
|
225
233
|
<div>
|
|
226
234
|
<div className={classes.undoControls}>
|
|
@@ -228,13 +236,17 @@ export class DrawableMain extends React.Component {
|
|
|
228
236
|
<Button disabled={disabled} onClick={this.handleClearAll} label="Clear all" />
|
|
229
237
|
</div>
|
|
230
238
|
<div className={classes.base}>
|
|
231
|
-
{imageUrl && (
|
|
232
|
-
<ImageBackground
|
|
239
|
+
{backgroundImageEnabled && imageUrl && (
|
|
240
|
+
<ImageBackground
|
|
241
|
+
dimensions={{height: imageHeight, width: imageWidth}}
|
|
242
|
+
url={imageUrl}/>
|
|
233
243
|
)}
|
|
234
244
|
|
|
235
245
|
{TextEntry.renderTextareas()}
|
|
236
246
|
|
|
237
247
|
<Stage
|
|
248
|
+
scaleX={scale}
|
|
249
|
+
scaleY={scale}
|
|
238
250
|
ref={ref => {
|
|
239
251
|
this.stage = ref;
|
|
240
252
|
}}
|
|
@@ -297,7 +309,9 @@ DrawableMain.propTypes = {
|
|
|
297
309
|
imageUrl: PropTypes.string.isRequired,
|
|
298
310
|
TextEntry: PropTypes.object.isRequired,
|
|
299
311
|
toolActive: PropTypes.object.isRequired,
|
|
300
|
-
session: PropTypes.object.isRequired
|
|
312
|
+
session: PropTypes.object.isRequired,
|
|
313
|
+
backgroundImageEnabled: PropTypes.bool.isRequired,
|
|
314
|
+
scale: PropTypes.number.isRequired
|
|
301
315
|
};
|
|
302
316
|
|
|
303
317
|
export default withStyles(styles)(DrawableMain);
|
|
@@ -27,7 +27,8 @@ class DrawingResponseComponent extends React.Component {
|
|
|
27
27
|
imageUrl,
|
|
28
28
|
prompt,
|
|
29
29
|
mode,
|
|
30
|
-
teacherInstructions
|
|
30
|
+
teacherInstructions,
|
|
31
|
+
backgroundImageEnabled = true
|
|
31
32
|
},
|
|
32
33
|
session,
|
|
33
34
|
onSessionChange,
|
|
@@ -64,6 +65,7 @@ class DrawingResponseComponent extends React.Component {
|
|
|
64
65
|
isEvaluateMode={isEvaluateMode}
|
|
65
66
|
imageDimensions={imageDimensions}
|
|
66
67
|
imageUrl={imageUrl}
|
|
68
|
+
backgroundImageEnabled={backgroundImageEnabled}
|
|
67
69
|
disabled={disabled}
|
|
68
70
|
/>
|
|
69
71
|
</div>
|