@pie-element/hotspot 4.7.18-next.85 → 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 +485 -0
- package/configure/CHANGELOG.md +425 -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 +72 -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/lib/hotspot/image.js
CHANGED
|
@@ -29,7 +29,7 @@ var _reactKonva = require("react-konva");
|
|
|
29
29
|
|
|
30
30
|
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); }; }
|
|
31
31
|
|
|
32
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try {
|
|
32
|
+
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; } }
|
|
33
33
|
|
|
34
34
|
var ImageComponent = /*#__PURE__*/function (_React$Component) {
|
|
35
35
|
(0, _inherits2["default"])(ImageComponent, _React$Component);
|
|
@@ -47,7 +47,8 @@ var ImageComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
47
47
|
});
|
|
48
48
|
});
|
|
49
49
|
_this.state = {
|
|
50
|
-
image: null
|
|
50
|
+
image: null,
|
|
51
|
+
showTooltip: false
|
|
51
52
|
};
|
|
52
53
|
return _this;
|
|
53
54
|
}
|
|
@@ -80,17 +81,42 @@ var ImageComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
80
81
|
}, {
|
|
81
82
|
key: "render",
|
|
82
83
|
value: function render() {
|
|
84
|
+
var _this2 = this;
|
|
85
|
+
|
|
83
86
|
var _this$props = this.props,
|
|
84
87
|
x = _this$props.x,
|
|
85
|
-
y = _this$props.y
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
y = _this$props.y,
|
|
89
|
+
tooltip = _this$props.tooltip;
|
|
90
|
+
var _this$state = this.state,
|
|
91
|
+
image = _this$state.image,
|
|
92
|
+
showTooltip = _this$state.showTooltip;
|
|
93
|
+
return /*#__PURE__*/_react["default"].createElement(_reactKonva.Group, null, /*#__PURE__*/_react["default"].createElement(_reactKonva.Image, {
|
|
88
94
|
width: 20,
|
|
89
95
|
height: 20,
|
|
90
96
|
x: x,
|
|
91
97
|
y: y,
|
|
92
|
-
image: image
|
|
93
|
-
|
|
98
|
+
image: image,
|
|
99
|
+
onMouseEnter: function onMouseEnter() {
|
|
100
|
+
return _this2.setState({
|
|
101
|
+
showTooltip: true
|
|
102
|
+
});
|
|
103
|
+
},
|
|
104
|
+
onMouseLeave: function onMouseLeave() {
|
|
105
|
+
return _this2.setState({
|
|
106
|
+
showTooltip: false
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}), showTooltip && tooltip && /*#__PURE__*/_react["default"].createElement(_reactKonva.Label, {
|
|
110
|
+
x: x - 30,
|
|
111
|
+
y: y + 25
|
|
112
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactKonva.Tag, {
|
|
113
|
+
fill: "white",
|
|
114
|
+
cornerRadius: 5,
|
|
115
|
+
opacity: 0.9
|
|
116
|
+
}), /*#__PURE__*/_react["default"].createElement(_reactKonva.Text, {
|
|
117
|
+
text: tooltip,
|
|
118
|
+
padding: 5
|
|
119
|
+
})));
|
|
94
120
|
}
|
|
95
121
|
}]);
|
|
96
122
|
return ImageComponent;
|
|
@@ -99,7 +125,8 @@ var ImageComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
99
125
|
ImageComponent.propTypes = {
|
|
100
126
|
src: _propTypes["default"].string.isRequired,
|
|
101
127
|
x: _propTypes["default"].number.isRequired,
|
|
102
|
-
y: _propTypes["default"].number.isRequired
|
|
128
|
+
y: _propTypes["default"].number.isRequired,
|
|
129
|
+
tooltip: _propTypes["default"].string
|
|
103
130
|
};
|
|
104
131
|
var _default = ImageComponent;
|
|
105
132
|
exports["default"] = _default;
|
package/lib/hotspot/image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hotspot/image.jsx"],"names":["ImageComponent","props","setState","image","state","loadImage","oldProps","src","removeEventListener","handleLoad","window","Image","addEventListener","x","y","React","Component","propTypes","PropTypes","string","isRequired","number"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;IAEMA,c;;;;;AACJ,0BAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AADiB,
|
|
1
|
+
{"version":3,"sources":["../../src/hotspot/image.jsx"],"names":["ImageComponent","props","setState","image","state","showTooltip","loadImage","oldProps","src","removeEventListener","handleLoad","window","Image","addEventListener","x","y","tooltip","React","Component","propTypes","PropTypes","string","isRequired","number"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;IAEMA,c;;;;;AACJ,0BAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AADiB,mGA8BN,YAAM;AACjB,YAAKC,QAAL,CAAc;AACZC,QAAAA,KAAK,EAAE,MAAKA;AADA,OAAd;AAGD,KAlCkB;AAEjB,UAAKC,KAAL,GAAa;AACXD,MAAAA,KAAK,EAAE,IADI;AAEXE,MAAAA,WAAW,EAAE;AAFF,KAAb;AAFiB;AAMlB;;;;WAED,6BAAoB;AAClB,WAAKC,SAAL;AACD;;;WAED,4BAAmBC,QAAnB,EAA6B;AAC3B,UAAIA,QAAQ,CAACC,GAAT,KAAiB,KAAKP,KAAL,CAAWO,GAAhC,EAAqC;AACnC,aAAKF,SAAL;AACD;AACF;;;WAED,gCAAuB;AACrB,WAAKH,KAAL,CAAWM,mBAAX,CAA+B,MAA/B,EAAuC,KAAKC,UAA5C;AACD;;;WAED,qBAAY;AACV,UAAQF,GAAR,GAAgB,KAAKP,KAArB,CAAQO,GAAR;AAEA,WAAKL,KAAL,GAAa,IAAIQ,MAAM,CAACC,KAAX,EAAb;AACA,WAAKT,KAAL,CAAWK,GAAX,GAAiBA,GAAjB;AACA,WAAKL,KAAL,CAAWU,gBAAX,CAA4B,MAA5B,EAAoC,KAAKH,UAAzC;AACD;;;WAQD,kBAAS;AAAA;;AACP,wBAA0B,KAAKT,KAA/B;AAAA,UAAQa,CAAR,eAAQA,CAAR;AAAA,UAAWC,CAAX,eAAWA,CAAX;AAAA,UAAcC,OAAd,eAAcA,OAAd;AACA,wBAA+B,KAAKZ,KAApC;AAAA,UAAQD,KAAR,eAAQA,KAAR;AAAA,UAAeE,WAAf,eAAeA,WAAf;AAEA,0BACE,gCAAC,iBAAD,qBACE,gCAAC,iBAAD;AACE,QAAA,KAAK,EAAE,EADT;AAEE,QAAA,MAAM,EAAE,EAFV;AAGE,QAAA,CAAC,EAAES,CAHL;AAIE,QAAA,CAAC,EAAEC,CAJL;AAKE,QAAA,KAAK,EAAEZ,KALT;AAME,QAAA,YAAY,EAAE;AAAA,iBAAM,MAAI,CAACD,QAAL,CAAc;AAAEG,YAAAA,WAAW,EAAE;AAAf,WAAd,CAAN;AAAA,SANhB;AAOE,QAAA,YAAY,EAAE;AAAA,iBAAM,MAAI,CAACH,QAAL,CAAc;AAAEG,YAAAA,WAAW,EAAE;AAAf,WAAd,CAAN;AAAA;AAPhB,QADF,EAWGA,WAAW,IAAIW,OAAf,iBACC,gCAAC,iBAAD;AAAO,QAAA,CAAC,EAAEF,CAAC,GAAG,EAAd;AAAkB,QAAA,CAAC,EAAEC,CAAC,GAAG;AAAzB,sBACE,gCAAC,eAAD;AAAK,QAAA,IAAI,EAAC,OAAV;AAAkB,QAAA,YAAY,EAAE,CAAhC;AAAmC,QAAA,OAAO,EAAE;AAA5C,QADF,eAEE,gCAAC,gBAAD;AAAM,QAAA,IAAI,EAAEC,OAAZ;AAAqB,QAAA,OAAO,EAAE;AAA9B,QAFF,CAZJ,CADF;AAoBD;;;EA7D0BC,kBAAMC,S;;AAgEnClB,cAAc,CAACmB,SAAf,GAA2B;AACzBX,EAAAA,GAAG,EAAEY,sBAAUC,MAAV,CAAiBC,UADG;AAEzBR,EAAAA,CAAC,EAAEM,sBAAUG,MAAV,CAAiBD,UAFK;AAGzBP,EAAAA,CAAC,EAAEK,sBAAUG,MAAV,CAAiBD,UAHK;AAIzBN,EAAAA,OAAO,EAAEI,sBAAUC;AAJM,CAA3B;eAOerB,c","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Group, Image, Text, Tag, Label } from 'react-konva';\n\nclass ImageComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n image: null,\n showTooltip: false,\n };\n }\n\n componentDidMount() {\n this.loadImage();\n }\n\n componentDidUpdate(oldProps) {\n if (oldProps.src !== this.props.src) {\n this.loadImage();\n }\n }\n\n componentWillUnmount() {\n this.image.removeEventListener('load', this.handleLoad);\n }\n\n loadImage() {\n const { src } = this.props;\n\n this.image = new window.Image();\n this.image.src = src;\n this.image.addEventListener('load', this.handleLoad);\n }\n\n handleLoad = () => {\n this.setState({\n image: this.image,\n });\n };\n\n render() {\n const { x, y, tooltip } = this.props;\n const { image, showTooltip } = this.state;\n\n return (\n <Group>\n <Image\n width={20}\n height={20}\n x={x}\n y={y}\n image={image}\n onMouseEnter={() => this.setState({ showTooltip: true })}\n onMouseLeave={() => this.setState({ showTooltip: false })}\n />\n\n {showTooltip && tooltip && (\n <Label x={x - 30} y={y + 25}>\n <Tag fill=\"white\" cornerRadius={5} opacity={0.9} />\n <Text text={tooltip} padding={5} />\n </Label>\n )}\n </Group>\n );\n }\n}\n\nImageComponent.propTypes = {\n src: PropTypes.string.isRequired,\n x: PropTypes.number.isRequired,\n y: PropTypes.number.isRequired,\n tooltip: PropTypes.string,\n};\n\nexport default ImageComponent;\n"],"file":"image.js"}
|
package/lib/hotspot/index.js
CHANGED
|
@@ -27,15 +27,17 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
27
27
|
|
|
28
28
|
var _Typography = _interopRequireDefault(require("@material-ui/core/Typography"));
|
|
29
29
|
|
|
30
|
-
var
|
|
30
|
+
var _correctAnswerToggle = _interopRequireDefault(require("@pie-lib/correct-answer-toggle"));
|
|
31
31
|
|
|
32
|
-
var
|
|
32
|
+
var _renderUi = require("@pie-lib/render-ui");
|
|
33
33
|
|
|
34
34
|
var _styles = require("@material-ui/core/styles");
|
|
35
35
|
|
|
36
|
+
var _container = _interopRequireDefault(require("./container"));
|
|
37
|
+
|
|
36
38
|
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); }; }
|
|
37
39
|
|
|
38
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try {
|
|
40
|
+
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; } }
|
|
39
41
|
|
|
40
42
|
var HotspotComponent = /*#__PURE__*/function (_React$Component) {
|
|
41
43
|
(0, _inherits2["default"])(HotspotComponent, _React$Component);
|
|
@@ -55,12 +57,58 @@ var HotspotComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
55
57
|
});
|
|
56
58
|
});
|
|
57
59
|
_this.state = {
|
|
58
|
-
showCorrect: false
|
|
60
|
+
showCorrect: false,
|
|
61
|
+
observer: null,
|
|
62
|
+
scale: 1
|
|
59
63
|
};
|
|
60
64
|
return _this;
|
|
61
65
|
}
|
|
62
66
|
|
|
63
67
|
(0, _createClass2["default"])(HotspotComponent, [{
|
|
68
|
+
key: "componentDidMount",
|
|
69
|
+
value: function componentDidMount() {
|
|
70
|
+
var _this2 = this;
|
|
71
|
+
|
|
72
|
+
this.observer = new MutationObserver(function (mutations) {
|
|
73
|
+
mutations.forEach(function () {
|
|
74
|
+
var _document$getElementB, _document$getElementB2;
|
|
75
|
+
|
|
76
|
+
var target = (_document$getElementB = document.getElementById('question-container')) === null || _document$getElementB === void 0 ? void 0 : (_document$getElementB2 = _document$getElementB.style) === null || _document$getElementB2 === void 0 ? void 0 : _document$getElementB2.cssText;
|
|
77
|
+
var zoom = target === null || target === void 0 ? void 0 : target.substring(target.indexOf('--pie-zoom') + 11, target.lastIndexOf('%'));
|
|
78
|
+
var zoomParsed = zoom === null || zoom === void 0 ? void 0 : zoom.replace(/\s/g, '');
|
|
79
|
+
|
|
80
|
+
if (zoomParsed) {
|
|
81
|
+
var newScale = parseFloat(zoomParsed) / 100;
|
|
82
|
+
|
|
83
|
+
if (newScale !== _this2.state.scale) {
|
|
84
|
+
_this2.setState({
|
|
85
|
+
scale: parseFloat(zoomParsed) / 100
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
} else if (!zoomParsed && _this2.state.scale !== 1) {
|
|
89
|
+
_this2.setState({
|
|
90
|
+
scale: 1
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
var target = document.getElementById('question-container');
|
|
96
|
+
|
|
97
|
+
if (target) {
|
|
98
|
+
this.observer.observe(target, {
|
|
99
|
+
attributes: true,
|
|
100
|
+
attributeFilter: ['style']
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}, {
|
|
105
|
+
key: "componentWillUnmount",
|
|
106
|
+
value: function componentWillUnmount() {
|
|
107
|
+
var _this$observer;
|
|
108
|
+
|
|
109
|
+
(_this$observer = this.observer) === null || _this$observer === void 0 ? void 0 : _this$observer.disconnect();
|
|
110
|
+
}
|
|
111
|
+
}, {
|
|
64
112
|
key: "render",
|
|
65
113
|
value: function render() {
|
|
66
114
|
var _this$props = this.props,
|
|
@@ -78,25 +126,30 @@ var HotspotComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
78
126
|
rationale = _this$props$model.rationale,
|
|
79
127
|
teacherInstructions = _this$props$model.teacherInstructions,
|
|
80
128
|
strokeWidth = _this$props$model.strokeWidth,
|
|
129
|
+
responseCorrect = _this$props$model.responseCorrect,
|
|
81
130
|
onSelectChoice = _this$props.onSelectChoice,
|
|
82
131
|
classes = _this$props.classes;
|
|
132
|
+
var showCorrect = this.state.showCorrect;
|
|
83
133
|
var isEvaluateMode = mode === 'evaluate';
|
|
84
|
-
|
|
134
|
+
var showCorrectAnswerToggle = isEvaluateMode && !responseCorrect;
|
|
135
|
+
return /*#__PURE__*/_react["default"].createElement("div", null, showCorrectAnswerToggle && /*#__PURE__*/_react["default"].createElement(_correctAnswerToggle["default"], {
|
|
136
|
+
show: showCorrectAnswerToggle,
|
|
137
|
+
toggled: showCorrect,
|
|
138
|
+
onToggle: this.onToggle.bind(this)
|
|
139
|
+
}), showCorrectAnswerToggle && /*#__PURE__*/_react["default"].createElement("br", null), teacherInstructions && (0, _renderUi.hasText)(teacherInstructions) && /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
|
|
85
140
|
labels: {
|
|
86
141
|
hidden: 'Show Teacher Instructions',
|
|
87
142
|
visible: 'Hide Teacher Instructions'
|
|
88
143
|
},
|
|
89
144
|
className: classes.collapsible
|
|
90
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}
|
|
145
|
+
}, /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
|
|
146
|
+
className: "prompt",
|
|
147
|
+
prompt: teacherInstructions
|
|
94
148
|
})), /*#__PURE__*/_react["default"].createElement(_Typography["default"], {
|
|
95
149
|
className: classes.prompt
|
|
96
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
150
|
+
}, /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
|
|
151
|
+
className: "prompt",
|
|
152
|
+
prompt: prompt
|
|
100
153
|
})), imageUrl ? /*#__PURE__*/_react["default"].createElement(_container["default"], {
|
|
101
154
|
isEvaluateMode: isEvaluateMode,
|
|
102
155
|
session: session,
|
|
@@ -108,17 +161,18 @@ var HotspotComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
108
161
|
onSelectChoice: onSelectChoice,
|
|
109
162
|
shapes: shapes,
|
|
110
163
|
disabled: disabled,
|
|
111
|
-
strokeWidth: strokeWidth
|
|
164
|
+
strokeWidth: strokeWidth,
|
|
165
|
+
scale: this.state.scale,
|
|
166
|
+
showCorrect: showCorrect
|
|
112
167
|
}) : null, rationale && (0, _renderUi.hasText)(rationale) && /*#__PURE__*/_react["default"].createElement(_renderUi.Collapsible, {
|
|
113
168
|
labels: {
|
|
114
169
|
hidden: 'Show Rationale',
|
|
115
170
|
visible: 'Hide Rationale'
|
|
116
171
|
},
|
|
117
172
|
className: classes.collapsible
|
|
118
|
-
}, /*#__PURE__*/_react["default"].createElement(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
173
|
+
}, /*#__PURE__*/_react["default"].createElement(_renderUi.PreviewPrompt, {
|
|
174
|
+
className: "prompt",
|
|
175
|
+
prompt: rationale
|
|
122
176
|
})));
|
|
123
177
|
}
|
|
124
178
|
}]);
|
package/lib/hotspot/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hotspot/index.jsx"],"names":["HotspotComponent","props","showCorrect","state","setState","session","model","disabled","imageUrl","prompt","mode","multipleCorrect","shapes","outlineColor","hotspotColor","dimensions","rationale","teacherInstructions","strokeWidth","onSelectChoice","classes","isEvaluateMode","hidden","visible","collapsible","
|
|
1
|
+
{"version":3,"sources":["../../src/hotspot/index.jsx"],"names":["HotspotComponent","props","showCorrect","state","setState","observer","scale","MutationObserver","mutations","forEach","target","document","getElementById","style","cssText","zoom","substring","indexOf","lastIndexOf","zoomParsed","replace","newScale","parseFloat","observe","attributes","attributeFilter","disconnect","session","model","disabled","imageUrl","prompt","mode","multipleCorrect","shapes","outlineColor","hotspotColor","dimensions","rationale","teacherInstructions","strokeWidth","responseCorrect","onSelectChoice","classes","isEvaluateMode","showCorrectAnswerToggle","onToggle","bind","hidden","visible","collapsible","React","Component","propTypes","PropTypes","object","isRequired","func","defaultProps","styles","theme","paddingTop","spacing","unit","paddingBottom","fontSize"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEA;;;;;;IAEMA,gB;;;;;AACJ,4BAAYC,KAAZ,EAAmB;AAAA;;AAAA;AACjB,8BAAMA,KAAN;AADiB,iGAyCR,YAAM;AACf,UAAQC,WAAR,GAAwB,MAAKC,KAA7B,CAAQD,WAAR;;AACA,YAAKE,QAAL,CAAc;AAAEF,QAAAA,WAAW,EAAE,CAACA;AAAhB,OAAd;AACD,KA5CkB;AAEjB,UAAKC,KAAL,GAAa;AACXD,MAAAA,WAAW,EAAE,KADF;AAEXG,MAAAA,QAAQ,EAAE,IAFC;AAGXC,MAAAA,KAAK,EAAE;AAHI,KAAb;AAFiB;AAOlB;;;;WAED,6BAAoB;AAAA;;AAClB,WAAKD,QAAL,GAAgB,IAAIE,gBAAJ,CAAqB,UAACC,SAAD,EAAe;AAClDA,QAAAA,SAAS,CAACC,OAAV,CAAkB,YAAM;AAAA;;AACtB,cAAMC,MAAM,4BAAGC,QAAQ,CAACC,cAAT,CAAwB,oBAAxB,CAAH,oFAAG,sBAA+CC,KAAlD,2DAAG,uBAAsDC,OAArE;AACA,cAAMC,IAAI,GAAGL,MAAH,aAAGA,MAAH,uBAAGA,MAAM,CAAEM,SAAR,CAAkBN,MAAM,CAACO,OAAP,CAAe,YAAf,IAA+B,EAAjD,EAAqDP,MAAM,CAACQ,WAAP,CAAmB,GAAnB,CAArD,CAAb;AAEA,cAAMC,UAAU,GAAGJ,IAAH,aAAGA,IAAH,uBAAGA,IAAI,CAAEK,OAAN,CAAc,KAAd,EAAqB,EAArB,CAAnB;;AACA,cAAID,UAAJ,EAAgB;AACd,gBAAME,QAAQ,GAAGC,UAAU,CAACH,UAAD,CAAV,GAAyB,GAA1C;;AACA,gBAAIE,QAAQ,KAAK,MAAI,CAAClB,KAAL,CAAWG,KAA5B,EAAmC;AACjC,cAAA,MAAI,CAACF,QAAL,CAAc;AACZE,gBAAAA,KAAK,EAAEgB,UAAU,CAACH,UAAD,CAAV,GAAyB;AADpB,eAAd;AAGD;AACF,WAPD,MAOO,IAAI,CAACA,UAAD,IAAe,MAAI,CAAChB,KAAL,CAAWG,KAAX,KAAqB,CAAxC,EAA2C;AAChD,YAAA,MAAI,CAACF,QAAL,CAAc;AACZE,cAAAA,KAAK,EAAE;AADK,aAAd;AAGD;AACF,SAjBD;AAkBD,OAnBe,CAAhB;AAqBA,UAAMI,MAAM,GAAGC,QAAQ,CAACC,cAAT,CAAwB,oBAAxB,CAAf;;AACA,UAAIF,MAAJ,EAAY;AACV,aAAKL,QAAL,CAAckB,OAAd,CAAsBb,MAAtB,EAA8B;AAAEc,UAAAA,UAAU,EAAE,IAAd;AAAoBC,UAAAA,eAAe,EAAE,CAAC,OAAD;AAArC,SAA9B;AACD;AACF;;;WAED,gCAAuB;AAAA;;AACrB,6BAAKpB,QAAL,kEAAeqB,UAAf;AACD;;;WAOD,kBAAS;AACP,wBAmBI,KAAKzB,KAnBT;AAAA,UACE0B,OADF,eACEA,OADF;AAAA,0CAEEC,KAFF;AAAA,UAGIC,QAHJ,qBAGIA,QAHJ;AAAA,UAIIC,QAJJ,qBAIIA,QAJJ;AAAA,UAKIC,MALJ,qBAKIA,MALJ;AAAA,UAMIC,IANJ,qBAMIA,IANJ;AAAA,UAOIC,eAPJ,qBAOIA,eAPJ;AAAA,UAQIC,MARJ,qBAQIA,MARJ;AAAA,UASIC,YATJ,qBASIA,YATJ;AAAA,UAUIC,YAVJ,qBAUIA,YAVJ;AAAA,UAWIC,UAXJ,qBAWIA,UAXJ;AAAA,UAYIC,SAZJ,qBAYIA,SAZJ;AAAA,UAaIC,mBAbJ,qBAaIA,mBAbJ;AAAA,UAcIC,WAdJ,qBAcIA,WAdJ;AAAA,UAeIC,eAfJ,qBAeIA,eAfJ;AAAA,UAiBEC,cAjBF,eAiBEA,cAjBF;AAAA,UAkBEC,OAlBF,eAkBEA,OAlBF;AAoBA,UAAQzC,WAAR,GAAwB,KAAKC,KAA7B,CAAQD,WAAR;AACA,UAAM0C,cAAc,GAAGZ,IAAI,KAAK,UAAhC;AACA,UAAMa,uBAAuB,GAAGD,cAAc,IAAI,CAACH,eAAnD;AAEA,0BACE,6CACGI,uBAAuB,iBACtB,gCAAC,+BAAD;AACE,QAAA,IAAI,EAAEA,uBADR;AAEE,QAAA,OAAO,EAAE3C,WAFX;AAGE,QAAA,QAAQ,EAAE,KAAK4C,QAAL,CAAcC,IAAd,CAAmB,IAAnB;AAHZ,QAFJ,EAQGF,uBAAuB,iBAAI,2CAR9B,EASGN,mBAAmB,IAAI,uBAAQA,mBAAR,CAAvB,iBACC,gCAAC,qBAAD;AACE,QAAA,MAAM,EAAE;AAAES,UAAAA,MAAM,EAAE,2BAAV;AAAuCC,UAAAA,OAAO,EAAE;AAAhD,SADV;AAEE,QAAA,SAAS,EAAEN,OAAO,CAACO;AAFrB,sBAIE,gCAAC,uBAAD;AAAe,QAAA,SAAS,EAAC,QAAzB;AAAkC,QAAA,MAAM,EAAEX;AAA1C,QAJF,CAVJ,eAkBE,gCAAC,sBAAD;AAAY,QAAA,SAAS,EAAEI,OAAO,CAACZ;AAA/B,sBACE,gCAAC,uBAAD;AAAe,QAAA,SAAS,EAAC,QAAzB;AAAkC,QAAA,MAAM,EAAEA;AAA1C,QADF,CAlBF,EAsBGD,QAAQ,gBACP,gCAAC,qBAAD;AACE,QAAA,cAAc,EAAEc,cADlB;AAEE,QAAA,OAAO,EAAEjB,OAFX;AAGE,QAAA,UAAU,EAAEU,UAHd;AAIE,QAAA,QAAQ,EAAEP,QAJZ;AAKE,QAAA,YAAY,EAAEM,YALhB;AAME,QAAA,eAAe,EAAEH,eANnB;AAOE,QAAA,YAAY,EAAEE,YAPhB;AAQE,QAAA,cAAc,EAAEO,cARlB;AASE,QAAA,MAAM,EAAER,MATV;AAUE,QAAA,QAAQ,EAAEL,QAVZ;AAWE,QAAA,WAAW,EAAEW,WAXf;AAYE,QAAA,KAAK,EAAE,KAAKrC,KAAL,CAAWG,KAZpB;AAaE,QAAA,WAAW,EAAEJ;AAbf,QADO,GAgBL,IAtCN,EAwCGoC,SAAS,IAAI,uBAAQA,SAAR,CAAb,iBACC,gCAAC,qBAAD;AAAa,QAAA,MAAM,EAAE;AAAEU,UAAAA,MAAM,EAAE,gBAAV;AAA4BC,UAAAA,OAAO,EAAE;AAArC,SAArB;AAA8E,QAAA,SAAS,EAAEN,OAAO,CAACO;AAAjG,sBACE,gCAAC,uBAAD;AAAe,QAAA,SAAS,EAAC,QAAzB;AAAkC,QAAA,MAAM,EAAEZ;AAA1C,QADF,CAzCJ,CADF;AAgDD;;;EAxH4Ba,kBAAMC,S;;AA2HrCpD,gBAAgB,CAACqD,SAAjB,GAA6B;AAC3BV,EAAAA,OAAO,EAAEW,sBAAUC,MADQ;AAE3B3B,EAAAA,KAAK,EAAE0B,sBAAUC,MAAV,CAAiBC,UAFG;AAG3Bd,EAAAA,cAAc,EAAEY,sBAAUG,IAAV,CAAeD,UAHJ;AAI3B7B,EAAAA,OAAO,EAAE2B,sBAAUC,MAAV,CAAiBC;AAJC,CAA7B;AAOAxD,gBAAgB,CAAC0D,YAAjB,GAAgC;AAC9Bf,EAAAA,OAAO,EAAE;AADqB,CAAhC;;AAIA,IAAMgB,MAAM,GAAG,SAATA,MAAS,CAACC,KAAD;AAAA,SAAY;AACzBV,IAAAA,WAAW,EAAE;AACXW,MAAAA,UAAU,EAAED,KAAK,CAACE,OAAN,CAAcC,IAAd,GAAqB,CADtB;AAEXC,MAAAA,aAAa,EAAEJ,KAAK,CAACE,OAAN,CAAcC,IAAd,GAAqB;AAFzB,KADY;AAKzBhC,IAAAA,MAAM,EAAE;AACNkC,MAAAA,QAAQ,EAAE;AADJ;AALiB,GAAZ;AAAA,CAAf;;eAUe,wBAAWN,MAAX,EAAmB3D,gBAAnB,C","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport Typography from '@material-ui/core/Typography';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { Collapsible, hasText, PreviewPrompt } from '@pie-lib/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Container from './container';\n\nclass HotspotComponent extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n showCorrect: false,\n observer: null,\n scale: 1,\n };\n }\n\n componentDidMount() {\n this.observer = new MutationObserver((mutations) => {\n mutations.forEach(() => {\n const target = document.getElementById('question-container')?.style?.cssText;\n const zoom = target?.substring(target.indexOf('--pie-zoom') + 11, target.lastIndexOf('%'));\n\n const zoomParsed = zoom?.replace(/\\s/g, '');\n if (zoomParsed) {\n const newScale = parseFloat(zoomParsed) / 100;\n if (newScale !== this.state.scale) {\n this.setState({\n scale: parseFloat(zoomParsed) / 100,\n });\n }\n } else if (!zoomParsed && this.state.scale !== 1) {\n this.setState({\n scale: 1,\n });\n }\n });\n });\n\n const target = document.getElementById('question-container');\n if (target) {\n this.observer.observe(target, { attributes: true, attributeFilter: ['style'] });\n }\n }\n\n componentWillUnmount() {\n this.observer?.disconnect();\n }\n\n onToggle = () => {\n const { showCorrect } = this.state;\n this.setState({ showCorrect: !showCorrect });\n };\n\n render() {\n const {\n session,\n model: {\n disabled,\n imageUrl,\n prompt,\n mode,\n multipleCorrect,\n shapes,\n outlineColor,\n hotspotColor,\n dimensions,\n rationale,\n teacherInstructions,\n strokeWidth,\n responseCorrect,\n },\n onSelectChoice,\n classes,\n } = this.props;\n const { showCorrect } = this.state;\n const isEvaluateMode = mode === 'evaluate';\n const showCorrectAnswerToggle = isEvaluateMode && !responseCorrect;\n\n return (\n <div>\n {showCorrectAnswerToggle && (\n <CorrectAnswerToggle\n show={showCorrectAnswerToggle}\n toggled={showCorrect}\n onToggle={this.onToggle.bind(this)}\n />\n )}\n {showCorrectAnswerToggle && <br />}\n {teacherInstructions && hasText(teacherInstructions) && (\n <Collapsible\n labels={{ hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions' }}\n className={classes.collapsible}\n >\n <PreviewPrompt className=\"prompt\" prompt={teacherInstructions} />\n </Collapsible>\n )}\n\n <Typography className={classes.prompt}>\n <PreviewPrompt className=\"prompt\" prompt={prompt} />\n </Typography>\n\n {imageUrl ? (\n <Container\n isEvaluateMode={isEvaluateMode}\n session={session}\n dimensions={dimensions}\n imageUrl={imageUrl}\n hotspotColor={hotspotColor}\n multipleCorrect={multipleCorrect}\n outlineColor={outlineColor}\n onSelectChoice={onSelectChoice}\n shapes={shapes}\n disabled={disabled}\n strokeWidth={strokeWidth}\n scale={this.state.scale}\n showCorrect={showCorrect}\n />\n ) : null}\n\n {rationale && hasText(rationale) && (\n <Collapsible labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }} className={classes.collapsible}>\n <PreviewPrompt className=\"prompt\" prompt={rationale} />\n </Collapsible>\n )}\n </div>\n );\n }\n}\n\nHotspotComponent.propTypes = {\n classes: PropTypes.object,\n model: PropTypes.object.isRequired,\n onSelectChoice: PropTypes.func.isRequired,\n session: PropTypes.object.isRequired,\n};\n\nHotspotComponent.defaultProps = {\n classes: {},\n};\n\nconst styles = (theme) => ({\n collapsible: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 2,\n },\n prompt: {\n fontSize: 'inherit',\n },\n});\n\nexport default withStyles(styles)(HotspotComponent);\n"],"file":"index.js"}
|
package/lib/hotspot/polygon.js
CHANGED
|
@@ -35,7 +35,7 @@ var _icons = require("./icons");
|
|
|
35
35
|
|
|
36
36
|
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); }; }
|
|
37
37
|
|
|
38
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try {
|
|
38
|
+
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; } }
|
|
39
39
|
|
|
40
40
|
var PolygonComponent = /*#__PURE__*/function (_React$Component) {
|
|
41
41
|
(0, _inherits2["default"])(PolygonComponent, _React$Component);
|
|
@@ -97,22 +97,11 @@ var PolygonComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
97
97
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleMouseLeave", function () {
|
|
98
98
|
document.body.style.cursor = 'default';
|
|
99
99
|
});
|
|
100
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getEvaluateOutlineColor", function (isCorrect, outlineColor) {
|
|
101
|
-
return isCorrect ? outlineColor : 'red';
|
|
100
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getEvaluateOutlineColor", function (isCorrect, markAsCorrect, outlineColor) {
|
|
101
|
+
return markAsCorrect ? 'green' : isCorrect ? outlineColor : 'red';
|
|
102
102
|
});
|
|
103
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getOutlineWidth", function (selected, strokeWidth) {
|
|
104
|
-
return selected ? strokeWidth : 0;
|
|
105
|
-
});
|
|
106
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getEvaluateText", function (isCorrect, selected) {
|
|
107
|
-
if (selected && isCorrect) {
|
|
108
|
-
return 'Correctly\nselected';
|
|
109
|
-
} else if (selected && !isCorrect) {
|
|
110
|
-
return 'Incorrectly\nselected';
|
|
111
|
-
} else if (!selected && isCorrect) {
|
|
112
|
-
return 'Correctly\nunselected';
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
return 'Incorrectly\nunselected';
|
|
103
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getOutlineWidth", function (showCorrectEnabled, selected, markAsCorrect, strokeWidth) {
|
|
104
|
+
return markAsCorrect || !markAsCorrect && !showCorrectEnabled && selected ? strokeWidth : 0;
|
|
116
105
|
});
|
|
117
106
|
return _this;
|
|
118
107
|
}
|
|
@@ -128,30 +117,53 @@ var PolygonComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
128
117
|
outlineColor = _this$props2.outlineColor,
|
|
129
118
|
selected = _this$props2.selected,
|
|
130
119
|
points = _this$props2.points,
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
120
|
+
evaluateText = _this$props2.evaluateText,
|
|
121
|
+
strokeWidth = _this$props2.strokeWidth,
|
|
122
|
+
scale = _this$props2.scale,
|
|
123
|
+
markAsCorrect = _this$props2.markAsCorrect,
|
|
124
|
+
showCorrectEnabled = _this$props2.showCorrectEnabled;
|
|
125
|
+
var outlineColorParsed = isEvaluateMode ? this.getEvaluateOutlineColor(isCorrect, markAsCorrect, outlineColor) : outlineColor;
|
|
126
|
+
var outlineWidth = this.getOutlineWidth(showCorrectEnabled, selected, markAsCorrect, strokeWidth);
|
|
134
127
|
var pointsParsed = this.parsePointsForKonva(points);
|
|
135
128
|
var center = this.getPolygonCenter(points);
|
|
136
129
|
var iconX = center[0];
|
|
137
|
-
var iconY = center[1]; //
|
|
138
|
-
// Correctly
|
|
139
|
-
//
|
|
140
|
-
// Incorrectly
|
|
130
|
+
var iconY = center[1]; // "Show Correct Answer" Enabled:
|
|
131
|
+
// - Correctly Selected: white checkmark in green circle
|
|
132
|
+
// - Correctly Not Selected: none
|
|
133
|
+
// - Incorrectly Selected: none
|
|
134
|
+
// - Incorrectly Not Selected: white checkmark in green circle
|
|
135
|
+
// "Show Correct Answer" Disabled:
|
|
136
|
+
// - Correctly Selected:
|
|
137
|
+
// - white checkmark in green circle
|
|
138
|
+
// - heavy outline, as on “Gather”
|
|
139
|
+
// - Correctly Not Selected: none
|
|
140
|
+
// - Incorrectly Selected:
|
|
141
|
+
// - white "X" in red circle
|
|
142
|
+
// - heavy outline around the selection should appear in red
|
|
143
|
+
// - Incorrectly Not Selected: white "X" in red circle
|
|
141
144
|
|
|
142
145
|
var iconSrc;
|
|
143
146
|
|
|
144
|
-
if (
|
|
145
|
-
if (isCorrect) {
|
|
147
|
+
if (showCorrectEnabled) {
|
|
148
|
+
if (selected && isCorrect || !selected && !isCorrect) {
|
|
146
149
|
iconSrc = _icons.faCorrect;
|
|
147
|
-
}
|
|
150
|
+
}
|
|
151
|
+
} else {
|
|
152
|
+
if (selected) {
|
|
153
|
+
if (isCorrect) {
|
|
154
|
+
iconSrc = _icons.faCorrect;
|
|
155
|
+
} else {
|
|
156
|
+
iconSrc = _icons.faWrong;
|
|
157
|
+
}
|
|
158
|
+
} else if (!isCorrect) {
|
|
148
159
|
iconSrc = _icons.faWrong;
|
|
149
160
|
}
|
|
150
|
-
} else if (!isCorrect) {
|
|
151
|
-
iconSrc = _icons.faWrong;
|
|
152
161
|
}
|
|
153
162
|
|
|
154
|
-
return /*#__PURE__*/_react["default"].createElement(_reactKonva.Group,
|
|
163
|
+
return /*#__PURE__*/_react["default"].createElement(_reactKonva.Group, {
|
|
164
|
+
scaleX: scale,
|
|
165
|
+
scaleY: scale
|
|
166
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactKonva.Line, {
|
|
155
167
|
points: pointsParsed,
|
|
156
168
|
closed: true,
|
|
157
169
|
classes: classes.base,
|
|
@@ -166,7 +178,8 @@ var PolygonComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
166
178
|
}), isEvaluateMode && iconSrc ? /*#__PURE__*/_react["default"].createElement(_image["default"], {
|
|
167
179
|
src: iconSrc,
|
|
168
180
|
x: iconX,
|
|
169
|
-
y: iconY
|
|
181
|
+
y: iconY,
|
|
182
|
+
tooltip: evaluateText
|
|
170
183
|
}) : null);
|
|
171
184
|
}
|
|
172
185
|
}]);
|
|
@@ -194,10 +207,16 @@ PolygonComponent.propTypes = {
|
|
|
194
207
|
outlineColor: _propTypes["default"].string.isRequired,
|
|
195
208
|
points: _propTypes["default"].array.isRequired,
|
|
196
209
|
selected: _propTypes["default"].bool.isRequired,
|
|
197
|
-
|
|
210
|
+
evaluateText: _propTypes["default"].string,
|
|
211
|
+
strokeWidth: _propTypes["default"].number,
|
|
212
|
+
scale: _propTypes["default"].number,
|
|
213
|
+
markAsCorrect: _propTypes["default"].bool.isRequired,
|
|
214
|
+
showCorrectEnabled: _propTypes["default"].bool.isRequired
|
|
198
215
|
};
|
|
199
216
|
PolygonComponent.defaultProps = {
|
|
200
|
-
|
|
217
|
+
evaluateText: null,
|
|
218
|
+
strokeWidth: 5,
|
|
219
|
+
scale: 1
|
|
201
220
|
};
|
|
202
221
|
|
|
203
222
|
var _default = (0, _styles.withStyles)(styles)(PolygonComponent);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hotspot/polygon.jsx"],"names":["PolygonComponent","props","points","x","map","y","minX","Math","min","apply","maxX","max","minY","maxY","parsedPoints","forEach","push","e","onClick","id","selected","disabled","cancelBubble","document","body","style","cursor","isCorrect","outlineColor","strokeWidth","classes","hotspotColor","isEvaluateMode","outlineColorParsed","getEvaluateOutlineColor","outlineWidth","getOutlineWidth","pointsParsed","parsePointsForKonva","center","getPolygonCenter","iconX","iconY","iconSrc","faCorrect","faWrong","base","handleClick","handleMouseLeave","handleMouseEnter","React","Component","styles","opacity","position","propTypes","PropTypes","object","isRequired","string","bool","func","array","number","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Line, Group } from 'react-konva';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Image from './image';\nimport { faCorrect, faWrong } from './icons';\n\nclass PolygonComponent extends React.Component {\n constructor(props) {\n super(props);\n }\n\n getPolygonCenter = (points) => {\n const x = points.map(({ x }) => x);\n const y = points.map(({ y }) => y);\n const minX = Math.min.apply (null, x);\n const maxX = Math.max.apply (null, x);\n const minY = Math.min.apply (null, y);\n const maxY = Math.max.apply (null, y);\n return [(minX + maxX) / 2, (minY + maxY) / 2];\n };\n\n parsePointsForKonva = (points) => {\n const parsedPoints = [];\n points.forEach(({ x, y }) => {\n parsedPoints.push(x);\n parsedPoints.push(y);\n });\n return parsedPoints;\n };\n\n handleClick = (e) => {\n const { onClick, id, selected, disabled } = this.props;\n\n if (!disabled) {\n e.cancelBubble = true;\n onClick({ id, selected: !selected });\n }\n };\n\n handleMouseEnter = () => {\n const { disabled } = this.props;\n\n if (!disabled) {\n document.body.style.cursor = 'pointer';\n }\n };\n\n handleMouseLeave = () => {\n document.body.style.cursor = 'default';\n };\n\n getEvaluateOutlineColor = (isCorrect, outlineColor) => isCorrect ? outlineColor : 'red';\n\n getOutlineWidth = (selected, strokeWidth) => selected ? strokeWidth : 0;\n\n getEvaluateText = (isCorrect, selected) => {\n if (selected && isCorrect) {\n return 'Correctly\\nselected';\n } else if (selected && !isCorrect) {\n return 'Incorrectly\\nselected';\n } else if (!selected && isCorrect) {\n return 'Correctly\\nunselected';\n }\n return 'Incorrectly\\nunselected';\n };\n\n render() {\n const {\n classes,\n hotspotColor,\n isCorrect,\n isEvaluateMode,\n outlineColor,\n selected,\n points,\n strokeWidth\n } = this.props;\n\n const outlineColorParsed = isEvaluateMode\n ? this.getEvaluateOutlineColor(isCorrect, outlineColor)\n : outlineColor;\n const outlineWidth = this.getOutlineWidth(selected, strokeWidth);\n\n const pointsParsed = this.parsePointsForKonva(points);\n const center = this.getPolygonCenter(points);\n const iconX = center[0];\n const iconY = center[1];\n\n // Correctly selected hotspot: white checkmark in green circle (plus the selected hotspot will have a heavy outline, as on “Gather”)\n // Correctly not selected hotspot: none\n // Incorrectly selected hostpot: white “X” in red circle, plus the heavy outline around the selection should appear in red\n // Incorrectly not selected hotspot: white “X” in red circle\n let iconSrc;\n\n if (selected) {\n if (isCorrect) {\n iconSrc = faCorrect;\n } else {\n iconSrc = faWrong;\n }\n } else if (!isCorrect) {\n iconSrc = faWrong;\n }\n\n return (\n <Group>\n <Line\n points={pointsParsed}\n closed={true}\n classes={classes.base}\n fill={hotspotColor}\n onClick={this.handleClick}\n onTap={this.handleClick}\n draggable={false}\n stroke={outlineColorParsed}\n strokeWidth={outlineWidth}\n onMouseLeave={this.handleMouseLeave}\n onMouseEnter={this.handleMouseEnter}\n />\n {(isEvaluateMode && iconSrc) ? (\n <Image\n src={iconSrc}\n x={iconX}\n y={iconY}\n />\n ): null}\n </Group>\n );\n }\n}\n\nconst styles = () => ({\n base: {\n cursor: 'pointer',\n opacity: 0.5,\n position: 'relative'\n },\n});\n\nPolygonComponent.propTypes = {\n classes: PropTypes.object.isRequired,\n hotspotColor: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n isCorrect: PropTypes.bool.isRequired,\n isEvaluateMode: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n outlineColor: PropTypes.string.isRequired,\n points: PropTypes.array.isRequired,\n selected: PropTypes.bool.isRequired,\n strokeWidth: PropTypes.number\n};\n\nPolygonComponent.defaultProps = {\n strokeWidth: 5\n};\n\nexport default withStyles(styles)(PolygonComponent);\n"],"file":"polygon.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/hotspot/polygon.jsx"],"names":["PolygonComponent","props","points","x","map","y","minX","Math","min","apply","maxX","max","minY","maxY","parsedPoints","forEach","push","e","onClick","id","selected","disabled","cancelBubble","document","body","style","cursor","isCorrect","markAsCorrect","outlineColor","showCorrectEnabled","strokeWidth","classes","hotspotColor","isEvaluateMode","evaluateText","scale","outlineColorParsed","getEvaluateOutlineColor","outlineWidth","getOutlineWidth","pointsParsed","parsePointsForKonva","center","getPolygonCenter","iconX","iconY","iconSrc","faCorrect","faWrong","base","handleClick","handleMouseLeave","handleMouseEnter","React","Component","styles","opacity","position","propTypes","PropTypes","object","isRequired","string","bool","func","array","number","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Line, Group } from 'react-konva';\nimport { withStyles } from '@material-ui/core/styles';\n\nimport Image from './image';\nimport { faCorrect, faWrong } from './icons';\n\nclass PolygonComponent extends React.Component {\n constructor(props) {\n super(props);\n }\n\n getPolygonCenter = (points) => {\n const x = points.map(({ x }) => x);\n const y = points.map(({ y }) => y);\n const minX = Math.min.apply(null, x);\n const maxX = Math.max.apply(null, x);\n const minY = Math.min.apply(null, y);\n const maxY = Math.max.apply(null, y);\n return [(minX + maxX) / 2, (minY + maxY) / 2];\n };\n\n parsePointsForKonva = (points) => {\n const parsedPoints = [];\n points.forEach(({ x, y }) => {\n parsedPoints.push(x);\n parsedPoints.push(y);\n });\n return parsedPoints;\n };\n\n handleClick = (e) => {\n const { onClick, id, selected, disabled } = this.props;\n\n if (!disabled) {\n e.cancelBubble = true;\n onClick({ id, selected: !selected });\n }\n };\n\n handleMouseEnter = () => {\n const { disabled } = this.props;\n\n if (!disabled) {\n document.body.style.cursor = 'pointer';\n }\n };\n\n handleMouseLeave = () => {\n document.body.style.cursor = 'default';\n };\n\n getEvaluateOutlineColor = (isCorrect, markAsCorrect, outlineColor) =>\n markAsCorrect ? 'green' : isCorrect ? outlineColor : 'red';\n\n getOutlineWidth = (showCorrectEnabled, selected, markAsCorrect, strokeWidth) =>\n markAsCorrect || (!markAsCorrect && !showCorrectEnabled && selected) ? strokeWidth : 0;\n\n render() {\n const {\n classes,\n hotspotColor,\n isCorrect,\n isEvaluateMode,\n outlineColor,\n selected,\n points,\n evaluateText,\n strokeWidth,\n scale,\n markAsCorrect,\n showCorrectEnabled,\n } = this.props;\n\n const outlineColorParsed = isEvaluateMode\n ? this.getEvaluateOutlineColor(isCorrect, markAsCorrect, outlineColor)\n : outlineColor;\n const outlineWidth = this.getOutlineWidth(showCorrectEnabled, selected, markAsCorrect, strokeWidth);\n\n const pointsParsed = this.parsePointsForKonva(points);\n const center = this.getPolygonCenter(points);\n const iconX = center[0];\n const iconY = center[1];\n\n // \"Show Correct Answer\" Enabled:\n // - Correctly Selected: white checkmark in green circle\n // - Correctly Not Selected: none\n // - Incorrectly Selected: none\n // - Incorrectly Not Selected: white checkmark in green circle\n // \"Show Correct Answer\" Disabled:\n // - Correctly Selected:\n // - white checkmark in green circle\n // - heavy outline, as on “Gather”\n // - Correctly Not Selected: none\n // - Incorrectly Selected:\n // - white \"X\" in red circle\n // - heavy outline around the selection should appear in red\n // - Incorrectly Not Selected: white \"X\" in red circle\n let iconSrc;\n\n if (showCorrectEnabled) {\n if ((selected && isCorrect) || (!selected && !isCorrect)) {\n iconSrc = faCorrect;\n }\n } else {\n if (selected) {\n if (isCorrect) {\n iconSrc = faCorrect;\n } else {\n iconSrc = faWrong;\n }\n } else if (!isCorrect) {\n iconSrc = faWrong;\n }\n }\n\n return (\n <Group scaleX={scale} scaleY={scale}>\n <Line\n points={pointsParsed}\n closed={true}\n classes={classes.base}\n fill={hotspotColor}\n onClick={this.handleClick}\n onTap={this.handleClick}\n draggable={false}\n stroke={outlineColorParsed}\n strokeWidth={outlineWidth}\n onMouseLeave={this.handleMouseLeave}\n onMouseEnter={this.handleMouseEnter}\n />\n {isEvaluateMode && iconSrc ? <Image src={iconSrc} x={iconX} y={iconY} tooltip={evaluateText} /> : null}\n </Group>\n );\n }\n}\n\nconst styles = () => ({\n base: {\n cursor: 'pointer',\n opacity: 0.5,\n position: 'relative',\n },\n});\n\nPolygonComponent.propTypes = {\n classes: PropTypes.object.isRequired,\n hotspotColor: PropTypes.string.isRequired,\n id: PropTypes.string.isRequired,\n isCorrect: PropTypes.bool.isRequired,\n isEvaluateMode: PropTypes.bool.isRequired,\n disabled: PropTypes.bool.isRequired,\n onClick: PropTypes.func.isRequired,\n outlineColor: PropTypes.string.isRequired,\n points: PropTypes.array.isRequired,\n selected: PropTypes.bool.isRequired,\n evaluateText: PropTypes.string,\n strokeWidth: PropTypes.number,\n scale: PropTypes.number,\n markAsCorrect: PropTypes.bool.isRequired,\n showCorrectEnabled: PropTypes.bool.isRequired,\n};\n\nPolygonComponent.defaultProps = {\n evaluateText: null,\n strokeWidth: 5,\n scale: 1,\n};\n\nexport default withStyles(styles)(PolygonComponent);\n"],"file":"polygon.js"}
|
package/lib/hotspot/rectangle.js
CHANGED
|
@@ -35,7 +35,7 @@ var _icons = require("./icons");
|
|
|
35
35
|
|
|
36
36
|
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); }; }
|
|
37
37
|
|
|
38
|
-
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try {
|
|
38
|
+
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; } }
|
|
39
39
|
|
|
40
40
|
var RectComponent = /*#__PURE__*/function (_React$Component) {
|
|
41
41
|
(0, _inherits2["default"])(RectComponent, _React$Component);
|
|
@@ -72,22 +72,11 @@ var RectComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
72
72
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleMouseLeave", function () {
|
|
73
73
|
document.body.style.cursor = 'default';
|
|
74
74
|
});
|
|
75
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getEvaluateOutlineColor", function (isCorrect, outlineColor) {
|
|
76
|
-
return isCorrect ? outlineColor : 'red';
|
|
75
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getEvaluateOutlineColor", function (isCorrect, markAsCorrect, outlineColor) {
|
|
76
|
+
return markAsCorrect ? 'green' : isCorrect ? outlineColor : 'red';
|
|
77
77
|
});
|
|
78
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getOutlineWidth", function (selected, strokeWidth) {
|
|
79
|
-
return selected ? strokeWidth : 0;
|
|
80
|
-
});
|
|
81
|
-
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getEvaluateText", function (isCorrect, selected) {
|
|
82
|
-
if (selected && isCorrect) {
|
|
83
|
-
return 'Correctly\nselected';
|
|
84
|
-
} else if (selected && !isCorrect) {
|
|
85
|
-
return 'Incorrectly\nselected';
|
|
86
|
-
} else if (!selected && isCorrect) {
|
|
87
|
-
return 'Correctly\nunselected';
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
return 'Incorrectly\nunselected';
|
|
78
|
+
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "getOutlineWidth", function (showCorrectEnabled, selected, markAsCorrect, strokeWidth) {
|
|
79
|
+
return markAsCorrect || !markAsCorrect && !showCorrectEnabled && selected ? strokeWidth : 0;
|
|
91
80
|
});
|
|
92
81
|
return _this;
|
|
93
82
|
}
|
|
@@ -106,28 +95,51 @@ var RectComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
106
95
|
width = _this$props2.width,
|
|
107
96
|
x = _this$props2.x,
|
|
108
97
|
y = _this$props2.y,
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
98
|
+
evaluateText = _this$props2.evaluateText,
|
|
99
|
+
strokeWidth = _this$props2.strokeWidth,
|
|
100
|
+
scale = _this$props2.scale,
|
|
101
|
+
markAsCorrect = _this$props2.markAsCorrect,
|
|
102
|
+
showCorrectEnabled = _this$props2.showCorrectEnabled;
|
|
103
|
+
var outlineColorParsed = isEvaluateMode ? this.getEvaluateOutlineColor(isCorrect, markAsCorrect, outlineColor) : outlineColor;
|
|
104
|
+
var outlineWidth = this.getOutlineWidth(showCorrectEnabled, selected, markAsCorrect, strokeWidth);
|
|
112
105
|
var iconX = x + width / 2 - 10;
|
|
113
|
-
var iconY = y + height / 2 - 10; //
|
|
114
|
-
// Correctly
|
|
115
|
-
//
|
|
116
|
-
// Incorrectly
|
|
106
|
+
var iconY = y + height / 2 - 10; // "Show Correct Answer" Enabled:
|
|
107
|
+
// - Correctly Selected: white checkmark in green circle
|
|
108
|
+
// - Correctly Not Selected: none
|
|
109
|
+
// - Incorrectly Selected: none
|
|
110
|
+
// - Incorrectly Not Selected: white checkmark in green circle
|
|
111
|
+
// "Show Correct Answer" Disabled:
|
|
112
|
+
// - Correctly Selected:
|
|
113
|
+
// - white checkmark in green circle
|
|
114
|
+
// - heavy outline, as on “Gather”
|
|
115
|
+
// - Correctly Not Selected: none
|
|
116
|
+
// - Incorrectly Selected:
|
|
117
|
+
// - white "X" in red circle
|
|
118
|
+
// - heavy outline around the selection should appear in red
|
|
119
|
+
// - Incorrectly Not Selected: white "X" in red circle
|
|
117
120
|
|
|
118
121
|
var iconSrc;
|
|
119
122
|
|
|
120
|
-
if (
|
|
121
|
-
if (isCorrect) {
|
|
123
|
+
if (showCorrectEnabled) {
|
|
124
|
+
if (selected && isCorrect || !selected && !isCorrect) {
|
|
122
125
|
iconSrc = _icons.faCorrect;
|
|
123
|
-
}
|
|
126
|
+
}
|
|
127
|
+
} else {
|
|
128
|
+
if (selected) {
|
|
129
|
+
if (isCorrect) {
|
|
130
|
+
iconSrc = _icons.faCorrect;
|
|
131
|
+
} else {
|
|
132
|
+
iconSrc = _icons.faWrong;
|
|
133
|
+
}
|
|
134
|
+
} else if (!isCorrect) {
|
|
124
135
|
iconSrc = _icons.faWrong;
|
|
125
136
|
}
|
|
126
|
-
} else if (!isCorrect) {
|
|
127
|
-
iconSrc = _icons.faWrong;
|
|
128
137
|
}
|
|
129
138
|
|
|
130
|
-
return /*#__PURE__*/_react["default"].createElement(_reactKonva.Group,
|
|
139
|
+
return /*#__PURE__*/_react["default"].createElement(_reactKonva.Group, {
|
|
140
|
+
scaleX: scale,
|
|
141
|
+
scaleY: scale
|
|
142
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactKonva.Rect, {
|
|
131
143
|
classes: classes.base,
|
|
132
144
|
width: width,
|
|
133
145
|
height: height,
|
|
@@ -144,7 +156,8 @@ var RectComponent = /*#__PURE__*/function (_React$Component) {
|
|
|
144
156
|
}), isEvaluateMode && iconSrc ? /*#__PURE__*/_react["default"].createElement(_image["default"], {
|
|
145
157
|
src: iconSrc,
|
|
146
158
|
x: iconX,
|
|
147
|
-
y: iconY
|
|
159
|
+
y: iconY,
|
|
160
|
+
tooltip: evaluateText
|
|
148
161
|
}) : null);
|
|
149
162
|
}
|
|
150
163
|
}]);
|
|
@@ -175,11 +188,17 @@ RectComponent.propTypes = {
|
|
|
175
188
|
width: _propTypes["default"].number.isRequired,
|
|
176
189
|
x: _propTypes["default"].number.isRequired,
|
|
177
190
|
y: _propTypes["default"].number.isRequired,
|
|
178
|
-
|
|
191
|
+
evaluateText: _propTypes["default"].string,
|
|
192
|
+
strokeWidth: _propTypes["default"].number,
|
|
193
|
+
scale: _propTypes["default"].number,
|
|
194
|
+
markAsCorrect: _propTypes["default"].bool.isRequired,
|
|
195
|
+
showCorrectEnabled: _propTypes["default"].bool.isRequired
|
|
179
196
|
};
|
|
180
197
|
RectComponent.defaultProps = {
|
|
181
198
|
isCorrect: false,
|
|
182
|
-
|
|
199
|
+
evaluateText: null,
|
|
200
|
+
strokeWidth: 5,
|
|
201
|
+
scale: 1
|
|
183
202
|
};
|
|
184
203
|
|
|
185
204
|
var _default = (0, _styles.withStyles)(styles)(RectComponent);
|