@pie-lib/editable-html 10.0.0-beta.4 → 10.0.0-beta.6
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 +255 -152
- package/lib/components.js +15 -39
- package/lib/components.js.map +1 -1
- package/lib/editor.js +200 -356
- package/lib/editor.js.map +1 -1
- package/lib/index.js +25 -49
- package/lib/index.js.map +1 -1
- package/lib/new-serialization.js +31 -71
- package/lib/new-serialization.js.map +1 -1
- package/lib/parse-html.js +7 -6
- package/lib/parse-html.js.map +1 -1
- package/lib/plugins/characters/custom-popper.js +3 -13
- package/lib/plugins/characters/custom-popper.js.map +1 -1
- package/lib/plugins/characters/index.js +20 -59
- package/lib/plugins/characters/index.js.map +1 -1
- package/lib/plugins/characters/utils.js +1 -1
- package/lib/plugins/characters/utils.js.map +1 -1
- package/lib/plugins/hotKeys/index.js +9 -16
- package/lib/plugins/hotKeys/index.js.map +1 -1
- package/lib/plugins/image/alt-dialog.js +6 -27
- package/lib/plugins/image/alt-dialog.js.map +1 -1
- package/lib/plugins/image/component.js +42 -99
- package/lib/plugins/image/component.js.map +1 -1
- package/lib/plugins/image/image-toolbar.js +14 -50
- package/lib/plugins/image/image-toolbar.js.map +1 -1
- package/lib/plugins/image/index.js +16 -59
- package/lib/plugins/image/index.js.map +1 -1
- package/lib/plugins/image/insert-image-handler.js +13 -25
- package/lib/plugins/image/insert-image-handler.js.map +1 -1
- package/lib/plugins/index.js +6 -36
- package/lib/plugins/index.js.map +1 -1
- package/lib/plugins/list/index.js +11 -46
- package/lib/plugins/list/index.js.map +1 -1
- package/lib/plugins/math/index.js +89 -93
- package/lib/plugins/math/index.js.map +1 -1
- package/lib/plugins/media/index.js +32 -109
- package/lib/plugins/media/index.js.map +1 -1
- package/lib/plugins/media/media-dialog.js +107 -195
- package/lib/plugins/media/media-dialog.js.map +1 -1
- package/lib/plugins/media/media-toolbar.js +7 -27
- package/lib/plugins/media/media-toolbar.js.map +1 -1
- package/lib/plugins/media/media-wrapper.js +9 -14
- package/lib/plugins/media/media-wrapper.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +13 -53
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +1 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +6 -20
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +1 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +5 -10
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +1 -1
- package/lib/plugins/respArea/icons/index.js +16 -31
- package/lib/plugins/respArea/icons/index.js.map +1 -1
- package/lib/plugins/respArea/index.js +7 -54
- package/lib/plugins/respArea/index.js.map +1 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +3 -10
- package/lib/plugins/respArea/inline-dropdown/index.js.map +1 -1
- package/lib/plugins/respArea/utils.js +6 -21
- package/lib/plugins/respArea/utils.js.map +1 -1
- package/lib/plugins/table/icons/index.js +1 -8
- package/lib/plugins/table/icons/index.js.map +1 -1
- package/lib/plugins/table/index.js +54 -187
- package/lib/plugins/table/index.js.map +1 -1
- package/lib/plugins/table/table-toolbar.js +12 -44
- package/lib/plugins/table/table-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/default-toolbar.js +17 -46
- package/lib/plugins/toolbar/default-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/done-button.js +2 -10
- package/lib/plugins/toolbar/done-button.js.map +1 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +134 -144
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +1 -1
- package/lib/plugins/toolbar/index.js +2 -6
- package/lib/plugins/toolbar/index.js.map +1 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +9 -40
- package/lib/plugins/toolbar/toolbar-buttons.js.map +1 -1
- package/lib/plugins/toolbar/toolbar.js +29 -83
- package/lib/plugins/toolbar/toolbar.js.map +1 -1
- package/lib/plugins/utils.js +8 -30
- package/lib/plugins/utils.js.map +1 -1
- package/lib/serialization.js +11 -69
- package/lib/serialization.js.map +1 -1
- package/lib/test-serializer.js +5 -56
- package/lib/test-serializer.js.map +1 -1
- package/lib/theme.js +1 -1
- package/lib/theme.js.map +1 -1
- package/package.json +7 -7
- package/playground/image/data.js +20 -20
- package/playground/image/index.html +20 -22
- package/playground/image/index.jsx +10 -12
- package/playground/index.html +23 -25
- package/playground/mathquill/index.html +20 -23
- package/playground/mathquill/index.jsx +22 -18
- package/playground/prod-test/index.html +20 -24
- package/playground/prod-test/index.jsx +3 -5
- package/playground/schema-override/data.js +10 -10
- package/playground/schema-override/image-plugin.jsx +4 -3
- package/playground/schema-override/index.html +19 -21
- package/playground/schema-override/index.jsx +14 -13
- package/playground/serialization/data.js +10 -10
- package/playground/serialization/image-plugin.jsx +4 -3
- package/playground/serialization/index.html +20 -22
- package/playground/table-examples.html +8 -5
- package/playground/webpack.config.js +10 -10
- package/src/editor.jsx +108 -104
- package/src/index.jsx +20 -13
- package/src/new-serialization.jsx +30 -11
- package/src/parse-html.js +1 -1
- package/src/plugins/characters/custom-popper.js +7 -7
- package/src/plugins/characters/index.jsx +34 -23
- package/src/plugins/characters/utils.js +81 -81
- package/src/plugins/image/alt-dialog.jsx +5 -4
- package/src/plugins/image/component.jsx +47 -44
- package/src/plugins/image/image-toolbar.jsx +19 -27
- package/src/plugins/image/index.jsx +24 -18
- package/src/plugins/image/insert-image-handler.js +9 -0
- package/src/plugins/index.jsx +7 -9
- package/src/plugins/list/index.jsx +7 -7
- package/src/plugins/math/index.jsx +71 -28
- package/src/plugins/media/index.jsx +7 -7
- package/src/plugins/media/media-dialog.js +63 -89
- package/src/plugins/media/media-toolbar.jsx +8 -8
- package/src/plugins/media/media-wrapper.jsx +8 -5
- package/src/plugins/respArea/drag-in-the-blank/choice.jsx +19 -21
- package/src/plugins/respArea/drag-in-the-blank/index.jsx +4 -4
- package/src/plugins/respArea/explicit-constructed-response/index.jsx +5 -4
- package/src/plugins/respArea/icons/index.jsx +14 -11
- package/src/plugins/respArea/index.jsx +9 -15
- package/src/plugins/respArea/inline-dropdown/index.jsx +6 -6
- package/src/plugins/respArea/utils.jsx +7 -3
- package/src/plugins/table/icons/index.jsx +11 -17
- package/src/plugins/table/index.jsx +14 -10
- package/src/plugins/table/table-toolbar.jsx +6 -6
- package/src/plugins/toolbar/default-toolbar.jsx +9 -9
- package/src/plugins/toolbar/done-button.jsx +4 -4
- package/src/plugins/toolbar/editor-and-toolbar.jsx +36 -33
- package/src/plugins/toolbar/index.jsx +3 -2
- package/src/plugins/toolbar/toolbar-buttons.jsx +11 -11
- package/src/plugins/toolbar/toolbar.jsx +6 -1
- package/src/plugins/utils.js +2 -2
- package/src/serialization.jsx +34 -32
- package/src/test-serializer.js +2 -9
- package/lib/old-serialization.js +0 -330
- package/lib/slate-editor.js +0 -302
- package/src/test-serializer.js.rej +0 -20
- package/yarn-error.log +0 -18318
|
@@ -1,39 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports["default"] = ResponseAreaPlugin;
|
|
9
8
|
exports.serialization = void 0;
|
|
10
|
-
|
|
11
9
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
|
-
|
|
13
10
|
var _react = _interopRequireDefault(require("react"));
|
|
14
|
-
|
|
15
11
|
var _slate = require("slate");
|
|
16
|
-
|
|
17
12
|
var _slateHyperscript = require("slate-hyperscript");
|
|
18
|
-
|
|
19
13
|
var _debug = _interopRequireDefault(require("debug"));
|
|
20
|
-
|
|
21
14
|
var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
22
|
-
|
|
23
15
|
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
24
|
-
|
|
25
16
|
var _isUndefined = _interopRequireDefault(require("lodash/isUndefined"));
|
|
26
|
-
|
|
27
17
|
var _inlineDropdown = _interopRequireDefault(require("./inline-dropdown"));
|
|
28
|
-
|
|
29
18
|
var _dragInTheBlank = _interopRequireDefault(require("./drag-in-the-blank"));
|
|
30
|
-
|
|
31
19
|
var _explicitConstructedResponse = _interopRequireDefault(require("./explicit-constructed-response"));
|
|
32
|
-
|
|
33
20
|
var _utils = require("./utils");
|
|
34
|
-
|
|
35
21
|
var _icons = require("./icons");
|
|
36
|
-
|
|
37
22
|
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:respArea');
|
|
38
23
|
var lastIndexMap = {};
|
|
39
24
|
var elTypesMap = {
|
|
@@ -42,12 +27,10 @@ var elTypesMap = {
|
|
|
42
27
|
'drag-in-the-blank': 'drag_in_the_blank'
|
|
43
28
|
};
|
|
44
29
|
var elTypesArray = Object.values(elTypesMap);
|
|
45
|
-
|
|
46
30
|
function ResponseAreaPlugin(opts) {
|
|
47
31
|
var isOfCurrentType = function isOfCurrentType(d) {
|
|
48
32
|
return d.type === opts.type || d.type === elTypesMap[opts.type];
|
|
49
33
|
};
|
|
50
|
-
|
|
51
34
|
var toolbar = {
|
|
52
35
|
icon: /*#__PURE__*/_react["default"].createElement(_icons.ToolbarIcon, null),
|
|
53
36
|
buttonStyles: {
|
|
@@ -60,8 +43,7 @@ function ResponseAreaPlugin(opts) {
|
|
|
60
43
|
reverse: true
|
|
61
44
|
})).map(function (_ref) {
|
|
62
45
|
var _ref2 = (0, _slicedToArray2["default"])(_ref, 1),
|
|
63
|
-
|
|
64
|
-
|
|
46
|
+
d = _ref2[0];
|
|
65
47
|
return d;
|
|
66
48
|
});
|
|
67
49
|
descendants.forEach(function (d) {
|
|
@@ -69,17 +51,14 @@ function ResponseAreaPlugin(opts) {
|
|
|
69
51
|
currentRespAreaList.push(d);
|
|
70
52
|
}
|
|
71
53
|
});
|
|
72
|
-
|
|
73
54
|
if (currentRespAreaList.length >= opts.maxResponseAreas) {
|
|
74
55
|
return;
|
|
75
56
|
}
|
|
76
|
-
|
|
77
57
|
var type = opts.type.replace(/-/g, '_');
|
|
78
58
|
var prevIndex = lastIndexMap[type];
|
|
79
59
|
var newIndex = !prevIndex ? 0 : prevIndex + 1;
|
|
80
60
|
var newInline = (0, _utils.getDefaultElement)(opts, newIndex);
|
|
81
61
|
lastIndexMap[type] += 1;
|
|
82
|
-
|
|
83
62
|
if (newInline) {
|
|
84
63
|
/* if (change.value.selection.startKey || change.value.selection.endKey) {
|
|
85
64
|
change.insertInline(newInline);
|
|
@@ -113,53 +92,43 @@ function ResponseAreaPlugin(opts) {
|
|
|
113
92
|
toolbar: toolbar,
|
|
114
93
|
rules: function rules(editor) {
|
|
115
94
|
var isVoid = editor.isVoid,
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
95
|
+
isInline = editor.isInline,
|
|
96
|
+
onChange = editor.onChange;
|
|
119
97
|
editor.isVoid = function (element) {
|
|
120
98
|
return elTypesArray.includes(element.type) ? true : isVoid(element);
|
|
121
99
|
};
|
|
122
|
-
|
|
123
100
|
editor.isInline = function (element) {
|
|
124
101
|
return elTypesArray.includes(element.type) ? true : isInline(element);
|
|
125
102
|
};
|
|
126
|
-
|
|
127
103
|
var oldEditor = (0, _cloneDeep["default"])(editor);
|
|
128
|
-
|
|
129
104
|
editor.onChange = function (options) {
|
|
130
105
|
var descendants = Array.from(_slate.Node.descendants(editor, {
|
|
131
106
|
reverse: true
|
|
132
107
|
})).map(function (_ref3) {
|
|
133
108
|
var _ref4 = (0, _slicedToArray2["default"])(_ref3, 1),
|
|
134
|
-
|
|
135
|
-
|
|
109
|
+
d = _ref4[0];
|
|
136
110
|
return d;
|
|
137
111
|
});
|
|
138
112
|
var type = opts.type.replace(/-/g, '_');
|
|
139
|
-
|
|
140
113
|
if ((0, _isUndefined["default"])(lastIndexMap[type])) {
|
|
141
114
|
lastIndexMap[type] = 0;
|
|
142
115
|
descendants.forEach(function (d) {
|
|
143
116
|
if (d.type === type) {
|
|
144
117
|
var newIndex = parseInt(d.data.index, 10);
|
|
145
|
-
|
|
146
118
|
if (newIndex > lastIndexMap[type]) {
|
|
147
119
|
lastIndexMap[type] = newIndex;
|
|
148
120
|
}
|
|
149
121
|
}
|
|
150
122
|
});
|
|
151
123
|
}
|
|
152
|
-
|
|
153
124
|
if ((0, _isEqual["default"])(editor, oldEditor)) {
|
|
154
125
|
return;
|
|
155
126
|
}
|
|
156
|
-
|
|
157
127
|
var oldDescendants = Array.from(_slate.Node.descendants(oldEditor, {
|
|
158
128
|
reverse: true
|
|
159
129
|
})).map(function (_ref5) {
|
|
160
130
|
var _ref6 = (0, _slicedToArray2["default"])(_ref5, 1),
|
|
161
|
-
|
|
162
|
-
|
|
131
|
+
d = _ref6[0];
|
|
163
132
|
return d;
|
|
164
133
|
});
|
|
165
134
|
var currentRespAreaList = descendants.filter(isOfCurrentType);
|
|
@@ -172,22 +141,18 @@ function ResponseAreaPlugin(opts) {
|
|
|
172
141
|
return e.data.index === d.data.index;
|
|
173
142
|
});
|
|
174
143
|
});
|
|
175
|
-
|
|
176
144
|
if (elementsWithChangedStatus.length && oldRespAreaList.length > currentRespAreaList.length) {
|
|
177
145
|
opts.onHandleAreaChange(elementsWithChangedStatus);
|
|
178
146
|
}
|
|
179
|
-
|
|
180
147
|
oldEditor = (0, _cloneDeep["default"])(editor);
|
|
181
148
|
onChange(options);
|
|
182
149
|
};
|
|
183
|
-
|
|
184
150
|
return editor;
|
|
185
151
|
},
|
|
186
152
|
filterPlugins: function filterPlugins(node, plugins) {
|
|
187
153
|
if (node.type === 'explicit_constructed_response' || node.type === 'drag_in_the_blank') {
|
|
188
154
|
return [];
|
|
189
155
|
}
|
|
190
|
-
|
|
191
156
|
return plugins.filter(function (p) {
|
|
192
157
|
return p.name !== 'response_area';
|
|
193
158
|
});
|
|
@@ -205,23 +170,19 @@ function ResponseAreaPlugin(opts) {
|
|
|
205
170
|
},
|
|
206
171
|
renderNode: function renderNode(props) {
|
|
207
172
|
var attributes = props.attributes,
|
|
208
|
-
|
|
209
|
-
|
|
173
|
+
node = props.node;
|
|
210
174
|
if (node.type === 'explicit_constructed_response') {
|
|
211
175
|
var data = node.data;
|
|
212
176
|
var error;
|
|
213
|
-
|
|
214
177
|
if (opts.error) {
|
|
215
178
|
error = opts.error();
|
|
216
179
|
}
|
|
217
|
-
|
|
218
180
|
return /*#__PURE__*/_react["default"].createElement(_explicitConstructedResponse["default"], {
|
|
219
181
|
attributes: attributes,
|
|
220
182
|
value: data.value,
|
|
221
183
|
error: error && error[data.index] && error[data.index][0]
|
|
222
184
|
}, props.children);
|
|
223
185
|
}
|
|
224
|
-
|
|
225
186
|
if (node.type === 'drag_in_the_blank') {
|
|
226
187
|
var _data = node.data;
|
|
227
188
|
return /*#__PURE__*/_react["default"].createElement(_dragInTheBlank["default"], {
|
|
@@ -232,7 +193,6 @@ function ResponseAreaPlugin(opts) {
|
|
|
232
193
|
opts: opts
|
|
233
194
|
}, props.children);
|
|
234
195
|
}
|
|
235
|
-
|
|
236
196
|
if (node.type === 'inline_dropdown') {
|
|
237
197
|
var _data2 = node.data;
|
|
238
198
|
return /*#__PURE__*/_react["default"].createElement(_inlineDropdown["default"], {
|
|
@@ -246,18 +206,15 @@ function ResponseAreaPlugin(opts) {
|
|
|
246
206
|
var inline = editor.value.document.findDescendant(function (d) {
|
|
247
207
|
return d.key === closestEl.dataset.key;
|
|
248
208
|
});
|
|
249
|
-
|
|
250
209
|
if (inline.type === 'drag_in_the_blank') {
|
|
251
210
|
return false;
|
|
252
211
|
}
|
|
253
212
|
}
|
|
254
213
|
};
|
|
255
214
|
}
|
|
256
|
-
|
|
257
215
|
var serialization = {
|
|
258
216
|
deserialize: function deserialize(el) {
|
|
259
217
|
var type = el.dataset && el.dataset.type;
|
|
260
|
-
|
|
261
218
|
switch (type) {
|
|
262
219
|
case 'inline_dropdown':
|
|
263
220
|
return (0, _slateHyperscript.jsx)('element', {
|
|
@@ -267,7 +224,6 @@ var serialization = {
|
|
|
267
224
|
value: el.dataset.value
|
|
268
225
|
}
|
|
269
226
|
});
|
|
270
|
-
|
|
271
227
|
case 'explicit_constructed_response':
|
|
272
228
|
return (0, _slateHyperscript.jsx)('element', {
|
|
273
229
|
type: 'explicit_constructed_response',
|
|
@@ -276,7 +232,6 @@ var serialization = {
|
|
|
276
232
|
value: el.dataset.value
|
|
277
233
|
}
|
|
278
234
|
});
|
|
279
|
-
|
|
280
235
|
case 'drag_in_the_blank':
|
|
281
236
|
return (0, _slateHyperscript.jsx)('element', {
|
|
282
237
|
type: 'drag_in_the_blank',
|
|
@@ -300,7 +255,6 @@ var serialization = {
|
|
|
300
255
|
"data-value": data.value
|
|
301
256
|
});
|
|
302
257
|
}
|
|
303
|
-
|
|
304
258
|
case 'explicit_constructed_response':
|
|
305
259
|
{
|
|
306
260
|
var _data3 = object.data;
|
|
@@ -310,7 +264,6 @@ var serialization = {
|
|
|
310
264
|
"data-value": _data3.value
|
|
311
265
|
});
|
|
312
266
|
}
|
|
313
|
-
|
|
314
267
|
case 'drag_in_the_blank':
|
|
315
268
|
{
|
|
316
269
|
var _data4 = object.data;
|
|
@@ -326,4 +279,4 @@ var serialization = {
|
|
|
326
279
|
}
|
|
327
280
|
};
|
|
328
281
|
exports.serialization = serialization;
|
|
329
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2ciLCJkZWJ1ZyIsImxhc3RJbmRleE1hcCIsImVsVHlwZXNNYXAiLCJlbFR5cGVzQXJyYXkiLCJPYmplY3QiLCJ2YWx1ZXMiLCJSZXNwb25zZUFyZWFQbHVnaW4iLCJvcHRzIiwiaXNPZkN1cnJlbnRUeXBlIiwiZCIsInR5cGUiLCJ0b29sYmFyIiwiaWNvbiIsImJ1dHRvblN0eWxlcyIsIm1hcmdpbiIsIm9uQ2xpY2siLCJlZGl0b3IiLCJjdXJyZW50UmVzcEFyZWFMaXN0IiwiZGVzY2VuZGFudHMiLCJBcnJheSIsImZyb20iLCJTbGF0ZU5vZGUiLCJyZXZlcnNlIiwibWFwIiwiZm9yRWFjaCIsInB1c2giLCJsZW5ndGgiLCJtYXhSZXNwb25zZUFyZWFzIiwicmVwbGFjZSIsInByZXZJbmRleCIsIm5ld0luZGV4IiwibmV3SW5saW5lIiwiZ2V0RGVmYXVsdEVsZW1lbnQiLCJpbnNlcnROb2RlIiwiY3VzdG9tVG9vbGJhciIsInJlc3BBcmVhVG9vbGJhciIsInNob3dEb25lIiwibmFtZSIsInJ1bGVzIiwiaXNWb2lkIiwiaXNJbmxpbmUiLCJvbkNoYW5nZSIsImVsZW1lbnQiLCJpbmNsdWRlcyIsIm9sZEVkaXRvciIsImNsb25lRGVlcCIsIm9wdGlvbnMiLCJpc1VuZGVmaW5lZCIsInBhcnNlSW50IiwiZGF0YSIsImluZGV4IiwiaXNFcXVhbCIsIm9sZERlc2NlbmRhbnRzIiwiZmlsdGVyIiwib2xkUmVzcEFyZWFMaXN0IiwiZGlzYWJsZWQiLCJhcnJheVRvRmlsdGVyIiwiYXJyYXlUb1VzZUZvckZpbHRlciIsImVsZW1lbnRzV2l0aENoYW5nZWRTdGF0dXMiLCJmaW5kIiwiZSIsIm9uSGFuZGxlQXJlYUNoYW5nZSIsImZpbHRlclBsdWdpbnMiLCJub2RlIiwicGx1Z2lucyIsInAiLCJkZWxldGVOb2RlIiwibm9kZVBhdGgiLCJwcmV2ZW50RGVmYXVsdCIsImFwcGx5IiwicGF0aCIsInN1cHBvcnRzIiwiaW5kZXhPZiIsInJlbmRlck5vZGUiLCJwcm9wcyIsImF0dHJpYnV0ZXMiLCJlcnJvciIsInZhbHVlIiwiY2hpbGRyZW4iLCJvbkRyb3AiLCJldmVudCIsImNoYW5nZSIsImNsb3Nlc3RFbCIsInRhcmdldCIsImNsb3Nlc3QiLCJpbmxpbmUiLCJkb2N1bWVudCIsImZpbmREZXNjZW5kYW50Iiwia2V5IiwiZGF0YXNldCIsInNlcmlhbGl6YXRpb24iLCJkZXNlcmlhbGl6ZSIsImVsIiwianN4IiwiaWQiLCJpblRhYmxlIiwic2VyaWFsaXplIiwib2JqZWN0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BsdWdpbnMvcmVzcEFyZWEvaW5kZXguanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBOb2RlIGFzIFNsYXRlTm9kZSB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IGpzeCB9IGZyb20gJ3NsYXRlLWh5cGVyc2NyaXB0JztcbmltcG9ydCBkZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5cbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgaXNVbmRlZmluZWQgZnJvbSAnbG9kYXNoL2lzVW5kZWZpbmVkJztcbmltcG9ydCBJbmxpbmVEcm9wZG93biBmcm9tICcuL2lubGluZS1kcm9wZG93bic7XG5pbXBvcnQgRHJhZ0luVGhlQmxhbmsgZnJvbSAnLi9kcmFnLWluLXRoZS1ibGFuayc7XG5pbXBvcnQgRXhwbGljaXRDb25zdHJ1Y3RlZFJlc3BvbnNlIGZyb20gJy4vZXhwbGljaXQtY29uc3RydWN0ZWQtcmVzcG9uc2UnO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdEVsZW1lbnQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFRvb2xiYXJJY29uIH0gZnJvbSAnLi9pY29ucyc7XG5cbmNvbnN0IGxvZyA9IGRlYnVnKCdAcGllLWxpYjplZGl0YWJsZS1odG1sOnBsdWdpbnM6cmVzcEFyZWEnKTtcblxuY29uc3QgbGFzdEluZGV4TWFwID0ge307XG5jb25zdCBlbFR5cGVzTWFwID0ge1xuICAnaW5saW5lLWRyb3Bkb3duJzogJ2lubGluZV9kcm9wZG93bicsXG4gICdleHBsaWNpdC1jb25zdHJ1Y3RlZC1yZXNwb25zZSc6ICdleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZScsXG4gICdkcmFnLWluLXRoZS1ibGFuayc6ICdkcmFnX2luX3RoZV9ibGFuaydcbn07XG5jb25zdCBlbFR5cGVzQXJyYXkgPSBPYmplY3QudmFsdWVzKGVsVHlwZXNNYXApO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBSZXNwb25zZUFyZWFQbHVnaW4ob3B0cykge1xuICBjb25zdCBpc09mQ3VycmVudFR5cGUgPSBkID0+IGQudHlwZSA9PT0gb3B0cy50eXBlIHx8IGQudHlwZSA9PT0gZWxUeXBlc01hcFtvcHRzLnR5cGVdO1xuXG4gIGNvbnN0IHRvb2xiYXIgPSB7XG4gICAgaWNvbjogPFRvb2xiYXJJY29uIC8+LFxuICAgIGJ1dHRvblN0eWxlczoge1xuICAgICAgbWFyZ2luOiAnMCAyMHB4IDAgYXV0bydcbiAgICB9LFxuICAgIG9uQ2xpY2s6IGVkaXRvciA9PiB7XG4gICAgICBsb2coJ1t0b29sYmFyXSBvbkNsaWNrJyk7XG4gICAgICBjb25zdCBjdXJyZW50UmVzcEFyZWFMaXN0ID0gW107XG4gICAgICBjb25zdCBkZXNjZW5kYW50cyA9IEFycmF5LmZyb20oU2xhdGVOb2RlLmRlc2NlbmRhbnRzKGVkaXRvciwgeyByZXZlcnNlOiB0cnVlIH0pKS5tYXAoXG4gICAgICAgIChbZF0pID0+IGRcbiAgICAgICk7XG5cbiAgICAgIGRlc2NlbmRhbnRzLmZvckVhY2goZCA9PiB7XG4gICAgICAgIGlmIChpc09mQ3VycmVudFR5cGUoZCkpIHtcbiAgICAgICAgICBjdXJyZW50UmVzcEFyZWFMaXN0LnB1c2goZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoY3VycmVudFJlc3BBcmVhTGlzdC5sZW5ndGggPj0gb3B0cy5tYXhSZXNwb25zZUFyZWFzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHlwZSA9IG9wdHMudHlwZS5yZXBsYWNlKC8tL2csICdfJyk7XG4gICAgICBjb25zdCBwcmV2SW5kZXggPSBsYXN0SW5kZXhNYXBbdHlwZV07XG4gICAgICBjb25zdCBuZXdJbmRleCA9ICFwcmV2SW5kZXggPyAwIDogcHJldkluZGV4ICsgMTtcbiAgICAgIGNvbnN0IG5ld0lubGluZSA9IGdldERlZmF1bHRFbGVtZW50KG9wdHMsIG5ld0luZGV4KTtcblxuICAgICAgbGFzdEluZGV4TWFwW3R5cGVdICs9IDE7XG5cbiAgICAgIGlmIChuZXdJbmxpbmUpIHtcbiAgICAgICAgLyogICAgICAgIGlmIChjaGFuZ2UudmFsdWUuc2VsZWN0aW9uLnN0YXJ0S2V5IHx8IGNoYW5nZS52YWx1ZS5zZWxlY3Rpb24uZW5kS2V5KSB7XG4gICAgICAgICAgY2hhbmdlLmluc2VydElubGluZShuZXdJbmxpbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIElmIHRoZSBtYXJrdXAgaXMgZW1wdHkgYW5kIHRoZXJlJ3Mgbm8gZm9jdXNcbiAgICAgICAgICBjb25zdCBsYXN0VGV4dCA9IHZhbHVlLmRvY3VtZW50LmdldExhc3RUZXh0KCk7XG5cbiAgICAgICAgICBpZiAoIWxhc3RUZXh0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB2YWx1ZS5kb2N1bWVudC5nZXRQYXJlbnQobGFzdFRleHQua2V5KTtcblxuICAgICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHBhcmVudE5vZGUubm9kZXMuaW5kZXhPZihsYXN0VGV4dC5rZXkpO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZS5pc1ZvaWQpIHJldHVybjtcblxuICAgICAgICAgICAgY2hhbmdlLmluc2VydE5vZGVCeUtleShwYXJlbnROb2RlLmtleSwgaW5kZXggKyAxLCBuZXdJbmxpbmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXdJbmxpbmUudHlwZSA9PT0gJ2RyYWdfaW5fdGhlX2JsYW5rJykge1xuICAgICAgICAgIGNvbnN0IG5leHRUZXh0ID0gY2hhbmdlLnZhbHVlLmRvY3VtZW50LmdldE5leHRUZXh0KG5ld0lubGluZS5rZXkpO1xuXG4gICAgICAgICAgaWYgKG5leHRUZXh0KSB7XG4gICAgICAgICAgICBjaGFuZ2UubW92ZUZvY3VzVG8obmV4dFRleHQua2V5LCAwKS5tb3ZlQW5jaG9yVG8obmV4dFRleHQua2V5LCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0qL1xuICAgICAgICBlZGl0b3IuaW5zZXJ0Tm9kZShuZXdJbmxpbmUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY3VzdG9tVG9vbGJhcjogb3B0cy5yZXNwQXJlYVRvb2xiYXIsXG4gICAgc2hvd0RvbmU6IGZhbHNlXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAncmVzcG9uc2VfYXJlYScsXG4gICAgdG9vbGJhcixcbiAgICBydWxlczogZWRpdG9yID0+IHtcbiAgICAgIGNvbnN0IHsgaXNWb2lkLCBpc0lubGluZSwgb25DaGFuZ2UgfSA9IGVkaXRvcjtcblxuICAgICAgZWRpdG9yLmlzVm9pZCA9IGVsZW1lbnQgPT4ge1xuICAgICAgICByZXR1cm4gZWxUeXBlc0FycmF5LmluY2x1ZGVzKGVsZW1lbnQudHlwZSkgPyB0cnVlIDogaXNWb2lkKGVsZW1lbnQpO1xuICAgICAgfTtcblxuICAgICAgZWRpdG9yLmlzSW5saW5lID0gZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBlbFR5cGVzQXJyYXkuaW5jbHVkZXMoZWxlbWVudC50eXBlKSA/IHRydWUgOiBpc0lubGluZShlbGVtZW50KTtcbiAgICAgIH07XG5cbiAgICAgIGxldCBvbGRFZGl0b3IgPSBjbG9uZURlZXAoZWRpdG9yKTtcblxuICAgICAgZWRpdG9yLm9uQ2hhbmdlID0gb3B0aW9ucyA9PiB7XG4gICAgICAgIGNvbnN0IGRlc2NlbmRhbnRzID0gQXJyYXkuZnJvbShTbGF0ZU5vZGUuZGVzY2VuZGFudHMoZWRpdG9yLCB7IHJldmVyc2U6IHRydWUgfSkpLm1hcChcbiAgICAgICAgICAoW2RdKSA9PiBkXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBvcHRzLnR5cGUucmVwbGFjZSgvLS9nLCAnXycpO1xuXG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChsYXN0SW5kZXhNYXBbdHlwZV0pKSB7XG4gICAgICAgICAgbGFzdEluZGV4TWFwW3R5cGVdID0gMDtcblxuICAgICAgICAgIGRlc2NlbmRhbnRzLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICBpZiAoZC50eXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0luZGV4ID0gcGFyc2VJbnQoZC5kYXRhLmluZGV4LCAxMCk7XG5cbiAgICAgICAgICAgICAgaWYgKG5ld0luZGV4ID4gbGFzdEluZGV4TWFwW3R5cGVdKSB7XG4gICAgICAgICAgICAgICAgbGFzdEluZGV4TWFwW3R5cGVdID0gbmV3SW5kZXg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0VxdWFsKGVkaXRvciwgb2xkRWRpdG9yKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9sZERlc2NlbmRhbnRzID0gQXJyYXkuZnJvbShTbGF0ZU5vZGUuZGVzY2VuZGFudHMob2xkRWRpdG9yLCB7IHJldmVyc2U6IHRydWUgfSkpLm1hcChcbiAgICAgICAgICAoW2RdKSA9PiBkXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRSZXNwQXJlYUxpc3QgPSBkZXNjZW5kYW50cy5maWx0ZXIoaXNPZkN1cnJlbnRUeXBlKTtcbiAgICAgICAgY29uc3Qgb2xkUmVzcEFyZWFMaXN0ID0gb2xkRGVzY2VuZGFudHMuZmlsdGVyKGlzT2ZDdXJyZW50VHlwZSk7XG5cbiAgICAgICAgdG9vbGJhci5kaXNhYmxlZCA9IGN1cnJlbnRSZXNwQXJlYUxpc3QubGVuZ3RoID49IG9wdHMubWF4UmVzcG9uc2VBcmVhcztcblxuICAgICAgICBjb25zdCBhcnJheVRvRmlsdGVyID1cbiAgICAgICAgICBvbGRSZXNwQXJlYUxpc3QubGVuZ3RoID4gY3VycmVudFJlc3BBcmVhTGlzdC5sZW5ndGhcbiAgICAgICAgICAgID8gb2xkUmVzcEFyZWFMaXN0XG4gICAgICAgICAgICA6IGN1cnJlbnRSZXNwQXJlYUxpc3Q7XG4gICAgICAgIGNvbnN0IGFycmF5VG9Vc2VGb3JGaWx0ZXIgPVxuICAgICAgICAgIGFycmF5VG9GaWx0ZXIgPT09IG9sZFJlc3BBcmVhTGlzdCA/IGN1cnJlbnRSZXNwQXJlYUxpc3QgOiBvbGRSZXNwQXJlYUxpc3Q7XG5cbiAgICAgICAgY29uc3QgZWxlbWVudHNXaXRoQ2hhbmdlZFN0YXR1cyA9IGFycmF5VG9GaWx0ZXIuZmlsdGVyKFxuICAgICAgICAgIGQgPT4gIWFycmF5VG9Vc2VGb3JGaWx0ZXIuZmluZChlID0+IGUuZGF0YS5pbmRleCA9PT0gZC5kYXRhLmluZGV4KVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBlbGVtZW50c1dpdGhDaGFuZ2VkU3RhdHVzLmxlbmd0aCAmJlxuICAgICAgICAgIG9sZFJlc3BBcmVhTGlzdC5sZW5ndGggPiBjdXJyZW50UmVzcEFyZWFMaXN0Lmxlbmd0aFxuICAgICAgICApIHtcbiAgICAgICAgICBvcHRzLm9uSGFuZGxlQXJlYUNoYW5nZShlbGVtZW50c1dpdGhDaGFuZ2VkU3RhdHVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9sZEVkaXRvciA9IGNsb25lRGVlcChlZGl0b3IpO1xuICAgICAgICBvbkNoYW5nZShvcHRpb25zKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBlZGl0b3I7XG4gICAgfSxcbiAgICBmaWx0ZXJQbHVnaW5zOiAobm9kZSwgcGx1Z2lucykgPT4ge1xuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ2V4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlJyB8fCBub2RlLnR5cGUgPT09ICdkcmFnX2luX3RoZV9ibGFuaycpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGx1Z2lucy5maWx0ZXIocCA9PiBwLm5hbWUgIT09ICdyZXNwb25zZV9hcmVhJyk7XG4gICAgfSxcbiAgICBkZWxldGVOb2RlOiAoZSwgbm9kZSwgbm9kZVBhdGgsIGVkaXRvciwgb25DaGFuZ2UpID0+IHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgZWRpdG9yLmFwcGx5KHtcbiAgICAgICAgdHlwZTogJ3JlbW92ZV9ub2RlJyxcbiAgICAgICAgcGF0aDogbm9kZVBhdGhcbiAgICAgIH0pO1xuXG4gICAgICBvbkNoYW5nZShlZGl0b3IpO1xuICAgIH0sXG4gICAgc3VwcG9ydHM6IG5vZGUgPT4gZWxUeXBlc0FycmF5LmluZGV4T2Yobm9kZS50eXBlKSA+PSAwLFxuICAgIHJlbmRlck5vZGUocHJvcHMpIHtcbiAgICAgIGNvbnN0IHsgYXR0cmlidXRlcywgbm9kZSB9ID0gcHJvcHM7XG5cbiAgICAgIGlmIChub2RlLnR5cGUgPT09ICdleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZScpIHtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBub2RlO1xuICAgICAgICBsZXQgZXJyb3I7XG5cbiAgICAgICAgaWYgKG9wdHMuZXJyb3IpIHtcbiAgICAgICAgICBlcnJvciA9IG9wdHMuZXJyb3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEV4cGxpY2l0Q29uc3RydWN0ZWRSZXNwb25zZVxuICAgICAgICAgICAgYXR0cmlidXRlcz17YXR0cmlidXRlc31cbiAgICAgICAgICAgIHZhbHVlPXtkYXRhLnZhbHVlfVxuICAgICAgICAgICAgZXJyb3I9e2Vycm9yICYmIGVycm9yW2RhdGEuaW5kZXhdICYmIGVycm9yW2RhdGEuaW5kZXhdWzBdfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICA8L0V4cGxpY2l0Q29uc3RydWN0ZWRSZXNwb25zZT5cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUudHlwZSA9PT0gJ2RyYWdfaW5fdGhlX2JsYW5rJykge1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IG5vZGU7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8RHJhZ0luVGhlQmxhbmtcbiAgICAgICAgICAgIGF0dHJpYnV0ZXM9e2F0dHJpYnV0ZXN9XG4gICAgICAgICAgICBkYXRhPXtkYXRhfVxuICAgICAgICAgICAgbj17bm9kZX1cbiAgICAgICAgICAgIG5vZGVQcm9wcz17cHJvcHN9XG4gICAgICAgICAgICBvcHRzPXtvcHRzfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICA8L0RyYWdJblRoZUJsYW5rPlxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS50eXBlID09PSAnaW5saW5lX2Ryb3Bkb3duJykge1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IG5vZGU7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8SW5saW5lRHJvcGRvd24gYXR0cmlidXRlcz17YXR0cmlidXRlc30gc2VsZWN0ZWRJdGVtPXtkYXRhLnZhbHVlfT5cbiAgICAgICAgICAgIHtwcm9wcy5jaGlsZHJlbn1cbiAgICAgICAgICA8L0lubGluZURyb3Bkb3duPlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0sXG4gICAgb25Ecm9wKGV2ZW50LCBjaGFuZ2UsIGVkaXRvcikge1xuICAgICAgY29uc3QgY2xvc2VzdEVsID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWtleV0nKTtcbiAgICAgIGNvbnN0IGlubGluZSA9IGVkaXRvci52YWx1ZS5kb2N1bWVudC5maW5kRGVzY2VuZGFudChkID0+IGQua2V5ID09PSBjbG9zZXN0RWwuZGF0YXNldC5rZXkpO1xuXG4gICAgICBpZiAoaW5saW5lLnR5cGUgPT09ICdkcmFnX2luX3RoZV9ibGFuaycpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6YXRpb24gPSB7XG4gIGRlc2VyaWFsaXplKGVsKSB7XG4gICAgY29uc3QgdHlwZSA9IGVsLmRhdGFzZXQgJiYgZWwuZGF0YXNldC50eXBlO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdpbmxpbmVfZHJvcGRvd24nOlxuICAgICAgICByZXR1cm4ganN4KCdlbGVtZW50Jywge1xuICAgICAgICAgIHR5cGU6ICdpbmxpbmVfZHJvcGRvd24nLFxuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBlbC5kYXRhc2V0LmluZGV4LFxuICAgICAgICAgICAgdmFsdWU6IGVsLmRhdGFzZXQudmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgY2FzZSAnZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2UnOlxuICAgICAgICByZXR1cm4ganN4KCdlbGVtZW50Jywge1xuICAgICAgICAgIHR5cGU6ICdleHBsaWNpdF9jb25zdHJ1Y3RlZF9yZXNwb25zZScsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGVsLmRhdGFzZXQuaW5kZXgsXG4gICAgICAgICAgICB2YWx1ZTogZWwuZGF0YXNldC52YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICBjYXNlICdkcmFnX2luX3RoZV9ibGFuayc6XG4gICAgICAgIHJldHVybiBqc3goJ2VsZW1lbnQnLCB7XG4gICAgICAgICAgdHlwZTogJ2RyYWdfaW5fdGhlX2JsYW5rJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBpbmRleDogZWwuZGF0YXNldC5pbmRleCxcbiAgICAgICAgICAgIGlkOiBlbC5kYXRhc2V0LmlkLFxuICAgICAgICAgICAgdmFsdWU6IGVsLmRhdGFzZXQudmFsdWUsXG4gICAgICAgICAgICBpblRhYmxlOiBlbC5kYXRhc2V0LmluVGFibGVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfSxcbiAgc2VyaWFsaXplKG9iamVjdCkge1xuICAgIHN3aXRjaCAob2JqZWN0LnR5cGUpIHtcbiAgICAgIGNhc2UgJ2lubGluZV9kcm9wZG93bic6IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IG9iamVjdC5kYXRhO1xuXG4gICAgICAgIHJldHVybiA8c3BhbiBkYXRhLXR5cGU9XCJpbmxpbmVfZHJvcGRvd25cIiBkYXRhLWluZGV4PXtkYXRhLmluZGV4fSBkYXRhLXZhbHVlPXtkYXRhLnZhbHVlfSAvPjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2V4cGxpY2l0X2NvbnN0cnVjdGVkX3Jlc3BvbnNlJzoge1xuICAgICAgICBjb25zdCBkYXRhID0gb2JqZWN0LmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgZGF0YS10eXBlPVwiZXhwbGljaXRfY29uc3RydWN0ZWRfcmVzcG9uc2VcIlxuICAgICAgICAgICAgZGF0YS1pbmRleD17ZGF0YS5pbmRleH1cbiAgICAgICAgICAgIGRhdGEtdmFsdWU9e2RhdGEudmFsdWV9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2RyYWdfaW5fdGhlX2JsYW5rJzoge1xuICAgICAgICBjb25zdCBkYXRhID0gb2JqZWN0LmRhdGE7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgZGF0YS10eXBlPVwiZHJhZ19pbl90aGVfYmxhbmtcIlxuICAgICAgICAgICAgZGF0YS1pbmRleD17ZGF0YS5pbmRleH1cbiAgICAgICAgICAgIGRhdGEtaWQ9e2RhdGEuaWR9XG4gICAgICAgICAgICBkYXRhLXZhbHVlPXtkYXRhLnZhbHVlfVxuICAgICAgICAgICAgZGF0YS1pbi10YWJsZT17ZGF0YS5pblRhYmxlfVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQSxJQUFNQSxHQUFHLEdBQUcsSUFBQUMsaUJBQUEsRUFBTSx5Q0FBTixDQUFaO0FBRUEsSUFBTUMsWUFBWSxHQUFHLEVBQXJCO0FBQ0EsSUFBTUMsVUFBVSxHQUFHO0VBQ2pCLG1CQUFtQixpQkFERjtFQUVqQixpQ0FBaUMsK0JBRmhCO0VBR2pCLHFCQUFxQjtBQUhKLENBQW5CO0FBS0EsSUFBTUMsWUFBWSxHQUFHQyxNQUFNLENBQUNDLE1BQVAsQ0FBY0gsVUFBZCxDQUFyQjs7QUFFZSxTQUFTSSxrQkFBVCxDQUE0QkMsSUFBNUIsRUFBa0M7RUFDL0MsSUFBTUMsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFBQyxDQUFDO0lBQUEsT0FBSUEsQ0FBQyxDQUFDQyxJQUFGLEtBQVdILElBQUksQ0FBQ0csSUFBaEIsSUFBd0JELENBQUMsQ0FBQ0MsSUFBRixLQUFXUixVQUFVLENBQUNLLElBQUksQ0FBQ0csSUFBTixDQUFqRDtFQUFBLENBQXpCOztFQUVBLElBQU1DLE9BQU8sR0FBRztJQUNkQyxJQUFJLGVBQUUsZ0NBQUMsa0JBQUQsT0FEUTtJQUVkQyxZQUFZLEVBQUU7TUFDWkMsTUFBTSxFQUFFO0lBREksQ0FGQTtJQUtkQyxPQUFPLEVBQUUsaUJBQUFDLE1BQU0sRUFBSTtNQUNqQmpCLEdBQUcsQ0FBQyxtQkFBRCxDQUFIO01BQ0EsSUFBTWtCLG1CQUFtQixHQUFHLEVB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
|
|
282
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["log","debug","lastIndexMap","elTypesMap","elTypesArray","Object","values","ResponseAreaPlugin","opts","isOfCurrentType","d","type","toolbar","icon","buttonStyles","margin","onClick","editor","currentRespAreaList","descendants","SlateNode","reverse","descendant","descendantPath","push","length","maxResponseAreas","replace","prevIndex","newIndex","newInline","getDefaultElement","insertNode","customToolbar","respAreaToolbar","showDone","name","rules","isVoid","isInline","element","includes","filterPlugins","node","plugins","filter","p","deleteNode","e","value","onChange","preventDefault","change","removeNodeByKey","key","supports","indexOf","renderNode","props","attributes","data","error","index","children","isUndefined","document","forEachDescendant","parseInt","get","filterDescendants","oldRespAreaList","size","disabled","arrayToFilter","arrayToUseForFilter","elementsWithChangedStatus","find","onHandleAreaChange","onDrop","event","closestEl","target","closest","inline","findDescendant","dataset","serialization","deserialize","el","object","id","inTable","serialize","toJSON"],"sources":["../../../src/plugins/respArea/index.jsx"],"sourcesContent":["import React from 'react';\nimport { Node as SlateNode } from 'slate';\nimport debug from 'debug';\n\nimport isUndefined from 'lodash/isUndefined';\nimport InlineDropdown from './inline-dropdown';\nimport DragInTheBlank from './drag-in-the-blank';\nimport ExplicitConstructedResponse from './explicit-constructed-response';\nimport { getDefaultElement } from './utils';\nimport { ToolbarIcon } from './icons';\n\nconst log = debug('@pie-lib:editable-html:plugins:respArea');\n\nconst lastIndexMap = {};\nconst elTypesMap = {\n 'inline-dropdown': 'inline_dropdown',\n 'explicit-constructed-response': 'explicit_constructed_response',\n 'drag-in-the-blank': 'drag_in_the_blank'\n};\nconst elTypesArray = Object.values(elTypesMap);\n\nexport default function ResponseAreaPlugin(opts) {\n const isOfCurrentType = d => d.type === opts.type || d.type === elTypesMap[opts.type];\n\n const toolbar = {\n icon: <ToolbarIcon />,\n buttonStyles: {\n margin: '0 20px 0 auto'\n },\n onClick: editor => {\n log('[toolbar] onClick');\n const currentRespAreaList = [];\n const descendants = SlateNode.descendants(editor, {\n reverse: true\n });\n\n for (const [descendant, descendantPath] of descendants) {\n if (isOfCurrentType(descendant, descendantPath)) {\n currentRespAreaList.push(descendant);\n }\n }\n\n if (currentRespAreaList.length >= opts.maxResponseAreas) {\n return;\n }\n\n const type = opts.type.replace(/-/g, '_');\n const prevIndex = lastIndexMap[type];\n const newIndex = !prevIndex ? 0 : prevIndex + 1;\n const newInline = getDefaultElement(opts, newIndex);\n\n lastIndexMap[type] += 1;\n\n if (newInline) {\n /* if (change.value.selection.startKey || change.value.selection.endKey) {\n change.insertInline(newInline);\n } else {\n // If the markup is empty and there's no focus\n const lastText = value.document.getLastText();\n\n if (!lastText) {\n return;\n }\n const parentNode = value.document.getParent(lastText.key);\n\n if (parentNode) {\n const index = parentNode.nodes.indexOf(lastText.key);\n\n if (parentNode.isVoid) return;\n\n change.insertNodeByKey(parentNode.key, index + 1, newInline);\n }\n }\n\n if (newInline.type === 'drag_in_the_blank') {\n const nextText = change.value.document.getNextText(newInline.key);\n\n if (nextText) {\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n }\n }*/\n editor.insertNode(newInline);\n }\n },\n customToolbar: opts.respAreaToolbar,\n showDone: false\n };\n\n return {\n name: 'response_area',\n toolbar,\n rules: editor => {\n const { isVoid, isInline } = editor;\n\n editor.isVoid = element => {\n return elTypesArray.includes(element.type) ? true : isVoid(element);\n };\n\n editor.isInline = element => {\n return elTypesArray.includes(element.type) ? true : isInline(element);\n };\n\n return editor;\n },\n filterPlugins: (node, plugins) => {\n if (node.type === 'explicit_constructed_response' || node.type === 'drag_in_the_blank') {\n return [];\n }\n\n return plugins.filter(p => p.name !== 'response_area');\n },\n deleteNode: (e, node, value, onChange) => {\n e.preventDefault();\n\n const change = value.change().removeNodeByKey(node.key);\n\n onChange(change);\n },\n supports: node => elTypesArray.indexOf(node.type) >= 0,\n renderNode(props) {\n const { attributes, node } = props;\n\n if (node.type === 'explicit_constructed_response') {\n const { data } = node;\n let error;\n\n if (opts.error) {\n error = opts.error();\n }\n\n return (\n <ExplicitConstructedResponse\n attributes={attributes}\n value={data.value}\n error={error && error[data.index] && error[data.index][0]}\n >\n {props.children}\n </ExplicitConstructedResponse>\n );\n }\n\n if (node.type === 'drag_in_the_blank') {\n const { data } = node;\n\n return (\n <DragInTheBlank\n attributes={attributes}\n data={data}\n n={node}\n nodeProps={props}\n opts={opts}\n >\n {props.children}\n </DragInTheBlank>\n );\n }\n\n if (node.type === 'inline_dropdown') {\n const { data } = node;\n\n return (\n <InlineDropdown attributes={attributes} selectedItem={data.value}>\n {props.children}\n </InlineDropdown>\n );\n }\n },\n onChange(change, editor) {\n const type = opts.type.replace(/-/g, '_');\n\n if (isUndefined(lastIndexMap[type])) {\n lastIndexMap[type] = 0;\n\n change.value.document.forEachDescendant(d => {\n if (d.type === type) {\n const newIndex = parseInt(d.data.get('index'), 10);\n\n if (newIndex > lastIndexMap[type]) {\n lastIndexMap[type] = newIndex;\n }\n }\n });\n }\n\n if (!editor.value) {\n return;\n }\n\n const currentRespAreaList = change.value.document.filterDescendants(isOfCurrentType);\n const oldRespAreaList = editor.value.document.filterDescendants(isOfCurrentType);\n\n if (currentRespAreaList.size >= opts.maxResponseAreas) {\n toolbar.disabled = true;\n } else {\n toolbar.disabled = false;\n }\n\n const arrayToFilter =\n oldRespAreaList.size > currentRespAreaList.size ? oldRespAreaList : currentRespAreaList;\n const arrayToUseForFilter =\n arrayToFilter === oldRespAreaList ? currentRespAreaList : oldRespAreaList;\n\n const elementsWithChangedStatus = arrayToFilter.filter(\n d => !arrayToUseForFilter.find(e => e.data.get('index') === d.data.get('index'))\n );\n\n if (elementsWithChangedStatus.size && oldRespAreaList.size > currentRespAreaList.size) {\n opts.onHandleAreaChange(elementsWithChangedStatus);\n }\n },\n onDrop(event, change, editor) {\n const closestEl = event.target.closest('[data-key]');\n const inline = editor.value.document.findDescendant(d => d.key === closestEl.dataset.key);\n\n if (inline.type === 'drag_in_the_blank') {\n return false;\n }\n }\n };\n}\n\nexport const serialization = {\n deserialize(el) {\n const type = el.dataset && el.dataset.type;\n\n switch (type) {\n case 'inline_dropdown':\n return {\n object: 'inline',\n type: 'inline_dropdown',\n isVoid: true,\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n };\n case 'explicit_constructed_response':\n return {\n object: 'inline',\n type: 'explicit_constructed_response',\n isVoid: true,\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n };\n case 'drag_in_the_blank':\n return {\n object: 'inline',\n type: 'drag_in_the_blank',\n isVoid: true,\n data: {\n index: el.dataset.index,\n id: el.dataset.id,\n value: el.dataset.value,\n inTable: el.dataset.inTable\n }\n };\n }\n },\n serialize(object) {\n if (object.object !== 'inline') {\n return;\n }\n\n switch (object.type) {\n case 'inline_dropdown': {\n const data = object.data.toJSON();\n\n return <span data-type=\"inline_dropdown\" data-index={data.index} data-value={data.value} />;\n }\n case 'explicit_constructed_response': {\n const data = object.data.toJSON();\n\n return (\n <span\n data-type=\"explicit_constructed_response\"\n data-index={data.index}\n data-value={data.value}\n />\n );\n }\n case 'drag_in_the_blank': {\n const data = object.data.toJSON();\n\n return (\n <span\n data-type=\"drag_in_the_blank\"\n data-index={data.index}\n data-id={data.id}\n data-value={data.value}\n data-in-table={data.inTable}\n />\n );\n }\n }\n }\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_slate","_slateHyperscript","_debug","_cloneDeep","_isEqual","_isUndefined","_inlineDropdown","_dragInTheBlank","_explicitConstructedResponse","_utils","_icons","log","debug","lastIndexMap","elTypesMap","elTypesArray","Object","values","ResponseAreaPlugin","opts","isOfCurrentType","d","type","toolbar","icon","createElement","ToolbarIcon","buttonStyles","margin","onClick","editor","currentRespAreaList","descendants","Array","from","SlateNode","reverse","map","_ref","_ref2","_slicedToArray2","forEach","push","length","maxResponseAreas","replace","prevIndex","newIndex","newInline","getDefaultElement","insertNode","customToolbar","respAreaToolbar","showDone","name","rules","isVoid","isInline","onChange","element","includes","oldEditor","cloneDeep","options","_ref3","_ref4","isUndefined","parseInt","data","index","isEqual","oldDescendants","_ref5","_ref6","filter","oldRespAreaList","disabled","arrayToFilter","arrayToUseForFilter","elementsWithChangedStatus","find","e","onHandleAreaChange","filterPlugins","node","plugins","p","deleteNode","nodePath","preventDefault","apply","path","supports","indexOf","renderNode","props","attributes","error","value","children","n","nodeProps","selectedItem","onDrop","event","change","closestEl","target","closest","inline","document","findDescendant","key","dataset","serialization","deserialize","el","jsx","id","inTable","serialize","object","exports"],"sources":["../../../src/plugins/respArea/index.jsx"],"sourcesContent":["import React from 'react';\nimport { Node as SlateNode } from 'slate';\nimport { jsx } from 'slate-hyperscript';\nimport debug from 'debug';\n\nimport cloneDeep from 'lodash/cloneDeep';\nimport isEqual from 'lodash/isEqual';\nimport isUndefined from 'lodash/isUndefined';\nimport InlineDropdown from './inline-dropdown';\nimport DragInTheBlank from './drag-in-the-blank';\nimport ExplicitConstructedResponse from './explicit-constructed-response';\nimport { getDefaultElement } from './utils';\nimport { ToolbarIcon } from './icons';\n\nconst log = debug('@pie-lib:editable-html:plugins:respArea');\n\nconst lastIndexMap = {};\nconst elTypesMap = {\n 'inline-dropdown': 'inline_dropdown',\n 'explicit-constructed-response': 'explicit_constructed_response',\n 'drag-in-the-blank': 'drag_in_the_blank',\n};\nconst elTypesArray = Object.values(elTypesMap);\n\nexport default function ResponseAreaPlugin(opts) {\n const isOfCurrentType = (d) => d.type === opts.type || d.type === elTypesMap[opts.type];\n\n const toolbar = {\n icon: <ToolbarIcon />,\n buttonStyles: {\n margin: '0 20px 0 auto',\n },\n onClick: editor => {\n log('[toolbar] onClick');\n const currentRespAreaList = [];\n const descendants = Array.from(SlateNode.descendants(editor, { reverse: true })).map(\n ([d]) => d\n );\n\n descendants.forEach(d => {\n if (isOfCurrentType(d)) {\n currentRespAreaList.push(d);\n }\n });\n\n if (currentRespAreaList.length >= opts.maxResponseAreas) {\n return;\n }\n\n const type = opts.type.replace(/-/g, '_');\n const prevIndex = lastIndexMap[type];\n const newIndex = !prevIndex ? 0 : prevIndex + 1;\n const newInline = getDefaultElement(opts, newIndex);\n\n lastIndexMap[type] += 1;\n\n if (newInline) {\n /* if (change.value.selection.startKey || change.value.selection.endKey) {\n change.insertInline(newInline);\n } else {\n // If the markup is empty and there's no focus\n const lastText = value.document.getLastText();\n\n if (!lastText) {\n return;\n }\n const parentNode = value.document.getParent(lastText.key);\n\n if (parentNode) {\n const index = parentNode.nodes.indexOf(lastText.key);\n\n if (parentNode.isVoid) return;\n\n change.insertNodeByKey(parentNode.key, index + 1, newInline);\n }\n }\n\n if (newInline.type === 'drag_in_the_blank') {\n const nextText = change.value.document.getNextText(newInline.key);\n\n if (nextText) {\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n }\n }*/\n editor.insertNode(newInline);\n }\n },\n customToolbar: opts.respAreaToolbar,\n showDone: false,\n };\n\n return {\n name: 'response_area',\n toolbar,\n rules: editor => {\n const { isVoid, isInline, onChange } = editor;\n\n editor.isVoid = element => {\n return elTypesArray.includes(element.type) ? true : isVoid(element);\n };\n\n editor.isInline = element => {\n return elTypesArray.includes(element.type) ? true : isInline(element);\n };\n\n let oldEditor = cloneDeep(editor);\n\n editor.onChange = options => {\n const descendants = Array.from(SlateNode.descendants(editor, { reverse: true })).map(\n ([d]) => d\n );\n const type = opts.type.replace(/-/g, '_');\n\n if (isUndefined(lastIndexMap[type])) {\n lastIndexMap[type] = 0;\n\n descendants.forEach(d => {\n if (d.type === type) {\n const newIndex = parseInt(d.data.index, 10);\n\n if (newIndex > lastIndexMap[type]) {\n lastIndexMap[type] = newIndex;\n }\n }\n });\n }\n\n if (isEqual(editor, oldEditor)) {\n return;\n }\n\n const oldDescendants = Array.from(SlateNode.descendants(oldEditor, { reverse: true })).map(\n ([d]) => d\n );\n const currentRespAreaList = descendants.filter(isOfCurrentType);\n const oldRespAreaList = oldDescendants.filter(isOfCurrentType);\n\n toolbar.disabled = currentRespAreaList.length >= opts.maxResponseAreas;\n\n const arrayToFilter =\n oldRespAreaList.length > currentRespAreaList.length\n ? oldRespAreaList\n : currentRespAreaList;\n const arrayToUseForFilter =\n arrayToFilter === oldRespAreaList ? currentRespAreaList : oldRespAreaList;\n\n const elementsWithChangedStatus = arrayToFilter.filter(\n d => !arrayToUseForFilter.find(e => e.data.index === d.data.index)\n );\n\n if (\n elementsWithChangedStatus.length &&\n oldRespAreaList.length > currentRespAreaList.length\n ) {\n opts.onHandleAreaChange(elementsWithChangedStatus);\n }\n\n oldEditor = cloneDeep(editor);\n onChange(options);\n };\n\n return editor;\n },\n filterPlugins: (node, plugins) => {\n if (node.type === 'explicit_constructed_response' || node.type === 'drag_in_the_blank') {\n return [];\n }\n\n return plugins.filter((p) => p.name !== 'response_area');\n },\n deleteNode: (e, node, nodePath, editor, onChange) => {\n e.preventDefault();\n\n editor.apply({\n type: 'remove_node',\n path: nodePath\n });\n\n onChange(editor);\n },\n supports: node => elTypesArray.indexOf(node.type) >= 0,\n renderNode(props) {\n const { attributes, node } = props;\n\n if (node.type === 'explicit_constructed_response') {\n const { data } = node;\n let error;\n\n if (opts.error) {\n error = opts.error();\n }\n\n return (\n <ExplicitConstructedResponse\n attributes={attributes}\n value={data.value}\n error={error && error[data.index] && error[data.index][0]}\n >\n {props.children}\n </ExplicitConstructedResponse>\n );\n }\n\n if (node.type === 'drag_in_the_blank') {\n const { data } = node;\n\n return (\n <DragInTheBlank\n attributes={attributes}\n data={data}\n n={node}\n nodeProps={props}\n opts={opts}\n >\n {props.children}\n </DragInTheBlank>\n );\n }\n\n if (node.type === 'inline_dropdown') {\n const { data } = node;\n\n return (\n <InlineDropdown attributes={attributes} selectedItem={data.value}>\n {props.children}\n </InlineDropdown>\n );\n }\n },\n onDrop(event, change, editor) {\n const closestEl = event.target.closest('[data-key]');\n const inline = editor.value.document.findDescendant((d) => d.key === closestEl.dataset.key);\n\n if (inline.type === 'drag_in_the_blank') {\n return false;\n }\n },\n };\n}\n\nexport const serialization = {\n deserialize(el) {\n const type = el.dataset && el.dataset.type;\n\n switch (type) {\n case 'inline_dropdown':\n return jsx('element', {\n type: 'inline_dropdown',\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n });\n case 'explicit_constructed_response':\n return jsx('element', {\n type: 'explicit_constructed_response',\n data: {\n index: el.dataset.index,\n value: el.dataset.value\n }\n });\n case 'drag_in_the_blank':\n return jsx('element', {\n type: 'drag_in_the_blank',\n data: {\n index: el.dataset.index,\n id: el.dataset.id,\n value: el.dataset.value,\n inTable: el.dataset.inTable\n }\n });\n }\n },\n serialize(object) {\n switch (object.type) {\n case 'inline_dropdown': {\n const data = object.data;\n\n return <span data-type=\"inline_dropdown\" data-index={data.index} data-value={data.value} />;\n }\n case 'explicit_constructed_response': {\n const data = object.data;\n\n return <span data-type=\"explicit_constructed_response\" data-index={data.index} data-value={data.value} />;\n }\n case 'drag_in_the_blank': {\n const data = object.data;\n\n return (\n <span\n data-type=\"drag_in_the_blank\"\n data-index={data.index}\n data-id={data.id}\n data-value={data.value}\n data-in-table={data.inTable}\n />\n );\n }\n }\n },\n};\n"],"mappings":"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"}
|
|
@@ -1,24 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
7
|
exports["default"] = void 0;
|
|
9
|
-
|
|
10
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
-
|
|
12
9
|
var _react = _interopRequireDefault(require("react"));
|
|
13
|
-
|
|
14
10
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
15
|
-
|
|
16
11
|
var _icons = require("../icons");
|
|
17
|
-
|
|
18
12
|
var InlineDropdown = function InlineDropdown(_ref) {
|
|
19
13
|
var attributes = _ref.attributes,
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
children = _ref.children,
|
|
15
|
+
selectedItem = _ref.selectedItem;
|
|
22
16
|
// Needed because items with values inside have different positioning for some reason
|
|
23
17
|
var html = selectedItem || '<div> </div>';
|
|
24
18
|
return /*#__PURE__*/_react["default"].createElement("span", (0, _extends2["default"])({}, attributes, {
|
|
@@ -61,11 +55,10 @@ var InlineDropdown = function InlineDropdown(_ref) {
|
|
|
61
55
|
}
|
|
62
56
|
})));
|
|
63
57
|
};
|
|
64
|
-
|
|
65
58
|
InlineDropdown.propTypes = {
|
|
66
59
|
attributes: _propTypes["default"].object,
|
|
67
60
|
selectedItem: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].object])
|
|
68
61
|
};
|
|
69
62
|
var _default = InlineDropdown;
|
|
70
63
|
exports["default"] = _default;
|
|
71
|
-
//# sourceMappingURL=
|
|
64
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["InlineDropdown","attributes","children","selectedItem","html","display","height","margin","cursor","minWidth","background","border","boxSizing","borderRadius","position","flex","overflow","padding","whiteSpace","textOverflow","lineHeight","__html","top","right","propTypes","PropTypes","object","oneOfType","string"],"sources":["../../../../src/plugins/respArea/inline-dropdown/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Chevron } from '../icons';\n\nconst InlineDropdown = ({ attributes, children, selectedItem }) => {\n // Needed because items with values inside have different positioning for some reason\n const html = selectedItem || '<div> </div>';\n\n return (\n <span\n {...attributes}\n contentEditable={false}\n style={{\n display: 'inline-flex',\n height: '50px',\n margin: '0 5px',\n cursor: 'pointer'
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_propTypes","_icons","InlineDropdown","_ref","attributes","children","selectedItem","html","createElement","_extends2","contentEditable","style","display","height","margin","cursor","minWidth","background","border","boxSizing","borderRadius","position","flex","overflow","padding","whiteSpace","textOverflow","lineHeight","dangerouslySetInnerHTML","__html","Chevron","direction","top","right","propTypes","PropTypes","object","oneOfType","string","_default","exports"],"sources":["../../../../src/plugins/respArea/inline-dropdown/index.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Chevron } from '../icons';\n\nconst InlineDropdown = ({ attributes, children, selectedItem }) => {\n // Needed because items with values inside have different positioning for some reason\n const html = selectedItem || '<div> </div>';\n\n return (\n <span\n {...attributes}\n contentEditable={false}\n style={{\n display: 'inline-flex',\n height: '50px',\n margin: '0 5px',\n cursor: 'pointer',\n }}\n >\n <div\n style={{\n display: 'inline-flex',\n minWidth: '178px',\n height: '36px',\n background: '#FFF',\n border: '1px solid #C0C3CF',\n boxSizing: 'border-box',\n borderRadius: '3px',\n position: 'relative',\n }}\n >\n {children}\n <div\n style={{\n flex: 1,\n overflow: 'hidden',\n padding: '0 25px 0 8px',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n lineHeight: '35px',\n }}\n dangerouslySetInnerHTML={{\n __html: html,\n }}\n />\n <Chevron\n direction=\"down\"\n style={{\n position: 'absolute',\n top: '5px',\n right: '5px',\n }}\n />\n </div>\n </span>\n );\n};\n\nInlineDropdown.propTypes = {\n attributes: PropTypes.object,\n selectedItem: PropTypes.oneOfType([PropTypes.string, PropTypes.object]),\n};\n\nexport default InlineDropdown;\n"],"mappings":";;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AAEA,IAAMG,cAAc,GAAG,SAAjBA,cAAcA,CAAAC,IAAA,EAA+C;EAAA,IAAzCC,UAAU,GAAAD,IAAA,CAAVC,UAAU;IAAEC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;IAAEC,YAAY,GAAAH,IAAA,CAAZG,YAAY;EAC1D;EACA,IAAMC,IAAI,GAAGD,YAAY,IAAI,kBAAkB;EAE/C,oBACET,MAAA,YAAAW,aAAA,aAAAC,SAAA,iBACML,UAAU;IACdM,eAAe,EAAE,KAAM;IACvBC,KAAK,EAAE;MACLC,OAAO,EAAE,aAAa;MACtBC,MAAM,EAAE,MAAM;MACdC,MAAM,EAAE,OAAO;MACfC,MAAM,EAAE;IACV;EAAE,iBAEFlB,MAAA,YAAAW,aAAA;IACEG,KAAK,EAAE;MACLC,OAAO,EAAE,aAAa;MACtBI,QAAQ,EAAE,OAAO;MACjBH,MAAM,EAAE,MAAM;MACdI,UAAU,EAAE,MAAM;MAClBC,MAAM,EAAE,mBAAmB;MAC3BC,SAAS,EAAE,YAAY;MACvBC,YAAY,EAAE,KAAK;MACnBC,QAAQ,EAAE;IACZ;EAAE,GAEDhB,QAAQ,eACTR,MAAA,YAAAW,aAAA;IACEG,KAAK,EAAE;MACLW,IAAI,EAAE,CAAC;MACPC,QAAQ,EAAE,QAAQ;MAClBC,OAAO,EAAE,cAAc;MACvBC,UAAU,EAAE,QAAQ;MACpBC,YAAY,EAAE,UAAU;MACxBC,UAAU,EAAE;IACd,CAAE;IACFC,uBAAuB,EAAE;MACvBC,MAAM,EAAEtB;IACV;EAAE,CACH,CAAC,eACFV,MAAA,YAAAW,aAAA,CAACP,MAAA,CAAA6B,OAAO;IACNC,SAAS,EAAC,MAAM;IAChBpB,KAAK,EAAE;MACLU,QAAQ,EAAE,UAAU;MACpBW,GAAG,EAAE,KAAK;MACVC,KAAK,EAAE;IACT;EAAE,CACH,CACE,CACD,CAAC;AAEX,CAAC;AAED/B,cAAc,CAACgC,SAAS,GAAG;EACzB9B,UAAU,EAAE+B,qBAAS,CAACC,MAAM;EAC5B9B,YAAY,EAAE6B,qBAAS,CAACE,SAAS,CAAC,CAACF,qBAAS,CAACG,MAAM,EAAEH,qBAAS,CAACC,MAAM,CAAC;AACxE,CAAC;AAAC,IAAAG,QAAA,GAEarC,cAAc;AAAAsC,OAAA,cAAAD,QAAA"}
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
|
6
5
|
value: true
|
|
7
6
|
});
|
|
8
|
-
exports.insertSnackBar = exports.getDefaultElement = exports.defaultIDD = exports.defaultECR = exports.defaultDIB = void 0;
|
|
9
|
-
|
|
7
|
+
exports.isNumber = exports.insertSnackBar = exports.getDefaultElement = exports.defaultIDD = exports.defaultECR = exports.defaultDIB = void 0;
|
|
10
8
|
var _react = _interopRequireDefault(require("react"));
|
|
11
|
-
|
|
12
9
|
var _reactDom = _interopRequireDefault(require("react-dom"));
|
|
13
|
-
|
|
14
10
|
var _Snackbar = _interopRequireDefault(require("@material-ui/core/Snackbar"));
|
|
15
|
-
|
|
11
|
+
var isNumber = function isNumber(val) {
|
|
12
|
+
return !isNaN(parseFloat(val)) && isFinite(val);
|
|
13
|
+
};
|
|
14
|
+
exports.isNumber = isNumber;
|
|
16
15
|
var insertSnackBar = function insertSnackBar(message) {
|
|
17
16
|
var prevSnacks = document.querySelectorAll('.response-area-alert');
|
|
18
17
|
prevSnacks.forEach(function (s) {
|
|
@@ -20,7 +19,6 @@ var insertSnackBar = function insertSnackBar(message) {
|
|
|
20
19
|
});
|
|
21
20
|
var newEl = document.createElement('div');
|
|
22
21
|
newEl.className = 'response-area-alert';
|
|
23
|
-
|
|
24
22
|
var el = /*#__PURE__*/_react["default"].createElement(_Snackbar["default"], {
|
|
25
23
|
anchorOrigin: {
|
|
26
24
|
vertical: 'top',
|
|
@@ -34,17 +32,13 @@ var insertSnackBar = function insertSnackBar(message) {
|
|
|
34
32
|
id: "message-id"
|
|
35
33
|
}, message)
|
|
36
34
|
});
|
|
37
|
-
|
|
38
35
|
_reactDom["default"].render(el, newEl);
|
|
39
|
-
|
|
40
36
|
document.body.appendChild(newEl);
|
|
41
37
|
setTimeout(function () {
|
|
42
38
|
newEl.remove();
|
|
43
39
|
}, 2000);
|
|
44
40
|
};
|
|
45
|
-
|
|
46
41
|
exports.insertSnackBar = insertSnackBar;
|
|
47
|
-
|
|
48
42
|
var defaultECR = function defaultECR(index) {
|
|
49
43
|
return {
|
|
50
44
|
type: 'explicit_constructed_response',
|
|
@@ -56,9 +50,7 @@ var defaultECR = function defaultECR(index) {
|
|
|
56
50
|
}
|
|
57
51
|
};
|
|
58
52
|
};
|
|
59
|
-
|
|
60
53
|
exports.defaultECR = defaultECR;
|
|
61
|
-
|
|
62
54
|
var defaultDIB = function defaultDIB(opts, index) {
|
|
63
55
|
return {
|
|
64
56
|
type: 'drag_in_the_blank',
|
|
@@ -72,9 +64,7 @@ var defaultDIB = function defaultDIB(opts, index) {
|
|
|
72
64
|
}
|
|
73
65
|
};
|
|
74
66
|
};
|
|
75
|
-
|
|
76
67
|
exports.defaultDIB = defaultDIB;
|
|
77
|
-
|
|
78
68
|
var defaultIDD = function defaultIDD(index) {
|
|
79
69
|
return {
|
|
80
70
|
type: 'inline_dropdown',
|
|
@@ -86,22 +76,17 @@ var defaultIDD = function defaultIDD(index) {
|
|
|
86
76
|
}
|
|
87
77
|
};
|
|
88
78
|
};
|
|
89
|
-
|
|
90
79
|
exports.defaultIDD = defaultIDD;
|
|
91
|
-
|
|
92
80
|
var getDefaultElement = function getDefaultElement(opts, index) {
|
|
93
81
|
switch (opts.type) {
|
|
94
82
|
case 'explicit-constructed-response':
|
|
95
83
|
return defaultECR(index);
|
|
96
|
-
|
|
97
84
|
case 'drag-in-the-blank':
|
|
98
85
|
return defaultDIB(opts, index);
|
|
99
|
-
|
|
100
86
|
default:
|
|
101
87
|
// inline-dropdown
|
|
102
88
|
return defaultIDD(index);
|
|
103
89
|
}
|
|
104
90
|
};
|
|
105
|
-
|
|
106
91
|
exports.getDefaultElement = getDefaultElement;
|
|
107
|
-
//# sourceMappingURL=
|
|
92
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["insertSnackBar","message","prevSnacks","document","querySelectorAll","forEach","s","remove","newEl","createElement","className","el","vertical","horizontal","ReactDOM","render","body","appendChild","setTimeout","defaultECR","index","type","children","text","data","defaultDIB","opts","duplicates","options","value","defaultIDD","getDefaultElement"],"sources":["../../../src/plugins/respArea/utils.jsx"],"sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Snackbar from '@material-ui/core/Snackbar';\n\nexport const insertSnackBar = message => {\n const prevSnacks = document.querySelectorAll('.response-area-alert');\n\n prevSnacks.forEach(s => s.remove());\n\n const newEl = document.createElement('div');\n\n newEl.className = 'response-area-alert';\n\n const el = (\n <Snackbar\n anchorOrigin={{ vertical: 'top', horizontal: 'center' }}\n open={true}\n ContentProps={{\n 'aria-describedby': 'message-id'
|
|
1
|
+
{"version":3,"file":"utils.js","names":["_react","_interopRequireDefault","require","_reactDom","_Snackbar","isNumber","val","isNaN","parseFloat","isFinite","exports","insertSnackBar","message","prevSnacks","document","querySelectorAll","forEach","s","remove","newEl","createElement","className","el","anchorOrigin","vertical","horizontal","open","ContentProps","id","ReactDOM","render","body","appendChild","setTimeout","defaultECR","index","type","children","text","data","defaultDIB","opts","duplicates","options","value","defaultIDD","getDefaultElement"],"sources":["../../../src/plugins/respArea/utils.jsx"],"sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Snackbar from '@material-ui/core/Snackbar';\n\nexport const isNumber = (val) => !isNaN(parseFloat(val)) && isFinite(val);\n\nexport const insertSnackBar = (message) => {\n const prevSnacks = document.querySelectorAll('.response-area-alert');\n\n prevSnacks.forEach((s) => s.remove());\n\n const newEl = document.createElement('div');\n\n newEl.className = 'response-area-alert';\n\n const el = (\n <Snackbar\n anchorOrigin={{ vertical: 'top', horizontal: 'center' }}\n open={true}\n ContentProps={{\n 'aria-describedby': 'message-id',\n }}\n message={<span id=\"message-id\">{message}</span>}\n />\n );\n\n ReactDOM.render(el, newEl);\n\n document.body.appendChild(newEl);\n\n setTimeout(() => {\n newEl.remove();\n }, 2000);\n};\n\nexport const defaultECR = index => ({\n type: 'explicit_constructed_response',\n children: [{ text: '' }],\n data: {\n index\n }\n});\n\nexport const defaultDIB = (opts, index) => ({\n type: 'drag_in_the_blank',\n children: [{ text: '' }],\n data: {\n index,\n duplicates: opts.options.duplicates,\n value: null\n }\n});\n\nexport const defaultIDD = index => ({\n type: 'inline_dropdown',\n children: [{ text: '' }],\n data: {\n index\n }\n});\n\nexport const getDefaultElement = (opts, index) => {\n switch (opts.type) {\n case 'explicit-constructed-response':\n return defaultECR(index);\n\n case 'drag-in-the-blank':\n return defaultDIB(opts, index);\n\n default:\n // inline-dropdown\n return defaultIDD(index);\n }\n};\n"],"mappings":"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"}
|