@pie-lib/editable-html-tip-tap 1.0.5 → 1.0.7

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