@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,402 +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.CustomToolbarComp = void 0;
|
|
8
|
-
exports["default"] = MathPlugin;
|
|
9
|
-
exports.serialization = exports.inlineMath = void 0;
|
|
10
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
12
|
-
var _Functions = _interopRequireDefault(require("@mui/icons-material/Functions"));
|
|
13
|
-
var _slate = require("slate");
|
|
14
|
-
var _mathToolbar = require("@pie-lib/math-toolbar");
|
|
15
|
-
var _mathRendering = require("@pie-lib/math-rendering");
|
|
16
|
-
var _react = _interopRequireDefault(require("react"));
|
|
17
|
-
var _debug = _interopRequireDefault(require("debug"));
|
|
18
|
-
var _slatePropTypes = _interopRequireDefault(require("slate-prop-types"));
|
|
19
|
-
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
20
|
-
var _blockTags = require("../../block-tags");
|
|
21
|
-
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
|
|
22
|
-
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; }
|
|
23
|
-
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; }
|
|
24
|
-
var log = (0, _debug["default"])('@pie-lib:editable-html:plugins:math');
|
|
25
|
-
var TEXT_NODE = 3;
|
|
26
|
-
function generateAdditionalKeys() {
|
|
27
|
-
var keyData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
28
|
-
return keyData.map(function (key) {
|
|
29
|
-
return {
|
|
30
|
-
name: key,
|
|
31
|
-
latex: key,
|
|
32
|
-
write: key,
|
|
33
|
-
label: key
|
|
34
|
-
};
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// eslint-disable-next-line react/display-name
|
|
39
|
-
var CustomToolbarComp = exports.CustomToolbarComp = /*#__PURE__*/_react["default"].memo(function (props) {
|
|
40
|
-
var node = props.node,
|
|
41
|
-
value = props.value,
|
|
42
|
-
onFocus = props.onFocus,
|
|
43
|
-
onBlur = props.onBlur,
|
|
44
|
-
onClick = props.onClick;
|
|
45
|
-
var _ref = props || {},
|
|
46
|
-
pluginProps = _ref.pluginProps;
|
|
47
|
-
var _ref2 = pluginProps || {},
|
|
48
|
-
math = _ref2.math;
|
|
49
|
-
var _ref3 = math || {},
|
|
50
|
-
keypadMode = _ref3.keypadMode,
|
|
51
|
-
customKeys = _ref3.customKeys,
|
|
52
|
-
_ref3$controlledKeypa = _ref3.controlledKeypadMode,
|
|
53
|
-
controlledKeypadMode = _ref3$controlledKeypa === void 0 ? true : _ref3$controlledKeypa;
|
|
54
|
-
var onDone = function onDone(latex) {
|
|
55
|
-
var update = _objectSpread(_objectSpread({}, node.data.toObject()), {}, {
|
|
56
|
-
latex: latex
|
|
57
|
-
});
|
|
58
|
-
var change = value.change().setNodeByKey(node.key, {
|
|
59
|
-
data: update
|
|
60
|
-
});
|
|
61
|
-
var nextText = value.document.getNextText(node.key);
|
|
62
|
-
change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);
|
|
63
|
-
props.onToolbarDone(change, false);
|
|
64
|
-
};
|
|
65
|
-
var onChange = function onChange(latex) {
|
|
66
|
-
var update = _objectSpread(_objectSpread({}, node.data.toObject()), {}, {
|
|
67
|
-
latex: latex
|
|
68
|
-
});
|
|
69
|
-
var change = value.change().setNodeByKey(node.key, {
|
|
70
|
-
data: update
|
|
71
|
-
});
|
|
72
|
-
log('call onToolbarChange:', change);
|
|
73
|
-
props.onDataChange(node.key, update);
|
|
74
|
-
};
|
|
75
|
-
var latex = node.data.get('latex');
|
|
76
|
-
return /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathToolbar, {
|
|
77
|
-
autoFocus: true,
|
|
78
|
-
additionalKeys: generateAdditionalKeys(customKeys),
|
|
79
|
-
latex: latex,
|
|
80
|
-
onChange: onChange,
|
|
81
|
-
onDone: onDone,
|
|
82
|
-
onBlur: onBlur,
|
|
83
|
-
onFocus: onFocus,
|
|
84
|
-
onClick: onClick,
|
|
85
|
-
keypadMode: keypadMode,
|
|
86
|
-
controlledKeypadMode: controlledKeypadMode
|
|
87
|
-
});
|
|
88
|
-
}, function (prev, next) {
|
|
89
|
-
var node = prev.node,
|
|
90
|
-
_prev$pluginProps = prev.pluginProps,
|
|
91
|
-
_prev$pluginProps2 = _prev$pluginProps === void 0 ? {} : _prev$pluginProps,
|
|
92
|
-
_prev$pluginProps2$ma = _prev$pluginProps2.math,
|
|
93
|
-
_prev$pluginProps2$ma2 = _prev$pluginProps2$ma === void 0 ? {} : _prev$pluginProps2$ma,
|
|
94
|
-
keypadMode = _prev$pluginProps2$ma2.keypadMode,
|
|
95
|
-
controlledKeypadMode = _prev$pluginProps2$ma2.controlledKeypadMode;
|
|
96
|
-
var nodeNext = next.node,
|
|
97
|
-
_next$pluginProps = next.pluginProps,
|
|
98
|
-
_next$pluginProps2 = _next$pluginProps === void 0 ? {} : _next$pluginProps,
|
|
99
|
-
_next$pluginProps2$ma = _next$pluginProps2.math,
|
|
100
|
-
_next$pluginProps2$ma2 = _next$pluginProps2$ma === void 0 ? {} : _next$pluginProps2$ma,
|
|
101
|
-
keypadModeNext = _next$pluginProps2$ma2.keypadMode,
|
|
102
|
-
controlledKeypadModeNext = _next$pluginProps2$ma2.controlledKeypadMode;
|
|
103
|
-
var keypadModeChanged = keypadMode !== keypadModeNext;
|
|
104
|
-
var controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;
|
|
105
|
-
var equal = node.equals(nodeNext);
|
|
106
|
-
return equal && !keypadModeChanged && !controlledKeypadModeChanged;
|
|
107
|
-
});
|
|
108
|
-
CustomToolbarComp.propTypes = {
|
|
109
|
-
node: _slatePropTypes["default"].node.isRequired,
|
|
110
|
-
value: _slatePropTypes["default"].value,
|
|
111
|
-
onToolbarDone: _propTypes["default"].func,
|
|
112
|
-
onDataChange: _propTypes["default"].func,
|
|
113
|
-
onFocus: _propTypes["default"].func,
|
|
114
|
-
onClick: _propTypes["default"].func,
|
|
115
|
-
onBlur: _propTypes["default"].func
|
|
116
|
-
};
|
|
117
|
-
function MathPlugin(opts) {
|
|
118
|
-
MathPlugin.mathMlOptions = {
|
|
119
|
-
mmlOutput: opts.mmlOutput,
|
|
120
|
-
mmlEditing: opts.mmlEditing
|
|
121
|
-
};
|
|
122
|
-
return {
|
|
123
|
-
name: 'math',
|
|
124
|
-
toolbar: {
|
|
125
|
-
ariaLabel: 'Math Toolbar',
|
|
126
|
-
icon: /*#__PURE__*/_react["default"].createElement(_Functions["default"], null),
|
|
127
|
-
onClick: function onClick(value, onChange) {
|
|
128
|
-
log('[insertMath]');
|
|
129
|
-
var math = inlineMath();
|
|
130
|
-
var change = value.change().insertInline(math);
|
|
131
|
-
onChange(change);
|
|
132
|
-
},
|
|
133
|
-
supports: function supports(node) {
|
|
134
|
-
return node && node.object === 'inline' && node.type === 'math';
|
|
135
|
-
},
|
|
136
|
-
/**
|
|
137
|
-
* Return a react component function
|
|
138
|
-
* @param node {Slate.Node}
|
|
139
|
-
* @param value {Slate.Value}
|
|
140
|
-
* @param onDone {(change?: Slate.Change, finishEditing :boolea) => void} - a function to call once the toolbar
|
|
141
|
-
* has made any changes, call with the node.key and a data object.
|
|
142
|
-
*/
|
|
143
|
-
CustomToolbarComp: CustomToolbarComp
|
|
144
|
-
},
|
|
145
|
-
schema: {
|
|
146
|
-
document: {
|
|
147
|
-
match: [{
|
|
148
|
-
type: 'math'
|
|
149
|
-
}]
|
|
150
|
-
}
|
|
151
|
-
},
|
|
152
|
-
pluginStyles: function pluginStyles(node, parentNode, p) {
|
|
153
|
-
if (p) {
|
|
154
|
-
return {
|
|
155
|
-
position: 'absolute',
|
|
156
|
-
top: 'initial'
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
},
|
|
160
|
-
renderNode: function renderNode(props) {
|
|
161
|
-
if (props.node.type === 'math') {
|
|
162
|
-
log('[renderNode]: data:', props.node.data);
|
|
163
|
-
return /*#__PURE__*/_react["default"].createElement(_mathToolbar.MathPreview, props);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Here for rendering mathml content
|
|
168
|
-
*/
|
|
169
|
-
if (props.node.type === 'mathml') {
|
|
170
|
-
var html = props.node.data.get('html');
|
|
171
|
-
return /*#__PURE__*/_react["default"].createElement("span", (0, _extends2["default"])({}, props.attributes, {
|
|
172
|
-
dangerouslySetInnerHTML: {
|
|
173
|
-
__html: html
|
|
174
|
-
}
|
|
175
|
-
}));
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
MathPlugin.ROUND_BRACKETS = 'round_brackets';
|
|
181
|
-
MathPlugin.SQUARE_BRACKETS = 'square_brackets';
|
|
182
|
-
MathPlugin.DOLLAR = 'dollar';
|
|
183
|
-
MathPlugin.DOUBLE_DOLLAR = 'double_dollar';
|
|
184
|
-
MathPlugin.mathMlOptions = {};
|
|
185
|
-
MathPlugin.propTypes = {
|
|
186
|
-
attributes: _propTypes["default"].object,
|
|
187
|
-
node: _slatePropTypes["default"].node
|
|
188
|
-
};
|
|
189
|
-
var inlineMath = exports.inlineMath = function inlineMath() {
|
|
190
|
-
return _slate.Inline.create({
|
|
191
|
-
object: 'inline',
|
|
192
|
-
type: 'math',
|
|
193
|
-
isVoid: true,
|
|
194
|
-
data: {
|
|
195
|
-
latex: ''
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
};
|
|
199
|
-
var htmlDecode = function htmlDecode(input) {
|
|
200
|
-
var doc = new DOMParser().parseFromString(input, 'text/html');
|
|
201
|
-
return doc.documentElement.textContent;
|
|
202
|
-
};
|
|
203
|
-
var getTagName = function getTagName(el) {
|
|
204
|
-
return (el && el.tagName || '').toLowerCase();
|
|
205
|
-
};
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Makes sure that strings that contain stuff like:
|
|
209
|
-
* x<y are not transformed into x by the DOMParser because it thinks
|
|
210
|
-
* that <y is the start of a dom element tag
|
|
211
|
-
* @param input
|
|
212
|
-
* @returns {*}
|
|
213
|
-
*/
|
|
214
|
-
var arrowHandlingCase = function arrowHandlingCase(input) {
|
|
215
|
-
/*
|
|
216
|
-
If we have a < character followed by a letter
|
|
217
|
-
we make sure to replace it with a < sign instead
|
|
218
|
-
*/
|
|
219
|
-
return input.replace(/<([a-zA-Z]*)/g, '<$1');
|
|
220
|
-
};
|
|
221
|
-
function replaceLeftRight(latexInput) {
|
|
222
|
-
// for some reason, mmlToLatex parses () incorrectly - or at least in a way that our interpreter can not use them
|
|
223
|
-
// Replace '\\left.' and '\\right.' with an empty string
|
|
224
|
-
return latexInput.replace(/\\left\.\s*|\\right\.\s*/g, '');
|
|
225
|
-
}
|
|
226
|
-
var convertLatexToMathMl = function convertLatexToMathMl(_ref4) {
|
|
227
|
-
var latex = _ref4.latex,
|
|
228
|
-
decoded = _ref4.decoded,
|
|
229
|
-
wrapper = _ref4.wrapper;
|
|
230
|
-
var removeEmptyMos = function removeEmptyMos(mmlFromLatex) {
|
|
231
|
-
// Regular expression to match <mo>⁡</mo> and <mo ...>⁡</mo>, which get added when using log with base
|
|
232
|
-
// not sure why they get added, but they add an extra space which is not needed
|
|
233
|
-
var regex = /<mo(?: [^>]*)?>⁡<\/mo>/g;
|
|
234
|
-
|
|
235
|
-
// Replace all occurrences of the matched patterns
|
|
236
|
-
return mmlFromLatex.replace(regex, '');
|
|
237
|
-
};
|
|
238
|
-
var handled = arrowHandlingCase(decoded);
|
|
239
|
-
var latexToConvert = "<span data-latex=\"\" data-raw=\"".concat(handled, "\">").concat((0, _mathRendering.wrapMath)(handled, wrapper), "</span>");
|
|
240
|
-
|
|
241
|
-
// use math rendering (MathJax) to convert latex to mathMl
|
|
242
|
-
var mathMlFromLatex = (0, _mathRendering.renderMath)(latexToConvert, {
|
|
243
|
-
skipWaitForMathRenderingLib: true
|
|
244
|
-
});
|
|
245
|
-
|
|
246
|
-
// if renderMath returned the exact same string that we sent, it just means that the conversion could not be done
|
|
247
|
-
var conversionDidNotWork = (0, _isEqual["default"])(latexToConvert, mathMlFromLatex);
|
|
248
|
-
mathMlFromLatex = removeEmptyMos(mathMlFromLatex);
|
|
249
|
-
|
|
250
|
-
// we convert resulted mathml to latex to check if the resulted mathMl can be converted back to latex if user wants to edit it later
|
|
251
|
-
var latexFromMathMl = mathMlFromLatex ? (0, _mathRendering.mmlToLatex)(mathMlFromLatex) : '';
|
|
252
|
-
|
|
253
|
-
// we need to remove all the spaces from the latex to be able to compare it
|
|
254
|
-
var strippedL = latex.replace(/\s/g, '');
|
|
255
|
-
var strippedNewL = latexFromMathMl.replace(/\s/g, '');
|
|
256
|
-
|
|
257
|
-
// we check if the latex keeps his form after being converted to mathml and back to latex
|
|
258
|
-
// if it does, we can safely convert it to mathml
|
|
259
|
-
if (!(0, _isEqual["default"])(strippedL, strippedNewL)) {
|
|
260
|
-
var correctedLatex = replaceLeftRight(latexFromMathMl);
|
|
261
|
-
|
|
262
|
-
// As George requested in PD-3167, I will set the new mathML anyway, and also log differences
|
|
263
|
-
// if it doesn't, we keep the latex version
|
|
264
|
-
// eslint-disable-next-line no-console
|
|
265
|
-
console.log('This latex can not be safely converted to mathml so we will keep the latex version!!!', {
|
|
266
|
-
initialLatex: latex,
|
|
267
|
-
newLatex: latexFromMathMl,
|
|
268
|
-
correctedLatex: correctedLatex,
|
|
269
|
-
mathML: mathMlFromLatex,
|
|
270
|
-
conversionDidNotWork: conversionDidNotWork
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
return {
|
|
274
|
-
mathMlFromLatex: mathMlFromLatex,
|
|
275
|
-
conversionDidNotWork: conversionDidNotWork
|
|
276
|
-
};
|
|
277
|
-
};
|
|
278
|
-
var convertMathMlToLatex = function convertMathMlToLatex(mathMl) {
|
|
279
|
-
var htmlWithRemovedSpaces = mathMl.replaceAll(' ', ' ');
|
|
280
|
-
var htmlToUse = (0, _mathRendering.mmlToLatex)(htmlWithRemovedSpaces);
|
|
281
|
-
var latex = htmlDecode(htmlToUse);
|
|
282
|
-
|
|
283
|
-
// todo fix this in mathml-to-latex
|
|
284
|
-
return replaceLeftRight(latex);
|
|
285
|
-
};
|
|
286
|
-
var serialization = exports.serialization = {
|
|
287
|
-
deserialize: function deserialize(el) {
|
|
288
|
-
var tagName = getTagName(el);
|
|
289
|
-
/**
|
|
290
|
-
* This is used for when there's a wrapper over the mathml element.
|
|
291
|
-
* Because of this slate rule: "Only allow block nodes or inline and text nodes in blocks."
|
|
292
|
-
* The element that contains only the mathml is removed (along with the math) because it has
|
|
293
|
-
* an inline child and the block is of type block
|
|
294
|
-
* This is for legacy content only since our math rendering is valid for the core slate rules
|
|
295
|
-
*/
|
|
296
|
-
var hasMathChild = _blockTags.BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';
|
|
297
|
-
log('[deserialize] name: ', tagName);
|
|
298
|
-
|
|
299
|
-
/**
|
|
300
|
-
* This is here in order to be able to render mathml content
|
|
301
|
-
*/
|
|
302
|
-
if (tagName === 'math' || el.dataset && el.dataset.type === 'mathml' || hasMathChild) {
|
|
303
|
-
var mathMl = hasMathChild ? el.innerHTML : el.outerHTML;
|
|
304
|
-
if (MathPlugin.mathMlOptions.mmlEditing) {
|
|
305
|
-
var _unWrapMath = (0, _mathRendering.unWrapMath)(convertMathMlToLatex(mathMl)),
|
|
306
|
-
unwrapped = _unWrapMath.unwrapped,
|
|
307
|
-
wrapType = _unWrapMath.wrapType;
|
|
308
|
-
return {
|
|
309
|
-
object: 'inline',
|
|
310
|
-
type: 'math',
|
|
311
|
-
isVoid: true,
|
|
312
|
-
nodes: [],
|
|
313
|
-
data: {
|
|
314
|
-
latex: unwrapped,
|
|
315
|
-
wrapper: wrapType
|
|
316
|
-
}
|
|
317
|
-
};
|
|
318
|
-
}
|
|
319
|
-
return {
|
|
320
|
-
object: 'inline',
|
|
321
|
-
isVoid: true,
|
|
322
|
-
type: 'mathml',
|
|
323
|
-
data: {
|
|
324
|
-
html: mathMl
|
|
325
|
-
}
|
|
326
|
-
};
|
|
327
|
-
}
|
|
328
|
-
if (el.nodeType === TEXT_NODE) {
|
|
329
|
-
return;
|
|
330
|
-
}
|
|
331
|
-
if (tagName !== 'span') {
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
var hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');
|
|
335
|
-
if (hasLatex) {
|
|
336
|
-
var latex = htmlDecode(el.innerHTML);
|
|
337
|
-
var _unWrapMath2 = (0, _mathRendering.unWrapMath)(latex),
|
|
338
|
-
_unwrapped = _unWrapMath2.unwrapped,
|
|
339
|
-
_wrapType = _unWrapMath2.wrapType;
|
|
340
|
-
log('[deserialize]: noBrackets: ', _unwrapped, _wrapType);
|
|
341
|
-
return {
|
|
342
|
-
object: 'inline',
|
|
343
|
-
type: 'math',
|
|
344
|
-
isVoid: true,
|
|
345
|
-
nodes: [],
|
|
346
|
-
data: {
|
|
347
|
-
latex: _unwrapped,
|
|
348
|
-
wrapper: _wrapType
|
|
349
|
-
}
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
},
|
|
353
|
-
serialize: function serialize(object) {
|
|
354
|
-
if (object.type === 'math') {
|
|
355
|
-
var latex = object.data.get('latex');
|
|
356
|
-
var wrapper = object.data.get('wrapper');
|
|
357
|
-
var decoded = htmlDecode(arrowHandlingCase(latex));
|
|
358
|
-
log('[serialize] latex: ', latex);
|
|
359
|
-
if (MathPlugin.mathMlOptions.mmlOutput) {
|
|
360
|
-
var _convertLatexToMathMl = convertLatexToMathMl({
|
|
361
|
-
latex: latex,
|
|
362
|
-
decoded: decoded,
|
|
363
|
-
wrapper: wrapper
|
|
364
|
-
}),
|
|
365
|
-
mathMlFromLatex = _convertLatexToMathMl.mathMlFromLatex,
|
|
366
|
-
conversionDidNotWork = _convertLatexToMathMl.conversionDidNotWork;
|
|
367
|
-
if (conversionDidNotWork) {
|
|
368
|
-
// this means we could not convert latex to mathMl, so just return the latex version,
|
|
369
|
-
// same as we would do if mmlOutput would not be enabled
|
|
370
|
-
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
371
|
-
"data-latex": "",
|
|
372
|
-
"data-raw": decoded
|
|
373
|
-
}, (0, _mathRendering.wrapMath)(decoded, wrapper));
|
|
374
|
-
}
|
|
375
|
-
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
376
|
-
"data-type": "mathml",
|
|
377
|
-
dangerouslySetInnerHTML: {
|
|
378
|
-
__html: mathMlFromLatex
|
|
379
|
-
}
|
|
380
|
-
});
|
|
381
|
-
}
|
|
382
|
-
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
383
|
-
"data-latex": "",
|
|
384
|
-
"data-raw": decoded
|
|
385
|
-
}, (0, _mathRendering.wrapMath)(decoded, wrapper));
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
/**
|
|
389
|
-
* Here for rendering mathml content
|
|
390
|
-
*/
|
|
391
|
-
if (object.type === 'mathml') {
|
|
392
|
-
var html = object.data.get('html');
|
|
393
|
-
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
394
|
-
"data-type": "mathml",
|
|
395
|
-
dangerouslySetInnerHTML: {
|
|
396
|
-
__html: html
|
|
397
|
-
}
|
|
398
|
-
});
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
};
|
|
402
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRnVuY3Rpb25zIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfc2xhdGUiLCJfbWF0aFRvb2xiYXIiLCJfbWF0aFJlbmRlcmluZyIsIl9yZWFjdCIsIl9kZWJ1ZyIsIl9zbGF0ZVByb3BUeXBlcyIsIl9wcm9wVHlwZXMiLCJfYmxvY2tUYWdzIiwiX2lzRXF1YWwiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImxvZyIsImRlYnVnIiwiVEVYVF9OT0RFIiwiZ2VuZXJhdGVBZGRpdGlvbmFsS2V5cyIsImtleURhdGEiLCJ1bmRlZmluZWQiLCJtYXAiLCJrZXkiLCJuYW1lIiwibGF0ZXgiLCJ3cml0ZSIsImxhYmVsIiwiQ3VzdG9tVG9vbGJhckNvbXAiLCJleHBvcnRzIiwiUmVhY3QiLCJtZW1vIiwicHJvcHMiLCJub2RlIiwidmFsdWUiLCJvbkZvY3VzIiwib25CbHVyIiwib25DbGljayIsIl9yZWYiLCJwbHVnaW5Qcm9wcyIsIl9yZWYyIiwibWF0aCIsIl9yZWYzIiwia2V5cGFkTW9kZSIsImN1c3RvbUtleXMiLCJfcmVmMyRjb250cm9sbGVkS2V5cGEiLCJjb250cm9sbGVkS2V5cGFkTW9kZSIsIm9uRG9uZSIsInVwZGF0ZSIsImRhdGEiLCJ0b09iamVjdCIsImNoYW5nZSIsInNldE5vZGVCeUtleSIsIm5leHRUZXh0IiwiZG9jdW1lbnQiLCJnZXROZXh0VGV4dCIsIm1vdmVGb2N1c1RvIiwibW92ZUFuY2hvclRvIiwib25Ub29sYmFyRG9uZSIsIm9uQ2hhbmdlIiwib25EYXRhQ2hhbmdlIiwiZ2V0IiwiY3JlYXRlRWxlbWVudCIsIk1hdGhUb29sYmFyIiwiYXV0b0ZvY3VzIiwiYWRkaXRpb25hbEtleXMiLCJwcmV2IiwibmV4dCIsIl9wcmV2JHBsdWdpblByb3BzIiwiX3ByZXYkcGx1Z2luUHJvcHMyIiwiX3ByZXYkcGx1Z2luUHJvcHMyJG1hIiwiX3ByZXYkcGx1Z2luUHJvcHMyJG1hMiIsIm5vZGVOZXh0IiwiX25leHQkcGx1Z2luUHJvcHMiLCJfbmV4dCRwbHVnaW5Qcm9wczIiLCJfbmV4dCRwbHVnaW5Qcm9wczIkbWEiLCJfbmV4dCRwbHVnaW5Qcm9wczIkbWEyIiwia2V5cGFkTW9kZU5leHQiLCJjb250cm9sbGVkS2V5cGFkTW9kZU5leHQiLCJrZXlwYWRNb2RlQ2hhbmdlZCIsImNvbnRyb2xsZWRLZXlwYWRNb2RlQ2hhbmdlZCIsImVxdWFsIiwiZXF1YWxzIiwicHJvcFR5cGVzIiwiU2xhdGVQcm9wVHlwZXMiLCJpc1JlcXVpcmVkIiwiUHJvcFR5cGVzIiwiZnVuYyIsIk1hdGhQbHVnaW4iLCJvcHRzIiwibWF0aE1sT3B0aW9ucyIsIm1tbE91dHB1dCIsIm1tbEVkaXRpbmciLCJ0b29sYmFyIiwiYXJpYUxhYmVsIiwiaWNvbiIsImlubGluZU1hdGgiLCJpbnNlcnRJbmxpbmUiLCJzdXBwb3J0cyIsIm9iamVjdCIsInR5cGUiLCJzY2hlbWEiLCJtYXRjaCIsInBsdWdpblN0eWxlcyIsInBhcmVudE5vZGUiLCJwIiwicG9zaXRpb24iLCJ0b3AiLCJyZW5kZXJOb2RlIiwiTWF0aFByZXZpZXciLCJodG1sIiwiX2V4dGVuZHMyIiwiYXR0cmlidXRlcyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwiUk9VTkRfQlJBQ0tFVFMiLCJTUVVBUkVfQlJBQ0tFVFMiLCJET0xMQVIiLCJET1VCTEVfRE9MTEFSIiwiSW5saW5lIiwiY3JlYXRlIiwiaXNWb2lkIiwiaHRtbERlY29kZSIsImlucHV0IiwiZG9jIiwiRE9NUGFyc2VyIiwicGFyc2VGcm9tU3RyaW5nIiwiZG9jdW1lbnRFbGVtZW50IiwidGV4dENvbnRlbnQiLCJnZXRUYWdOYW1lIiwiZWwiLCJ0YWdOYW1lIiwidG9Mb3dlckNhc2UiLCJhcnJvd0hhbmRsaW5nQ2FzZSIsInJlcGxhY2UiLCJyZXBsYWNlTGVmdFJpZ2h0IiwibGF0ZXhJbnB1dCIsImNvbnZlcnRMYXRleFRvTWF0aE1sIiwiX3JlZjQiLCJkZWNvZGVkIiwid3JhcHBlciIsInJlbW92ZUVtcHR5TW9zIiwibW1sRnJvbUxhdGV4IiwicmVnZXgiLCJoYW5kbGVkIiwibGF0ZXhUb0NvbnZlcnQiLCJjb25jYXQiLCJ3cmFwTWF0aCIsIm1hdGhNbEZyb21MYXRleCIsInJlbmRlck1hdGgiLCJza2lwV2FpdEZvck1hdGhSZW5kZXJpbmdMaWIiLCJjb252ZXJzaW9uRGlkTm90V29yayIsImlzRXF1YWwiLCJsYXRleEZyb21NYXRoTWwiLCJtbWxUb0xhdGV4Iiwic3RyaXBwZWRMIiwic3RyaXBwZWROZXdMIiwiY29ycmVjdGVkTGF0ZXgiLCJjb25zb2xlIiwiaW5pdGlhbExhdGV4IiwibmV3TGF0ZXgiLCJtYXRoTUwiLCJjb252ZXJ0TWF0aE1sVG9MYXRleCIsIm1hdGhNbCIsImh0bWxXaXRoUmVtb3ZlZFNwYWNlcyIsInJlcGxhY2VBbGwiLCJodG1sVG9Vc2UiLCJzZXJpYWxpemF0aW9uIiwiZGVzZXJpYWxpemUiLCJoYXNNYXRoQ2hpbGQiLCJCTE9DS19UQUdTIiwiY2hpbGROb2RlcyIsImZpcnN0Q2hpbGQiLCJkYXRhc2V0IiwiaW5uZXJIVE1MIiwib3V0ZXJIVE1MIiwiX3VuV3JhcE1hdGgiLCJ1bldyYXBNYXRoIiwidW53cmFwcGVkIiwid3JhcFR5cGUiLCJub2RlcyIsIm5vZGVUeXBlIiwiaGFzTGF0ZXgiLCJoYXNBdHRyaWJ1dGUiLCJfdW5XcmFwTWF0aDIiLCJzZXJpYWxpemUiLCJfY29udmVydExhdGV4VG9NYXRoTWwiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy9tYXRoL2luZGV4LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRnVuY3Rpb25zIGZyb20gJ0BtdWkvaWNvbnMtbWF0ZXJpYWwvRnVuY3Rpb25zJztcbmltcG9ydCB7IElubGluZSB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IE1hdGhQcmV2aWV3LCBNYXRoVG9vbGJhciB9IGZyb20gJ0BwaWUtbGliL21hdGgtdG9vbGJhcic7XG5pbXBvcnQgeyB3cmFwTWF0aCwgdW5XcmFwTWF0aCwgbW1sVG9MYXRleCwgcmVuZGVyTWF0aCB9IGZyb20gJ0BwaWUtbGliL21hdGgtcmVuZGVyaW5nJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IFNsYXRlUHJvcFR5cGVzIGZyb20gJ3NsYXRlLXByb3AtdHlwZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuaW1wb3J0IHsgQkxPQ0tfVEFHUyB9IGZyb20gJy4uLy4uL2Jsb2NrLXRhZ3MnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuXG5jb25zdCBsb2cgPSBkZWJ1ZygnQHBpZS1saWI6ZWRpdGFibGUtaHRtbDpwbHVnaW5zOm1hdGgnKTtcblxuY29uc3QgVEVYVF9OT0RFID0gMztcblxuZnVuY3Rpb24gZ2VuZXJhdGVBZGRpdGlvbmFsS2V5cyhrZXlEYXRhID0gW10pIHtcbiAgcmV0dXJuIGtleURhdGEubWFwKChrZXkpID0+ICh7XG4gICAgbmFtZToga2V5LFxuICAgIGxhdGV4OiBrZXksXG4gICAgd3JpdGU6IGtleSxcbiAgICBsYWJlbDoga2V5LFxuICB9KSk7XG59XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9kaXNwbGF5LW5hbWVcbmV4cG9ydCBjb25zdCBDdXN0b21Ub29sYmFyQ29tcCA9IFJlYWN0Lm1lbW8oXG4gIChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgbm9kZSwgdmFsdWUsIG9uRm9jdXMsIG9uQmx1ciwgb25DbGljayB9ID0gcHJvcHM7XG4gICAgY29uc3QgeyBwbHVnaW5Qcm9wcyB9ID0gcHJvcHMgfHwge307XG4gICAgY29uc3QgeyBtYXRoIH0gPSBwbHVnaW5Qcm9wcyB8fCB7fTtcbiAgICBjb25zdCB7IGtleXBhZE1vZGUsIGN1c3RvbUtleXMsIGNvbnRyb2xsZWRLZXlwYWRNb2RlID0gdHJ1ZSB9ID0gbWF0aCB8fCB7fTtcblxuICAgIGNvbnN0IG9uRG9uZSA9IChsYXRleCkgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgICAuLi5ub2RlLmRhdGEudG9PYmplY3QoKSxcbiAgICAgICAgbGF0ZXgsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjaGFuZ2UgPSB2YWx1ZS5jaGFuZ2UoKS5zZXROb2RlQnlLZXkobm9kZS5rZXksIHsgZGF0YTogdXBkYXRlIH0pO1xuXG4gICAgICBjb25zdCBuZXh0VGV4dCA9IHZhbHVlLmRvY3VtZW50LmdldE5leHRUZXh0KG5vZGUua2V5KTtcblxuICAgICAgY2hhbmdlLm1vdmVGb2N1c1RvKG5leHRUZXh0LmtleSwgMCkubW92ZUFuY2hvclRvKG5leHRUZXh0LmtleSwgMCk7XG5cbiAgICAgIHByb3BzLm9uVG9vbGJhckRvbmUoY2hhbmdlLCBmYWxzZSk7XG4gICAgfTtcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKGxhdGV4KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgIC4uLm5vZGUuZGF0YS50b09iamVjdCgpLFxuICAgICAgICBsYXRleCxcbiAgICAgIH07XG4gICAgICBjb25zdCBjaGFuZ2UgPSB2YWx1ZS5jaGFuZ2UoKS5zZXROb2RlQnlLZXkobm9kZS5rZXksIHsgZGF0YTogdXBkYXRlIH0pO1xuICAgICAgbG9nKCdjYWxsIG9uVG9vbGJhckNoYW5nZTonLCBjaGFuZ2UpO1xuICAgICAgcHJvcHMub25EYXRhQ2hhbmdlKG5vZGUua2V5LCB1cGRhdGUpO1xuICAgIH07XG5cbiAgICBjb25zdCBsYXRleCA9IG5vZGUuZGF0YS5nZXQoJ2xhdGV4Jyk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1hdGhUb29sYmFyXG4gICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICBhZGRpdGlvbmFsS2V5cz17Z2VuZXJhdGVBZGRpdGlvbmFsS2V5cyhjdXN0b21LZXlzKX1cbiAgICAgICAgbGF0ZXg9e2xhdGV4fVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAgIG9uRG9uZT17b25Eb25lfVxuICAgICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAga2V5cGFkTW9kZT17a2V5cGFkTW9kZX1cbiAgICAgICAgY29udHJvbGxlZEtleXBhZE1vZGU9e2NvbnRyb2xsZWRLZXlwYWRNb2RlfVxuICAgICAgLz5cbiAgICApO1xuICB9LFxuICAocHJldiwgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHsgbm9kZSwgcGx1Z2luUHJvcHM6IHsgbWF0aDogeyBrZXlwYWRNb2RlLCBjb250cm9sbGVkS2V5cGFkTW9kZSB9ID0ge30gfSA9IHt9IH0gPSBwcmV2O1xuICAgIGNvbnN0IHtcbiAgICAgIG5vZGU6IG5vZGVOZXh0LFxuICAgICAgcGx1Z2luUHJvcHM6IHsgbWF0aDogeyBrZXlwYWRNb2RlOiBrZXlwYWRNb2RlTmV4dCwgY29udHJvbGxlZEtleXBhZE1vZGU6IGNvbnRyb2xsZWRLZXlwYWRNb2RlTmV4dCB9ID0ge30gfSA9IHt9LFxuICAgIH0gPSBuZXh0O1xuICAgIGNvbnN0IGtleXBhZE1vZGVDaGFuZ2VkID0ga2V5cGFkTW9kZSAhPT0ga2V5cGFkTW9kZU5leHQ7XG4gICAgY29uc3QgY29udHJvbGxlZEtleXBhZE1vZGVDaGFuZ2VkID0gY29udHJvbGxlZEtleXBhZE1vZGUgIT09IGNvbnRyb2xsZWRLZXlwYWRNb2RlTmV4dDtcblxuICAgIGNvbnN0IGVxdWFsID0gbm9kZS5lcXVhbHMobm9kZU5leHQpO1xuICAgIHJldHVybiBlcXVhbCAmJiAha2V5cGFkTW9kZUNoYW5nZWQgJiYgIWNvbnRyb2xsZWRLZXlwYWRNb2RlQ2hhbmdlZDtcbiAgfSxcbik7XG5cbkN1c3RvbVRvb2xiYXJDb21wLnByb3BUeXBlcyA9IHtcbiAgbm9kZTogU2xhdGVQcm9wVHlwZXMubm9kZS5pc1JlcXVpcmVkLFxuICB2YWx1ZTogU2xhdGVQcm9wVHlwZXMudmFsdWUsXG4gIG9uVG9vbGJhckRvbmU6IFByb3BUeXBlcy5mdW5jLFxuICBvbkRhdGFDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBvbkZvY3VzOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNYXRoUGx1Z2luKG9wdHMpIHtcbiAgTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zID0ge1xuICAgIG1tbE91dHB1dDogb3B0cy5tbWxPdXRwdXQsXG4gICAgbW1sRWRpdGluZzogb3B0cy5tbWxFZGl0aW5nLFxuICB9O1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogJ21hdGgnLFxuICAgIHRvb2xiYXI6IHtcbiAgICAgIGFyaWFMYWJlbDogJ01hdGggVG9vbGJhcicsXG4gICAgICBpY29uOiA8RnVuY3Rpb25zIC8+LFxuICAgICAgb25DbGljazogKHZhbHVlLCBvbkNoYW5nZSkgPT4ge1xuICAgICAgICBsb2coJ1tpbnNlcnRNYXRoXScpO1xuICAgICAgICBjb25zdCBtYXRoID0gaW5saW5lTWF0aCgpO1xuICAgICAgICBjb25zdCBjaGFuZ2UgPSB2YWx1ZS5jaGFuZ2UoKS5pbnNlcnRJbmxpbmUobWF0aCk7XG4gICAgICAgIG9uQ2hhbmdlKGNoYW5nZSk7XG4gICAgICB9LFxuICAgICAgc3VwcG9ydHM6IChub2RlKSA9PiBub2RlICYmIG5vZGUub2JqZWN0ID09PSAnaW5saW5lJyAmJiBub2RlLnR5cGUgPT09ICdtYXRoJyxcbiAgICAgIC8qKlxuICAgICAgICogUmV0dXJuIGEgcmVhY3QgY29tcG9uZW50IGZ1bmN0aW9uXG4gICAgICAgKiBAcGFyYW0gbm9kZSB7U2xhdGUuTm9kZX1cbiAgICAgICAqIEBwYXJhbSB2YWx1ZSB7U2xhdGUuVmFsdWV9XG4gICAgICAgKiBAcGFyYW0gb25Eb25lIHsoY2hhbmdlPzogU2xhdGUuQ2hhbmdlLCBmaW5pc2hFZGl0aW5nIDpib29sZWEpID0+IHZvaWR9IC0gYSBmdW5jdGlvbiB0byBjYWxsIG9uY2UgdGhlIHRvb2xiYXJcbiAgICAgICAqICAgaGFzIG1hZGUgYW55IGNoYW5nZXMsIGNhbGwgd2l0aCB0aGUgbm9kZS5rZXkgYW5kIGEgZGF0YSBvYmplY3QuXG4gICAgICAgKi9cbiAgICAgIEN1c3RvbVRvb2xiYXJDb21wLFxuICAgIH0sXG4gICAgc2NoZW1hOiB7XG4gICAgICBkb2N1bWVudDogeyBtYXRjaDogW3sgdHlwZTogJ21hdGgnIH1dIH0sXG4gICAgfSxcblxuICAgIHBsdWdpblN0eWxlczogKG5vZGUsIHBhcmVudE5vZGUsIHApID0+IHtcbiAgICAgIGlmIChwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgdG9wOiAnaW5pdGlhbCcsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbmRlck5vZGU6IChwcm9wcykgPT4ge1xuICAgICAgaWYgKHByb3BzLm5vZGUudHlwZSA9PT0gJ21hdGgnKSB7XG4gICAgICAgIGxvZygnW3JlbmRlck5vZGVdOiBkYXRhOicsIHByb3BzLm5vZGUuZGF0YSk7XG4gICAgICAgIHJldHVybiA8TWF0aFByZXZpZXcgey4uLnByb3BzfSAvPjtcbiAgICAgIH1cblxuICAgICAgLyoqXG4gICAgICAgKiBIZXJlIGZvciByZW5kZXJpbmcgbWF0aG1sIGNvbnRlbnRcbiAgICAgICAqL1xuICAgICAgaWYgKHByb3BzLm5vZGUudHlwZSA9PT0gJ21hdGhtbCcpIHtcbiAgICAgICAgY29uc3QgaHRtbCA9IHByb3BzLm5vZGUuZGF0YS5nZXQoJ2h0bWwnKTtcblxuICAgICAgICByZXR1cm4gPHNwYW4gey4uLnByb3BzLmF0dHJpYnV0ZXN9IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogaHRtbCB9fSAvPjtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG5NYXRoUGx1Z2luLlJPVU5EX0JSQUNLRVRTID0gJ3JvdW5kX2JyYWNrZXRzJztcbk1hdGhQbHVnaW4uU1FVQVJFX0JSQUNLRVRTID0gJ3NxdWFyZV9icmFja2V0cyc7XG5NYXRoUGx1Z2luLkRPTExBUiA9ICdkb2xsYXInO1xuTWF0aFBsdWdpbi5ET1VCTEVfRE9MTEFSID0gJ2RvdWJsZV9kb2xsYXInO1xuTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zID0ge307XG5cbk1hdGhQbHVnaW4ucHJvcFR5cGVzID0ge1xuICBhdHRyaWJ1dGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICBub2RlOiBTbGF0ZVByb3BUeXBlcy5ub2RlLFxufTtcblxuZXhwb3J0IGNvbnN0IGlubGluZU1hdGggPSAoKSA9PlxuICBJbmxpbmUuY3JlYXRlKHtcbiAgICBvYmplY3Q6ICdpbmxpbmUnLFxuICAgIHR5cGU6ICdtYXRoJyxcbiAgICBpc1ZvaWQ6IHRydWUsXG4gICAgZGF0YToge1xuICAgICAgbGF0ZXg6ICcnLFxuICAgIH0sXG4gIH0pO1xuXG5jb25zdCBodG1sRGVjb2RlID0gKGlucHV0KSA9PiB7XG4gIGNvbnN0IGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaW5wdXQsICd0ZXh0L2h0bWwnKTtcblxuICByZXR1cm4gZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDtcbn07XG5cbmNvbnN0IGdldFRhZ05hbWUgPSAoZWwpID0+IHtcbiAgcmV0dXJuICgoZWwgJiYgZWwudGFnTmFtZSkgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vKipcbiAqIE1ha2VzIHN1cmUgdGhhdCBzdHJpbmdzIHRoYXQgY29udGFpbiBzdHVmZiBsaWtlOlxuICogeDx5IGFyZSBub3QgdHJhbnNmb3JtZWQgaW50byB4IGJ5IHRoZSBET01QYXJzZXIgYmVjYXVzZSBpdCB0aGlua3NcbiAqIHRoYXQgPHkgaXMgdGhlIHN0YXJ0IG9mIGEgZG9tIGVsZW1lbnQgdGFnXG4gKiBAcGFyYW0gaW5wdXRcbiAqIEByZXR1cm5zIHsqfVxuICovXG5jb25zdCBhcnJvd0hhbmRsaW5nQ2FzZSA9IChpbnB1dCkgPT4ge1xuICAvKlxuICBJZiB3ZSBoYXZlIGEgPCBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgYSBsZXR0ZXJcbiAgd2UgbWFrZSBzdXJlIHRvIHJlcGxhY2UgaXQgd2l0aCBhICZsdDsgc2lnbiBpbnN0ZWFkXG4gICAqL1xuICByZXR1cm4gaW5wdXQucmVwbGFjZSgvPChbYS16QS1aXSopL2csICcmbHQ7JDEnKTtcbn07XG5cbmZ1bmN0aW9uIHJlcGxhY2VMZWZ0UmlnaHQobGF0ZXhJbnB1dCkge1xuICAvLyBmb3Igc29tZSByZWFzb24sIG1tbFRvTGF0ZXggcGFyc2VzICgpIGluY29ycmVjdGx5IC0gb3IgYXQgbGVhc3QgaW4gYSB3YXkgdGhhdCBvdXIgaW50ZXJwcmV0ZXIgY2FuIG5vdCB1c2UgdGhlbVxuICAvLyBSZXBsYWNlICdcXFxcbGVmdC4nIGFuZCAnXFxcXHJpZ2h0Licgd2l0aCBhbiBlbXB0eSBzdHJpbmdcbiAgcmV0dXJuIGxhdGV4SW5wdXQucmVwbGFjZSgvXFxcXGxlZnRcXC5cXHMqfFxcXFxyaWdodFxcLlxccyovZywgJycpO1xufVxuXG5jb25zdCBjb252ZXJ0TGF0ZXhUb01hdGhNbCA9ICh7IGxhdGV4LCBkZWNvZGVkLCB3cmFwcGVyIH0pID0+IHtcbiAgY29uc3QgcmVtb3ZlRW1wdHlNb3MgPSAobW1sRnJvbUxhdGV4KSA9PiB7XG4gICAgLy8gUmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIDxtbz4mI3gyMDYxOzwvbW8+IGFuZCA8bW8gLi4uPiYjeDIwNjE7PC9tbz4sIHdoaWNoIGdldCBhZGRlZCB3aGVuIHVzaW5nIGxvZyB3aXRoIGJhc2VcbiAgICAvLyBub3Qgc3VyZSB3aHkgdGhleSBnZXQgYWRkZWQsIGJ1dCB0aGV5IGFkZCBhbiBleHRyYSBzcGFjZSB3aGljaCBpcyBub3QgbmVlZGVkXG4gICAgY29uc3QgcmVnZXggPSAvPG1vKD86IFtePl0qKT8+JiN4MjA2MTs8XFwvbW8+L2c7XG5cbiAgICAvLyBSZXBsYWNlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgbWF0Y2hlZCBwYXR0ZXJuc1xuICAgIHJldHVybiBtbWxGcm9tTGF0ZXgucmVwbGFjZShyZWdleCwgJycpO1xuICB9O1xuICBjb25zdCBoYW5kbGVkID0gYXJyb3dIYW5kbGluZ0Nhc2UoZGVjb2RlZCk7XG5cbiAgY29uc3QgbGF0ZXhUb0NvbnZlcnQgPSBgPHNwYW4gZGF0YS1sYXRleD1cIlwiIGRhdGEtcmF3PVwiJHtoYW5kbGVkfVwiPiR7d3JhcE1hdGgoaGFuZGxlZCwgd3JhcHBlcil9PC9zcGFuPmA7XG5cbiAgLy8gdXNlIG1hdGggcmVuZGVyaW5nIChNYXRoSmF4KSB0byBjb252ZXJ0IGxhdGV4IHRvIG1hdGhNbFxuICBsZXQgbWF0aE1sRnJvbUxhdGV4ID0gcmVuZGVyTWF0aChsYXRleFRvQ29udmVydCwge1xuICAgIHNraXBXYWl0Rm9yTWF0aFJlbmRlcmluZ0xpYjogdHJ1ZSxcbiAgfSk7XG5cbiAgLy8gaWYgcmVuZGVyTWF0aCByZXR1cm5lZCB0aGUgZXhhY3Qgc2FtZSBzdHJpbmcgdGhhdCB3ZSBzZW50LCBpdCBqdXN0IG1lYW5zIHRoYXQgdGhlIGNvbnZlcnNpb24gY291bGQgbm90IGJlIGRvbmVcbiAgY29uc3QgY29udmVyc2lvbkRpZE5vdFdvcmsgPSBpc0VxdWFsKGxhdGV4VG9Db252ZXJ0LCBtYXRoTWxGcm9tTGF0ZXgpO1xuXG4gIG1hdGhNbEZyb21MYXRleCA9IHJlbW92ZUVtcHR5TW9zKG1hdGhNbEZyb21MYXRleCk7XG5cbiAgLy8gd2UgY29udmVydCByZXN1bHRlZCBtYXRobWwgdG8gbGF0ZXggdG8gY2hlY2sgaWYgdGhlIHJlc3VsdGVkIG1hdGhNbCBjYW4gYmUgY29udmVydGVkIGJhY2sgdG8gbGF0ZXggaWYgdXNlciB3YW50cyB0byBlZGl0IGl0IGxhdGVyXG4gIGNvbnN0IGxhdGV4RnJvbU1hdGhNbCA9IG1hdGhNbEZyb21MYXRleCA/IG1tbFRvTGF0ZXgobWF0aE1sRnJvbUxhdGV4KSA6ICcnO1xuXG4gIC8vIHdlIG5lZWQgdG8gcmVtb3ZlIGFsbCB0aGUgc3BhY2VzIGZyb20gdGhlIGxhdGV4IHRvIGJlIGFibGUgdG8gY29tcGFyZSBpdFxuICBjb25zdCBzdHJpcHBlZEwgPSBsYXRleC5yZXBsYWNlKC9cXHMvZywgJycpO1xuICBjb25zdCBzdHJpcHBlZE5ld0wgPSBsYXRleEZyb21NYXRoTWwucmVwbGFjZSgvXFxzL2csICcnKTtcblxuICAvLyB3ZSBjaGVjayBpZiB0aGUgbGF0ZXgga2VlcHMgaGlzIGZvcm0gYWZ0ZXIgYmVpbmcgY29udmVydGVkIHRvIG1hdGhtbCBhbmQgYmFjayB0byBsYXRleFxuICAvLyBpZiBpdCBkb2VzLCB3ZSBjYW4gc2FmZWx5IGNvbnZlcnQgaXQgdG8gbWF0aG1sXG4gIGlmICghaXNFcXVhbChzdHJpcHBlZEwsIHN0cmlwcGVkTmV3TCkpIHtcbiAgICBjb25zdCBjb3JyZWN0ZWRMYXRleCA9IHJlcGxhY2VMZWZ0UmlnaHQobGF0ZXhGcm9tTWF0aE1sKTtcblxuICAgIC8vIEFzIEdlb3JnZSByZXF1ZXN0ZWQgaW4gUEQtMzE2NywgSSB3aWxsIHNldCB0aGUgbmV3IG1hdGhNTCBhbnl3YXksIGFuZCBhbHNvIGxvZyBkaWZmZXJlbmNlc1xuICAgIC8vIGlmIGl0IGRvZXNuJ3QsIHdlIGtlZXAgdGhlIGxhdGV4IHZlcnNpb25cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKCdUaGlzIGxhdGV4IGNhbiBub3QgYmUgc2FmZWx5IGNvbnZlcnRlZCB0byBtYXRobWwgc28gd2Ugd2lsbCBrZWVwIHRoZSBsYXRleCB2ZXJzaW9uISEhJywge1xuICAgICAgaW5pdGlhbExhdGV4OiBsYXRleCxcbiAgICAgIG5ld0xhdGV4OiBsYXRleEZyb21NYXRoTWwsXG4gICAgICBjb3JyZWN0ZWRMYXRleCxcbiAgICAgIG1hdGhNTDogbWF0aE1sRnJvbUxhdGV4LFxuICAgICAgY29udmVyc2lvbkRpZE5vdFdvcmssXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4geyBtYXRoTWxGcm9tTGF0ZXgsIGNvbnZlcnNpb25EaWROb3RXb3JrIH07XG59O1xuXG5jb25zdCBjb252ZXJ0TWF0aE1sVG9MYXRleCA9IChtYXRoTWwpID0+IHtcbiAgY29uc3QgaHRtbFdpdGhSZW1vdmVkU3BhY2VzID0gbWF0aE1sLnJlcGxhY2VBbGwoJyZuYnNwOycsICcgJyk7XG4gIGNvbnN0IGh0bWxUb1VzZSA9IG1tbFRvTGF0ZXgoaHRtbFdpdGhSZW1vdmVkU3BhY2VzKTtcbiAgY29uc3QgbGF0ZXggPSBodG1sRGVjb2RlKGh0bWxUb1VzZSk7XG5cbiAgLy8gdG9kbyBmaXggdGhpcyBpbiBtYXRobWwtdG8tbGF0ZXhcbiAgcmV0dXJuIHJlcGxhY2VMZWZ0UmlnaHQobGF0ZXgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6YXRpb24gPSB7XG4gIGRlc2VyaWFsaXplKGVsKSB7XG4gICAgY29uc3QgdGFnTmFtZSA9IGdldFRhZ05hbWUoZWwpO1xuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdXNlZCBmb3Igd2hlbiB0aGVyZSdzIGEgd3JhcHBlciBvdmVyIHRoZSBtYXRobWwgZWxlbWVudC5cbiAgICAgKiBCZWNhdXNlIG9mIHRoaXMgc2xhdGUgcnVsZTogXCJPbmx5IGFsbG93IGJsb2NrIG5vZGVzIG9yIGlubGluZSBhbmQgdGV4dCBub2RlcyBpbiBibG9ja3MuXCJcbiAgICAgKiBUaGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIG9ubHkgdGhlIG1hdGhtbCBpcyByZW1vdmVkIChhbG9uZyB3aXRoIHRoZSBtYXRoKSBiZWNhdXNlIGl0IGhhc1xuICAgICAqIGFuIGlubGluZSBjaGlsZCBhbmQgdGhlIGJsb2NrIGlzIG9mIHR5cGUgYmxvY2tcbiAgICAgKiBUaGlzIGlzIGZvciBsZWdhY3kgY29udGVudCBvbmx5IHNpbmNlIG91ciBtYXRoIHJlbmRlcmluZyBpcyB2YWxpZCBmb3IgdGhlIGNvcmUgc2xhdGUgcnVsZXNcbiAgICAgKi9cbiAgICBjb25zdCBoYXNNYXRoQ2hpbGQgPSBCTE9DS19UQUdTW3RhZ05hbWVdICYmIGVsLmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICYmIGdldFRhZ05hbWUoZWwuZmlyc3RDaGlsZCkgPT09ICdtYXRoJztcbiAgICBsb2coJ1tkZXNlcmlhbGl6ZV0gbmFtZTogJywgdGFnTmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGhlcmUgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byByZW5kZXIgbWF0aG1sIGNvbnRlbnRcbiAgICAgKi9cbiAgICBpZiAodGFnTmFtZSA9PT0gJ21hdGgnIHx8IChlbC5kYXRhc2V0ICYmIGVsLmRhdGFzZXQudHlwZSA9PT0gJ21hdGhtbCcpIHx8IGhhc01hdGhDaGlsZCkge1xuICAgICAgY29uc3QgbWF0aE1sID0gaGFzTWF0aENoaWxkID8gZWwuaW5uZXJIVE1MIDogZWwub3V0ZXJIVE1MO1xuXG4gICAgICBpZiAoTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zLm1tbEVkaXRpbmcpIHtcbiAgICAgICAgY29uc3QgeyB1bndyYXBwZWQsIHdyYXBUeXBlIH0gPSB1bldyYXBNYXRoKGNvbnZlcnRNYXRoTWxUb0xhdGV4KG1hdGhNbCkpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgb2JqZWN0OiAnaW5saW5lJyxcbiAgICAgICAgICB0eXBlOiAnbWF0aCcsXG4gICAgICAgICAgaXNWb2lkOiB0cnVlLFxuICAgICAgICAgIG5vZGVzOiBbXSxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBsYXRleDogdW53cmFwcGVkLFxuICAgICAgICAgICAgd3JhcHBlcjogd3JhcFR5cGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgb2JqZWN0OiAnaW5saW5lJyxcbiAgICAgICAgaXNWb2lkOiB0cnVlLFxuICAgICAgICB0eXBlOiAnbWF0aG1sJyxcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIGh0bWw6IG1hdGhNbCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGVsLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGFnTmFtZSAhPT0gJ3NwYW4nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGFzTGF0ZXggPSBlbC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbGF0ZXgnKSB8fCBlbC5oYXNBdHRyaWJ1dGUoJ2xhdGV4Jyk7XG5cbiAgICBpZiAoaGFzTGF0ZXgpIHtcbiAgICAgIGNvbnN0IGxhdGV4ID0gaHRtbERlY29kZShlbC5pbm5lckhUTUwpO1xuICAgICAgY29uc3QgeyB1bndyYXBwZWQsIHdyYXBUeXBlIH0gPSB1bldyYXBNYXRoKGxhdGV4KTtcbiAgICAgIGxvZygnW2Rlc2VyaWFsaXplXTogbm9CcmFja2V0czogJywgdW53cmFwcGVkLCB3cmFwVHlwZSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBvYmplY3Q6ICdpbmxpbmUnLFxuICAgICAgICB0eXBlOiAnbWF0aCcsXG4gICAgICAgIGlzVm9pZDogdHJ1ZSxcbiAgICAgICAgbm9kZXM6IFtdLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbGF0ZXg6IHVud3JhcHBlZCxcbiAgICAgICAgICB3cmFwcGVyOiB3cmFwVHlwZSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9LFxuICBzZXJpYWxpemUob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdC50eXBlID09PSAnbWF0aCcpIHtcbiAgICAgIGNvbnN0IGxhdGV4ID0gb2JqZWN0LmRhdGEuZ2V0KCdsYXRleCcpO1xuICAgICAgY29uc3Qgd3JhcHBlciA9IG9iamVjdC5kYXRhLmdldCgnd3JhcHBlcicpO1xuICAgICAgY29uc3QgZGVjb2RlZCA9IGh0bWxEZWNvZGUoYXJyb3dIYW5kbGluZ0Nhc2UobGF0ZXgpKTtcblxuICAgICAgbG9nKCdbc2VyaWFsaXplXSBsYXRleDogJywgbGF0ZXgpO1xuXG4gICAgICBpZiAoTWF0aFBsdWdpbi5tYXRoTWxPcHRpb25zLm1tbE91dHB1dCkge1xuICAgICAgICBjb25zdCB7IG1hdGhNbEZyb21MYXRleCwgY29udmVyc2lvbkRpZE5vdFdvcmsgfSA9IGNvbnZlcnRMYXRleFRvTWF0aE1sKHsgbGF0ZXgsIGRlY29kZWQsIHdyYXBwZXIgfSk7XG5cbiAgICAgICAgaWYgKGNvbnZlcnNpb25EaWROb3RXb3JrKSB7XG4gICAgICAgICAgLy8gdGhpcyBtZWFucyB3ZSBjb3VsZCBub3QgY29udmVydCBsYXRleCB0byBtYXRoTWwsIHNvIGp1c3QgcmV0dXJuIHRoZSBsYXRleCB2ZXJzaW9uLFxuICAgICAgICAgIC8vIHNhbWUgYXMgd2Ugd291bGQgZG8gaWYgbW1sT3V0cHV0IHdvdWxkIG5vdCBiZSBlbmFibGVkXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxzcGFuIGRhdGEtbGF0ZXg9XCJcIiBkYXRhLXJhdz17ZGVjb2RlZH0+XG4gICAgICAgICAgICAgIHt3cmFwTWF0aChkZWNvZGVkLCB3cmFwcGVyKX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIDxzcGFuIGRhdGEtdHlwZT1cIm1hdGhtbFwiIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7IF9faHRtbDogbWF0aE1sRnJvbUxhdGV4IH19IC8+O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8c3BhbiBkYXRhLWxhdGV4PVwiXCIgZGF0YS1yYXc9e2RlY29kZWR9PlxuICAgICAgICAgIHt3cmFwTWF0aChkZWNvZGVkLCB3cmFwcGVyKX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZXJlIGZvciByZW5kZXJpbmcgbWF0aG1sIGNvbnRlbnRcbiAgICAgKi9cbiAgICBpZiAob2JqZWN0LnR5cGUgPT09ICdtYXRobWwnKSB7XG4gICAgICBjb25zdCBodG1sID0gb2JqZWN0LmRhdGEuZ2V0KCdodG1sJyk7XG5cbiAgICAgIHJldHVybiA8c3BhbiBkYXRhLXR5cGU9XCJtYXRobWxcIiBkYW5nZXJvdXNseVNldElubmVySFRNTD17eyBfX2h0bWw6IGh0bWwgfX0gLz47XG4gICAgfVxuICB9LFxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxjQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxlQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTyxVQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBUSxVQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxRQUFBLEdBQUFWLHNCQUFBLENBQUFDLE9BQUE7QUFBcUMsU0FBQVUsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFB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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_Functions","_interopRequireDefault","require","_slate","_mathToolbar","_mathRendering","_react","_debug","_slatePropTypes","_propTypes","_blockTags","_isEqual","ownKeys","e","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty2","getOwnPropertyDescriptors","defineProperties","defineProperty","log","debug","TEXT_NODE","generateAdditionalKeys","keyData","undefined","map","key","name","latex","write","label","CustomToolbarComp","exports","React","memo","props","node","value","onFocus","onBlur","onClick","_ref","pluginProps","_ref2","math","_ref3","keypadMode","customKeys","_ref3$controlledKeypa","controlledKeypadMode","onDone","update","data","toObject","change","setNodeByKey","nextText","document","getNextText","moveFocusTo","moveAnchorTo","onToolbarDone","onChange","onDataChange","get","createElement","MathToolbar","autoFocus","additionalKeys","prev","next","_prev$pluginProps","_prev$pluginProps2","_prev$pluginProps2$ma","_prev$pluginProps2$ma2","nodeNext","_next$pluginProps","_next$pluginProps2","_next$pluginProps2$ma","_next$pluginProps2$ma2","keypadModeNext","controlledKeypadModeNext","keypadModeChanged","controlledKeypadModeChanged","equal","equals","propTypes","SlatePropTypes","isRequired","PropTypes","func","MathPlugin","opts","mathMlOptions","mmlOutput","mmlEditing","toolbar","ariaLabel","icon","inlineMath","insertInline","supports","object","type","schema","match","pluginStyles","parentNode","p","position","top","renderNode","MathPreview","html","_extends2","attributes","dangerouslySetInnerHTML","__html","ROUND_BRACKETS","SQUARE_BRACKETS","DOLLAR","DOUBLE_DOLLAR","Inline","create","isVoid","htmlDecode","input","doc","DOMParser","parseFromString","documentElement","textContent","getTagName","el","tagName","toLowerCase","arrowHandlingCase","replace","replaceLeftRight","latexInput","convertLatexToMathMl","_ref4","decoded","wrapper","removeEmptyMos","mmlFromLatex","regex","handled","latexToConvert","concat","wrapMath","mathMlFromLatex","renderMath","skipWaitForMathRenderingLib","conversionDidNotWork","isEqual","latexFromMathMl","mmlToLatex","strippedL","strippedNewL","correctedLatex","console","initialLatex","newLatex","mathML","convertMathMlToLatex","mathMl","htmlWithRemovedSpaces","replaceAll","htmlToUse","serialization","deserialize","hasMathChild","BLOCK_TAGS","childNodes","firstChild","dataset","innerHTML","outerHTML","_unWrapMath","unWrapMath","unwrapped","wrapType","nodes","nodeType","hasLatex","hasAttribute","_unWrapMath2","serialize","_convertLatexToMathMl"],"sources":["../../../src/plugins/math/index.jsx"],"sourcesContent":["import Functions from '@mui/icons-material/Functions';\nimport { Inline } from 'slate';\nimport { MathPreview, MathToolbar } from '@pie-lib/math-toolbar';\nimport { wrapMath, unWrapMath, mmlToLatex, renderMath } from '@pie-lib/math-rendering';\nimport React from 'react';\nimport debug from 'debug';\nimport SlatePropTypes from 'slate-prop-types';\nimport PropTypes from 'prop-types';\n\nimport { BLOCK_TAGS } from '../../block-tags';\nimport isEqual from 'lodash/isEqual';\n\nconst log = debug('@pie-lib:editable-html:plugins:math');\n\nconst TEXT_NODE = 3;\n\nfunction generateAdditionalKeys(keyData = []) {\n return keyData.map((key) => ({\n name: key,\n latex: key,\n write: key,\n label: key,\n }));\n}\n\n// eslint-disable-next-line react/display-name\nexport const CustomToolbarComp = React.memo(\n (props) => {\n const { node, value, onFocus, onBlur, onClick } = props;\n const { pluginProps } = props || {};\n const { math } = pluginProps || {};\n const { keypadMode, customKeys, controlledKeypadMode = true } = math || {};\n\n const onDone = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n\n const change = value.change().setNodeByKey(node.key, { data: update });\n\n const nextText = value.document.getNextText(node.key);\n\n change.moveFocusTo(nextText.key, 0).moveAnchorTo(nextText.key, 0);\n\n props.onToolbarDone(change, false);\n };\n\n const onChange = (latex) => {\n const update = {\n ...node.data.toObject(),\n latex,\n };\n const change = value.change().setNodeByKey(node.key, { data: update });\n log('call onToolbarChange:', change);\n props.onDataChange(node.key, update);\n };\n\n const latex = node.data.get('latex');\n\n return (\n <MathToolbar\n autoFocus\n additionalKeys={generateAdditionalKeys(customKeys)}\n latex={latex}\n onChange={onChange}\n onDone={onDone}\n onBlur={onBlur}\n onFocus={onFocus}\n onClick={onClick}\n keypadMode={keypadMode}\n controlledKeypadMode={controlledKeypadMode}\n />\n );\n },\n (prev, next) => {\n const { node, pluginProps: { math: { keypadMode, controlledKeypadMode } = {} } = {} } = prev;\n const {\n node: nodeNext,\n pluginProps: { math: { keypadMode: keypadModeNext, controlledKeypadMode: controlledKeypadModeNext } = {} } = {},\n } = next;\n const keypadModeChanged = keypadMode !== keypadModeNext;\n const controlledKeypadModeChanged = controlledKeypadMode !== controlledKeypadModeNext;\n\n const equal = node.equals(nodeNext);\n return equal && !keypadModeChanged && !controlledKeypadModeChanged;\n },\n);\n\nCustomToolbarComp.propTypes = {\n node: SlatePropTypes.node.isRequired,\n value: SlatePropTypes.value,\n onToolbarDone: PropTypes.func,\n onDataChange: PropTypes.func,\n onFocus: PropTypes.func,\n onClick: PropTypes.func,\n onBlur: PropTypes.func,\n};\n\nexport default function MathPlugin(opts) {\n MathPlugin.mathMlOptions = {\n mmlOutput: opts.mmlOutput,\n mmlEditing: opts.mmlEditing,\n };\n\n return {\n name: 'math',\n toolbar: {\n ariaLabel: 'Math Toolbar',\n icon: <Functions />,\n onClick: (value, onChange) => {\n log('[insertMath]');\n const math = inlineMath();\n const change = value.change().insertInline(math);\n onChange(change);\n },\n supports: (node) => node && node.object === 'inline' && node.type === 'math',\n /**\n * Return a react component function\n * @param node {Slate.Node}\n * @param value {Slate.Value}\n * @param onDone {(change?: Slate.Change, finishEditing :boolea) => void} - a function to call once the toolbar\n * has made any changes, call with the node.key and a data object.\n */\n CustomToolbarComp,\n },\n schema: {\n document: { match: [{ type: 'math' }] },\n },\n\n pluginStyles: (node, parentNode, p) => {\n if (p) {\n return {\n position: 'absolute',\n top: 'initial',\n };\n }\n },\n\n renderNode: (props) => {\n if (props.node.type === 'math') {\n log('[renderNode]: data:', props.node.data);\n return <MathPreview {...props} />;\n }\n\n /**\n * Here for rendering mathml content\n */\n if (props.node.type === 'mathml') {\n const html = props.node.data.get('html');\n\n return <span {...props.attributes} dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n };\n}\n\nMathPlugin.ROUND_BRACKETS = 'round_brackets';\nMathPlugin.SQUARE_BRACKETS = 'square_brackets';\nMathPlugin.DOLLAR = 'dollar';\nMathPlugin.DOUBLE_DOLLAR = 'double_dollar';\nMathPlugin.mathMlOptions = {};\n\nMathPlugin.propTypes = {\n attributes: PropTypes.object,\n node: SlatePropTypes.node,\n};\n\nexport const inlineMath = () =>\n Inline.create({\n object: 'inline',\n type: 'math',\n isVoid: true,\n data: {\n latex: '',\n },\n });\n\nconst htmlDecode = (input) => {\n const doc = new DOMParser().parseFromString(input, 'text/html');\n\n return doc.documentElement.textContent;\n};\n\nconst getTagName = (el) => {\n return ((el && el.tagName) || '').toLowerCase();\n};\n\n/**\n * Makes sure that strings that contain stuff like:\n * x<y are not transformed into x by the DOMParser because it thinks\n * that <y is the start of a dom element tag\n * @param input\n * @returns {*}\n */\nconst arrowHandlingCase = (input) => {\n /*\n If we have a < character followed by a letter\n we make sure to replace it with a < sign instead\n */\n return input.replace(/<([a-zA-Z]*)/g, '<$1');\n};\n\nfunction replaceLeftRight(latexInput) {\n // for some reason, mmlToLatex parses () incorrectly - or at least in a way that our interpreter can not use them\n // Replace '\\\\left.' and '\\\\right.' with an empty string\n return latexInput.replace(/\\\\left\\.\\s*|\\\\right\\.\\s*/g, '');\n}\n\nconst convertLatexToMathMl = ({ latex, decoded, wrapper }) => {\n const removeEmptyMos = (mmlFromLatex) => {\n // Regular expression to match <mo>⁡</mo> and <mo ...>⁡</mo>, which get added when using log with base\n // not sure why they get added, but they add an extra space which is not needed\n const regex = /<mo(?: [^>]*)?>⁡<\\/mo>/g;\n\n // Replace all occurrences of the matched patterns\n return mmlFromLatex.replace(regex, '');\n };\n const handled = arrowHandlingCase(decoded);\n\n const latexToConvert = `<span data-latex=\"\" data-raw=\"${handled}\">${wrapMath(handled, wrapper)}</span>`;\n\n // use math rendering (MathJax) to convert latex to mathMl\n let mathMlFromLatex = renderMath(latexToConvert, {\n skipWaitForMathRenderingLib: true,\n });\n\n // if renderMath returned the exact same string that we sent, it just means that the conversion could not be done\n const conversionDidNotWork = isEqual(latexToConvert, mathMlFromLatex);\n\n mathMlFromLatex = removeEmptyMos(mathMlFromLatex);\n\n // we convert resulted mathml to latex to check if the resulted mathMl can be converted back to latex if user wants to edit it later\n const latexFromMathMl = mathMlFromLatex ? mmlToLatex(mathMlFromLatex) : '';\n\n // we need to remove all the spaces from the latex to be able to compare it\n const strippedL = latex.replace(/\\s/g, '');\n const strippedNewL = latexFromMathMl.replace(/\\s/g, '');\n\n // we check if the latex keeps his form after being converted to mathml and back to latex\n // if it does, we can safely convert it to mathml\n if (!isEqual(strippedL, strippedNewL)) {\n const correctedLatex = replaceLeftRight(latexFromMathMl);\n\n // As George requested in PD-3167, I will set the new mathML anyway, and also log differences\n // if it doesn't, we keep the latex version\n // eslint-disable-next-line no-console\n console.log('This latex can not be safely converted to mathml so we will keep the latex version!!!', {\n initialLatex: latex,\n newLatex: latexFromMathMl,\n correctedLatex,\n mathML: mathMlFromLatex,\n conversionDidNotWork,\n });\n }\n\n return { mathMlFromLatex, conversionDidNotWork };\n};\n\nconst convertMathMlToLatex = (mathMl) => {\n const htmlWithRemovedSpaces = mathMl.replaceAll(' ', ' ');\n const htmlToUse = mmlToLatex(htmlWithRemovedSpaces);\n const latex = htmlDecode(htmlToUse);\n\n // todo fix this in mathml-to-latex\n return replaceLeftRight(latex);\n};\n\nexport const serialization = {\n deserialize(el) {\n const tagName = getTagName(el);\n /**\n * This is used for when there's a wrapper over the mathml element.\n * Because of this slate rule: \"Only allow block nodes or inline and text nodes in blocks.\"\n * The element that contains only the mathml is removed (along with the math) because it has\n * an inline child and the block is of type block\n * This is for legacy content only since our math rendering is valid for the core slate rules\n */\n const hasMathChild = BLOCK_TAGS[tagName] && el.childNodes.length === 1 && getTagName(el.firstChild) === 'math';\n log('[deserialize] name: ', tagName);\n\n /**\n * This is here in order to be able to render mathml content\n */\n if (tagName === 'math' || (el.dataset && el.dataset.type === 'mathml') || hasMathChild) {\n const mathMl = hasMathChild ? el.innerHTML : el.outerHTML;\n\n if (MathPlugin.mathMlOptions.mmlEditing) {\n const { unwrapped, wrapType } = unWrapMath(convertMathMlToLatex(mathMl));\n\n return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n\n return {\n object: 'inline',\n isVoid: true,\n type: 'mathml',\n data: {\n html: mathMl,\n },\n };\n }\n\n if (el.nodeType === TEXT_NODE) {\n return;\n }\n\n if (tagName !== 'span') {\n return;\n }\n\n const hasLatex = el.hasAttribute('data-latex') || el.hasAttribute('latex');\n\n if (hasLatex) {\n const latex = htmlDecode(el.innerHTML);\n const { unwrapped, wrapType } = unWrapMath(latex);\n log('[deserialize]: noBrackets: ', unwrapped, wrapType);\n return {\n object: 'inline',\n type: 'math',\n isVoid: true,\n nodes: [],\n data: {\n latex: unwrapped,\n wrapper: wrapType,\n },\n };\n }\n },\n serialize(object) {\n if (object.type === 'math') {\n const latex = object.data.get('latex');\n const wrapper = object.data.get('wrapper');\n const decoded = htmlDecode(arrowHandlingCase(latex));\n\n log('[serialize] latex: ', latex);\n\n if (MathPlugin.mathMlOptions.mmlOutput) {\n const { mathMlFromLatex, conversionDidNotWork } = convertLatexToMathMl({ latex, decoded, wrapper });\n\n if (conversionDidNotWork) {\n // this means we could not convert latex to mathMl, so just return the latex version,\n // same as we would do if mmlOutput would not be enabled\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: mathMlFromLatex }} />;\n }\n\n return (\n <span data-latex=\"\" data-raw={decoded}>\n {wrapMath(decoded, wrapper)}\n </span>\n );\n }\n\n /**\n * Here for rendering mathml content\n */\n if (object.type === 'mathml') {\n const html = object.data.get('html');\n\n return <span data-type=\"mathml\" dangerouslySetInnerHTML={{ __html: html }} />;\n }\n },\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _ = _interopRequireDefault(require("../"));
|
|
5
|
-
describe('media plugin', function () {
|
|
6
|
-
var imagePlugin = (0, _["default"])('video');
|
|
7
|
-
describe('normalizeNode', function () {
|
|
8
|
-
it('should exit the function if the node is not of type document', function () {
|
|
9
|
-
var returnValue = imagePlugin.normalizeNode({
|
|
10
|
-
object: 'image'
|
|
11
|
-
});
|
|
12
|
-
expect(returnValue).toEqual(undefined);
|
|
13
|
-
});
|
|
14
|
-
it('should exit there are no changes needed', function () {
|
|
15
|
-
var nodes = [{
|
|
16
|
-
object: 'text',
|
|
17
|
-
text: 'Before Media'
|
|
18
|
-
}, {
|
|
19
|
-
type: 'video'
|
|
20
|
-
}, {
|
|
21
|
-
object: 'text',
|
|
22
|
-
text: 'After Media'
|
|
23
|
-
}];
|
|
24
|
-
var returnValue = imagePlugin.normalizeNode({
|
|
25
|
-
object: 'document',
|
|
26
|
-
findDescendant: jest.fn(function (callback) {
|
|
27
|
-
nodes.forEach(function (n) {
|
|
28
|
-
return callback(n);
|
|
29
|
-
});
|
|
30
|
-
})
|
|
31
|
-
});
|
|
32
|
-
expect(returnValue).toEqual(undefined);
|
|
33
|
-
});
|
|
34
|
-
it('should return a function if there is a node with an empty text before a media element', function () {
|
|
35
|
-
var nodes = [{
|
|
36
|
-
object: 'text',
|
|
37
|
-
text: '',
|
|
38
|
-
key: '1'
|
|
39
|
-
}, {
|
|
40
|
-
type: 'video',
|
|
41
|
-
key: '2'
|
|
42
|
-
}, {
|
|
43
|
-
object: 'text',
|
|
44
|
-
text: 'After Media',
|
|
45
|
-
key: '3'
|
|
46
|
-
}];
|
|
47
|
-
var findDescendant = jest.fn(function (callback) {
|
|
48
|
-
nodes.forEach(function (n) {
|
|
49
|
-
return callback(n);
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
var change = {
|
|
53
|
-
withoutNormalization: jest.fn(function (callback) {
|
|
54
|
-
callback();
|
|
55
|
-
}),
|
|
56
|
-
insertTextByKey: jest.fn()
|
|
57
|
-
};
|
|
58
|
-
var returnValue = imagePlugin.normalizeNode({
|
|
59
|
-
object: 'document',
|
|
60
|
-
findDescendant: findDescendant
|
|
61
|
-
});
|
|
62
|
-
expect(returnValue).toEqual(expect.any(Function));
|
|
63
|
-
returnValue(change);
|
|
64
|
-
expect(change.withoutNormalization).toHaveBeenCalledWith(expect.any(Function));
|
|
65
|
-
expect(change.insertTextByKey).toHaveBeenCalledWith('1', 0, ' ');
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJkZXNjcmliZSIsImltYWdlUGx1Z2luIiwiTWVkaWFQbHVnaW4iLCJpdCIsInJldHVyblZhbHVlIiwibm9ybWFsaXplTm9kZSIsIm9iamVjdCIsImV4cGVjdCIsInRvRXF1YWwiLCJ1bmRlZmluZWQiLCJub2RlcyIsInRleHQiLCJ0eXBlIiwiZmluZERlc2NlbmRhbnQiLCJqZXN0IiwiZm4iLCJjYWxsYmFjayIsImZvckVhY2giLCJuIiwia2V5IiwiY2hhbmdlIiwid2l0aG91dE5vcm1hbGl6YXRpb24iLCJpbnNlcnRUZXh0QnlLZXkiLCJhbnkiLCJGdW5jdGlvbiIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbnMvbWVkaWEvX190ZXN0c19fL2luZGV4LnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE1lZGlhUGx1Z2luIGZyb20gJy4uLyc7XG5cbmRlc2NyaWJlKCdtZWRpYSBwbHVnaW4nLCAoKSA9PiB7XG4gIGNvbnN0IGltYWdlUGx1Z2luID0gTWVkaWFQbHVnaW4oJ3ZpZGVvJyk7XG5cbiAgZGVzY3JpYmUoJ25vcm1hbGl6ZU5vZGUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBleGl0IHRoZSBmdW5jdGlvbiBpZiB0aGUgbm9kZSBpcyBub3Qgb2YgdHlwZSBkb2N1bWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gaW1hZ2VQbHVnaW4ubm9ybWFsaXplTm9kZSh7IG9iamVjdDogJ2ltYWdlJyB9KTtcblxuICAgICAgZXhwZWN0KHJldHVyblZhbHVlKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4aXQgdGhlcmUgYXJlIG5vIGNoYW5nZXMgbmVlZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9kZXMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvYmplY3Q6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiAnQmVmb3JlIE1lZGlhJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICd2aWRlbycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvYmplY3Q6ICd0ZXh0JyxcbiAgICAgICAgICB0ZXh0OiAnQWZ0ZXIgTWVkaWEnLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gaW1hZ2VQbHVnaW4ubm9ybWFsaXplTm9kZSh7XG4gICAgICAgIG9iamVjdDogJ2RvY3VtZW50JyxcbiAgICAgICAgZmluZERlc2NlbmRhbnQ6IGplc3QuZm4oKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgbm9kZXMuZm9yRWFjaCgobikgPT4gY2FsbGJhY2sobikpO1xuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJldHVyblZhbHVlKS50b0VxdWFsKHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBhIGZ1bmN0aW9uIGlmIHRoZXJlIGlzIGEgbm9kZSB3aXRoIGFuIGVtcHR5IHRleHQgYmVmb3JlIGEgbWVkaWEgZWxlbWVudCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG5vZGVzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb2JqZWN0OiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogJycsXG4gICAgICAgICAga2V5OiAnMScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndmlkZW8nLFxuICAgICAgICAgIGtleTogJzInLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgb2JqZWN0OiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogJ0FmdGVyIE1lZGlhJyxcbiAgICAgICAgICBrZXk6ICczJyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgICBjb25zdCBmaW5kRGVzY2VuZGFudCA9IGplc3QuZm4oKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIG5vZGVzLmZvckVhY2goKG4pID0+IGNhbGxiYWNrKG4pKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2hhbmdlID0ge1xuICAgICAgICB3aXRob3V0Tm9ybWFsaXphdGlvbjogamVzdC5mbigoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9KSxcbiAgICAgICAgaW5zZXJ0VGV4dEJ5S2V5OiBqZXN0LmZuKCksXG4gICAgICB9O1xuICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBpbWFnZVBsdWdpbi5ub3JtYWxpemVOb2RlKHtcbiAgICAgICAgb2JqZWN0OiAnZG9jdW1lbnQnLFxuICAgICAgICBmaW5kRGVzY2VuZGFudCxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmV0dXJuVmFsdWUpLnRvRXF1YWwoZXhwZWN0LmFueShGdW5jdGlvbikpO1xuXG4gICAgICByZXR1cm5WYWx1ZShjaGFuZ2UpO1xuXG4gICAgICBleHBlY3QoY2hhbmdlLndpdGhvdXROb3JtYWxpemF0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KEZ1bmN0aW9uKSk7XG4gICAgICBleHBlY3QoY2hhbmdlLmluc2VydFRleHRCeUtleSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzEnLCAwLCAnICcpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFBQSxDQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxZQUFNO0VBQzdCLElBQU1DLFdBQVcsR0FBRyxJQUFBQyxZQUFXLEVBQUMsT0FBTyxDQUFDO0VBRXhDRixRQUFRLENBQUMsZUFBZSxFQUFFLFlBQU07SUFDOUJHLEVBQUUsQ0FBQyw4REFBOEQsRUFBRSxZQUFNO01BQ3ZFLElBQU1DLFdBQVcsR0FBR0gsV0FBVyxDQUFDSSxhQUFhLENBQUM7UUFBRUMsTUFBTSxFQUFFO01B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
|