@pie-lib/math-input-mathlive 1.0.11 → 1.0.13
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/lib/__tests__/composites.test.js +1 -1
- package/lib/__tests__/drop-in-compat.test.js +1 -1
- package/lib/__tests__/index.test.js +1 -1
- package/lib/__tests__/input-imperative.test.js +1 -1
- package/lib/__tests__/keypad-label.test.js +99 -1
- package/lib/__tests__/keypad-render.test.js +1 -1
- package/lib/__tests__/latex-bridge.test.js +22 -1
- package/lib/__tests__/mathlive-instance.test.js +137 -1
- package/lib/__tests__/mount-race.test.js +4 -1
- package/lib/__tests__/static-prompts.test.js +124 -1
- package/lib/__tests__/tmp-markup.test.js +26 -0
- package/lib/keypad/index.js +4 -4
- package/lib/keypad/index.js.map +1 -1
- package/lib/keys/misc.js +9 -2
- package/lib/keys/misc.js.map +1 -1
- package/lib/latex-bridge.js +30 -0
- package/lib/latex-bridge.js.map +1 -1
- package/lib/mathlive-instance.js +72 -3
- package/lib/mathlive-instance.js.map +1 -1
- package/lib/mf/common-styles.js +41 -6
- package/lib/mf/common-styles.js.map +1 -1
- package/lib/mf/index.js +6 -0
- package/lib/mf/index.js.map +1 -1
- package/lib/mf/input.js +7 -0
- package/lib/mf/input.js.map +1 -1
- package/lib/mf/static.js +84 -3
- package/lib/mf/static.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/keypad-label.test.jsx +131 -5
- package/src/__tests__/latex-bridge.test.js +22 -0
- package/src/__tests__/mathlive-instance.test.js +150 -0
- package/src/__tests__/mount-race.test.jsx +1 -0
- package/src/__tests__/static-prompts.test.jsx +113 -0
- package/src/keypad/index.jsx +4 -1
- package/src/keys/misc.js +8 -2
- package/src/latex-bridge.js +34 -0
- package/src/mathlive-instance.js +80 -1
- package/src/mf/common-styles.js +45 -4
- package/src/mf/index.js +2 -0
- package/src/mf/input.jsx +15 -1
- package/src/mf/static.jsx +98 -3
- package/lib/__tests__/composites.test.js.map +0 -1
- package/lib/__tests__/drop-in-compat.test.js.map +0 -1
- package/lib/__tests__/index.test.js.map +0 -1
- package/lib/__tests__/input-imperative.test.js.map +0 -1
- package/lib/__tests__/keypad-label.test.js.map +0 -1
- package/lib/__tests__/keypad-render.test.js.map +0 -1
- package/lib/__tests__/latex-bridge.test.js.map +0 -1
- package/lib/__tests__/mathlive-instance.test.js.map +0 -1
- package/lib/__tests__/mount-race.test.js.map +0 -1
- package/lib/__tests__/static-prompts.test.js.map +0 -1
|
@@ -228,6 +228,111 @@ describe('mathlive-instance', function () {
|
|
|
228
228
|
|
|
229
229
|
// A live <math-field> renders in shadow DOM, so nothing in the page's
|
|
230
230
|
// stylesheets reaches it - the stretchy-accent fix has to be injected there.
|
|
231
|
+
/**
|
|
232
|
+
* A keypad key like \frac inserts `\frac{#?}{#?}`; MathLive turns each `#?`
|
|
233
|
+
* into a `\placeholder{}` atom and *selects* the first one. Measured in
|
|
234
|
+
* Chromium: that atom is a leaf (its offsets are before/after, there is no
|
|
235
|
+
* position inside), so MathLive renders NO caret element and shows only the
|
|
236
|
+
* selection highlight - the box read as focused-but-dead. The caret is drawn
|
|
237
|
+
* by our own shadow CSS, gated on a class so it is placeholder-specific.
|
|
238
|
+
*/
|
|
239
|
+
describe('trackPlaceholderCaret', function () {
|
|
240
|
+
var fakeField = function fakeField(selection, latex) {
|
|
241
|
+
var classes = new Set();
|
|
242
|
+
return {
|
|
243
|
+
listeners: {},
|
|
244
|
+
selection: selection,
|
|
245
|
+
selectionIsCollapsed: !selection,
|
|
246
|
+
getValue: function getValue() {
|
|
247
|
+
return latex;
|
|
248
|
+
},
|
|
249
|
+
classList: {
|
|
250
|
+
toggle: function toggle(name, on) {
|
|
251
|
+
return on ? classes.add(name) : classes["delete"](name);
|
|
252
|
+
},
|
|
253
|
+
contains: function contains(name) {
|
|
254
|
+
return classes.has(name);
|
|
255
|
+
}
|
|
256
|
+
},
|
|
257
|
+
addEventListener: function addEventListener(name, fn) {
|
|
258
|
+
this.listeners[name] = fn;
|
|
259
|
+
},
|
|
260
|
+
removeEventListener: function removeEventListener(name) {
|
|
261
|
+
delete this.listeners[name];
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
};
|
|
265
|
+
it('marks the host when a placeholder is selected', function () {
|
|
266
|
+
var mf = fakeField({
|
|
267
|
+
ranges: [[1, 2]]
|
|
268
|
+
}, '\\placeholder{}');
|
|
269
|
+
instance.trackPlaceholderCaret(mf);
|
|
270
|
+
expect(mf.classList.contains(instance.PLACEHOLDER_CARET_CLASS)).toBe(true);
|
|
271
|
+
});
|
|
272
|
+
it('does not mark an ordinary selection', function () {
|
|
273
|
+
var mf = fakeField({
|
|
274
|
+
ranges: [[0, 3]]
|
|
275
|
+
}, 'x+1');
|
|
276
|
+
instance.trackPlaceholderCaret(mf);
|
|
277
|
+
expect(mf.classList.contains(instance.PLACEHOLDER_CARET_CLASS)).toBe(false);
|
|
278
|
+
});
|
|
279
|
+
it('does not mark a collapsed selection, which has a real caret already', function () {
|
|
280
|
+
var mf = fakeField(null, '\\placeholder{}');
|
|
281
|
+
instance.trackPlaceholderCaret(mf);
|
|
282
|
+
expect(mf.classList.contains(instance.PLACEHOLDER_CARET_CLASS)).toBe(false);
|
|
283
|
+
});
|
|
284
|
+
it('leaves a named prompt alone - it takes a real caret inside', function () {
|
|
285
|
+
var mf = fakeField({
|
|
286
|
+
ranges: [[1, 2]]
|
|
287
|
+
}, '\\placeholder[r1]{}');
|
|
288
|
+
instance.trackPlaceholderCaret(mf);
|
|
289
|
+
expect(mf.classList.contains(instance.PLACEHOLDER_CARET_CLASS)).toBe(false);
|
|
290
|
+
});
|
|
291
|
+
it('re-evaluates whenever the selection moves', function () {
|
|
292
|
+
var mf = fakeField(null, '');
|
|
293
|
+
instance.trackPlaceholderCaret(mf);
|
|
294
|
+
expect(mf.classList.contains(instance.PLACEHOLDER_CARET_CLASS)).toBe(false);
|
|
295
|
+
|
|
296
|
+
// the caret lands on a placeholder
|
|
297
|
+
mf.selection = {
|
|
298
|
+
ranges: [[1, 2]]
|
|
299
|
+
};
|
|
300
|
+
mf.selectionIsCollapsed = false;
|
|
301
|
+
mf.getValue = function () {
|
|
302
|
+
return '\\placeholder{}';
|
|
303
|
+
};
|
|
304
|
+
mf.listeners['selection-change']();
|
|
305
|
+
expect(mf.classList.contains(instance.PLACEHOLDER_CARET_CLASS)).toBe(true);
|
|
306
|
+
|
|
307
|
+
// ...and moves off it again
|
|
308
|
+
mf.selectionIsCollapsed = true;
|
|
309
|
+
mf.listeners['selection-change']();
|
|
310
|
+
expect(mf.classList.contains(instance.PLACEHOLDER_CARET_CLASS)).toBe(false);
|
|
311
|
+
});
|
|
312
|
+
it('returns a teardown that detaches the listener', function () {
|
|
313
|
+
var mf = fakeField(null, '');
|
|
314
|
+
var off = instance.trackPlaceholderCaret(mf);
|
|
315
|
+
expect((0, _typeof2["default"])(mf.listeners['selection-change'])).toEqual('function');
|
|
316
|
+
off();
|
|
317
|
+
expect(mf.listeners['selection-change']).toBeUndefined();
|
|
318
|
+
});
|
|
319
|
+
it('survives a field that throws while reading the selection', function () {
|
|
320
|
+
var mf = fakeField({
|
|
321
|
+
ranges: [[1, 2]]
|
|
322
|
+
}, '');
|
|
323
|
+
mf.getValue = function () {
|
|
324
|
+
throw new Error('detached');
|
|
325
|
+
};
|
|
326
|
+
expect(function () {
|
|
327
|
+
return instance.trackPlaceholderCaret(mf);
|
|
328
|
+
}).not.toThrow();
|
|
329
|
+
expect(mf.classList.contains(instance.PLACEHOLDER_CARET_CLASS)).toBe(false);
|
|
330
|
+
});
|
|
331
|
+
it('is a no-op without a field', function () {
|
|
332
|
+
expect(instance.trackPlaceholderCaret(undefined)).toBeUndefined();
|
|
333
|
+
expect(instance.trackPlaceholderCaret({})).toBeUndefined();
|
|
334
|
+
});
|
|
335
|
+
});
|
|
231
336
|
describe('applyShadowStyles', function () {
|
|
232
337
|
var host = function host() {
|
|
233
338
|
var el = document.createElement('div');
|
|
@@ -257,6 +362,37 @@ describe('mathlive-instance', function () {
|
|
|
257
362
|
expect(css).toContain(':has(.ML__stretchy)');
|
|
258
363
|
}
|
|
259
364
|
});
|
|
365
|
+
it('injects the placeholder caret rules', function () {
|
|
366
|
+
var el = host();
|
|
367
|
+
instance.applyShadowStyles(el);
|
|
368
|
+
var viaStyle = el.shadowRoot.querySelector('style[data-pie-accent]');
|
|
369
|
+
if (viaStyle) {
|
|
370
|
+
var css = viaStyle.textContent;
|
|
371
|
+
|
|
372
|
+
// gated on the host class, so an ordinary selection gets no caret
|
|
373
|
+
expect(css).toContain(":host(.".concat(instance.PLACEHOLDER_CARET_CLASS, ")"));
|
|
374
|
+
// MathLive's own blink keyframes and caret colour, already in this root
|
|
375
|
+
expect(css).toContain('ML__caret-blink');
|
|
376
|
+
expect(css).toContain('--_caret-color');
|
|
377
|
+
// the innermost selected element only: MathLive marks a wrapper AND the
|
|
378
|
+
// glyph span, which would otherwise render two carets
|
|
379
|
+
expect(css).toContain('.ML__selected:not(:has(.ML__selected))');
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
it('injects the radical index size fix', function () {
|
|
383
|
+
var el = host();
|
|
384
|
+
instance.applyShadowStyles(el);
|
|
385
|
+
var viaStyle = el.shadowRoot.querySelector('style[data-pie-accent]');
|
|
386
|
+
if (viaStyle) {
|
|
387
|
+
var css = viaStyle.textContent;
|
|
388
|
+
|
|
389
|
+
// MathLive's scriptscriptstyle index (an inline 50%) reads too small in
|
|
390
|
+
// the authoring UI; a mathfield's shadow root needs its own copy of the
|
|
391
|
+
// rule, since host styles do not cross the boundary.
|
|
392
|
+
expect(css).toContain('.ML__sqrt-index >');
|
|
393
|
+
expect(css).toContain('font-size:75% !important');
|
|
394
|
+
}
|
|
395
|
+
});
|
|
260
396
|
it('does not inject twice', function () {
|
|
261
397
|
var el = host();
|
|
262
398
|
instance.applyShadowStyles(el);
|
|
@@ -276,4 +412,4 @@ describe('mathlive-instance', function () {
|
|
|
276
412
|
});
|
|
277
413
|
});
|
|
278
414
|
});
|
|
279
|
-
//# sourceMappingURL=mathlive-instance.test.js.map
|
|
415
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZXNjcmliZSIsImluc3RhbmNlIiwiYmVmb3JlRWFjaCIsImplc3QiLCJyZXNldE1vZHVsZXMiLCJyZXF1aXJlIiwiX19yZXNldEVtYmVkcyIsIml0IiwicmVnaXN0ZXJFbWJlZCIsImh0bWxTdHJpbmciLCJsYXRleCIsImV4cGVjdCIsInJlZ2lzdGVyZWRFbWJlZHMiLCJ0b0VxdWFsIiwiZ2V0TWFjcm9zIiwiYW5zd2VyQmxvY2siLCJuZXdMaW5lIiwic29tZXRoaW5nQ3VzdG9tIiwibWF0aGxpdmVMYXRleCIsImN1c3RvbSIsIkVycm9yIiwibm90IiwidG9UaHJvdyIsInVuZGVmaW5lZCIsIm1hY3JvcyIsInBhcmFsbGVsb2dyYW0iLCJ0b0JlRGVmaW5lZCIsImxvbmdkaXYiLCJuYXBwcm94IiwiZm9yRWFjaCIsIm5hbWUiLCJfdHlwZW9mMiIsIlBJRV9NQUNST1MiLCJ0b0JlIiwidG9Db250YWluIiwiYXBwbHlTdGF0aWNNYXRoIiwidG9CZVVuZGVmaW5lZCIsImVsIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiX19zZXRNYXRoTGl2ZUZvclRlc3QiLCJjb252ZXJ0TGF0ZXhUb01hcmt1cCIsImwiLCJjb25jYXQiLCJpbm5lckhUTUwiLCJ0ZXh0Q29udGVudCIsImNvbmZpZ3VyZUZvbnRzIiwiTWF0aGZpZWxkRWxlbWVudCIsImZvbnRzRGlyZWN0b3J5IiwiYmFzZVVSSSIsInJlcGxhY2UiLCJzdGFydHNXaXRoIiwidmVyc2lvbiIsIm1hdGhsaXZlIiwidG9CZU51bGwiLCJmYWtlRmllbGQiLCJzZWxlY3Rpb24iLCJjbGFzc2VzIiwiU2V0IiwibGlzdGVuZXJzIiwic2VsZWN0aW9uSXNDb2xsYXBzZWQiLCJnZXRWYWx1ZSIsImNsYXNzTGlzdCIsInRvZ2dsZSIsIm9uIiwiYWRkIiwiY29udGFpbnMiLCJoYXMiLCJhZGRFdmVudExpc3RlbmVyIiwiZm4iLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibWYiLCJyYW5nZXMiLCJ0cmFja1BsYWNlaG9sZGVyQ2FyZXQiLCJQTEFDRUhPTERFUl9DQVJFVF9DTEFTUyIsIm9mZiIsImhvc3QiLCJhdHRhY2hTaGFkb3ciLCJtb2RlIiwiYXBwbHlTaGFkb3dTdHlsZXMiLCJ2aWFTaGVldCIsInNoYWRvd1Jvb3QiLCJfX3BpZUFjY2VudFNoZWV0IiwidmlhU3R5bGUiLCJxdWVyeVNlbGVjdG9yIiwiY3NzIiwidG9CZVRydXRoeSIsInN0eWxlcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJsYXRleFRvTWFya3VwIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9tYXRobGl2ZS1pbnN0YW5jZS50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImRlc2NyaWJlKCdtYXRobGl2ZS1pbnN0YW5jZScsICgpID0+IHtcbiAgbGV0IGluc3RhbmNlO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGplc3QucmVzZXRNb2R1bGVzKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgaW5zdGFuY2UgPSByZXF1aXJlKCcuLi9tYXRobGl2ZS1pbnN0YW5jZScpO1xuICAgIGluc3RhbmNlLl9fcmVzZXRFbWJlZHMoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlZ2lzdGVyRW1iZWQnLCAoKSA9PiB7XG4gICAgaXQoJ3JlZ2lzdGVycyBhIGtub3duIGVtYmVkIGFuZCBleHBvc2VzIGl0IGFzIGEgbWFjcm8nLCAoKSA9PiB7XG4gICAgICBpbnN0YW5jZS5yZWdpc3RlckVtYmVkKCdhbnN3ZXJCbG9jaycsICgpID0+ICh7XG4gICAgICAgIGh0bWxTdHJpbmc6ICc8ZGl2IGNsYXNzPVwiYW5zd2VyQmxvY2tcIj48L2Rpdj4nLFxuICAgICAgICBsYXRleDogKCkgPT4gJ1xcXFxlbWJlZHthbnN3ZXJCbG9ja31bXScsXG4gICAgICB9KSk7XG5cbiAgICAgIGV4cGVjdChpbnN0YW5jZS5yZWdpc3RlcmVkRW1iZWRzKCkpLnRvRXF1YWwoWydhbnN3ZXJCbG9jayddKTtcbiAgICAgIC8vIFRoZSBtYWNybyB0YWdzIG91dHB1dCB3aXRoIGRhdGEtZW1iZWQgc28gQ1NTIGNhbiB0YXJnZXQgaXQsIHJlcGxhY2luZ1xuICAgICAgLy8gTWF0aFF1aWxsJ3MgaHRtbFN0cmluZyBob29rLlxuICAgICAgZXhwZWN0KGluc3RhbmNlLmdldE1hY3JvcygpLmFuc3dlckJsb2NrKS50b0VxdWFsKCdcXFxcaHRtbERhdGF7ZW1iZWQ9YW5zd2VyQmxvY2t9e1xcXFxwbGFjZWhvbGRlcnt9fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlZ2lzdGVycyBuZXdMaW5lIGFzIGEgaGFybWxlc3MgbWFjcm8gKGl0IGlzIGhhbmRsZWQgYnkgbGF0ZXgtYnJpZGdlKScsICgpID0+IHtcbiAgICAgIGluc3RhbmNlLnJlZ2lzdGVyRW1iZWQoJ25ld0xpbmUnLCAoKSA9PiAoeyBsYXRleDogKCkgPT4gJ1xcXFxlbWJlZHtuZXdMaW5lfVtdJyB9KSk7XG5cbiAgICAgIGV4cGVjdChpbnN0YW5jZS5nZXRNYWNyb3MoKS5uZXdMaW5lKS50b0VxdWFsKCdcXFxcaHRtbERhdGF7ZW1iZWQ9bmV3TGluZX17fScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhbGxzIGJhY2sgdG8gYSBwbGFjZWhvbGRlciBmb3IgYW4gdW5rbm93biBlbWJlZCcsICgpID0+IHtcbiAgICAgIGluc3RhbmNlLnJlZ2lzdGVyRW1iZWQoJ3NvbWV0aGluZ0N1c3RvbScsICgpID0+ICh7IGh0bWxTdHJpbmc6ICc8Yj54PC9iPicgfSkpO1xuXG4gICAgICBleHBlY3QoaW5zdGFuY2UuZ2V0TWFjcm9zKCkuc29tZXRoaW5nQ3VzdG9tKS50b0VxdWFsKCdcXFxcaHRtbERhdGF7ZW1iZWQ9c29tZXRoaW5nQ3VzdG9tfXtcXFxccGxhY2Vob2xkZXJ7fX0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdob25vdXJzIGFuIGV4cGxpY2l0IG1hdGhsaXZlTGF0ZXggZnJvbSB0aGUgZmFjdG9yeScsICgpID0+IHtcbiAgICAgIGluc3RhbmNlLnJlZ2lzdGVyRW1iZWQoJ2N1c3RvbScsICgpID0+ICh7IG1hdGhsaXZlTGF0ZXg6ICdcXFxcYWxwaGEnIH0pKTtcblxuICAgICAgZXhwZWN0KGluc3RhbmNlLmdldE1hY3JvcygpLmN1c3RvbSkudG9FcXVhbCgnXFxcXGh0bWxEYXRhe2VtYmVkPWN1c3RvbX17XFxcXGFscGhhfScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IHRocm93IHdoZW4gdGhlIGZhY3RvcnkgdGhyb3dzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIGluc3RhbmNlLnJlZ2lzdGVyRW1iZWQoJ2JhZCcsICgpID0+IHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Jvb20nKTtcbiAgICAgICAgfSksXG4gICAgICApLm5vdC50b1Rocm93KCk7XG5cbiAgICAgIGV4cGVjdChpbnN0YW5jZS5yZWdpc3RlcmVkRW1iZWRzKCkpLnRvRXF1YWwoWydiYWQnXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnaWdub3JlcyBiYWQgYXJndW1lbnRzJywgKCkgPT4ge1xuICAgICAgaW5zdGFuY2UucmVnaXN0ZXJFbWJlZCh1bmRlZmluZWQsICgpID0+ICh7fSkpO1xuICAgICAgaW5zdGFuY2UucmVnaXN0ZXJFbWJlZCgnbm9GYWN0b3J5JywgdW5kZWZpbmVkKTtcblxuICAgICAgZXhwZWN0KGluc3RhbmNlLnJlZ2lzdGVyZWRFbWJlZHMoKSkudG9FcXVhbChbXSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWx3YXlzIGluY2x1ZGVzIHRoZSBwaWUgbWFjcm8gc2V0JywgKCkgPT4ge1xuICAgICAgY29uc3QgbWFjcm9zID0gaW5zdGFuY2UuZ2V0TWFjcm9zKCk7XG5cbiAgICAgIGV4cGVjdChtYWNyb3MucGFyYWxsZWxvZ3JhbSkudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChtYWNyb3MubG9uZ2RpdikudG9CZURlZmluZWQoKTtcbiAgICAgIGV4cGVjdChtYWNyb3MubmFwcHJveCkudG9FcXVhbCgnXFxcXG5vdFxcXFxhcHByb3gnKTtcbiAgICB9KTtcblxuICAgIC8vIEFyZ3VtZW50LXRha2luZyBtYWNyb3MgZXhpc3Qgb25seSBzbyBwcmV2aW91c2x5IGF1dGhvcmVkIGxhdGV4IHBhcnNlcy5cbiAgICAvLyBFZGl0aW5nIG5ldmVyIGdvZXMgdGhyb3VnaCB0aGVtOiBNYXRoTGl2ZSBzZXJpYWxpc2VzIGEgbWFjcm8gZnJvbSBpdHNcbiAgICAvLyBvcmlnaW5hbCBhcmd1bWVudHMsIHNvIHR5cGVkIGNvbnRlbnQgbmV2ZXIgY29tZXMgYmFjayBvdXQuXG4gICAgaXQoJ2FyZ3VtZW50LXRha2luZyBtYWNyb3MgYXJlIHBsYWluIHBhcnNlLW9ubHkgZGVmaW5pdGlvbnMnLCAoKSA9PiB7XG4gICAgICBbJ2xvbmdkaXYnLCAnb3ZlcmFyYycsICdhYnMnXS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGV4cGVjdCh0eXBlb2YgaW5zdGFuY2UuUElFX01BQ1JPU1tuYW1lXSkudG9CZSgnc3RyaW5nJyk7XG4gICAgICAgIGV4cGVjdChpbnN0YW5jZS5QSUVfTUFDUk9TW25hbWVdKS50b0NvbnRhaW4oJyMxJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdhcmd1bWVudC1sZXNzIHN5bWJvbHMgc3RheSBhdG9taWMnLCAoKSA9PiB7XG4gICAgICBbJ3BlcnBlbmRpY3VsYXInLCAnc3F1YXJlJywgJ2RlZ3JlZScsICduYXBwcm94JywgJ3BhcmFsbGVsb2dyYW0nXS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGV4cGVjdCh0eXBlb2YgaW5zdGFuY2UuUElFX01BQ1JPU1tuYW1lXSkudG9CZSgnc3RyaW5nJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdsb25nZGl2IG1hdGNoZXMgdGhlIE1hdGhKYXggbWFjcm8gdXNlZCBieSBtYXRoLXJlbmRlcmluZycsICgpID0+IHtcbiAgICAgIGV4cGVjdChpbnN0YW5jZS5QSUVfTUFDUk9TLmxvbmdkaXYpLnRvRXF1YWwoJ1xcXFxlbmNsb3Nle2xvbmdkaXZ9eyMxfScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYXBwbHlTdGF0aWNNYXRoJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHVuZGVmaW5lZCB3aXRob3V0IGFuIGVsZW1lbnQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaW5zdGFuY2UuYXBwbHlTdGF0aWNNYXRoKG51bGwsICd4JykpLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkZWZlcnMgKHJldHVybnMgdW5kZWZpbmVkKSB3aGVuIE1hdGhMaXZlIGhhcyBub3QgbG9hZGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgZXhwZWN0KGluc3RhbmNlLmFwcGx5U3RhdGljTWF0aChlbCwgJ3gnKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3JlbmRlcnMgc3luY2hyb25vdXNseSBvbmNlIE1hdGhMaXZlIGlzIGF2YWlsYWJsZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgIGluc3RhbmNlLl9fc2V0TWF0aExpdmVGb3JUZXN0KHsgY29udmVydExhdGV4VG9NYXJrdXA6IChsKSA9PiBgPHNwYW4+JHtsfTwvc3Bhbj5gIH0pO1xuXG4gICAgICBleHBlY3QoaW5zdGFuY2UuYXBwbHlTdGF0aWNNYXRoKGVsLCAnXFxcXHBpJykpLnRvQmUoZWwpO1xuICAgICAgZXhwZWN0KGVsLmlubmVySFRNTCkudG9FcXVhbCgnPHNwYW4+XFxcXHBpPC9zcGFuPicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZhbGxzIGJhY2sgdG8gdGhlIGVsZW1lbnQgdGV4dENvbnRlbnQgd2hlbiBubyBsYXRleCBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICBlbC50ZXh0Q29udGVudCA9ICdcXFxcdGhldGEnO1xuICAgICAgaW5zdGFuY2UuX19zZXRNYXRoTGl2ZUZvclRlc3QoeyBjb252ZXJ0TGF0ZXhUb01hcmt1cDogKGwpID0+IGA8aT4ke2x9PC9pPmAgfSk7XG4gICAgICBpbnN0YW5jZS5hcHBseVN0YXRpY01hdGgoZWwpO1xuXG4gICAgICBleHBlY3QoZWwuaW5uZXJIVE1MKS50b0VxdWFsKCc8aT5cXFxcdGhldGE8L2k+Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYnJpZGdlcyBzdG9yZWQgbGF0ZXggKG5ld0xpbmUgZW1iZWQpIGJlZm9yZSByZW5kZXJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG4gICAgICBpbnN0YW5jZS5fX3NldE1hdGhMaXZlRm9yVGVzdCh7IGNvbnZlcnRMYXRleFRvTWFya3VwOiAobCkgPT4gbCB9KTtcbiAgICAgIGluc3RhbmNlLmFwcGx5U3RhdGljTWF0aChlbCwgJ2FcXFxcZW1iZWR7bmV3TGluZX1bXWInKTtcblxuICAgICAgLy8gXFxlbWJlZHtuZXdMaW5lfVtdIG11c3QgYmVjb21lIGEgbXVsdGlsaW5lIGVudmlyb25tZW50XG4gICAgICBleHBlY3QoZWwuaW5uZXJIVE1MKS50b0NvbnRhaW4oJ2Rpc3BsYXlsaW5lcycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnY29uZmlndXJlRm9udHMnLCAoKSA9PiB7XG4gICAgLy8gTWF0aExpdmUncyBkZWZhdWx0IGZvbnRzRGlyZWN0b3J5IGlzIHRoZSByZWxhdGl2ZSAnLi9mb250cy8nLCB3aGljaCBpdFxuICAgIC8vIHJlc29sdmVzIGFnYWluc3QgaXRzIG93biAoZW1wdHksIHdoZW4gYnVuZGxlZCkgc2NyaXB0IHVybCBhbmQgdGhyb3dzXG4gICAgLy8gXCJJbnZhbGlkIGJhc2UgVVJMXCIgZnJvbSBsb2FkRm9udHMuIFBhdGhzIG11c3QgYmVjb21lIGFic29sdXRlLlxuICAgIGl0KCdpcyBleHBvcnRlZCBhbmQgY2FsbGFibGUgYmVmb3JlIE1hdGhMaXZlIGxvYWRzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHR5cGVvZiBpbnN0YW5jZS5jb25maWd1cmVGb250cykudG9CZSgnZnVuY3Rpb24nKTtcbiAgICAgIGV4cGVjdCgoKSA9PiBpbnN0YW5jZS5jb25maWd1cmVGb250cygnL21hdGhsaXZlLWZvbnRzJykpLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnYWNjZXB0cyBudWxsIHRvIGRpc2FibGUgZm9udCBsb2FkaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+IGluc3RhbmNlLmNvbmZpZ3VyZUZvbnRzKG51bGwpKS5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FwcGxpZXMgYW4gYWJzb2x1dGUgdXJsIHRvIGFuIGFscmVhZHktbG9hZGVkIE1hdGhmaWVsZEVsZW1lbnQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBNYXRoZmllbGRFbGVtZW50ID0ge307XG5cbiAgICAgIC8vIHNpbXVsYXRlIGEgbG9hZGVkIGluc3RhbmNlXG4gICAgICBpbnN0YW5jZS5fX3NldE1hdGhMaXZlRm9yVGVzdCh7IE1hdGhmaWVsZEVsZW1lbnQgfSk7XG4gICAgICBpbnN0YW5jZS5jb25maWd1cmVGb250cygnL21hdGhsaXZlLWZvbnRzJyk7XG5cbiAgICAgIGV4cGVjdChNYXRoZmllbGRFbGVtZW50LmZvbnRzRGlyZWN0b3J5KS50b0VxdWFsKGAke2RvY3VtZW50LmJhc2VVUkkucmVwbGFjZSgvXFwvJC8sICcnKX0vbWF0aGxpdmUtZm9udHNgKTtcbiAgICAgIGV4cGVjdChNYXRoZmllbGRFbGVtZW50LmZvbnRzRGlyZWN0b3J5LnN0YXJ0c1dpdGgoJ2h0dHAnKSkudG9CZSh0cnVlKTtcbiAgICB9KTtcblxuICAgIC8vIFxcbmVxLCBcXG5zaW0gYW5kIFxcbmNvbmcgYXJlIGJ1aWx0IGZyb20gUHJpdmF0ZSBVc2UgQXJlYSBnbHlwaHMgdGhhdCBvbmx5XG4gICAgLy8gdGhlIEthVGVYIGZvbnRzIGNvbnRhaW4sIHNvIFwibm8gZm9udHNcIiByZW5kZXJzIGdhcmJhZ2UgcmF0aGVyIHRoYW5cbiAgICAvLyBkZWdyYWRpbmcgZ3JhY2VmdWxseSAtIGhlbmNlIGEgQ0ROIGZhbGxiYWNrIGJ5IGRlZmF1bHQuXG4gICAgaXQoJ2ZhbGxzIGJhY2sgdG8gYSB2ZXJzaW9uLXBpbm5lZCBDRE4gd2hlbiBub3RoaW5nIGlzIGNvbmZpZ3VyZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBNYXRoZmllbGRFbGVtZW50ID0ge307XG5cbiAgICAgIGluc3RhbmNlLl9fc2V0TWF0aExpdmVGb3JUZXN0KHsgTWF0aGZpZWxkRWxlbWVudCwgdmVyc2lvbjogeyBtYXRobGl2ZTogJzkuOS45JyB9IH0pO1xuICAgICAgaW5zdGFuY2UuY29uZmlndXJlRm9udHModW5kZWZpbmVkKTtcblxuICAgICAgZXhwZWN0KE1hdGhmaWVsZEVsZW1lbnQuZm9udHNEaXJlY3RvcnkpLnRvRXF1YWwoJ2h0dHBzOi8vdW5wa2cuY29tL21hdGhsaXZlQDkuOS45L2ZvbnRzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgndXNlcyAvZm9udHMsIG5vdCAvZGlzdC9mb250cyAodGhlIGxhdHRlciA0MDRzIG9uIHVucGtnKScsICgpID0+IHtcbiAgICAgIGNvbnN0IE1hdGhmaWVsZEVsZW1lbnQgPSB7fTtcblxuICAgICAgaW5zdGFuY2UuX19zZXRNYXRoTGl2ZUZvclRlc3QoeyBNYXRoZmllbGRFbGVtZW50LCB2ZXJzaW9uOiB7IG1hdGhsaXZlOiAnMC4xMTAuMCcgfSB9KTtcbiAgICAgIGluc3RhbmNlLmNvbmZpZ3VyZUZvbnRzKHVuZGVmaW5lZCk7XG5cbiAgICAgIGV4cGVjdChNYXRoZmllbGRFbGVtZW50LmZvbnRzRGlyZWN0b3J5KS50b0VxdWFsKCdodHRwczovL3VucGtnLmNvbS9tYXRobGl2ZUAwLjExMC4wL2ZvbnRzJyk7XG4gICAgICBleHBlY3QoTWF0aGZpZWxkRWxlbWVudC5mb250c0RpcmVjdG9yeSkubm90LnRvQ29udGFpbignL2Rpc3QvJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnYSBjb25maWd1cmVkIHBhdGggd2lucyBvdmVyIHRoZSBDRE4nLCAoKSA9PiB7XG4gICAgICBjb25zdCBNYXRoZmllbGRFbGVtZW50ID0ge307XG5cbiAgICAgIGluc3RhbmNlLl9fc2V0TWF0aExpdmVGb3JUZXN0KHsgTWF0aGZpZWxkRWxlbWVudCwgdmVyc2lvbjogeyBtYXRobGl2ZTogJzAuMTEwLjAnIH0gfSk7XG4gICAgICBpbnN0YW5jZS5jb25maWd1cmVGb250cygnL21hdGhsaXZlLWZvbnRzJyk7XG5cbiAgICAgIGV4cGVjdChNYXRoZmllbGRFbGVtZW50LmZvbnRzRGlyZWN0b3J5KS5ub3QudG9Db250YWluKCd1bnBrZy5jb20nKTtcbiAgICB9KTtcblxuICAgIGl0KCdudWxsIHN0aWxsIG9wdHMgb3V0IGVudGlyZWx5JywgKCkgPT4ge1xuICAgICAgY29uc3QgTWF0aGZpZWxkRWxlbWVudCA9IHt9O1xuXG4gICAgICBpbnN0YW5jZS5fX3NldE1hdGhMaXZlRm9yVGVzdCh7IE1hdGhmaWVsZEVsZW1lbnQsIHZlcnNpb246IHsgbWF0aGxpdmU6ICcwLjExMC4wJyB9IH0pO1xuICAgICAgaW5zdGFuY2UuY29uZmlndXJlRm9udHMobnVsbCk7XG5cbiAgICAgIGV4cGVjdChNYXRoZmllbGRFbGVtZW50LmZvbnRzRGlyZWN0b3J5KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2xlYXZlcyBhIGZ1bGx5LXF1YWxpZmllZCB1cmwgdW50b3VjaGVkJywgKCkgPT4ge1xuICAgICAgY29uc3QgTWF0aGZpZWxkRWxlbWVudCA9IHt9O1xuXG4gICAgICBpbnN0YW5jZS5fX3NldE1hdGhMaXZlRm9yVGVzdCh7IE1hdGhmaWVsZEVsZW1lbnQgfSk7XG4gICAgICBpbnN0YW5jZS5jb25maWd1cmVGb250cygnaHR0cHM6Ly9jZG4uZXhhbXBsZS5jb20vZm9udHMnKTtcblxuICAgICAgZXhwZWN0KE1hdGhmaWVsZEVsZW1lbnQuZm9udHNEaXJlY3RvcnkpLnRvRXF1YWwoJ2h0dHBzOi8vY2RuLmV4YW1wbGUuY29tL2ZvbnRzJyk7XG4gICAgfSk7XG5cbiAgICBpdCgncGFzc2VzIG51bGwgdGhyb3VnaCByYXRoZXIgdGhhbiByZXNvbHZpbmcgaXQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBNYXRoZmllbGRFbGVtZW50ID0ge307XG5cbiAgICAgIGluc3RhbmNlLl9fc2V0TWF0aExpdmVGb3JUZXN0KHsgTWF0aGZpZWxkRWxlbWVudCB9KTtcbiAgICAgIGluc3RhbmNlLmNvbmZpZ3VyZUZvbnRzKG51bGwpO1xuXG4gICAgICBleHBlY3QoTWF0aGZpZWxkRWxlbWVudC5mb250c0RpcmVjdG9yeSkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQSBsaXZlIDxtYXRoLWZpZWxkPiByZW5kZXJzIGluIHNoYWRvdyBET00sIHNvIG5vdGhpbmcgaW4gdGhlIHBhZ2Unc1xuICAvLyBzdHlsZXNoZWV0cyByZWFjaGVzIGl0IC0gdGhlIHN0cmV0Y2h5LWFjY2VudCBmaXggaGFzIHRvIGJlIGluamVjdGVkIHRoZXJlLlxuICAvKipcbiAgICogQSBrZXlwYWQga2V5IGxpa2UgXFxmcmFjIGluc2VydHMgYFxcZnJhY3sjP317Iz99YDsgTWF0aExpdmUgdHVybnMgZWFjaCBgIz9gXG4gICAqIGludG8gYSBgXFxwbGFjZWhvbGRlcnt9YCBhdG9tIGFuZCAqc2VsZWN0cyogdGhlIGZpcnN0IG9uZS4gTWVhc3VyZWQgaW5cbiAgICogQ2hyb21pdW06IHRoYXQgYXRvbSBpcyBhIGxlYWYgKGl0cyBvZmZzZXRzIGFyZSBiZWZvcmUvYWZ0ZXIsIHRoZXJlIGlzIG5vXG4gICAqIHBvc2l0aW9uIGluc2lkZSksIHNvIE1hdGhMaXZlIHJlbmRlcnMgTk8gY2FyZXQgZWxlbWVudCBhbmQgc2hvd3Mgb25seSB0aGVcbiAgICogc2VsZWN0aW9uIGhpZ2hsaWdodCAtIHRoZSBib3ggcmVhZCBhcyBmb2N1c2VkLWJ1dC1kZWFkLiBUaGUgY2FyZXQgaXMgZHJhd25cbiAgICogYnkgb3VyIG93biBzaGFkb3cgQ1NTLCBnYXRlZCBvbiBhIGNsYXNzIHNvIGl0IGlzIHBsYWNlaG9sZGVyLXNwZWNpZmljLlxuICAgKi9cbiAgZGVzY3JpYmUoJ3RyYWNrUGxhY2Vob2xkZXJDYXJldCcsICgpID0+IHtcbiAgICBjb25zdCBmYWtlRmllbGQgPSAoc2VsZWN0aW9uLCBsYXRleCkgPT4ge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IG5ldyBTZXQoKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGlzdGVuZXJzOiB7fSxcbiAgICAgICAgc2VsZWN0aW9uLFxuICAgICAgICBzZWxlY3Rpb25Jc0NvbGxhcHNlZDogIXNlbGVjdGlvbixcbiAgICAgICAgZ2V0VmFsdWU6ICgpID0+IGxhdGV4LFxuICAgICAgICBjbGFzc0xpc3Q6IHtcbiAgICAgICAgICB0b2dnbGU6IChuYW1lLCBvbikgPT4gKG9uID8gY2xhc3Nlcy5hZGQobmFtZSkgOiBjbGFzc2VzLmRlbGV0ZShuYW1lKSksXG4gICAgICAgICAgY29udGFpbnM6IChuYW1lKSA9PiBjbGFzc2VzLmhhcyhuYW1lKSxcbiAgICAgICAgfSxcbiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBmbikge1xuICAgICAgICAgIHRoaXMubGlzdGVuZXJzW25hbWVdID0gZm47XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZSkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tuYW1lXTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGl0KCdtYXJrcyB0aGUgaG9zdCB3aGVuIGEgcGxhY2Vob2xkZXIgaXMgc2VsZWN0ZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZiA9IGZha2VGaWVsZCh7IHJhbmdlczogW1sxLCAyXV0gfSwgJ1xcXFxwbGFjZWhvbGRlcnt9Jyk7XG5cbiAgICAgIGluc3RhbmNlLnRyYWNrUGxhY2Vob2xkZXJDYXJldChtZik7XG5cbiAgICAgIGV4cGVjdChtZi5jbGFzc0xpc3QuY29udGFpbnMoaW5zdGFuY2UuUExBQ0VIT0xERVJfQ0FSRVRfQ0xBU1MpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IG1hcmsgYW4gb3JkaW5hcnkgc2VsZWN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWYgPSBmYWtlRmllbGQoeyByYW5nZXM6IFtbMCwgM11dIH0sICd4KzEnKTtcblxuICAgICAgaW5zdGFuY2UudHJhY2tQbGFjZWhvbGRlckNhcmV0KG1mKTtcblxuICAgICAgZXhwZWN0KG1mLmNsYXNzTGlzdC5jb250YWlucyhpbnN0YW5jZS5QTEFDRUhPTERFUl9DQVJFVF9DTEFTUykpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IG1hcmsgYSBjb2xsYXBzZWQgc2VsZWN0aW9uLCB3aGljaCBoYXMgYSByZWFsIGNhcmV0IGFscmVhZHknLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZiA9IGZha2VGaWVsZChudWxsLCAnXFxcXHBsYWNlaG9sZGVye30nKTtcblxuICAgICAgaW5zdGFuY2UudHJhY2tQbGFjZWhvbGRlckNhcmV0KG1mKTtcblxuICAgICAgZXhwZWN0KG1mLmNsYXNzTGlzdC5jb250YWlucyhpbnN0YW5jZS5QTEFDRUhPTERFUl9DQVJFVF9DTEFTUykpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2xlYXZlcyBhIG5hbWVkIHByb21wdCBhbG9uZSAtIGl0IHRha2VzIGEgcmVhbCBjYXJldCBpbnNpZGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZiA9IGZha2VGaWVsZCh7IHJhbmdlczogW1sxLCAyXV0gfSwgJ1xcXFxwbGFjZWhvbGRlcltyMV17fScpO1xuXG4gICAgICBpbnN0YW5jZS50cmFja1BsYWNlaG9sZGVyQ2FyZXQobWYpO1xuXG4gICAgICBleHBlY3QobWYuY2xhc3NMaXN0LmNvbnRhaW5zKGluc3RhbmNlLlBMQUNFSE9MREVSX0NBUkVUX0NMQVNTKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmUtZXZhbHVhdGVzIHdoZW5ldmVyIHRoZSBzZWxlY3Rpb24gbW92ZXMnLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZiA9IGZha2VGaWVsZChudWxsLCAnJyk7XG5cbiAgICAgIGluc3RhbmNlLnRyYWNrUGxhY2Vob2xkZXJDYXJldChtZik7XG4gICAgICBleHBlY3QobWYuY2xhc3NMaXN0LmNvbnRhaW5zKGluc3RhbmNlLlBMQUNFSE9MREVSX0NBUkVUX0NMQVNTKSkudG9CZShmYWxzZSk7XG5cbiAgICAgIC8vIHRoZSBjYXJldCBsYW5kcyBvbiBhIHBsYWNlaG9sZGVyXG4gICAgICBtZi5zZWxlY3Rpb24gPSB7IHJhbmdlczogW1sxLCAyXV0gfTtcbiAgICAgIG1mLnNlbGVjdGlvbklzQ29sbGFwc2VkID0gZmFsc2U7XG4gICAgICBtZi5nZXRWYWx1ZSA9ICgpID0+ICdcXFxccGxhY2Vob2xkZXJ7fSc7XG4gICAgICBtZi5saXN0ZW5lcnNbJ3NlbGVjdGlvbi1jaGFuZ2UnXSgpO1xuICAgICAgZXhwZWN0KG1mLmNsYXNzTGlzdC5jb250YWlucyhpbnN0YW5jZS5QTEFDRUhPTERFUl9DQVJFVF9DTEFTUykpLnRvQmUodHJ1ZSk7XG5cbiAgICAgIC8vIC4uLmFuZCBtb3ZlcyBvZmYgaXQgYWdhaW5cbiAgICAgIG1mLnNlbGVjdGlvbklzQ29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgIG1mLmxpc3RlbmVyc1snc2VsZWN0aW9uLWNoYW5nZSddKCk7XG4gICAgICBleHBlY3QobWYuY2xhc3NMaXN0LmNvbnRhaW5zKGluc3RhbmNlLlBMQUNFSE9MREVSX0NBUkVUX0NMQVNTKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBhIHRlYXJkb3duIHRoYXQgZGV0YWNoZXMgdGhlIGxpc3RlbmVyJywgKCkgPT4ge1xuICAgICAgY29uc3QgbWYgPSBmYWtlRmllbGQobnVsbCwgJycpO1xuICAgICAgY29uc3Qgb2ZmID0gaW5zdGFuY2UudHJhY2tQbGFjZWhvbGRlckNhcmV0KG1mKTtcblxuICAgICAgZXhwZWN0KHR5cGVvZiBtZi5saXN0ZW5lcnNbJ3NlbGVjdGlvbi1jaGFuZ2UnXSkudG9FcXVhbCgnZnVuY3Rpb24nKTtcbiAgICAgIG9mZigpO1xuICAgICAgZXhwZWN0KG1mLmxpc3RlbmVyc1snc2VsZWN0aW9uLWNoYW5nZSddKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc3Vydml2ZXMgYSBmaWVsZCB0aGF0IHRocm93cyB3aGlsZSByZWFkaW5nIHRoZSBzZWxlY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBtZiA9IGZha2VGaWVsZCh7IHJhbmdlczogW1sxLCAyXV0gfSwgJycpO1xuXG4gICAgICBtZi5nZXRWYWx1ZSA9ICgpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdkZXRhY2hlZCcpO1xuICAgICAgfTtcblxuICAgICAgZXhwZWN0KCgpID0+IGluc3RhbmNlLnRyYWNrUGxhY2Vob2xkZXJDYXJldChtZikpLm5vdC50b1Rocm93KCk7XG4gICAgICBleHBlY3QobWYuY2xhc3NMaXN0LmNvbnRhaW5zKGluc3RhbmNlLlBMQUNFSE9MREVSX0NBUkVUX0NMQVNTKSkudG9CZShmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnaXMgYSBuby1vcCB3aXRob3V0IGEgZmllbGQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaW5zdGFuY2UudHJhY2tQbGFjZWhvbGRlckNhcmV0KHVuZGVmaW5lZCkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgIGV4cGVjdChpbnN0YW5jZS50cmFja1BsYWNlaG9sZGVyQ2FyZXQoe30pKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhcHBseVNoYWRvd1N0eWxlcycsICgpID0+IHtcbiAgICBjb25zdCBob3N0ID0gKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgZWwuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuXG4gICAgICByZXR1cm4gZWw7XG4gICAgfTtcblxuICAgIGl0KCdpcyBhIG5vLW9wIHdpdGhvdXQgYSBzaGFkb3cgcm9vdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiBpbnN0YW5jZS5hcHBseVNoYWRvd1N0eWxlcyh1bmRlZmluZWQpKS5ub3QudG9UaHJvdygpO1xuICAgICAgZXhwZWN0KCgpID0+IGluc3RhbmNlLmFwcGx5U2hhZG93U3R5bGVzKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKSkubm90LnRvVGhyb3coKTtcbiAgICB9KTtcblxuICAgIGl0KCdpbmplY3RzIHRoZSBhY2NlbnQgZml4IGludG8gdGhlIHNoYWRvdyByb290JywgKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBob3N0KCk7XG5cbiAgICAgIGluc3RhbmNlLmFwcGx5U2hhZG93U3R5bGVzKGVsKTtcblxuICAgICAgY29uc3QgdmlhU2hlZXQgPSBlbC5zaGFkb3dSb290Ll9fcGllQWNjZW50U2hlZXQ7XG4gICAgICBjb25zdCB2aWFTdHlsZSA9IGVsLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcignc3R5bGVbZGF0YS1waWUtYWNjZW50XScpO1xuICAgICAgY29uc3QgY3NzID0gdmlhU2hlZXQgPyAnYWRvcHRlZCcgOiAodmlhU3R5bGUgJiYgdmlhU3R5bGUudGV4dENvbnRlbnQpIHx8ICcnO1xuXG4gICAgICBleHBlY3QodmlhU2hlZXQgfHwgdmlhU3R5bGUpLnRvQmVUcnV0aHkoKTtcblxuICAgICAgaWYgKHZpYVN0eWxlKSB7XG4gICAgICAgIGV4cGVjdChjc3MpLnRvQ29udGFpbignbWFyZ2luLWxlZnQ6MCAhaW1wb3J0YW50Jyk7XG4gICAgICAgIC8vIHNjb3BlZCBzbyBzaW5nbGUtZ2x5cGggYWNjZW50cyBrZWVwIHRoZWlyIGNlbnRyaW5nIG9mZnNldFxuICAgICAgICBleHBlY3QoY3NzKS50b0NvbnRhaW4oJzpoYXMoLk1MX19zdHJldGNoeSknKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGl0KCdpbmplY3RzIHRoZSBwbGFjZWhvbGRlciBjYXJldCBydWxlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gaG9zdCgpO1xuXG4gICAgICBpbnN0YW5jZS5hcHBseVNoYWRvd1N0eWxlcyhlbCk7XG5cbiAgICAgIGNvbnN0IHZpYVN0eWxlID0gZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCdzdHlsZVtkYXRhLXBpZS1hY2NlbnRdJyk7XG5cbiAgICAgIGlmICh2aWFTdHlsZSkge1xuICAgICAgICBjb25zdCBjc3MgPSB2aWFTdHlsZS50ZXh0Q29udGVudDtcblxuICAgICAgICAvLyBnYXRlZCBvbiB0aGUgaG9zdCBjbGFzcywgc28gYW4gb3JkaW5hcnkgc2VsZWN0aW9uIGdldHMgbm8gY2FyZXRcbiAgICAgICAgZXhwZWN0KGNzcykudG9Db250YWluKGA6aG9zdCguJHtpbnN0YW5jZS5QTEFDRUhPTERFUl9DQVJFVF9DTEFTU30pYCk7XG4gICAgICAgIC8vIE1hdGhMaXZlJ3Mgb3duIGJsaW5rIGtleWZyYW1lcyBhbmQgY2FyZXQgY29sb3VyLCBhbHJlYWR5IGluIHRoaXMgcm9vdFxuICAgICAgICBleHBlY3QoY3NzKS50b0NvbnRhaW4oJ01MX19jYXJldC1ibGluaycpO1xuICAgICAgICBleHBlY3QoY3NzKS50b0NvbnRhaW4oJy0tX2NhcmV0LWNvbG9yJyk7XG4gICAgICAgIC8vIHRoZSBpbm5lcm1vc3Qgc2VsZWN0ZWQgZWxlbWVudCBvbmx5OiBNYXRoTGl2ZSBtYXJrcyBhIHdyYXBwZXIgQU5EIHRoZVxuICAgICAgICAvLyBnbHlwaCBzcGFuLCB3aGljaCB3b3VsZCBvdGhlcndpc2UgcmVuZGVyIHR3byBjYXJldHNcbiAgICAgICAgZXhwZWN0KGNzcykudG9Db250YWluKCcuTUxfX3NlbGVjdGVkOm5vdCg6aGFzKC5NTF9fc2VsZWN0ZWQpKScpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaXQoJ2luamVjdHMgdGhlIHJhZGljYWwgaW5kZXggc2l6ZSBmaXgnLCAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IGhvc3QoKTtcblxuICAgICAgaW5zdGFuY2UuYXBwbHlTaGFkb3dTdHlsZXMoZWwpO1xuXG4gICAgICBjb25zdCB2aWFTdHlsZSA9IGVsLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3Rvcignc3R5bGVbZGF0YS1waWUtYWNjZW50XScpO1xuXG4gICAgICBpZiAodmlhU3R5bGUpIHtcbiAgICAgICAgY29uc3QgY3NzID0gdmlhU3R5bGUudGV4dENvbnRlbnQ7XG5cbiAgICAgICAgLy8gTWF0aExpdmUncyBzY3JpcHRzY3JpcHRzdHlsZSBpbmRleCAoYW4gaW5saW5lIDUwJSkgcmVhZHMgdG9vIHNtYWxsIGluXG4gICAgICAgIC8vIHRoZSBhdXRob3JpbmcgVUk7IGEgbWF0aGZpZWxkJ3Mgc2hhZG93IHJvb3QgbmVlZHMgaXRzIG93biBjb3B5IG9mIHRoZVxuICAgICAgICAvLyBydWxlLCBzaW5jZSBob3N0IHN0eWxlcyBkbyBub3QgY3Jvc3MgdGhlIGJvdW5kYXJ5LlxuICAgICAgICBleHBlY3QoY3NzKS50b0NvbnRhaW4oJy5NTF9fc3FydC1pbmRleCA+Jyk7XG4gICAgICAgIGV4cGVjdChjc3MpLnRvQ29udGFpbignZm9udC1zaXplOjc1JSAhaW1wb3J0YW50Jyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgaW5qZWN0IHR3aWNlJywgKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBob3N0KCk7XG5cbiAgICAgIGluc3RhbmNlLmFwcGx5U2hhZG93U3R5bGVzKGVsKTtcbiAgICAgIGluc3RhbmNlLmFwcGx5U2hhZG93U3R5bGVzKGVsKTtcblxuICAgICAgY29uc3Qgc3R5bGVzID0gZWwuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdzdHlsZVtkYXRhLXBpZS1hY2NlbnRdJyk7XG5cbiAgICAgIC8vIGVpdGhlciBvbmUgYWRvcHRlZCBzaGVldCwgb3IgZXhhY3RseSBvbmUgc3R5bGUgbm9kZVxuICAgICAgZXhwZWN0KGVsLnNoYWRvd1Jvb3QuX19waWVBY2NlbnRTaGVldCA/IDEgOiBzdHlsZXMubGVuZ3RoKS50b0JlKDEpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbGF0ZXhUb01hcmt1cCcsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyBlbXB0eSBzdHJpbmcgd2hlbiBNYXRoTGl2ZSBpcyBub3QgbG9hZGVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGluc3RhbmNlLmxhdGV4VG9NYXJrdXAoJ1xcXFxwaScpKS50b0VxdWFsKCcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGVtcHR5IHN0cmluZyBmb3IgZW1wdHkgbGF0ZXgnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoaW5zdGFuY2UubGF0ZXhUb01hcmt1cCgnJykpLnRvRXF1YWwoJycpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUFBLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxZQUFNO0VBQ2xDLElBQUlDLFFBQVE7RUFFWkMsVUFBVSxDQUFDLFlBQU07SUFDZkMsSUFBSSxDQUFDQyxZQUFZLENBQUMsQ0FBQztJQUNuQjtJQUNBSCxRQUFRLEdBQUdJLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztJQUMxQ0osUUFBUSxDQUFDSyxhQUFhLENBQUMsQ0FBQztFQUMxQixDQUFDLENBQUM7RUFFRk4sUUFBUSxDQUFDLGVBQWUsRUFBRSxZQUFNO0lBQzlCTyxFQUFFLENBQUMsbURBQW1ELEVBQUUsWUFBTTtNQUM1RE4sUUFBUSxDQUFDTyxhQUFhLENBQUMsYUFBYSxFQUFFO1FBQUEsT0FBTztVQUMzQ0MsVUFBVSxFQUFFLGlDQUFpQztVQUM3Q0MsS0FBSyxFQUFFLFNBQVBBLEtBQUtBLENBQUE7WUFBQSxPQUFRLHdCQUF3QjtVQUFBO1FBQ3ZDLENBQUM7TUFBQSxDQUFDLENBQUM7TUFFSEMsTUFBTSxDQUFDVixRQUFRLENBQUNXLGdCQUFn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
|
|
@@ -46,6 +46,9 @@ jest.mock('../mathlive-instance', function () {
|
|
|
46
46
|
// must mirror the real export, otherwise the component sets `undefined`
|
|
47
47
|
MATH_MODE_SPACE: '\\ ',
|
|
48
48
|
applyShadowStyles: function applyShadowStyles() {},
|
|
49
|
+
trackPlaceholderCaret: function trackPlaceholderCaret() {
|
|
50
|
+
return function () {};
|
|
51
|
+
},
|
|
49
52
|
latexToMarkup: function latexToMarkup(l) {
|
|
50
53
|
return "<span>".concat(l, "</span>");
|
|
51
54
|
}
|
|
@@ -192,4 +195,4 @@ describe('async mount race', function () {
|
|
|
192
195
|
}, _callee6);
|
|
193
196
|
})));
|
|
194
197
|
});
|
|
195
|
-
//# sourceMappingURL=mount-race.test.js.map
|
|
198
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5wdXQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsImplc3QiLCJtb2NrIiwiRmFrZU1hdGhmaWVsZEVsZW1lbnQiLCJfY3JlYXRlQ2xhc3MyIiwiX2NsYXNzQ2FsbENoZWNrMiIsImVsIiwiZ2xvYmFsIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwidmFsdWUiLCJnZXRWYWx1ZSIsImxvYWRNYXRoTGl2ZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiTWF0aGZpZWxkRWxlbWVudCIsImdldE1hY3JvcyIsIk1BVEhfTU9ERV9TUEFDRSIsImFwcGx5U2hhZG93U3R5bGVzIiwidHJhY2tQbGFjZWhvbGRlckNhcmV0IiwibGF0ZXhUb01hcmt1cCIsImwiLCJjb25jYXQiLCJob2xkZXJGb3IiLCJjbXAiLCJob2xkZXJSZWYiLCJjdXJyZW50IiwiZmllbGRDb3VudCIsIkFycmF5IiwiZnJvbSIsImNoaWxkTm9kZXMiLCJmaWx0ZXIiLCJuIiwidGFnTmFtZSIsImxlbmd0aCIsImRlc2NyaWJlIiwiaXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsImlucHV0IiwiZmlyc3QiLCJzZWNvbmQiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIklucHV0IiwiY29tcG9uZW50RGlkTW91bnQiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsImFsbCIsImV4cGVjdCIsInRvQmUiLCJtYXRoRmllbGQiLCJ0b0JlRGVmaW5lZCIsInN0b3AiLCJfY2FsbGVlMiIsInBlbmRpbmciLCJfY29udGV4dDIiLCJ0b0JlVW5kZWZpbmVkIiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJfY2FsbGVlNCIsIl9jb250ZXh0NCIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwibWF0aE1vZGVTcGFjZSIsInRvRXF1YWwiLCJub3QiLCJfY2FsbGVlNiIsImlubmVyUmVmIiwiX2NvbnRleHQ2IiwiZm4iLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsInRvSGF2ZUJlZW5MYXN0Q2FsbGVkV2l0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vbW91bnQtcmFjZS50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIE1hdGhMaXZlIGxvYWRzIGFzeW5jaHJvbm91c2x5LCBzbyBgY29tcG9uZW50RGlkTW91bnRgIHJlc3VtZXMgYWZ0ZXIgYW4gYXdhaXRcbiAqIGJlZm9yZSBhcHBlbmRpbmcgYSA8bWF0aC1maWVsZD4uIFR3byBvcmRlcmluZ3MgbXVzdCBib3RoIGhvbGQ6XG4gKlxuICogIC0gU3RyaWN0TW9kZSBkZXYgZG91YmxlLW1vdW50IChtb3VudCAtPiB1bm1vdW50IC0+IG1vdW50IG9uIHRoZSBTQU1FXG4gKiAgICBpbnN0YW5jZSkgbXVzdCBlbmQgdXAgd2l0aCBleGFjdGx5IE9ORSBmaWVsZC4gQSBib29sZWFuIFwidW5tb3VudGVkXCIgZmxhZ1xuICogICAgbGF0Y2hlcyBoZXJlIGFuZCBibG9ja3MgdGhlIHJlbW91bnQgZW50aXJlbHkgLSB3aGljaCBpcyB3aHkgdGhpcyB1c2VzIGFcbiAqICAgIGdlbmVyYXRpb24gY291bnRlci5cbiAqICAtIEEgZ2VudWluZSB1bm1vdW50IHdoaWxlIHRoZSBsb2FkIGlzIGluIGZsaWdodCBtdXN0IGFwcGVuZCBub3RoaW5nLlxuICpcbiAqIE1hdGhMaXZlIGNhbm5vdCBsb2FkIHVuZGVyIGpzZG9tLCBzbyBpdCBpcyBtb2NrZWQgd2l0aCBhIG1pbmltYWwgc3R1YiBpblxuICogb3JkZXIgdG8gYWN0dWFsbHkgY291bnQgYXBwZW5kZWQgZmllbGRzLlxuICovXG5qZXN0Lm1vY2soJy4uL21hdGhsaXZlLWluc3RhbmNlJywgKCkgPT4ge1xuICAvLyBNdXN0IGJlIGEgcmVhbCBET00gbm9kZTogdGhlIGNvbXBvbmVudCB1c2VzIHJlcGxhY2VDaGlsZHJlbigpLCB3aGljaFxuICAvLyByZWplY3RzIGFueXRoaW5nIHRoYXQgaXMgbm90IGEgTm9kZS4gUmV0dXJuaW5nIGFuIGVsZW1lbnQgZnJvbSB0aGVcbiAgLy8gY29uc3RydWN0b3IgcmVwbGFjZXMgYHRoaXNgLCBzbyBjYWxsZXJzIGdldCBhIGdlbnVpbmUgPG1hdGgtZmllbGQ+LlxuICBjbGFzcyBGYWtlTWF0aGZpZWxkRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAvLyBgZ2xvYmFsYCByYXRoZXIgdGhhbiBgZG9jdW1lbnRgOiBqZXN0IGZvcmJpZHMgb3V0LW9mLXNjb3BlIHZhcmlhYmxlcyBpblxuICAgICAgLy8gYSBtb2NrIGZhY3RvcnksIGFuZCBgZ2xvYmFsYCBpcyBvbiBpdHMgYWxsb3ctbGlzdC5cbiAgICAgIGNvbnN0IGVsID0gZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21hdGgtZmllbGQnKTtcblxuICAgICAgZWwudmFsdWUgPSAnJztcbiAgICAgIGVsLmdldFZhbHVlID0gKCkgPT4gZWwudmFsdWU7XG5cbiAgICAgIHJldHVybiBlbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGxvYWRNYXRoTGl2ZTogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHsgTWF0aGZpZWxkRWxlbWVudDogRmFrZU1hdGhmaWVsZEVsZW1lbnQgfSksXG4gICAgZ2V0TWFjcm9zOiAoKSA9PiAoe30pLFxuICAgIC8vIG11c3QgbWlycm9yIHRoZSByZWFsIGV4cG9ydCwgb3RoZXJ3aXNlIHRoZSBjb21wb25lbnQgc2V0cyBgdW5kZWZpbmVkYFxuICAgIE1BVEhfTU9ERV9TUEFDRTogJ1xcXFwgJyxcbiAgICBhcHBseVNoYWRvd1N0eWxlczogKCkgPT4ge30sXG4gICAgdHJhY2tQbGFjZWhvbGRlckNhcmV0OiAoKSA9PiAoKSA9PiB7fSxcbiAgICBsYXRleFRvTWFya3VwOiAobCkgPT4gYDxzcGFuPiR7bH08L3NwYW4+YCxcbiAgfTtcbn0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L2ZpcnN0XG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vbWYvaW5wdXQnO1xuXG5jb25zdCBob2xkZXJGb3IgPSAoY21wKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXG4gIGNtcC5ob2xkZXJSZWYgPSB7IGN1cnJlbnQ6IGVsIH07XG5cbiAgcmV0dXJuIGVsO1xufTtcblxuY29uc3QgZmllbGRDb3VudCA9IChlbCkgPT4gQXJyYXkuZnJvbShlbC5jaGlsZE5vZGVzKS5maWx0ZXIoKG4pID0+IG4udGFnTmFtZSA9PT0gJ01BVEgtRklFTEQnKS5sZW5ndGg7XG5cbmRlc2NyaWJlKCdhc3luYyBtb3VudCByYWNlJywgKCkgPT4ge1xuICBpdCgnU3RyaWN0TW9kZSBtb3VudCAtPiB1bm1vdW50IC0+IG1vdW50IHlpZWxkcyBleGFjdGx5IG9uZSBmaWVsZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IG5ldyBJbnB1dCh7fSk7XG4gICAgY29uc3QgZWwgPSBob2xkZXJGb3IoaW5wdXQpO1xuXG4gICAgY29uc3QgZmlyc3QgPSBpbnB1dC5jb21wb25lbnREaWRNb3VudCgpO1xuXG4gICAgaW5wdXQuY29tcG9uZW50V2lsbFVubW91bnQoKTtcblxuICAgIGNvbnN0IHNlY29uZCA9IGlucHV0LmNvbXBvbmVudERpZE1vdW50KCk7XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChbZmlyc3QsIHNlY29uZF0pO1xuXG4gICAgZXhwZWN0KGZpZWxkQ291bnQoZWwpKS50b0JlKDEpO1xuICAgIGV4cGVjdChpbnB1dC5tYXRoRmllbGQpLnRvQmVEZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KCdhcHBlbmRzIG5vdGhpbmcgd2hlbiB1bm1vdW50ZWQgd2hpbGUgdGhlIGxvYWQgaXMgaW4gZmxpZ2h0JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gbmV3IElucHV0KHt9KTtcbiAgICBjb25zdCBlbCA9IGhvbGRlckZvcihpbnB1dCk7XG5cbiAgICBjb25zdCBwZW5kaW5nID0gaW5wdXQuY29tcG9uZW50RGlkTW91bnQoKTtcblxuICAgIGlucHV0LmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG5cbiAgICBhd2FpdCBwZW5kaW5nO1xuXG4gICAgZXhwZWN0KGZpZWxkQ291bnQoZWwpKS50b0JlKDApO1xuICAgIGV4cGVjdChpbnB1dC5tYXRoRmllbGQpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoJ2Egbm9ybWFsIHNpbmdsZSBtb3VudCBjcmVhdGVzIHRoZSBmaWVsZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IG5ldyBJbnB1dCh7fSk7XG4gICAgY29uc3QgZWwgPSBob2xkZXJGb3IoaW5wdXQpO1xuXG4gICAgYXdhaXQgaW5wdXQuY29tcG9uZW50RGlkTW91bnQoKTtcblxuICAgIGV4cGVjdChmaWVsZENvdW50KGVsKSkudG9CZSgxKTtcbiAgfSk7XG5cbiAgaXQoJ3JlcGVhdGVkIG1vdW50cyBuZXZlciBhY2N1bXVsYXRlIGZpZWxkcycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IG5ldyBJbnB1dCh7fSk7XG4gICAgY29uc3QgZWwgPSBob2xkZXJGb3IoaW5wdXQpO1xuXG4gICAgYXdhaXQgaW5wdXQuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBhd2FpdCBpbnB1dC5jb21wb25lbnREaWRNb3VudCgpO1xuICAgIGF3YWl0IGlucHV0LmNvbXBvbmVudERpZE1vdW50KCk7XG5cbiAgICBleHBlY3QoZmllbGRDb3VudChlbCkpLnRvQmUoMSk7XG4gIH0pO1xuXG4gIC8vIE1hdGhMaXZlJ3MgbWF0aE1vZGVTcGFjZSBkZWZhdWx0cyB0byAnJywgd2hpY2ggbWFrZXMgdGhlIHNwYWNlYmFyIGEgbm8tb3AuXG4gIGl0KCdjb25maWd1cmVzIHRoZSBzcGFjZWJhciBzbyBhIHNwYWNlIGNhbiBiZSB0eXBlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBpbnB1dCA9IG5ldyBJbnB1dCh7fSk7XG5cbiAgICBob2xkZXJGb3IoaW5wdXQpO1xuICAgIGF3YWl0IGlucHV0LmNvbXBvbmVudERpZE1vdW50KCk7XG5cbiAgICAvLyBhIExhVGVYIGNvbnRyb2wgc3BhY2UgLSB3aGF0IE1hdGhRdWlsbCBwcm9kdWNlZCwgYW5kIE1hdGhKYXggdW5kZXJzdGFuZHNcbiAgICBleHBlY3QoaW5wdXQubWF0aEZpZWxkLm1hdGhNb2RlU3BhY2UpLnRvRXF1YWwoJ1xcXFwgJyk7XG4gICAgZXhwZWN0KGlucHV0Lm1hdGhGaWVsZC5tYXRoTW9kZVNwYWNlKS5ub3QudG9FcXVhbCgnJyk7XG4gIH0pO1xuXG4gIGl0KCdyZXBvcnRzIGl0c2VsZiB0aHJvdWdoIGlubmVyUmVmIG9uIG1vdW50IGFuZCBjbGVhcnMgaXQgb24gdW5tb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBpbm5lclJlZiA9IGplc3QuZm4oKTtcbiAgICBjb25zdCBpbnB1dCA9IG5ldyBJbnB1dCh7IGlubmVyUmVmIH0pO1xuXG4gICAgaG9sZGVyRm9yKGlucHV0KTtcbiAgICBhd2FpdCBpbnB1dC5jb21wb25lbnREaWRNb3VudCgpO1xuXG4gICAgZXhwZWN0KGlubmVyUmVmKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChpbnB1dCk7XG5cbiAgICBpbnB1dC5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuXG4gICAgZXhwZWN0KGlubmVyUmVmKS50b0hhdmVCZWVuTGFzdENhbGxlZFdpdGgobnVsbCk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUEwQ0EsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBMUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLHNCQUFzQixFQUFFLFlBQU07RUFDdEM7RUFDQTtFQUNBO0VBQUEsSUFDTUMsb0JBQW9CLG9CQUFBQyxhQUFBLGFBQ3hCLFNBQUFELHFCQUFBLEVBQWM7SUFBQSxJQUFBRSxnQkFBQSxtQkFBQUYsb0JBQUE7SUFD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
|
|
@@ -33,6 +33,13 @@ var stubField = function stubField() {
|
|
|
33
33
|
return [i * 10, i * 10 + 5];
|
|
34
34
|
},
|
|
35
35
|
selection: selection,
|
|
36
|
+
// Caret bookkeeping: MathLive exposes the caret offset as `position`, and any
|
|
37
|
+
// executeCommand triggers the render that reveals the caret.
|
|
38
|
+
position: undefined,
|
|
39
|
+
commands: [],
|
|
40
|
+
executeCommand: function executeCommand(name) {
|
|
41
|
+
this.commands.push(name);
|
|
42
|
+
},
|
|
36
43
|
addEventListener: function addEventListener() {},
|
|
37
44
|
removeEventListener: function removeEventListener() {},
|
|
38
45
|
focus: function focus() {
|
|
@@ -278,5 +285,121 @@ describe('Static: answer blocks / prompts', function () {
|
|
|
278
285
|
expect(s.mathField.blurred).toBe(true);
|
|
279
286
|
});
|
|
280
287
|
});
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* MathLive shows the caret only while the field carries `ML__focused`, which
|
|
291
|
+
* it adds during a render gated on `isSelectionEditable && hasFocus()`. In a
|
|
292
|
+
* read-only field only prompt interiors are editable, so after a bare
|
|
293
|
+
* `focus()` - whose selection sits outside every prompt - the answer block
|
|
294
|
+
* looked focused but had no blinking cursor. Verified in Chromium: the caret
|
|
295
|
+
* span goes from visibility:hidden to visible once the selection is inside a
|
|
296
|
+
* prompt AND a render has run.
|
|
297
|
+
*/
|
|
298
|
+
describe('caret placement', function () {
|
|
299
|
+
it('puts a collapsed caret in the first prompt on focus', function () {
|
|
300
|
+
var s = make();
|
|
301
|
+
s.mathField = stubField({
|
|
302
|
+
r1: '',
|
|
303
|
+
r2: ''
|
|
304
|
+
});
|
|
305
|
+
s.focus();
|
|
306
|
+
|
|
307
|
+
// stub ranges are [0,5] for r1, [10,15] for r2
|
|
308
|
+
expect(s.mathField.selection).toEqual({
|
|
309
|
+
ranges: [[0, 0]]
|
|
310
|
+
});
|
|
311
|
+
});
|
|
312
|
+
it('forces the render that makes the caret visible', function () {
|
|
313
|
+
var s = make();
|
|
314
|
+
s.mathField = stubField({
|
|
315
|
+
r1: ''
|
|
316
|
+
});
|
|
317
|
+
s.focus();
|
|
318
|
+
|
|
319
|
+
// assigning `selection` alone updates the model without re-rendering, so
|
|
320
|
+
// ML__focused would never be added
|
|
321
|
+
expect(s.mathField.commands).toEqual(['scrollIntoView']);
|
|
322
|
+
});
|
|
323
|
+
it('does not move a caret that is already inside a prompt', function () {
|
|
324
|
+
var s = make();
|
|
325
|
+
s.mathField = stubField({
|
|
326
|
+
r1: '',
|
|
327
|
+
r2: ''
|
|
328
|
+
});
|
|
329
|
+
s.mathField.position = 12; // inside r2
|
|
330
|
+
s.focus();
|
|
331
|
+
expect(s.mathField.selection).toBe(null);
|
|
332
|
+
expect(s.mathField.commands).toEqual([]);
|
|
333
|
+
});
|
|
334
|
+
it('targets a specific prompt', function () {
|
|
335
|
+
var s = make();
|
|
336
|
+
s.mathField = stubField({
|
|
337
|
+
r1: '',
|
|
338
|
+
r2: ''
|
|
339
|
+
});
|
|
340
|
+
s.focusPrompt('r2');
|
|
341
|
+
expect(s.mathField.selection).toEqual({
|
|
342
|
+
ranges: [[10, 10]]
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
it('falls back to the first prompt for an unknown id', function () {
|
|
346
|
+
var s = make();
|
|
347
|
+
s.mathField = stubField({
|
|
348
|
+
r1: '',
|
|
349
|
+
r2: ''
|
|
350
|
+
});
|
|
351
|
+
s.focusPrompt('nope');
|
|
352
|
+
expect(s.mathField.selection).toEqual({
|
|
353
|
+
ranges: [[0, 0]]
|
|
354
|
+
});
|
|
355
|
+
});
|
|
356
|
+
it('is a no-op when there are no prompts', function () {
|
|
357
|
+
var s = make();
|
|
358
|
+
s.mathField = stubField({});
|
|
359
|
+
expect(function () {
|
|
360
|
+
return s.focusPrompt();
|
|
361
|
+
}).not.toThrow();
|
|
362
|
+
expect(s.mathField.selection).toBe(null);
|
|
363
|
+
});
|
|
364
|
+
it('is safe without a field', function () {
|
|
365
|
+
expect(function () {
|
|
366
|
+
return make().focusPrompt('r1');
|
|
367
|
+
}).not.toThrow();
|
|
368
|
+
});
|
|
369
|
+
describe('promptContaining', function () {
|
|
370
|
+
it('finds the prompt whose range holds the offset, inclusive', function () {
|
|
371
|
+
var s = make();
|
|
372
|
+
s.mathField = stubField({
|
|
373
|
+
r1: '',
|
|
374
|
+
r2: ''
|
|
375
|
+
});
|
|
376
|
+
expect(s.promptContaining(0)).toEqual('r1');
|
|
377
|
+
expect(s.promptContaining(5)).toEqual('r1');
|
|
378
|
+
expect(s.promptContaining(10)).toEqual('r2');
|
|
379
|
+
expect(s.promptContaining(7)).toBeUndefined();
|
|
380
|
+
});
|
|
381
|
+
it('treats a missing position as outside', function () {
|
|
382
|
+
var s = make();
|
|
383
|
+
s.mathField = stubField({
|
|
384
|
+
r1: ''
|
|
385
|
+
});
|
|
386
|
+
expect(s.promptContaining(undefined)).toBeUndefined();
|
|
387
|
+
});
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
// MathQuill's inner fields could be focused directly.
|
|
391
|
+
it('promptHandle exposes focus() for its own prompt', function () {
|
|
392
|
+
var s = make();
|
|
393
|
+
s.mathField = stubField({
|
|
394
|
+
r1: '',
|
|
395
|
+
r2: ''
|
|
396
|
+
});
|
|
397
|
+
s.promptHandle('r2').focus();
|
|
398
|
+
expect(s.mathField.focused).toBe(true);
|
|
399
|
+
expect(s.mathField.selection).toEqual({
|
|
400
|
+
ranges: [[10, 10]]
|
|
401
|
+
});
|
|
402
|
+
});
|
|
403
|
+
});
|
|
281
404
|
});
|
|
282
|
-
//# sourceMappingURL=static-prompts.test.js.map
|
|
405
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3RhdGljIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsInN0dWJGaWVsZCIsInZhbHVlcyIsInVuZGVmaW5lZCIsInNlbGVjdGlvbiIsImdldFByb21wdHMiLCJnZXRQcm9tcHRWYWx1ZSIsImlkIiwic2V0UHJvbXB0VmFsdWUiLCJ2IiwiZ2V0UHJvbXB0UmFuZ2UiLCJpIiwiaW5kZXhPZiIsInBvc2l0aW9uIiwiY29tbWFuZHMiLCJleGVjdXRlQ29tbWFuZCIsIm5hbWUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImZvY3VzIiwiZm9jdXNlZCIsImJsdXIiLCJibHVycmVkIiwicmVtb3ZlIiwibWFrZSIsInByb3BzIiwiU3RhdGljIiwibGF0ZXgiLCJnZXRGaWVsZE5hbWUiLCJkZXNjcmliZSIsIml0IiwiZXhwZWN0IiwiaXNJbnRlcmFjdGl2ZSIsInRvQmUiLCJ0b0VxdWFsIiwicyIsIm1hdGhGaWVsZCIsInIxIiwicjIiLCJoIiwicHJvbXB0SGFuZGxlIiwiaW5uZXJGaWVsZHMiLCJtYXAiLCJmIiwib25TdWJGaWVsZENoYW5nZSIsImplc3QiLCJmbiIsInByb21wdFZhbHVlcyIsIm9uUHJvbXB0SW5wdXQiLCJ0b0hhdmVCZWVuQ2FsbGVkVGltZXMiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsImhhbmRsZSIsIm9uU3ViRmllbGRGb2N1cyIsInNldElucHV0IiwicmFuZ2VzIiwib25Qcm9tcHRGb2N1cyIsIm1vY2siLCJjYWxscyIsInRvSGF2ZUJlZW5DYWxsZWQiLCJub3QiLCJ0b1Rocm93IiwiYWZ0ZXJFYWNoIiwiZG9jdW1lbnQiLCJib2R5IiwiaW5uZXJIVE1MIiwiY3JlYXRlTGl2ZVJlZ2lvbiIsImxpdmVSZWdpb24iLCJnZXRBdHRyaWJ1dGUiLCJjb250YWlucyIsInJlbW92ZUxpdmVSZWdpb24iLCJ0b0JlVW5kZWZpbmVkIiwiZmlyc3QiLCJhbm5vdW5jZUNvbnZlcnNpb24iLCJ0ZXh0Q29udGVudCIsIm9uS2V5RG93biIsImtleSIsImZvY3VzUHJvbXB0IiwicHJvbXB0Q29udGFpbmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vc3RhdGljLXByb21wdHMudGVzdC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFN0YXRpYyBmcm9tICcuLi9tZi9zdGF0aWMnO1xuXG4vKipcbiAqIFRoZSBhbnN3ZXItYmxvY2sgY29udHJhY3Q6IGBcXE1hdGhRdWlsbE1hdGhGaWVsZFtpZF17fWAgaW4gc3RvcmVkIGxhdGV4IGJlY29tZXNcbiAqIGEgTWF0aExpdmUgcHJvbXB0LCBhbmQgc3ViLWZpZWxkIHZhbHVlcy9mb2N1cyBhcmUgc3VyZmFjZWQgdGhyb3VnaCB0aGUgc2FtZVxuICogY2FsbGJhY2tzIEBwaWUtbGliL21hdGgtaW5wdXQgZXhwb3NlZCAoYG9uU3ViRmllbGRDaGFuZ2VgLCBgb25TdWJGaWVsZEZvY3VzYCxcbiAqIGBnZXRGaWVsZE5hbWVgLCBgc2V0SW5wdXRgKS5cbiAqXG4gKiBEcml2ZW4gYWdhaW5zdCBhIHN0dWIgbWF0aGZpZWxkOiBhIHJlYWwgPG1hdGgtZmllbGQ+IG5lZWRzIGEgYnJvd3NlciwgYW5kIHdoYXRcbiAqIG1hdHRlcnMgaGVyZSBpcyB0aGUgbWFwcGluZywgbm90IE1hdGhMaXZlJ3MgcmVuZGVyaW5nLlxuICovXG5jb25zdCBzdHViRmllbGQgPSAodmFsdWVzID0ge30sIHNlbGVjdGlvbiA9IG51bGwpID0+ICh7XG4gIHZhbHVlczogeyAuLi52YWx1ZXMgfSxcbiAgZ2V0UHJvbXB0cygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy52YWx1ZXMpO1xuICB9LFxuICBnZXRQcm9tcHRWYWx1ZShpZCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlc1tpZF07XG4gIH0sXG4gIHNldFByb21wdFZhbHVlKGlkLCB2KSB7XG4gICAgdGhpcy52YWx1ZXNbaWRdID0gdjtcbiAgfSxcbiAgZ2V0UHJvbXB0UmFuZ2UoaWQpIHtcbiAgICBjb25zdCBpID0gT2JqZWN0LmtleXModGhpcy52YWx1ZXMpLmluZGV4T2YoaWQpO1xuXG4gICAgcmV0dXJuIFtpICogMTAsIGkgKiAxMCArIDVdO1xuICB9LFxuICBzZWxlY3Rpb24sXG4gIC8vIENhcmV0IGJvb2trZWVwaW5nOiBNYXRoTGl2ZSBleHBvc2VzIHRoZSBjYXJldCBvZmZzZXQgYXMgYHBvc2l0aW9uYCwgYW5kIGFueVxuICAvLyBleGVjdXRlQ29tbWFuZCB0cmlnZ2VycyB0aGUgcmVuZGVyIHRoYXQgcmV2ZWFscyB0aGUgY2FyZXQuXG4gIHBvc2l0aW9uOiB1bmRlZmluZWQsXG4gIGNvbW1hbmRzOiBbXSxcbiAgZXhlY3V0ZUNvbW1hbmQobmFtZSkge1xuICAgIHRoaXMuY29tbWFuZHMucHVzaChuYW1lKTtcbiAgfSxcbiAgYWRkRXZlbnRMaXN0ZW5lcigpIHt9LFxuICByZW1vdmVFdmVudExpc3RlbmVyKCkge30sXG4gIGZvY3VzKCkge1xuICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gIH0sXG4gIGJsdXIoKSB7XG4gICAgdGhpcy5ibHVycmVkID0gdHJ1ZTtcbiAgfSxcbiAgcmVtb3ZlKCkge30sXG59KTtcblxuY29uc3QgbWFrZSA9IChwcm9wcyA9IHt9KSA9PiBuZXcgU3RhdGljKHsgbGF0ZXg6ICd4PVxcXFxNYXRoUXVpbGxNYXRoRmllbGRbcjFde30nLCBnZXRGaWVsZE5hbWU6ICgpID0+IHt9LCAuLi5wcm9wcyB9KTtcblxuZGVzY3JpYmUoJ1N0YXRpYzogYW5zd2VyIGJsb2NrcyAvIHByb21wdHMnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdpc0ludGVyYWN0aXZlJywgKCkgPT4ge1xuICAgIGl0KCdpcyBpbnRlcmFjdGl2ZSB3aGVuIHRoZSBsYXRleCBoYXMgYW5zd2VyIGJsb2NrcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChtYWtlKHsgbGF0ZXg6ICd4PVxcXFxNYXRoUXVpbGxNYXRoRmllbGRbcjFde30nIH0pLmlzSW50ZXJhY3RpdmUoKSkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChtYWtlKHsgbGF0ZXg6ICd4PVxcXFxwbGFjZWhvbGRlcltyMV17fScgfSkuaXNJbnRlcmFjdGl2ZSgpKS50b0JlKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lzIGRpc3BsYXktb25seSBmb3IgcGxhaW4gbGF0ZXgnLCAoKSA9PiB7XG4gICAgICBleHBlY3QobWFrZSh7IGxhdGV4OiAnXFxcXGZyYWN7MX17Mn0nIH0pLmlzSW50ZXJhY3RpdmUoKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3QobWFrZSh7IGxhdGV4OiAnJyB9KS5pc0ludGVyYWN0aXZlKCkpLnRvQmUoZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmFsdWVzJywgKCkgPT4ge1xuICAgIGl0KCdyZXR1cm5zIHt9IGJlZm9yZSB0aGUgZmllbGQgZXhpc3RzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KG1ha2UoKS52YWx1ZXMoKSkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnbWFwcyBlYWNoIHByb21wdCBpZCB0byBpdHMgc3RvcmVkLWZvcm0gbGF0ZXgnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzID0gbWFrZSgpO1xuXG4gICAgICBzLm1hdGhGaWVsZCA9IHN0dWJGaWVsZCh7IHIxOiAnNycsIHIyOiAnXFxcXHBsYWNlaG9sZGVye30nIH0pO1xuXG4gICAgICAvLyBcXHBsYWNlaG9sZGVyIG11c3Qgbm90IGxlYWsgaW50byBzdG9yZWQgdmFsdWVzXG4gICAgICBleHBlY3Qocy52YWx1ZXMoKSkudG9FcXVhbCh7IHIxOiAnNycsIHIyOiAnJyB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Byb21wdEhhbmRsZSAvIGlubmVyRmllbGRzJywgKCkgPT4ge1xuICAgIGl0KCdleHBvc2VzIGEgTWF0aFF1aWxsLWZpZWxkLWxpa2UgaGFuZGxlIHdpdGggZ2V0L3NldCBsYXRleCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHMgPSBtYWtlKCk7XG5cbiAgICAgIHMubWF0aEZpZWxkID0gc3R1YkZpZWxkKHsgcjE6ICc3JyB9KTtcblxuICAgICAgY29uc3QgaCA9IHMucHJvbXB0SGFuZGxlKCdyMScpO1xuXG4gICAgICBleHBlY3QoaC5pZCkudG9FcXVhbCgncjEnKTtcbiAgICAgIGV4cGVjdChoLmxhdGV4KCkpLnRvRXF1YWwoJzcnKTtcblxuICAgICAgaC5sYXRleCgnOScpO1xuICAgICAgZXhwZWN0KHMubWF0aEZpZWxkLnZhbHVlcy5yMSkudG9FcXVhbCgnOScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2hhbmRsZSBsYXRleCgpIGlzIHNhZmUgd2l0aCBubyBmaWVsZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChtYWtlKCkucHJvbXB0SGFuZGxlKCdyMScpLmxhdGV4KCkpLnRvRXF1YWwoJycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2lubmVyRmllbGRzIHJldHVybnMgb25lIGhhbmRsZSBwZXIgcHJvbXB0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcyA9IG1ha2UoKTtcblxuICAgICAgcy5tYXRoRmllbGQgPSBzdHViRmllbGQoeyByMTogJzEnLCByMjogJzInIH0pO1xuXG4gICAgICBleHBlY3Qocy5pbm5lckZpZWxkcy5tYXAoKGYpID0+IGYuaWQpKS50b0VxdWFsKFsncjEnLCAncjInXSk7XG4gICAgICBleHBlY3QobWFrZSgpLmlubmVyRmllbGRzKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ29uU3ViRmllbGRDaGFuZ2UnLCAoKSA9PiB7XG4gICAgaXQoJ2ZpcmVzIG9ubHkgZm9yIHByb21wdHMgd2hvc2UgdmFsdWUgY2hhbmdlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9uU3ViRmllbGRDaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgICBjb25zdCBzID0gbWFrZSh7IG9uU3ViRmllbGRDaGFuZ2UgfSk7XG5cbiAgICAgIHMubWF0aEZpZWxkID0gc3R1YkZpZWxkKHsgcjE6ICcxJywgcjI6ICcyJyB9KTtcbiAgICAgIHMucHJvbXB0VmFsdWVzID0geyByMTogJzEnLCByMjogJzInIH07XG5cbiAgICAgIHMubWF0aEZpZWxkLnZhbHVlcy5yMiA9ICc1JztcbiAgICAgIHMub25Qcm9tcHRJbnB1dCgpO1xuXG4gICAgICBleHBlY3Qob25TdWJGaWVsZENoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgICAgZXhwZWN0KG9uU3ViRmllbGRDaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdyMicsICc1Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgndXNlcyBnZXRGaWVsZE5hbWUgd2hlbiBpdCByZXR1cm5zIGEgbmFtZScsICgpID0+IHtcbiAgICAgIGNvbnN0IG9uU3ViRmllbGRDaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgICBjb25zdCBzID0gbWFrZSh7IG9uU3ViRmllbGRDaGFuZ2UsIGdldEZpZWxkTmFtZTogKGhhbmRsZSkgPT4gJ25hbWVkLScgKyBoYW5kbGUuaWQgfSk7XG5cbiAgICAgIHMubWF0aEZpZWxkID0gc3R1YkZpZWxkKHsgcjE6ICcxJyB9KTtcbiAgICAgIHMucHJvbXB0VmFsdWVzID0ge307XG5cbiAgICAgIHMub25Qcm9tcHRJbnB1dCgpO1xuXG4gICAgICBleHBlY3Qob25TdWJGaWVsZENoYW5nZSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ25hbWVkLXIxJywgJzEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzdGlsbCB0cmFja3MgdmFsdWVzIHdoZW4gbm8gY2FsbGJhY2sgaXMgc3VwcGxpZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzID0gbWFrZSgpO1xuXG4gICAgICBzLm1hdGhGaWVsZCA9IHN0dWJGaWVsZCh7IHIxOiAnMycgfSk7XG4gICAgICBzLm9uUHJvbXB0SW5wdXQoKTtcblxuICAgICAgZXhwZWN0KHMucHJvbXB0VmFsdWVzKS50b0VxdWFsKHsgcjE6ICczJyB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ29uU3ViRmllbGRGb2N1cycsICgpID0+IHtcbiAgICBpdCgncmVwb3J0cyB0aGUgcHJvbXB0IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiwgcGx1cyBzZXRJbnB1dCcsICgpID0+IHtcbiAgICAgIGNvbnN0IG9uU3ViRmllbGRGb2N1cyA9IGplc3QuZm4oKTtcbiAgICAgIGNvbnN0IHNldElucHV0ID0gamVzdC5mbigpO1xuICAgICAgY29uc3QgcyA9IG1ha2UoeyBvblN1YkZpZWxkRm9jdXMsIHNldElucHV0IH0pO1xuXG4gICAgICAvLyByMiBvY2N1cGllcyBvZmZzZXRzIDEwLi4xNVxuICAgICAgcy5tYXRoRmllbGQgPSBzdHViRmllbGQoeyByMTogJycsIHIyOiAnJyB9LCB7IHJhbmdlczogW1sxMSwgMTFdXSB9KTtcbiAgICAgIHMub25Qcm9tcHRGb2N1cygpO1xuXG4gICAgICBleHBlY3Qob25TdWJGaWVsZEZvY3VzKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgICBleHBlY3Qob25TdWJGaWVsZEZvY3VzLm1vY2suY2FsbHNbMF1bMF0pLnRvRXF1YWwoJ3IyJyk7XG4gICAgICBleHBlY3Qob25TdWJGaWVsZEZvY3VzLm1vY2suY2FsbHNbMF1bMV0uaWQpLnRvRXF1YWwoJ3IyJyk7XG4gICAgICBleHBlY3Qoc2V0SW5wdXQpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdGhpbmcgd2l0aG91dCBhIHNlbGVjdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IG9uU3ViRmllbGRGb2N1cyA9IGplc3QuZm4oKTtcbiAgICAgIGNvbnN0IHMgPSBtYWtlKHsgb25TdWJGaWVsZEZvY3VzIH0pO1xuXG4gICAgICBzLm1hdGhGaWVsZCA9IHN0dWJGaWVsZCh7IHIxOiAnJyB9LCBudWxsKTtcbiAgICAgIHMub25Qcm9tcHRGb2N1cygpO1xuXG4gICAgICBleHBlY3Qob25TdWJGaWVsZEZvY3VzKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IHRocm93IHdoZW4gdGhlIGZpZWxkIGlzIG1pc3NpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzID0gbWFrZSh7IG9uU3ViRmllbGRGb2N1czogamVzdC5mbigpIH0pO1xuXG4gICAgICBleHBlY3QoKCkgPT4gcy5vblByb21wdEZvY3VzKCkpLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdhY2Nlc3NpYmlsaXR5IGFubm91bmNlbWVudHMnLCAoKSA9PiB7XG4gICAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJyc7XG4gICAgfSk7XG5cbiAgICBpdCgnY3JlYXRlcyBhIHBvbGl0ZSBvZmYtc2NyZWVuIGxpdmUgcmVnaW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgcyA9IG1ha2UoKTtcblxuICAgICAgcy5jcmVhdGVMaXZlUmVnaW9uKCk7XG5cbiAgICAgIGV4cGVjdChzLmxpdmVSZWdpb24uZ2V0QXR0cmlidXRlKCdhcmlhLWxpdmUnKSkudG9FcXVhbCgncG9saXRlJyk7XG4gICAgICBleHBlY3Qocy5saXZlUmVnaW9uLmdldEF0dHJpYnV0ZSgnYXJpYS1hdG9taWMnKSkudG9FcXVhbCgndHJ1ZScpO1xuICAgICAgZXhwZWN0KGRvY3VtZW50LmJvZHkuY29udGFpbnMocy5saXZlUmVnaW9uKSkudG9CZSh0cnVlKTtcblxuICAgICAgcy5yZW1vdmVMaXZlUmVnaW9uKCk7XG4gICAgICBleHBlY3Qocy5saXZlUmVnaW9uKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgc2Vjb25kIHJlZ2lvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHMgPSBtYWtlKCk7XG5cbiAgICAgIHMuY3JlYXRlTGl2ZVJlZ2lvbigpO1xuICAgICAgY29uc3QgZmlyc3QgPSBzLmxpdmVSZWdpb247XG5cbiAgICAgIHMuY3JlYXRlTGl2ZVJlZ2lvbigpO1xuICAgICAgZXhwZWN0KHMubGl2ZVJlZ2lvbikudG9CZShmaXJzdCk7XG4gICAgICBzLnJlbW92ZUxpdmVSZWdpb24oKTtcbiAgICB9KTtcblxuICAgIGl0KCdhbm5vdW5jZXMgd2hlbiB0eXBlZCBpbnB1dCBleHBhbmRzIGludG8gYSBjb21tYW5kJywgKCkgPT4ge1xuICAgICAgY29uc3QgcyA9IG1ha2UoKTtcblxuICAgICAgcy5jcmVhdGVMaXZlUmVnaW9uKCk7XG4gICAgICBzLnByb21wdFZhbHVlcyA9IHsgcjE6ICd4JyB9O1xuICAgICAgLy8gZ3JldyBieSBtb3JlIHRoYW4gb25lIGNoYXIgQU5EIGdhaW5lZCBhIGJhY2tzbGFzaCA9PiBhIGNvbnZlcnNpb25cbiAgICAgIHMuYW5ub3VuY2VDb252ZXJzaW9uKHsgcjE6ICd4XFxcXGZyYWN7fXt9JyB9KTtcblxuICAgICAgZXhwZWN0KHMubGl2ZVJlZ2lvbi50ZXh0Q29udGVudCkudG9FcXVhbCgnQ29udmVydGVkIHRvIG1hdGggc3ltYm9sJyk7XG4gICAgICBzLnJlbW92ZUxpdmVSZWdpb24oKTtcbiAgICB9KTtcblxuICAgIGl0KCdkb2VzIG5vdCBhbm5vdW5jZSBvcmRpbmFyeSB0eXBpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzID0gbWFrZSgpO1xuXG4gICAgICBzLmNyZWF0ZUxpdmVSZWdpb24oKTtcbiAgICAgIHMucHJvbXB0VmFsdWVzID0geyByMTogJ3gnIH07XG4gICAgICBzLmFubm91bmNlQ29udmVyc2lvbih7IHIxOiAneHknIH0pO1xuXG4gICAgICBleHBlY3Qocy5saXZlUmVnaW9uLnRleHRDb250ZW50KS50b0VxdWFsKCcnKTtcbiAgICAgIHMucmVtb3ZlTGl2ZVJlZ2lvbigpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IGFubm91bmNlIGEgZGVsZXRpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBzID0gbWFrZSgpO1xuXG4gICAgICBzLmNyZWF0ZUxpdmVSZWdpb24oKTtcbiAgICAgIHMucHJvbXB0VmFsdWVzID0geyByMTogJ3hcXFxcZnJhY3t9e30nIH07XG4gICAgICBzLm9uS2V5RG93bih7IGtleTogJ0JhY2tzcGFjZScgfSk7XG4gICAgICBzLmFubm91bmNlQ29udmVyc2lvbih7IHIxOiAneCcgfSk7XG5cbiAgICAgIGV4cGVjdChzLmxpdmVSZWdpb24udGV4dENvbnRlbnQpLnRvRXF1YWwoJycpO1xuICAgICAgcy5yZW1vdmVMaXZlUmVnaW9uKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmb2N1cyAvIGJsdXInLCAoKSA9PiB7XG4gICAgaXQoJ2RlbGVnYXRlcyB0byB0aGUgZmllbGQgYW5kIGlzIHNhZmUgd2l0aG91dCBvbmUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzID0gbWFrZSgpO1xuXG4gICAgICBleHBlY3QoKCkgPT4ge1xuICAgICAgICBzLmZvY3VzKCk7XG4gICAgICAgIHMuYmx1cigpO1xuICAgICAgfSkubm90LnRvVGhyb3coKTtcblxuICAgICAgcy5tYXRoRmllbGQgPSBzdHViRmllbGQoKTtcbiAgICAgIHMuZm9jdXMoKTtcbiAgICAgIHMuYmx1cigpO1xuXG4gICAgICBleHBlY3Qocy5tYXRoRmllbGQuZm9jdXNlZCkudG9CZSh0cnVlKTtcbiAgICAgIGV4cGVjdChzLm1hdGhGaWVsZC5ibHVycmVkKS50b0JlKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICAvKipcbiAgICogTWF0aExpdmUgc2hvd3MgdGhlIGNhcmV0IG9ubHkgd2hpbGUgdGhlIGZpZWxkIGNhcnJpZXMgYE1MX19mb2N1c2VkYCwgd2hpY2hcbiAgICogaXQgYWRkcyBkdXJpbmcgYSByZW5kZXIgZ2F0ZWQgb24gYGlzU2VsZWN0aW9uRWRpdGFibGUgJiYgaGFzRm9jdXMoKWAuIEluIGFcbiAgICogcmVhZC1vbmx5IGZpZWxkIG9ubHkgcHJvbXB0IGludGVyaW9ycyBhcmUgZWRpdGFibGUsIHNvIGFmdGVyIGEgYmFyZVxuICAgKiBgZm9jdXMoKWAgLSB3aG9zZSBzZWxlY3Rpb24gc2l0cyBvdXRzaWRlIGV2ZXJ5IHByb21wdCAtIHRoZSBhbnN3ZXIgYmxvY2tcbiAgICogbG9va2VkIGZvY3VzZWQgYnV0IGhhZCBubyBibGlua2luZyBjdXJzb3IuIFZlcmlmaWVkIGluIENocm9taXVtOiB0aGUgY2FyZXRcbiAgICogc3BhbiBnb2VzIGZyb20gdmlzaWJpbGl0eTpoaWRkZW4gdG8gdmlzaWJsZSBvbmNlIHRoZSBzZWxlY3Rpb24gaXMgaW5zaWRlIGFcbiAgICogcHJvbXB0IEFORCBhIHJlbmRlciBoYXMgcnVuLlxuICAgKi9cbiAgZGVzY3JpYmUoJ2NhcmV0IHBsYWNlbWVudCcsICgpID0+IHtcbiAgICBpdCgncHV0cyBhIGNvbGxhcHNlZCBjYXJldCBpbiB0aGUgZmlyc3QgcHJvbXB0IG9uIGZvY3VzJywgKCkgPT4ge1xuICAgICAgY29uc3QgcyA9IG1ha2UoKTtcblxuICAgICAgcy5tYXRoRmllbGQgPSBzdHViRmllbGQoeyByMTogJycsIHIyOiAnJyB9KTtcbiAgICAgIHMuZm9jdXMoKTtcblxuICAgICAgLy8gc3R1YiByYW5nZXMgYXJlIFswLDVdIGZvciByMSwgWzEwLDE1XSBmb3IgcjJcbiAgICAgIGV4cGVjdChzLm1hdGhGaWVsZC5zZWxlY3Rpb24pLnRvRXF1YWwoeyByYW5nZXM6IFtbMCwgMF1dIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZvcmNlcyB0aGUgcmVuZGVyIHRoYXQgbWFrZXMgdGhlIGNhcmV0IHZpc2libGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBzID0gbWFrZSgpO1xuXG4gICAgICBzLm1hdGhGaWVsZCA9IHN0dWJGaWVsZCh7IHIxOiAnJyB9KTtcbiAgICAgIHMuZm9jdXMoKTtcblxuICAgICAgLy8gYXNzaWduaW5nIGBzZWxlY3Rpb25gIGFsb25lIHVwZGF0ZXMgdGhlIG1vZGVsIHdpdGhvdXQgcmUtcmVuZGVyaW5nLCBzb1xuICAgICAgLy8gTUxfX2ZvY3VzZWQgd291bGQgbmV2ZXIgYmUgYWRkZWRcbiAgICAgIGV4cGVjdChzLm1hdGhGaWVsZC5jb21tYW5kcykudG9FcXVhbChbJ3Njcm9sbEludG9WaWV3J10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2RvZXMgbm90IG1vdmUgYSBjYXJldCB0aGF0IGlzIGFscmVhZHkgaW5zaWRlIGEgcHJvbXB0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcyA9IG1ha2UoKTtcblxuICAgICAgcy5tYXRoRmllbGQgPSBzdHViRmllbGQoeyByMTogJycsIHIyOiAnJyB9KTtcbiAgICAgIHMubWF0aEZpZWxkLnBvc2l0aW9uID0gMTI7IC8vIGluc2lkZSByMlxuICAgICAgcy5mb2N1cygpO1xuXG4gICAgICBleHBlY3Qocy5tYXRoRmllbGQuc2VsZWN0aW9uKS50b0JlKG51bGwpO1xuICAgICAgZXhwZWN0KHMubWF0aEZpZWxkLmNvbW1hbmRzKS50b0VxdWFsKFtdKTtcbiAgICB9KTtcblxuICAgIGl0KCd0YXJnZXRzIGEgc3BlY2lmaWMgcHJvbXB0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcyA9IG1ha2UoKTtcblxuICAgICAgcy5tYXRoRmllbGQgPSBzdHViRmllbGQoeyByMTogJycsIHIyOiAnJyB9KTtcbiAgICAgIHMuZm9jdXNQcm9tcHQoJ3IyJyk7XG5cbiAgICAgIGV4cGVjdChzLm1hdGhGaWVsZC5zZWxlY3Rpb24pLnRvRXF1YWwoeyByYW5nZXM6IFtbMTAsIDEwXV0gfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnZmFsbHMgYmFjayB0byB0aGUgZmlyc3QgcHJvbXB0IGZvciBhbiB1bmtub3duIGlkJywgKCkgPT4ge1xuICAgICAgY29uc3QgcyA9IG1ha2UoKTtcblxuICAgICAgcy5tYXRoRmllbGQgPSBzdHViRmllbGQoeyByMTogJycsIHIyOiAnJyB9KTtcbiAgICAgIHMuZm9jdXNQcm9tcHQoJ25vcGUnKTtcblxuICAgICAgZXhwZWN0KHMubWF0aEZpZWxkLnNlbGVjdGlvbikudG9FcXVhbCh7IHJhbmdlczogW1swLCAwXV0gfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnaXMgYSBuby1vcCB3aGVuIHRoZXJlIGFyZSBubyBwcm9tcHRzJywgKCkgPT4ge1xuICAgICAgY29uc3QgcyA9IG1ha2UoKTtcblxuICAgICAgcy5tYXRoRmllbGQgPSBzdHViRmllbGQoe30pO1xuXG4gICAgICBleHBlY3QoKCkgPT4gcy5mb2N1c1Byb21wdCgpKS5ub3QudG9UaHJvdygpO1xuICAgICAgZXhwZWN0KHMubWF0aEZpZWxkLnNlbGVjdGlvbikudG9CZShudWxsKTtcbiAgICB9KTtcblxuICAgIGl0KCdpcyBzYWZlIHdpdGhvdXQgYSBmaWVsZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiBtYWtlKCkuZm9jdXNQcm9tcHQoJ3IxJykpLm5vdC50b1Rocm93KCk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgncHJvbXB0Q29udGFpbmluZycsICgpID0+IHtcbiAgICAgIGl0KCdmaW5kcyB0aGUgcHJvbXB0IHdob3NlIHJhbmdlIGhvbGRzIHRoZSBvZmZzZXQsIGluY2x1c2l2ZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgcyA9IG1ha2UoKTtcblxuICAgICAgICBzLm1hdGhGaWVsZCA9IHN0dWJGaWVsZCh7IHIxOiAnJywgcjI6ICcnIH0pO1xuXG4gICAgICAgIGV4cGVjdChzLnByb21wdENvbnRhaW5pbmcoMCkpLnRvRXF1YWwoJ3IxJyk7XG4gICAgICAgIGV4cGVjdChzLnByb21wdENvbnRhaW5pbmcoNSkpLnRvRXF1YWwoJ3IxJyk7XG4gICAgICAgIGV4cGVjdChzLnByb21wdENvbnRhaW5pbmcoMTApKS50b0VxdWFsKCdyMicpO1xuICAgICAgICBleHBlY3Qocy5wcm9tcHRDb250YWluaW5nKDcpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3RyZWF0cyBhIG1pc3NpbmcgcG9zaXRpb24gYXMgb3V0c2lkZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgcyA9IG1ha2UoKTtcblxuICAgICAgICBzLm1hdGhGaWVsZCA9IHN0dWJGaWVsZCh7IHIxOiAnJyB9KTtcblxuICAgICAgICBleHBlY3Qocy5wcm9tcHRDb250YWluaW5nKHVuZGVmaW5lZCkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gTWF0aFF1aWxsJ3MgaW5uZXIgZmllbGRzIGNvdWxkIGJlIGZvY3VzZWQgZGlyZWN0bHkuXG4gICAgaXQoJ3Byb21wdEhhbmRsZSBleHBvc2VzIGZvY3VzKCkgZm9yIGl0cyBvd24gcHJvbXB0JywgKCkgPT4ge1xuICAgICAgY29uc3QgcyA9IG1ha2UoKTtcblxuICAgICAgcy5tYXRoRmllbGQgPSBzdHViRmllbGQoeyByMTogJycsIHIyOiAnJyB9KTtcbiAgICAgIHMucHJvbXB0SGFuZGxlKCdyMicpLmZvY3VzKCk7XG5cbiAgICAgIGV4cGVjdChzLm1hdGhGaWVsZC5mb2N1c2VkKS50b0JlKHRydWUpO1xuICAgICAgZXhwZWN0KHMubWF0aEZpZWxkLnNlbGVjdGlvbikudG9FcXVhbCh7IHJhbmdlczogW1sxMCwgMTBdXSB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUFrQyxTQUFBQyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUss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
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
5
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
6
|
+
var _mathliveInstance = require("../mathlive-instance");
|
|
7
|
+
describe('tmp', function () {
|
|
8
|
+
it('prints markup', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
9
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
10
|
+
while (1) switch (_context.prev = _context.next) {
|
|
11
|
+
case 0:
|
|
12
|
+
_context.next = 1;
|
|
13
|
+
return (0, _mathliveInstance.loadMathLive)();
|
|
14
|
+
case 1:
|
|
15
|
+
// eslint-disable-next-line no-console
|
|
16
|
+
console.log('SQRT1:', (0, _mathliveInstance.latexToMarkup)('\\sqrt[1]{2}'));
|
|
17
|
+
// eslint-disable-next-line no-console
|
|
18
|
+
console.log('NTHROOT:', (0, _mathliveInstance.latexToMarkup)('\\sqrt[{}]{}'));
|
|
19
|
+
case 2:
|
|
20
|
+
case "end":
|
|
21
|
+
return _context.stop();
|
|
22
|
+
}
|
|
23
|
+
}, _callee);
|
|
24
|
+
})));
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0aGxpdmVJbnN0YW5jZSIsInJlcXVpcmUiLCJkZXNjcmliZSIsIml0IiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImxvYWRNYXRoTGl2ZSIsImNvbnNvbGUiLCJsb2ciLCJsYXRleFRvTWFya3VwIiwic3RvcCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vdG1wLW1hcmt1cC50ZXN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGxvYWRNYXRoTGl2ZSwgbGF0ZXhUb01hcmt1cCB9IGZyb20gJy4uL21hdGhsaXZlLWluc3RhbmNlJztcblxuZGVzY3JpYmUoJ3RtcCcsICgpID0+IHtcbiAgaXQoJ3ByaW50cyBtYXJrdXAnLCBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgbG9hZE1hdGhMaXZlKCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnU1FSVDE6JywgbGF0ZXhUb01hcmt1cCgnXFxcXHNxcnRbMV17Mn0nKSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnTlRIUk9PVDonLCBsYXRleFRvTWFya3VwKCdcXFxcc3FydFt7fV17fScpKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFBQSxpQkFBQSxHQUFBQyxPQUFBO0FBRUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsWUFBTTtFQUNwQkMsRUFBRSxDQUFDLGVBQWUsbUJBQUFDLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBRSxTQUFBQyxRQUFBO0lBQUEsT0FBQUYsWUFBQSxZQUFBRyxJQUFBLFdBQUFDLFFBQUE7TUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtRQUFBO1VBQUFGLFFBQUEsQ0FBQUUsSUFBQTtVQUFBLE9BQ1osSUFBQUMsOEJBQVksRUFBQyxDQUFDO1FBQUE7VUFDcEI7VUFDQUMsT0FBTyxDQUFDQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUFDLCtCQUFhLEVBQUMsY0FBYyxDQUFDLENBQUM7VUFDcEQ7VUFDQUYsT0FBTyxDQUFDQyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUFDLCtCQUFhLEVBQUMsY0FBYyxDQUFDLENBQUM7UUFBQztRQUFBO1VBQUEsT0FBQU4sUUFBQSxDQUFBTyxJQUFBO01BQUE7SUFBQSxHQUFBVCxPQUFBO0VBQUEsQ0FDeEQsR0FBQztBQUNKLENBQUMsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
package/lib/keypad/index.js
CHANGED
|
@@ -27,10 +27,10 @@ var _keys = require("../keys");
|
|
|
27
27
|
var _keysLayout = require("./keys-layout");
|
|
28
28
|
var _commonStyles = require("../mf/common-styles");
|
|
29
29
|
var _mathliveInstance = require("../mathlive-instance");
|
|
30
|
-
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; }
|
|
31
|
-
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; }
|
|
32
30
|
function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
|
|
33
31
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
32
|
+
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; }
|
|
33
|
+
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; }
|
|
34
34
|
var log = (0, _debug["default"])('pie-lib:math-input-mathlive:keypad');
|
|
35
35
|
|
|
36
36
|
/**
|
|
@@ -45,7 +45,7 @@ var log = (0, _debug["default"])('pie-lib:math-input-mathlive:keypad');
|
|
|
45
45
|
// Evaluating them in a plain object literal runs them at module load, which
|
|
46
46
|
// breaks any consumer that mocks a subset of @pie-lib/render-ui.
|
|
47
47
|
var LabelHolder = (0, _styles.styled)('span')(function () {
|
|
48
|
-
return {
|
|
48
|
+
return _objectSpread({
|
|
49
49
|
pointerEvents: 'none',
|
|
50
50
|
textTransform: 'none',
|
|
51
51
|
color: _renderUi.color.text(),
|
|
@@ -73,7 +73,7 @@ var LabelHolder = (0, _styles.styled)('span')(function () {
|
|
|
73
73
|
'& [data-pie-empty]': {
|
|
74
74
|
opacity: 0.5
|
|
75
75
|
}
|
|
76
|
-
};
|
|
76
|
+
}, _commonStyles.rootIndexStyles);
|
|
77
77
|
});
|
|
78
78
|
var LatexLabel = exports.LatexLabel = /*#__PURE__*/function (_React$Component) {
|
|
79
79
|
function LatexLabel(props) {
|