@pie-lib/editable-html 12.1.0-next.0 → 12.1.0-next.2
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 +40 -0
- package/package.json +7 -7
- package/lib/__tests__/editor-utils.test.js +0 -164
- package/lib/__tests__/serialization.test.js +0 -242
- package/lib/__tests__/utils.js +0 -79
- package/lib/block-tags.js +0 -24
- package/lib/block-tags.js.map +0 -1
- package/lib/constants.js +0 -11
- package/lib/constants.js.map +0 -1
- package/lib/editor.js +0 -1224
- package/lib/editor.js.map +0 -1
- package/lib/index.js +0 -208
- package/lib/index.js.map +0 -1
- package/lib/parse-html.js +0 -16
- package/lib/parse-html.js.map +0 -1
- package/lib/plugins/characters/custom-popper.js +0 -57
- package/lib/plugins/characters/custom-popper.js.map +0 -1
- package/lib/plugins/characters/index.js +0 -265
- package/lib/plugins/characters/index.js.map +0 -1
- package/lib/plugins/characters/utils.js +0 -378
- package/lib/plugins/characters/utils.js.map +0 -1
- package/lib/plugins/css/icons/index.js +0 -25
- package/lib/plugins/css/icons/index.js.map +0 -1
- package/lib/plugins/css/index.js +0 -338
- package/lib/plugins/css/index.js.map +0 -1
- package/lib/plugins/customPlugin/index.js +0 -98
- package/lib/plugins/customPlugin/index.js.map +0 -1
- package/lib/plugins/html/icons/index.js +0 -30
- package/lib/plugins/html/icons/index.js.map +0 -1
- package/lib/plugins/html/index.js +0 -71
- package/lib/plugins/html/index.js.map +0 -1
- package/lib/plugins/image/__tests__/component.test.js +0 -96
- package/lib/plugins/image/__tests__/image-toolbar-logic.test.js +0 -131
- package/lib/plugins/image/__tests__/image-toolbar.test.js +0 -22
- package/lib/plugins/image/__tests__/index.test.js +0 -90
- package/lib/plugins/image/__tests__/insert-image-handler.test.js +0 -112
- package/lib/plugins/image/__tests__/mock-change.js +0 -22
- package/lib/plugins/image/alt-dialog.js +0 -100
- package/lib/plugins/image/alt-dialog.js.map +0 -1
- package/lib/plugins/image/component.js +0 -343
- package/lib/plugins/image/component.js.map +0 -1
- package/lib/plugins/image/image-toolbar.js +0 -137
- package/lib/plugins/image/image-toolbar.js.map +0 -1
- package/lib/plugins/image/index.js +0 -223
- package/lib/plugins/image/index.js.map +0 -1
- package/lib/plugins/image/insert-image-handler.js +0 -140
- package/lib/plugins/image/insert-image-handler.js.map +0 -1
- package/lib/plugins/index.js +0 -342
- package/lib/plugins/index.js.map +0 -1
- package/lib/plugins/list/__tests__/index.test.js +0 -64
- package/lib/plugins/list/index.js +0 -288
- package/lib/plugins/list/index.js.map +0 -1
- package/lib/plugins/math/__tests__/index.test.js +0 -284
- package/lib/plugins/math/index.js +0 -402
- package/lib/plugins/math/index.js.map +0 -1
- package/lib/plugins/media/__tests__/index.test.js +0 -69
- package/lib/plugins/media/index.js +0 -330
- package/lib/plugins/media/index.js.map +0 -1
- package/lib/plugins/media/media-dialog.js +0 -594
- package/lib/plugins/media/media-dialog.js.map +0 -1
- package/lib/plugins/media/media-toolbar.js +0 -76
- package/lib/plugins/media/media-toolbar.js.map +0 -1
- package/lib/plugins/media/media-wrapper.js +0 -64
- package/lib/plugins/media/media-wrapper.js.map +0 -1
- package/lib/plugins/rendering/index.js +0 -36
- package/lib/plugins/rendering/index.js.map +0 -1
- package/lib/plugins/respArea/drag-in-the-blank/choice.js +0 -271
- package/lib/plugins/respArea/drag-in-the-blank/choice.js.map +0 -1
- package/lib/plugins/respArea/drag-in-the-blank/index.js +0 -55
- package/lib/plugins/respArea/drag-in-the-blank/index.js.map +0 -1
- package/lib/plugins/respArea/drag-in-the-blank/utils.js +0 -38
- package/lib/plugins/respArea/drag-in-the-blank/utils.js.map +0 -1
- package/lib/plugins/respArea/explicit-constructed-response/index.js +0 -50
- package/lib/plugins/respArea/explicit-constructed-response/index.js.map +0 -1
- package/lib/plugins/respArea/icons/index.js +0 -72
- package/lib/plugins/respArea/icons/index.js.map +0 -1
- package/lib/plugins/respArea/index.js +0 -287
- package/lib/plugins/respArea/index.js.map +0 -1
- package/lib/plugins/respArea/inline-dropdown/index.js +0 -67
- package/lib/plugins/respArea/inline-dropdown/index.js.map +0 -1
- package/lib/plugins/respArea/math-templated/index.js +0 -112
- package/lib/plugins/respArea/math-templated/index.js.map +0 -1
- package/lib/plugins/respArea/utils.js +0 -95
- package/lib/plugins/respArea/utils.js.map +0 -1
- package/lib/plugins/table/CustomTablePlugin.js +0 -116
- package/lib/plugins/table/CustomTablePlugin.js.map +0 -1
- package/lib/plugins/table/__tests__/index.test.js +0 -416
- package/lib/plugins/table/__tests__/table-toolbar.test.js +0 -81
- package/lib/plugins/table/icons/index.js +0 -55
- package/lib/plugins/table/icons/index.js.map +0 -1
- package/lib/plugins/table/index.js +0 -413
- package/lib/plugins/table/index.js.map +0 -1
- package/lib/plugins/table/table-toolbar.js +0 -138
- package/lib/plugins/table/table-toolbar.js.map +0 -1
- package/lib/plugins/textAlign/icons/index.js +0 -187
- package/lib/plugins/textAlign/icons/index.js.map +0 -1
- package/lib/plugins/textAlign/index.js +0 -26
- package/lib/plugins/textAlign/index.js.map +0 -1
- package/lib/plugins/toolbar/__tests__/default-toolbar.test.js +0 -154
- package/lib/plugins/toolbar/__tests__/editor-and-toolbar.test.js +0 -47
- package/lib/plugins/toolbar/__tests__/toolbar-buttons.test.js +0 -112
- package/lib/plugins/toolbar/__tests__/toolbar.test.js +0 -118
- package/lib/plugins/toolbar/default-toolbar.js +0 -180
- package/lib/plugins/toolbar/default-toolbar.js.map +0 -1
- package/lib/plugins/toolbar/done-button.js +0 -35
- package/lib/plugins/toolbar/done-button.js.map +0 -1
- package/lib/plugins/toolbar/editor-and-toolbar.js +0 -258
- package/lib/plugins/toolbar/editor-and-toolbar.js.map +0 -1
- package/lib/plugins/toolbar/index.js +0 -29
- package/lib/plugins/toolbar/index.js.map +0 -1
- package/lib/plugins/toolbar/toolbar-buttons.js +0 -145
- package/lib/plugins/toolbar/toolbar-buttons.js.map +0 -1
- package/lib/plugins/toolbar/toolbar.js +0 -307
- package/lib/plugins/toolbar/toolbar.js.map +0 -1
- package/lib/plugins/utils.js +0 -42
- package/lib/plugins/utils.js.map +0 -1
- package/lib/serialization.js +0 -571
- package/lib/serialization.js.map +0 -1
- package/lib/shared/alert-dialog.js +0 -68
- package/lib/theme.js +0 -8
- package/lib/theme.js.map +0 -1
|
@@ -1,265 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports["default"] = CharactersPlugin;
|
|
8
|
-
exports.removeDialogs = void 0;
|
|
9
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
|
-
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
|
-
var _react = _interopRequireDefault(require("react"));
|
|
12
|
-
var _client = require("react-dom/client");
|
|
13
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
14
|
-
var _get = _interopRequireDefault(require("lodash/get"));
|
|
15
|
-
var _mathToolbar = require("@pie-lib/math-toolbar");
|
|
16
|
-
var _customPopper = _interopRequireDefault(require("./custom-popper"));
|
|
17
|
-
var _utils = require("../respArea/utils");
|
|
18
|
-
var _utils2 = require("./utils");
|
|
19
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
20
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
21
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
22
|
-
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:characters');
|
|
23
|
-
var removePopOvers = function removePopOvers() {
|
|
24
|
-
var prevPopOvers = document.querySelectorAll('#mouse-over-popover');
|
|
25
|
-
log('[characters:removePopOvers]');
|
|
26
|
-
prevPopOvers.forEach(function (s) {
|
|
27
|
-
return s.remove();
|
|
28
|
-
});
|
|
29
|
-
};
|
|
30
|
-
var removeDialogs = exports.removeDialogs = function removeDialogs() {
|
|
31
|
-
var prevDialogs = document.querySelectorAll('.insert-character-dialog');
|
|
32
|
-
log('[characters:removeDialogs]');
|
|
33
|
-
prevDialogs.forEach(function (s) {
|
|
34
|
-
return s.remove();
|
|
35
|
-
});
|
|
36
|
-
removePopOvers();
|
|
37
|
-
};
|
|
38
|
-
var insertDialog = function insertDialog(_ref) {
|
|
39
|
-
var editorDOM = _ref.editorDOM,
|
|
40
|
-
value = _ref.value,
|
|
41
|
-
callback = _ref.callback,
|
|
42
|
-
opts = _ref.opts;
|
|
43
|
-
var newEl = document.createElement('div');
|
|
44
|
-
log('[characters:insertDialog]');
|
|
45
|
-
removeDialogs();
|
|
46
|
-
newEl.className = 'insert-character-dialog';
|
|
47
|
-
var configToUse;
|
|
48
|
-
switch (true) {
|
|
49
|
-
case opts.language === 'spanish':
|
|
50
|
-
configToUse = _utils2.spanishConfig;
|
|
51
|
-
break;
|
|
52
|
-
case opts.language === 'special':
|
|
53
|
-
configToUse = _utils2.specialConfig;
|
|
54
|
-
break;
|
|
55
|
-
default:
|
|
56
|
-
configToUse = opts;
|
|
57
|
-
}
|
|
58
|
-
if (!configToUse.characters) {
|
|
59
|
-
(0, _utils.insertSnackBar)('No characters provided or language not recognized');
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
var layoutForCharacters = configToUse.characters.reduce(function (obj, arr) {
|
|
63
|
-
if (arr.length >= obj.columns) {
|
|
64
|
-
obj.columns = arr.length;
|
|
65
|
-
}
|
|
66
|
-
return obj;
|
|
67
|
-
}, {
|
|
68
|
-
rows: configToUse.characters.length,
|
|
69
|
-
columns: 0
|
|
70
|
-
});
|
|
71
|
-
var popoverEl;
|
|
72
|
-
var popoverRoot;
|
|
73
|
-
var closePopOver = function closePopOver() {
|
|
74
|
-
if (popoverRoot) {
|
|
75
|
-
popoverRoot.unmount();
|
|
76
|
-
popoverRoot = null;
|
|
77
|
-
}
|
|
78
|
-
if (popoverEl) {
|
|
79
|
-
popoverEl.remove();
|
|
80
|
-
popoverEl = null;
|
|
81
|
-
}
|
|
82
|
-
removePopOvers();
|
|
83
|
-
};
|
|
84
|
-
var renderPopOver = function renderPopOver(event, el) {
|
|
85
|
-
if (!event) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
var infoStyle = {
|
|
89
|
-
fontSize: '20px',
|
|
90
|
-
lineHeight: '20px'
|
|
91
|
-
};
|
|
92
|
-
closePopOver();
|
|
93
|
-
popoverEl = document.createElement('div');
|
|
94
|
-
popoverRoot = (0, _client.createRoot)(popoverEl);
|
|
95
|
-
popoverRoot.render(/*#__PURE__*/_react["default"].createElement(_customPopper["default"], {
|
|
96
|
-
onClose: closePopOver,
|
|
97
|
-
anchorEl: event.currentTarget
|
|
98
|
-
}, /*#__PURE__*/_react["default"].createElement("div", null, el.label), /*#__PURE__*/_react["default"].createElement("div", {
|
|
99
|
-
style: infoStyle
|
|
100
|
-
}, el.description), /*#__PURE__*/_react["default"].createElement("div", {
|
|
101
|
-
style: infoStyle
|
|
102
|
-
}, el.unicode)));
|
|
103
|
-
document.body.appendChild(newEl);
|
|
104
|
-
};
|
|
105
|
-
var firstCallMade = false;
|
|
106
|
-
var listener = function listener(e) {
|
|
107
|
-
// this will be triggered right after setting it because
|
|
108
|
-
// this toolbar is added on the mousedown event
|
|
109
|
-
// so right after mouseup, the click will be triggered
|
|
110
|
-
if (firstCallMade) {
|
|
111
|
-
var focusIsInModals = newEl.contains(e.target) || popoverEl && popoverEl.contains(e.target);
|
|
112
|
-
var focusIsInEditor = editorDOM.contains(e.target);
|
|
113
|
-
if (!(focusIsInModals || focusIsInEditor)) {
|
|
114
|
-
handleClose();
|
|
115
|
-
}
|
|
116
|
-
} else {
|
|
117
|
-
firstCallMade = true;
|
|
118
|
-
}
|
|
119
|
-
};
|
|
120
|
-
var handleClose = function handleClose() {
|
|
121
|
-
callback(undefined, true);
|
|
122
|
-
newEl.remove();
|
|
123
|
-
closePopOver();
|
|
124
|
-
document.body.removeEventListener('click', listener);
|
|
125
|
-
};
|
|
126
|
-
var handleChange = function handleChange(val) {
|
|
127
|
-
if (typeof val === 'string') {
|
|
128
|
-
callback(val, true);
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
var el = /*#__PURE__*/_react["default"].createElement(_mathToolbar.PureToolbar, {
|
|
132
|
-
keyPadCharacterRef: opts.keyPadCharacterRef,
|
|
133
|
-
setKeypadInteraction: opts.setKeypadInteraction,
|
|
134
|
-
autoFocus: true,
|
|
135
|
-
noDecimal: true,
|
|
136
|
-
hideInput: true,
|
|
137
|
-
noLatexHandling: true,
|
|
138
|
-
hideDoneButtonBackground: true,
|
|
139
|
-
layoutForKeyPad: layoutForCharacters,
|
|
140
|
-
additionalKeys: configToUse.characters.reduce(function (arr, n) {
|
|
141
|
-
arr = [].concat((0, _toConsumableArray2["default"])(arr), (0, _toConsumableArray2["default"])(n.map(function (k) {
|
|
142
|
-
return _objectSpread({
|
|
143
|
-
name: (0, _get["default"])(k, 'name') || k,
|
|
144
|
-
write: (0, _get["default"])(k, 'write') || k,
|
|
145
|
-
label: (0, _get["default"])(k, 'label') || k,
|
|
146
|
-
category: 'character',
|
|
147
|
-
extraClass: 'character',
|
|
148
|
-
extraProps: _objectSpread(_objectSpread({}, k.extraProps || {}), {}, {
|
|
149
|
-
style: _objectSpread(_objectSpread({}, (k.extraProps || {}).style), {}, {
|
|
150
|
-
border: '1px solid #000'
|
|
151
|
-
})
|
|
152
|
-
})
|
|
153
|
-
}, configToUse.hasPreview ? {
|
|
154
|
-
actions: {
|
|
155
|
-
onMouseEnter: function onMouseEnter(ev) {
|
|
156
|
-
return renderPopOver(ev, k);
|
|
157
|
-
},
|
|
158
|
-
onMouseLeave: closePopOver
|
|
159
|
-
}
|
|
160
|
-
} : {});
|
|
161
|
-
})));
|
|
162
|
-
return arr;
|
|
163
|
-
}, []),
|
|
164
|
-
keypadMode: "language",
|
|
165
|
-
onChange: handleChange,
|
|
166
|
-
onDone: handleClose
|
|
167
|
-
});
|
|
168
|
-
var dialogRoot = (0, _client.createRoot)(newEl);
|
|
169
|
-
dialogRoot.render(el);
|
|
170
|
-
|
|
171
|
-
// Use setTimeout to ensure the element is rendered before positioning
|
|
172
|
-
setTimeout(function () {
|
|
173
|
-
var cursorItem = document.querySelector("[data-key=\"".concat(value.anchorKey, "\"]"));
|
|
174
|
-
if (cursorItem) {
|
|
175
|
-
var bodyRect = document.body.getBoundingClientRect();
|
|
176
|
-
var boundRect = cursorItem.getBoundingClientRect();
|
|
177
|
-
document.body.appendChild(newEl);
|
|
178
|
-
|
|
179
|
-
// when height of toolbar exceeds screen - can happen in scrollable contexts
|
|
180
|
-
var additionalTopOffset = 0;
|
|
181
|
-
if (boundRect.y < newEl.offsetHeight) {
|
|
182
|
-
additionalTopOffset = newEl.offsetHeight - boundRect.y + 10;
|
|
183
|
-
}
|
|
184
|
-
newEl.style.maxWidth = '500px';
|
|
185
|
-
newEl.style.position = 'absolute';
|
|
186
|
-
newEl.style.top = "".concat(boundRect.top + Math.abs(bodyRect.top) - newEl.offsetHeight - 10 + additionalTopOffset, "px");
|
|
187
|
-
newEl.style.zIndex = 99999;
|
|
188
|
-
var leftValue = "".concat(boundRect.left + Math.abs(bodyRect.left) + cursorItem.offsetWidth + 10, "px");
|
|
189
|
-
var rightValue = "".concat(boundRect.x, "px");
|
|
190
|
-
newEl.style.left = leftValue;
|
|
191
|
-
var leftAlignedWidth = newEl.offsetWidth;
|
|
192
|
-
newEl.style.left = 'unset';
|
|
193
|
-
newEl.style.right = rightValue;
|
|
194
|
-
var rightAlignedWidth = newEl.offsetWidth;
|
|
195
|
-
newEl.style.left = 'unset';
|
|
196
|
-
newEl.style.right = 'unset';
|
|
197
|
-
if (leftAlignedWidth >= rightAlignedWidth) {
|
|
198
|
-
newEl.style.left = leftValue;
|
|
199
|
-
} else {
|
|
200
|
-
newEl.style.right = rightValue;
|
|
201
|
-
}
|
|
202
|
-
document.body.addEventListener('click', listener);
|
|
203
|
-
}
|
|
204
|
-
}, 0);
|
|
205
|
-
};
|
|
206
|
-
var CharacterIcon = function CharacterIcon(_ref2) {
|
|
207
|
-
var letter = _ref2.letter;
|
|
208
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
209
|
-
style: {
|
|
210
|
-
fontSize: '24px',
|
|
211
|
-
lineHeight: '24px'
|
|
212
|
-
}
|
|
213
|
-
}, letter);
|
|
214
|
-
};
|
|
215
|
-
CharacterIcon.propTypes = {
|
|
216
|
-
letter: _propTypes["default"].string
|
|
217
|
-
};
|
|
218
|
-
function CharactersPlugin(opts) {
|
|
219
|
-
removeDialogs();
|
|
220
|
-
return {
|
|
221
|
-
name: 'characters',
|
|
222
|
-
toolbar: {
|
|
223
|
-
icon: /*#__PURE__*/_react["default"].createElement(CharacterIcon, {
|
|
224
|
-
letter: opts.characterIcon || _utils2.characterIcons[opts.language] || 'ñ'
|
|
225
|
-
}),
|
|
226
|
-
ariaLabel: "".concat(opts.language, " characters Toolbar"),
|
|
227
|
-
onClick: function onClick(value, onChange, getFocusedValue) {
|
|
228
|
-
var editorDOM = document.querySelector("[data-key=\"".concat(value.document.key, "\"]"));
|
|
229
|
-
var valueToUse = value;
|
|
230
|
-
var callback = function callback(_char, focus) {
|
|
231
|
-
if (getFocusedValue) {
|
|
232
|
-
valueToUse = getFocusedValue() || valueToUse;
|
|
233
|
-
}
|
|
234
|
-
if (_char) {
|
|
235
|
-
var change = valueToUse.change().insertTextByKey(valueToUse.anchorKey, valueToUse.anchorOffset, _char);
|
|
236
|
-
valueToUse = change.value;
|
|
237
|
-
log('[characters:insert]: ', value);
|
|
238
|
-
onChange(change);
|
|
239
|
-
}
|
|
240
|
-
log('[characters:click]');
|
|
241
|
-
if (focus) {
|
|
242
|
-
if (editorDOM) {
|
|
243
|
-
editorDOM.focus();
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
};
|
|
247
|
-
insertDialog({
|
|
248
|
-
editorDOM: editorDOM,
|
|
249
|
-
value: valueToUse,
|
|
250
|
-
callback: callback,
|
|
251
|
-
opts: opts
|
|
252
|
-
});
|
|
253
|
-
}
|
|
254
|
-
},
|
|
255
|
-
pluginStyles: function pluginStyles(node, parentNode, p) {
|
|
256
|
-
if (p) {
|
|
257
|
-
return {
|
|
258
|
-
position: 'absolute',
|
|
259
|
-
top: 'initial'
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9jbGllbnQiLCJfZGVidWciLCJfZ2V0IiwiX21hdGhUb29sYmFyIiwiX2N1c3RvbVBvcHBlciIsIl91dGlscyIsIl91dGlsczIiLCJfcHJvcFR5cGVzIiwib3duS2V5cyIsImUiLCJyIiwidCIsIk9iamVjdCIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVmaW5lUHJvcGVydHkiLCJsb2ciLCJkZWJ1ZyIsInJlbW92ZVBvcE92ZXJzIiwicHJldlBvcE92ZXJzIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwicyIsInJlbW92ZSIsInJlbW92ZURpYWxvZ3MiLCJleHBvcnRzIiwicHJldkRpYWxvZ3MiLCJpbnNlcnREaWFsb2ciLCJfcmVmIiwiZWRpdG9yRE9NIiwidmFsdWUiLCJjYWxsYmFjayIsIm9wdHMiLCJuZXdFbCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjb25maWdUb1VzZSIsImxhbmd1YWdlIiwic3BhbmlzaENvbmZpZyIsInNwZWNpYWxDb25maWciLCJjaGFyYWN0ZXJzIiwiaW5zZXJ0U25hY2tCYXIiLCJsYXlvdXRGb3JDaGFyYWN0ZXJzIiwicmVkdWNlIiwib2JqIiwiYXJyIiwiY29sdW1ucyIsInJvd3MiLCJwb3BvdmVyRWwiLCJwb3BvdmVyUm9vdCIsImNsb3NlUG9wT3ZlciIsInVubW91bnQiLCJyZW5kZXJQb3BPdmVyIiwiZXZlbnQiLCJlbCIsImluZm9TdHlsZSIsImZvbnRTaXplIiwibGluZUhlaWdodCIsImNyZWF0ZVJvb3QiLCJyZW5kZXIiLCJvbkNsb3NlIiwiYW5jaG9yRWwiLCJjdXJyZW50VGFyZ2V0IiwibGFiZWwiLCJzdHlsZSIsImRlc2NyaXB0aW9uIiwidW5pY29kZSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImZpcnN0Q2FsbE1hZGUiLCJsaXN0ZW5lciIsImZvY3VzSXNJbk1vZGFscyIsImNvbnRhaW5zIiwidGFyZ2V0IiwiZm9jdXNJc0luRWRpdG9yIiwiaGFuZGxlQ2xvc2UiLCJ1bmRlZmluZWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlQ2hhbmdlIiwidmFsIiwiUHVyZVRvb2xiYXIiLCJrZXlQYWRDaGFyYWN0ZXJSZWYiLCJzZXRLZXlwYWRJbnRlcmFjdGlvbiIsImF1dG9Gb2N1cyIsIm5vRGVjaW1hbCIsImhpZGVJbnB1dCIsIm5vTGF0ZXhIYW5kbGluZyIsImhpZGVEb25lQnV0dG9uQmFja2dyb3VuZCIsImxheW91dEZvcktleVBhZCIsImFkZGl0aW9uYWxLZXlzIiwibiIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJtYXAiLCJrIiwibmFtZSIsImdldCIsIndyaXRlIiwiY2F0ZWdvcnkiLCJleHRyYUNsYXNzIiwiZXh0cmFQcm9wcyIsImJvcmRlciIsImhhc1ByZXZpZXciLCJhY3Rpb25zIiwib25Nb3VzZUVudGVyIiwiZXYiLCJvbk1vdXNlTGVhdmUiLCJrZXlwYWRNb2RlIiwib25DaGFuZ2UiLCJvbkRvbmUiLCJkaWFsb2dSb290Iiwic2V0VGltZW91dCIsImN1cnNvckl0ZW0iLCJxdWVyeVNlbGVjdG9yIiwiYW5jaG9yS2V5IiwiYm9keVJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJib3VuZFJlY3QiLCJhZGRpdGlvbmFsVG9wT2Zmc2V0IiwieSIsIm9mZnNldEhlaWdodCIsIm1heFdpZHRoIiwicG9zaXRpb24iLCJ0b3AiLCJNYXRoIiwiYWJzIiwiekluZGV4IiwibGVmdFZhbHVlIiwibGVmdCIsIm9mZnNldFdpZHRoIiwicmlnaHRWYWx1ZSIsIngiLCJsZWZ0QWxpZ25lZFdpZHRoIiwicmlnaHQiLCJyaWdodEFsaWduZWRXaWR0aCIsImFkZEV2ZW50TGlzdGVuZXIiLCJDaGFyYWN0ZXJJY29uIiwiX3JlZjIiLCJsZXR0ZXIiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJDaGFyYWN0ZXJzUGx1Z2luIiwidG9vbGJhciIsImljb24iLCJjaGFyYWN0ZXJJY29uIiwiY2hhcmFjdGVySWNvbnMiLCJhcmlhTGFiZWwiLCJvbkNsaWNrIiwiZ2V0Rm9jdXNlZFZhbHVlIiwia2V5IiwidmFsdWVUb1VzZSIsImNoYXIiLCJmb2N1cyIsImNoYW5nZSIsImluc2VydFRleHRCeUtleSIsImFuY2hvck9mZnNldCIsInBsdWdpblN0eWxlcyIsIm5vZGUiLCJwYXJlbnROb2RlIiwicCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wbHVnaW5zL2NoYXJhY3RlcnMvaW5kZXguanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVSb290IH0gZnJvbSAncmVhY3QtZG9tL2NsaWVudCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0JztcblxuaW1wb3J0IHsgUHVyZVRvb2xiYXIgfSBmcm9tICdAcGllLWxpYi9tYXRoLXRvb2xiYXInO1xuXG5pbXBvcnQgQ3VzdG9tUG9wcGVyIGZyb20gJy4vY3VzdG9tLXBvcHBlcic7XG5pbXBvcnQgeyBpbnNlcnRTbmFja0JhciB9IGZyb20gJy4uL3Jlc3BBcmVhL3V0aWxzJztcbmltcG9ydCB7IGNoYXJhY3Rlckljb25zLCBzcGFuaXNoQ29uZmlnLCBzcGVjaWFsQ29uZmlnIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDpwbHVnaW5zOmNoYXJhY3RlcnMnKTtcblxuY29uc3QgcmVtb3ZlUG9wT3ZlcnMgPSAoKSA9PiB7XG4gIGNvbnN0IHByZXZQb3BPdmVycyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJyNtb3VzZS1vdmVyLXBvcG92ZXInKTtcblxuICBsb2coJ1tjaGFyYWN0ZXJzOnJlbW92ZVBvcE92ZXJzXScpO1xuICBwcmV2UG9wT3ZlcnMuZm9yRWFjaCgocykgPT4gcy5yZW1vdmUoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlRGlhbG9ncyA9ICgpID0+IHtcbiAgY29uc3QgcHJldkRpYWxvZ3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuaW5zZXJ0LWNoYXJhY3Rlci1kaWFsb2cnKTtcblxuICBsb2coJ1tjaGFyYWN0ZXJzOnJlbW92ZURpYWxvZ3NdJyk7XG4gIHByZXZEaWFsb2dzLmZvckVhY2goKHMpID0+IHMucmVtb3ZlKCkpO1xuICByZW1vdmVQb3BPdmVycygpO1xufTtcblxuY29uc3QgaW5zZXJ0RGlhbG9nID0gKHsgZWRpdG9yRE9NLCB2YWx1ZSwgY2FsbGJhY2ssIG9wdHMgfSkgPT4ge1xuICBjb25zdCBuZXdFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gIGxvZygnW2NoYXJhY3RlcnM6aW5zZXJ0RGlhbG9nXScpO1xuXG4gIHJlbW92ZURpYWxvZ3MoKTtcblxuICBuZXdFbC5jbGFzc05hbWUgPSAnaW5zZXJ0LWNoYXJhY3Rlci1kaWFsb2cnO1xuXG4gIGxldCBjb25maWdUb1VzZTtcblxuICBzd2l0Y2ggKHRydWUpIHtcbiAgICBjYXNlIG9wdHMubGFuZ3VhZ2UgPT09ICdzcGFuaXNoJzpcbiAgICAgIGNvbmZpZ1RvVXNlID0gc3BhbmlzaENvbmZpZztcbiAgICAgIGJyZWFrO1xuICAgIGNhc2Ugb3B0cy5sYW5ndWFnZSA9PT0gJ3NwZWNpYWwnOlxuICAgICAgY29uZmlnVG9Vc2UgPSBzcGVjaWFsQ29uZmlnO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGNvbmZpZ1RvVXNlID0gb3B0cztcbiAgfVxuXG4gIGlmICghY29uZmlnVG9Vc2UuY2hhcmFjdGVycykge1xuICAgIGluc2VydFNuYWNrQmFyKCdObyBjaGFyYWN0ZXJzIHByb3ZpZGVkIG9yIGxhbmd1YWdlIG5vdCByZWNvZ25pemVkJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbGF5b3V0Rm9yQ2hhcmFjdGVycyA9IGNvbmZpZ1RvVXNlLmNoYXJhY3RlcnMucmVkdWNlKFxuICAgIChvYmosIGFycikgPT4ge1xuICAgICAgaWYgKGFyci5sZW5ndGggPj0gb2JqLmNvbHVtbnMpIHtcbiAgICAgICAgb2JqLmNvbHVtbnMgPSBhcnIubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG4gICAgeyByb3dzOiBjb25maWdUb1VzZS5jaGFyYWN0ZXJzLmxlbmd0aCwgY29sdW1uczogMCB9LFxuICApO1xuXG4gIGxldCBwb3BvdmVyRWw7XG4gIGxldCBwb3BvdmVyUm9vdDtcblxuICBjb25zdCBjbG9zZVBvcE92ZXIgPSAoKSA9PiB7XG4gICAgaWYgKHBvcG92ZXJSb290KSB7XG4gICAgICBwb3BvdmVyUm9vdC51bm1vdW50KCk7XG4gICAgICBwb3BvdmVyUm9vdCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChwb3BvdmVyRWwpIHtcbiAgICAgIHBvcG92ZXJFbC5yZW1vdmUoKTtcbiAgICAgIHBvcG92ZXJFbCA9IG51bGw7XG4gICAgfVxuXG4gICAgcmVtb3ZlUG9wT3ZlcnMoKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJQb3BPdmVyID0gKGV2ZW50LCBlbCkgPT4ge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmZvU3R5bGUgPSB7IGZvbnRTaXplOiAnMjBweCcsIGxpbmVIZWlnaHQ6ICcyMHB4JyB9O1xuXG4gICAgY2xvc2VQb3BPdmVyKCk7XG5cbiAgICBwb3BvdmVyRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBwb3BvdmVyUm9vdCA9IGNyZWF0ZVJvb3QocG9wb3ZlckVsKTtcbiAgICBwb3BvdmVyUm9vdC5yZW5kZXIoXG4gICAgICA8Q3VzdG9tUG9wcGVyIG9uQ2xvc2U9e2Nsb3NlUG9wT3Zlcn0gYW5jaG9yRWw9e2V2ZW50LmN1cnJlbnRUYXJnZXR9PlxuICAgICAgICA8ZGl2PntlbC5sYWJlbH08L2Rpdj5cblxuICAgICAgICA8ZGl2IHN0eWxlPXtpbmZvU3R5bGV9PntlbC5kZXNjcmlwdGlvbn08L2Rpdj5cblxuICAgICAgICA8ZGl2IHN0eWxlPXtpbmZvU3R5bGV9PntlbC51bmljb2RlfTwvZGl2PlxuICAgICAgPC9DdXN0b21Qb3BwZXI+LFxuICAgICk7XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG5ld0VsKTtcbiAgfTtcblxuICBsZXQgZmlyc3RDYWxsTWFkZSA9IGZhbHNlO1xuXG4gIGNvbnN0IGxpc3RlbmVyID0gKGUpID0+IHtcbiAgICAvLyB0aGlzIHdpbGwgYmUgdHJpZ2dlcmVkIHJpZ2h0IGFmdGVyIHNldHRpbmcgaXQgYmVjYXVzZVxuICAgIC8vIHRoaXMgdG9vbGJhciBpcyBhZGRlZCBvbiB0aGUgbW91c2Vkb3duIGV2ZW50XG4gICAgLy8gc28gcmlnaHQgYWZ0ZXIgbW91c2V1cCwgdGhlIGNsaWNrIHdpbGwgYmUgdHJpZ2dlcmVkXG4gICAgaWYgKGZpcnN0Q2FsbE1hZGUpIHtcbiAgICAgIGNvbnN0IGZvY3VzSXNJbk1vZGFscyA9IG5ld0VsLmNvbnRhaW5zKGUudGFyZ2V0KSB8fCAocG9wb3ZlckVsICYmIHBvcG92ZXJFbC5jb250YWlucyhlLnRhcmdldCkpO1xuICAgICAgY29uc3QgZm9jdXNJc0luRWRpdG9yID0gZWRpdG9yRE9NLmNvbnRhaW5zKGUudGFyZ2V0KTtcblxuICAgICAgaWYgKCEoZm9jdXNJc0luTW9kYWxzIHx8IGZvY3VzSXNJbkVkaXRvcikpIHtcbiAgICAgICAgaGFuZGxlQ2xvc2UoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZmlyc3RDYWxsTWFkZSA9IHRydWU7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNsb3NlID0gKCkgPT4ge1xuICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgbmV3RWwucmVtb3ZlKCk7XG4gICAgY2xvc2VQb3BPdmVyKCk7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAodmFsKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjYWxsYmFjayh2YWwsIHRydWUpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBlbCA9IChcbiAgICA8UHVyZVRvb2xiYXJcbiAgICAgIGtleVBhZENoYXJhY3RlclJlZj17b3B0cy5rZXlQYWRDaGFyYWN0ZXJSZWZ9XG4gICAgICBzZXRLZXlwYWRJbnRlcmFjdGlvbj17b3B0cy5zZXRLZXlwYWRJbnRlcmFjdGlvbn1cbiAgICAgIGF1dG9Gb2N1c1xuICAgICAgbm9EZWNpbWFsXG4gICAgICBoaWRlSW5wdXRcbiAgICAgIG5vTGF0ZXhIYW5kbGluZ1xuICAgICAgaGlkZURvbmVCdXR0b25CYWNrZ3JvdW5kXG4gICAgICBsYXlvdXRGb3JLZXlQYWQ9e2xheW91dEZvckNoYXJhY3RlcnN9XG4gICAgICBhZGRpdGlvbmFsS2V5cz17Y29uZmlnVG9Vc2UuY2hhcmFjdGVycy5yZWR1Y2UoKGFyciwgbikgPT4ge1xuICAgICAgICBhcnIgPSBbXG4gICAgICAgICAgLi4uYXJyLFxuICAgICAgICAgIC4uLm4ubWFwKChrKSA9PiAoe1xuICAgICAgICAgICAgbmFtZTogZ2V0KGssICduYW1lJykgfHwgayxcbiAgICAgICAgICAgIHdyaXRlOiBnZXQoaywgJ3dyaXRlJykgfHwgayxcbiAgICAgICAgICAgIGxhYmVsOiBnZXQoaywgJ2xhYmVsJykgfHwgayxcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnY2hhcmFjdGVyJyxcbiAgICAgICAgICAgIGV4dHJhQ2xhc3M6ICdjaGFyYWN0ZXInLFxuICAgICAgICAgICAgZXh0cmFQcm9wczoge1xuICAgICAgICAgICAgICAuLi4oay5leHRyYVByb3BzIHx8IHt9KSxcbiAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAuLi4oay5leHRyYVByb3BzIHx8IHt9KS5zdHlsZSxcbiAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgIzAwMCcsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4uKGNvbmZpZ1RvVXNlLmhhc1ByZXZpZXdcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBhY3Rpb25zOiB7IG9uTW91c2VFbnRlcjogKGV2KSA9PiByZW5kZXJQb3BPdmVyKGV2LCBrKSwgb25Nb3VzZUxlYXZlOiBjbG9zZVBvcE92ZXIgfSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgXTtcblxuICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgfSwgW10pfVxuICAgICAga2V5cGFkTW9kZT1cImxhbmd1YWdlXCJcbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBvbkRvbmU9e2hhbmRsZUNsb3NlfVxuICAgIC8+XG4gICk7XG5cbiAgY29uc3QgZGlhbG9nUm9vdCA9IGNyZWF0ZVJvb3QobmV3RWwpO1xuICBkaWFsb2dSb290LnJlbmRlcihlbCk7XG5cbiAgLy8gVXNlIHNldFRpbWVvdXQgdG8gZW5zdXJlIHRoZSBlbGVtZW50IGlzIHJlbmRlcmVkIGJlZm9yZSBwb3NpdGlvbmluZ1xuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBjb25zdCBjdXJzb3JJdGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEta2V5PVwiJHt2YWx1ZS5hbmNob3JLZXl9XCJdYCk7XG5cbiAgICBpZiAoY3Vyc29ySXRlbSkge1xuICAgICAgY29uc3QgYm9keVJlY3QgPSBkb2N1bWVudC5ib2R5LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgYm91bmRSZWN0ID0gY3Vyc29ySXRlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChuZXdFbCk7XG5cbiAgICAgIC8vIHdoZW4gaGVpZ2h0IG9mIHRvb2xiYXIgZXhjZWVkcyBzY3JlZW4gLSBjYW4gaGFwcGVuIGluIHNjcm9sbGFibGUgY29udGV4dHNcbiAgICAgIGxldCBhZGRpdGlvbmFsVG9wT2Zmc2V0ID0gMDtcbiAgICAgIGlmIChib3VuZFJlY3QueSA8IG5ld0VsLm9mZnNldEhlaWdodCkge1xuICAgICAgICBhZGRpdGlvbmFsVG9wT2Zmc2V0ID0gbmV3RWwub2Zmc2V0SGVpZ2h0IC0gYm91bmRSZWN0LnkgKyAxMDtcbiAgICAgIH1cblxuICAgICAgbmV3RWwuc3R5bGUubWF4V2lkdGggPSAnNTAwcHgnO1xuICAgICAgbmV3RWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgbmV3RWwuc3R5bGUudG9wID0gYCR7Ym91bmRSZWN0LnRvcCArIE1hdGguYWJzKGJvZHlSZWN0LnRvcCkgLSBuZXdFbC5vZmZzZXRIZWlnaHQgLSAxMCArIGFkZGl0aW9uYWxUb3BPZmZzZXR9cHhgO1xuICAgICAgbmV3RWwuc3R5bGUuekluZGV4ID0gOTk5OTk7XG5cbiAgICAgIGNvbnN0IGxlZnRWYWx1ZSA9IGAke2JvdW5kUmVjdC5sZWZ0ICsgTWF0aC5hYnMoYm9keVJlY3QubGVmdCkgKyBjdXJzb3JJdGVtLm9mZnNldFdpZHRoICsgMTB9cHhgO1xuXG4gICAgICBjb25zdCByaWdodFZhbHVlID0gYCR7Ym91bmRSZWN0Lnh9cHhgO1xuXG4gICAgICBuZXdFbC5zdHlsZS5sZWZ0ID0gbGVmdFZhbHVlO1xuXG4gICAgICBjb25zdCBsZWZ0QWxpZ25lZFdpZHRoID0gbmV3RWwub2Zmc2V0V2lkdGg7XG5cbiAgICAgIG5ld0VsLnN0eWxlLmxlZnQgPSAndW5zZXQnO1xuICAgICAgbmV3RWwuc3R5bGUucmlnaHQgPSByaWdodFZhbHVlO1xuXG4gICAgICBjb25zdCByaWdodEFsaWduZWRXaWR0aCA9IG5ld0VsLm9mZnNldFdpZHRoO1xuXG4gICAgICBuZXdFbC5zdHlsZS5sZWZ0ID0gJ3Vuc2V0JztcbiAgICAgIG5ld0VsLnN0eWxlLnJpZ2h0ID0gJ3Vuc2V0JztcblxuICAgICAgaWYgKGxlZnRBbGlnbmVkV2lkdGggPj0gcmlnaHRBbGlnbmVkV2lkdGgpIHtcbiAgICAgICAgbmV3RWwuc3R5bGUubGVmdCA9IGxlZnRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld0VsLnN0eWxlLnJpZ2h0ID0gcmlnaHRWYWx1ZTtcbiAgICAgIH1cblxuICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0sIDApO1xufTtcblxuY29uc3QgQ2hhcmFjdGVySWNvbiA9ICh7IGxldHRlciB9KSA9PiAoXG4gIDxkaXZcbiAgICBzdHlsZT17e1xuICAgICAgZm9udFNpemU6ICcyNHB4JyxcbiAgICAgIGxpbmVIZWlnaHQ6ICcyNHB4JyxcbiAgICB9fVxuICA+XG4gICAge2xldHRlcn1cbiAgPC9kaXY+XG4pO1xuXG5DaGFyYWN0ZXJJY29uLnByb3BUeXBlcyA9IHtcbiAgbGV0dGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQ2hhcmFjdGVyc1BsdWdpbihvcHRzKSB7XG4gIHJlbW92ZURpYWxvZ3MoKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdjaGFyYWN0ZXJzJyxcbiAgICB0b29sYmFyOiB7XG4gICAgICBpY29uOiA8Q2hhcmFjdGVySWNvbiBsZXR0ZXI9e29wdHMuY2hhcmFjdGVySWNvbiB8fCBjaGFyYWN0ZXJJY29uc1tvcHRzLmxhbmd1YWdlXSB8fCAnw7EnfSAvPixcbiAgICAgIGFyaWFMYWJlbDogYCR7b3B0cy5sYW5ndWFnZX0gY2hhcmFjdGVycyBUb29sYmFyYCxcbiAgICAgIG9uQ2xpY2s6ICh2YWx1ZSwgb25DaGFuZ2UsIGdldEZvY3VzZWRWYWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBlZGl0b3JET00gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1rZXk9XCIke3ZhbHVlLmRvY3VtZW50LmtleX1cIl1gKTtcbiAgICAgICAgbGV0IHZhbHVlVG9Vc2UgPSB2YWx1ZTtcblxuICAgICAgICBjb25zdCBjYWxsYmFjayA9IChjaGFyLCBmb2N1cykgPT4ge1xuICAgICAgICAgIGlmIChnZXRGb2N1c2VkVmFsdWUpIHtcbiAgICAgICAgICAgIHZhbHVlVG9Vc2UgPSBnZXRGb2N1c2VkVmFsdWUoKSB8fCB2YWx1ZVRvVXNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjaGFyKSB7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2UgPSB2YWx1ZVRvVXNlLmNoYW5nZSgpLmluc2VydFRleHRCeUtleSh2YWx1ZVRvVXNlLmFuY2hvcktleSwgdmFsdWVUb1VzZS5hbmNob3JPZmZzZXQsIGNoYXIpO1xuXG4gICAgICAgICAgICB2YWx1ZVRvVXNlID0gY2hhbmdlLnZhbHVlO1xuICAgICAgICAgICAgbG9nKCdbY2hhcmFjdGVyczppbnNlcnRdOiAnLCB2YWx1ZSk7XG4gICAgICAgICAgICBvbkNoYW5nZShjaGFuZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxvZygnW2NoYXJhY3RlcnM6Y2xpY2tdJyk7XG5cbiAgICAgICAgICBpZiAoZm9jdXMpIHtcbiAgICAgICAgICAgIGlmIChlZGl0b3JET00pIHtcbiAgICAgICAgICAgICAgZWRpdG9yRE9NLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGluc2VydERpYWxvZyh7IGVkaXRvckRPTSwgdmFsdWU6IHZhbHVlVG9Vc2UsIGNhbGxiYWNrLCBvcHRzIH0pO1xuICAgICAgfSxcbiAgICB9LFxuXG4gICAgcGx1Z2luU3R5bGVzOiAobm9kZSwgcGFyZW50Tm9kZSwgcCkgPT4ge1xuICAgICAgaWYgKHApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICB0b3A6ICdpbml0aWFsJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsTUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsSUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssYUFBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sTUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sT0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsVUFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQW1DLFNBQUFTLFFBQUFDLENBQUEsRUFBQUMsQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBSixDQUFBLE9BQUFHLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFMLENBQUEsR0FBQUMsQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBWixD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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_debug","_get","_mathToolbar","_customPopper","_utils","_utils2","_propTypes","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","log","debug","removePopOvers","prevPopOvers","document","querySelectorAll","s","remove","removeDialogs","exports","prevDialogs","insertDialog","_ref","editorDOM","value","callback","opts","newEl","createElement","className","configToUse","language","spanishConfig","specialConfig","characters","insertSnackBar","layoutForCharacters","reduce","obj","arr","columns","rows","popoverEl","popoverRoot","closePopOver","unmount","renderPopOver","event","el","infoStyle","fontSize","lineHeight","createRoot","render","onClose","anchorEl","currentTarget","label","style","description","unicode","body","appendChild","firstCallMade","listener","focusIsInModals","contains","target","focusIsInEditor","handleClose","undefined","removeEventListener","handleChange","val","PureToolbar","keyPadCharacterRef","setKeypadInteraction","autoFocus","noDecimal","hideInput","noLatexHandling","hideDoneButtonBackground","layoutForKeyPad","additionalKeys","n","concat","_toConsumableArray2","map","k","name","get","write","category","extraClass","extraProps","border","hasPreview","actions","onMouseEnter","ev","onMouseLeave","keypadMode","onChange","onDone","dialogRoot","setTimeout","cursorItem","querySelector","anchorKey","bodyRect","getBoundingClientRect","boundRect","additionalTopOffset","y","offsetHeight","maxWidth","position","top","Math","abs","zIndex","leftValue","left","offsetWidth","rightValue","x","leftAlignedWidth","right","rightAlignedWidth","addEventListener","CharacterIcon","_ref2","letter","propTypes","PropTypes","string","CharactersPlugin","toolbar","icon","characterIcon","characterIcons","ariaLabel","onClick","getFocusedValue","key","valueToUse","char","focus","change","insertTextByKey","anchorOffset","pluginStyles","node","parentNode","p"],"sources":["../../../src/plugins/characters/index.jsx"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport debug from 'debug';\nimport get from 'lodash/get';\n\nimport { PureToolbar } from '@pie-lib/math-toolbar';\n\nimport CustomPopper from './custom-popper';\nimport { insertSnackBar } from '../respArea/utils';\nimport { characterIcons, spanishConfig, specialConfig } from './utils';\nimport PropTypes from 'prop-types';\n\nconst log = debug('@pie-lib:editable-html:plugins:characters');\n\nconst removePopOvers = () => {\n const prevPopOvers = document.querySelectorAll('#mouse-over-popover');\n\n log('[characters:removePopOvers]');\n prevPopOvers.forEach((s) => s.remove());\n};\n\nexport const removeDialogs = () => {\n const prevDialogs = document.querySelectorAll('.insert-character-dialog');\n\n log('[characters:removeDialogs]');\n prevDialogs.forEach((s) => s.remove());\n removePopOvers();\n};\n\nconst insertDialog = ({ editorDOM, value, callback, opts }) => {\n const newEl = document.createElement('div');\n\n log('[characters:insertDialog]');\n\n removeDialogs();\n\n newEl.className = 'insert-character-dialog';\n\n let configToUse;\n\n switch (true) {\n case opts.language === 'spanish':\n configToUse = spanishConfig;\n break;\n case opts.language === 'special':\n configToUse = specialConfig;\n break;\n default:\n configToUse = opts;\n }\n\n if (!configToUse.characters) {\n insertSnackBar('No characters provided or language not recognized');\n return;\n }\n\n const layoutForCharacters = configToUse.characters.reduce(\n (obj, arr) => {\n if (arr.length >= obj.columns) {\n obj.columns = arr.length;\n }\n\n return obj;\n },\n { rows: configToUse.characters.length, columns: 0 },\n );\n\n let popoverEl;\n let popoverRoot;\n\n const closePopOver = () => {\n if (popoverRoot) {\n popoverRoot.unmount();\n popoverRoot = null;\n }\n if (popoverEl) {\n popoverEl.remove();\n popoverEl = null;\n }\n\n removePopOvers();\n };\n\n const renderPopOver = (event, el) => {\n if (!event) {\n return;\n }\n\n const infoStyle = { fontSize: '20px', lineHeight: '20px' };\n\n closePopOver();\n\n popoverEl = document.createElement('div');\n popoverRoot = createRoot(popoverEl);\n popoverRoot.render(\n <CustomPopper onClose={closePopOver} anchorEl={event.currentTarget}>\n <div>{el.label}</div>\n\n <div style={infoStyle}>{el.description}</div>\n\n <div style={infoStyle}>{el.unicode}</div>\n </CustomPopper>,\n );\n\n document.body.appendChild(newEl);\n };\n\n let firstCallMade = false;\n\n const listener = (e) => {\n // this will be triggered right after setting it because\n // this toolbar is added on the mousedown event\n // so right after mouseup, the click will be triggered\n if (firstCallMade) {\n const focusIsInModals = newEl.contains(e.target) || (popoverEl && popoverEl.contains(e.target));\n const focusIsInEditor = editorDOM.contains(e.target);\n\n if (!(focusIsInModals || focusIsInEditor)) {\n handleClose();\n }\n } else {\n firstCallMade = true;\n }\n };\n\n const handleClose = () => {\n callback(undefined, true);\n newEl.remove();\n closePopOver();\n document.body.removeEventListener('click', listener);\n };\n\n const handleChange = (val) => {\n if (typeof val === 'string') {\n callback(val, true);\n }\n };\n\n const el = (\n <PureToolbar\n keyPadCharacterRef={opts.keyPadCharacterRef}\n setKeypadInteraction={opts.setKeypadInteraction}\n autoFocus\n noDecimal\n hideInput\n noLatexHandling\n hideDoneButtonBackground\n layoutForKeyPad={layoutForCharacters}\n additionalKeys={configToUse.characters.reduce((arr, n) => {\n arr = [\n ...arr,\n ...n.map((k) => ({\n name: get(k, 'name') || k,\n write: get(k, 'write') || k,\n label: get(k, 'label') || k,\n category: 'character',\n extraClass: 'character',\n extraProps: {\n ...(k.extraProps || {}),\n style: {\n ...(k.extraProps || {}).style,\n border: '1px solid #000',\n },\n },\n ...(configToUse.hasPreview\n ? {\n actions: { onMouseEnter: (ev) => renderPopOver(ev, k), onMouseLeave: closePopOver },\n }\n : {}),\n })),\n ];\n\n return arr;\n }, [])}\n keypadMode=\"language\"\n onChange={handleChange}\n onDone={handleClose}\n />\n );\n\n const dialogRoot = createRoot(newEl);\n dialogRoot.render(el);\n\n // Use setTimeout to ensure the element is rendered before positioning\n setTimeout(() => {\n const cursorItem = document.querySelector(`[data-key=\"${value.anchorKey}\"]`);\n\n if (cursorItem) {\n const bodyRect = document.body.getBoundingClientRect();\n const boundRect = cursorItem.getBoundingClientRect();\n\n document.body.appendChild(newEl);\n\n // when height of toolbar exceeds screen - can happen in scrollable contexts\n let additionalTopOffset = 0;\n if (boundRect.y < newEl.offsetHeight) {\n additionalTopOffset = newEl.offsetHeight - boundRect.y + 10;\n }\n\n newEl.style.maxWidth = '500px';\n newEl.style.position = 'absolute';\n newEl.style.top = `${boundRect.top + Math.abs(bodyRect.top) - newEl.offsetHeight - 10 + additionalTopOffset}px`;\n newEl.style.zIndex = 99999;\n\n const leftValue = `${boundRect.left + Math.abs(bodyRect.left) + cursorItem.offsetWidth + 10}px`;\n\n const rightValue = `${boundRect.x}px`;\n\n newEl.style.left = leftValue;\n\n const leftAlignedWidth = newEl.offsetWidth;\n\n newEl.style.left = 'unset';\n newEl.style.right = rightValue;\n\n const rightAlignedWidth = newEl.offsetWidth;\n\n newEl.style.left = 'unset';\n newEl.style.right = 'unset';\n\n if (leftAlignedWidth >= rightAlignedWidth) {\n newEl.style.left = leftValue;\n } else {\n newEl.style.right = rightValue;\n }\n\n document.body.addEventListener('click', listener);\n }\n }, 0);\n};\n\nconst CharacterIcon = ({ letter }) => (\n <div\n style={{\n fontSize: '24px',\n lineHeight: '24px',\n }}\n >\n {letter}\n </div>\n);\n\nCharacterIcon.propTypes = {\n letter: PropTypes.string,\n};\n\nexport default function CharactersPlugin(opts) {\n removeDialogs();\n\n return {\n name: 'characters',\n toolbar: {\n icon: <CharacterIcon letter={opts.characterIcon || characterIcons[opts.language] || 'ñ'} />,\n ariaLabel: `${opts.language} characters Toolbar`,\n onClick: (value, onChange, getFocusedValue) => {\n const editorDOM = document.querySelector(`[data-key=\"${value.document.key}\"]`);\n let valueToUse = value;\n\n const callback = (char, focus) => {\n if (getFocusedValue) {\n valueToUse = getFocusedValue() || valueToUse;\n }\n\n if (char) {\n const change = valueToUse.change().insertTextByKey(valueToUse.anchorKey, valueToUse.anchorOffset, char);\n\n valueToUse = change.value;\n log('[characters:insert]: ', value);\n onChange(change);\n }\n\n log('[characters:click]');\n\n if (focus) {\n if (editorDOM) {\n editorDOM.focus();\n }\n }\n };\n\n insertDialog({ editorDOM, value: valueToUse, callback, opts });\n },\n },\n\n pluginStyles: (node, parentNode, p) => {\n if (p) {\n return {\n position: 'absolute',\n top: 'initial',\n };\n }\n },\n };\n}\n"],"mappings":"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","ignoreList":[]}
|