@pie-lib/math-input-mathlive 1.1.5-beta.7 → 1.1.5-beta.8
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__/input-selection.test.js +103 -0
- package/lib/__tests__/keypad-label.test.js +4 -2
- package/lib/__tests__/selection.test.js +195 -0
- package/lib/latex-bridge.js +6 -1
- package/lib/latex-bridge.js.map +1 -1
- package/lib/mf/input.js +8 -0
- package/lib/mf/input.js.map +1 -1
- package/lib/selection.js +148 -0
- package/lib/selection.js.map +1 -0
- package/package.json +1 -1
- package/src/__tests__/input-selection.test.jsx +64 -0
- package/src/__tests__/keypad-label.test.jsx +12 -0
- package/src/__tests__/selection.test.js +212 -0
- package/src/latex-bridge.js +6 -0
- package/src/mf/input.jsx +9 -0
- package/src/selection.js +146 -0
|
@@ -0,0 +1,103 @@
|
|
|
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 _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
7
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
8
|
+
var _input = _interopRequireDefault(require("../mf/input"));
|
|
9
|
+
var _selection = require("../selection");
|
|
10
|
+
/**
|
|
11
|
+
* The editable Input keeps its selection snapped to whole atoms (see
|
|
12
|
+
* selection.js). This checks the wiring: attached on mount, removed on unmount.
|
|
13
|
+
*/
|
|
14
|
+
jest.mock('../mathlive-instance', function () {
|
|
15
|
+
var FakeMathfieldElement = /*#__PURE__*/(0, _createClass2["default"])(function FakeMathfieldElement() {
|
|
16
|
+
(0, _classCallCheck2["default"])(this, FakeMathfieldElement);
|
|
17
|
+
var el = global.document.createElement('math-field');
|
|
18
|
+
el.value = '';
|
|
19
|
+
el.getValue = function () {
|
|
20
|
+
return el.value;
|
|
21
|
+
};
|
|
22
|
+
return el;
|
|
23
|
+
});
|
|
24
|
+
return {
|
|
25
|
+
loadMathLive: function loadMathLive() {
|
|
26
|
+
return Promise.resolve({
|
|
27
|
+
MathfieldElement: FakeMathfieldElement
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
getMacros: function getMacros() {
|
|
31
|
+
return {};
|
|
32
|
+
},
|
|
33
|
+
MATH_MODE_SPACE: '\\ ',
|
|
34
|
+
applyShadowStyles: function applyShadowStyles() {},
|
|
35
|
+
trackPlaceholderCaret: function trackPlaceholderCaret() {
|
|
36
|
+
return function () {};
|
|
37
|
+
},
|
|
38
|
+
latexToMarkup: function latexToMarkup(l) {
|
|
39
|
+
return "<span>".concat(l, "</span>");
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
var mockUntrack = jest.fn();
|
|
44
|
+
jest.mock('../selection', function () {
|
|
45
|
+
return {
|
|
46
|
+
trackWholeAtomSelection: jest.fn(function () {
|
|
47
|
+
return mockUntrack;
|
|
48
|
+
})
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// eslint-disable-next-line import/first
|
|
53
|
+
|
|
54
|
+
// eslint-disable-next-line import/first
|
|
55
|
+
|
|
56
|
+
describe('Input: whole-atom selection', function () {
|
|
57
|
+
beforeEach(function () {
|
|
58
|
+
_selection.trackWholeAtomSelection.mockClear();
|
|
59
|
+
mockUntrack.mockClear();
|
|
60
|
+
});
|
|
61
|
+
it('attaches the tracker to the mathfield on mount', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
62
|
+
var input;
|
|
63
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
64
|
+
while (1) switch (_context.prev = _context.next) {
|
|
65
|
+
case 0:
|
|
66
|
+
input = new _input["default"]({});
|
|
67
|
+
input.holderRef = {
|
|
68
|
+
current: document.createElement('span')
|
|
69
|
+
};
|
|
70
|
+
_context.next = 1;
|
|
71
|
+
return input.componentDidMount();
|
|
72
|
+
case 1:
|
|
73
|
+
expect(_selection.trackWholeAtomSelection).toHaveBeenCalledTimes(1);
|
|
74
|
+
expect(_selection.trackWholeAtomSelection).toHaveBeenCalledWith(input.mathField);
|
|
75
|
+
case 2:
|
|
76
|
+
case "end":
|
|
77
|
+
return _context.stop();
|
|
78
|
+
}
|
|
79
|
+
}, _callee);
|
|
80
|
+
})));
|
|
81
|
+
it('removes it on unmount', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
82
|
+
var input;
|
|
83
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
84
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
85
|
+
case 0:
|
|
86
|
+
input = new _input["default"]({});
|
|
87
|
+
input.holderRef = {
|
|
88
|
+
current: document.createElement('span')
|
|
89
|
+
};
|
|
90
|
+
_context2.next = 1;
|
|
91
|
+
return input.componentDidMount();
|
|
92
|
+
case 1:
|
|
93
|
+
input.componentWillUnmount();
|
|
94
|
+
expect(mockUntrack).toHaveBeenCalledTimes(1);
|
|
95
|
+
expect(input.untrackSelection).toBeUndefined();
|
|
96
|
+
case 2:
|
|
97
|
+
case "end":
|
|
98
|
+
return _context2.stop();
|
|
99
|
+
}
|
|
100
|
+
}, _callee2);
|
|
101
|
+
})));
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5wdXQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zZWxlY3Rpb24iLCJqZXN0IiwibW9jayIsIkZha2VNYXRoZmllbGRFbGVtZW50IiwiX2NyZWF0ZUNsYXNzMiIsIl9jbGFzc0NhbGxDaGVjazIiLCJlbCIsImdsb2JhbCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInZhbHVlIiwiZ2V0VmFsdWUiLCJsb2FkTWF0aExpdmUiLCJQcm9taXNlIiwicmVzb2x2ZSIsIk1hdGhmaWVsZEVsZW1lbnQiLCJnZXRNYWNyb3MiLCJNQVRIX01PREVfU1BBQ0UiLCJhcHBseVNoYWRvd1N0eWxlcyIsInRyYWNrUGxhY2Vob2xkZXJDYXJldCIsImxhdGV4VG9NYXJrdXAiLCJsIiwiY29uY2F0IiwibW9ja1VudHJhY2siLCJmbiIsInRyYWNrV2hvbGVBdG9tU2VsZWN0aW9uIiwiZGVzY3JpYmUiLCJiZWZvcmVFYWNoIiwibW9ja0NsZWFyIiwiaXQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsImlucHV0Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJJbnB1dCIsImhvbGRlclJlZiIsImN1cnJlbnQiLCJjb21wb25lbnREaWRNb3VudCIsImV4cGVjdCIsInRvSGF2ZUJlZW5DYWxsZWRUaW1lcyIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwibWF0aEZpZWxkIiwic3RvcCIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJ1bnRyYWNrU2VsZWN0aW9uIiwidG9CZVVuZGVmaW5lZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5wdXQtc2VsZWN0aW9uLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGVkaXRhYmxlIElucHV0IGtlZXBzIGl0cyBzZWxlY3Rpb24gc25hcHBlZCB0byB3aG9sZSBhdG9tcyAoc2VlXG4gKiBzZWxlY3Rpb24uanMpLiBUaGlzIGNoZWNrcyB0aGUgd2lyaW5nOiBhdHRhY2hlZCBvbiBtb3VudCwgcmVtb3ZlZCBvbiB1bm1vdW50LlxuICovXG5qZXN0Lm1vY2soJy4uL21hdGhsaXZlLWluc3RhbmNlJywgKCkgPT4ge1xuICBjbGFzcyBGYWtlTWF0aGZpZWxkRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICBjb25zdCBlbCA9IGdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdtYXRoLWZpZWxkJyk7XG5cbiAgICAgIGVsLnZhbHVlID0gJyc7XG4gICAgICBlbC5nZXRWYWx1ZSA9ICgpID0+IGVsLnZhbHVlO1xuXG4gICAgICByZXR1cm4gZWw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBsb2FkTWF0aExpdmU6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7IE1hdGhmaWVsZEVsZW1lbnQ6IEZha2VNYXRoZmllbGRFbGVtZW50IH0pLFxuICAgIGdldE1hY3JvczogKCkgPT4gKHt9KSxcbiAgICBNQVRIX01PREVfU1BBQ0U6ICdcXFxcICcsXG4gICAgYXBwbHlTaGFkb3dTdHlsZXM6ICgpID0+IHt9LFxuICAgIHRyYWNrUGxhY2Vob2xkZXJDYXJldDogKCkgPT4gKCkgPT4ge30sXG4gICAgbGF0ZXhUb01hcmt1cDogKGwpID0+IGA8c3Bhbj4ke2x9PC9zcGFuPmAsXG4gIH07XG59KTtcblxuY29uc3QgbW9ja1VudHJhY2sgPSBqZXN0LmZuKCk7XG5cbmplc3QubW9jaygnLi4vc2VsZWN0aW9uJywgKCkgPT4gKHtcbiAgdHJhY2tXaG9sZUF0b21TZWxlY3Rpb246IGplc3QuZm4oKCkgPT4gbW9ja1VudHJhY2spLFxufSkpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L2ZpcnN0XG5pbXBvcnQgSW5wdXQgZnJvbSAnLi4vbWYvaW5wdXQnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9maXJzdFxuaW1wb3J0IHsgdHJhY2tXaG9sZUF0b21TZWxlY3Rpb24gfSBmcm9tICcuLi9zZWxlY3Rpb24nO1xuXG5kZXNjcmliZSgnSW5wdXQ6IHdob2xlLWF0b20gc2VsZWN0aW9uJywgKCkgPT4ge1xuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB0cmFja1dob2xlQXRvbVNlbGVjdGlvbi5tb2NrQ2xlYXIoKTtcbiAgICBtb2NrVW50cmFjay5tb2NrQ2xlYXIoKTtcbiAgfSk7XG5cbiAgaXQoJ2F0dGFjaGVzIHRoZSB0cmFja2VyIHRvIHRoZSBtYXRoZmllbGQgb24gbW91bnQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgaW5wdXQgPSBuZXcgSW5wdXQoe30pO1xuXG4gICAgaW5wdXQuaG9sZGVyUmVmID0geyBjdXJyZW50OiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJykgfTtcbiAgICBhd2FpdCBpbnB1dC5jb21wb25lbnREaWRNb3VudCgpO1xuXG4gICAgZXhwZWN0KHRyYWNrV2hvbGVBdG9tU2VsZWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KHRyYWNrV2hvbGVBdG9tU2VsZWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChpbnB1dC5tYXRoRmllbGQpO1xuICB9KTtcblxuICBpdCgncmVtb3ZlcyBpdCBvbiB1bm1vdW50JywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGlucHV0ID0gbmV3IElucHV0KHt9KTtcblxuICAgIGlucHV0LmhvbGRlclJlZiA9IHsgY3VycmVudDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpIH07XG4gICAgYXdhaXQgaW5wdXQuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICBpbnB1dC5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuXG4gICAgZXhwZWN0KG1vY2tVbnRyYWNrKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gICAgZXhwZWN0KGlucHV0LnVudHJhY2tTZWxlY3Rpb24pLnRvQmVVbmRlZmluZWQoKTtcbiAg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
|
|
@@ -21,8 +21,10 @@ describe('keypad label display normalisation', function () {
|
|
|
21
21
|
it.each([['absolute value', '\\abs{}', '|', '|'], ['parenthesis', '\\left(\\right)', '(', ')'], ['brackets', '\\left[\\right]', '[', ']']])('gives an empty %s a tall, filled slot (the same muted tag as other slots)', function (_name, latex, open, close) {
|
|
22
22
|
var out = (0, _latexBridge.withVisibleEmptySlots)((0, _latexBridge.toMathLive)(latex));
|
|
23
23
|
expect(out).toContain('pie-empty=1');
|
|
24
|
-
expect(out).toContain('\\rule{0.55em}{1em}');
|
|
24
|
+
expect(out).toContain('\\rule[-0.25em]{0.55em}{1em}');
|
|
25
25
|
expect(out).not.toContain('\\boxed');
|
|
26
|
+
// the strut that keeps the fences tall while the box is centred on the axis
|
|
27
|
+
expect(out).toContain('\\rule{0em}{1em}');
|
|
26
28
|
expect(out.startsWith("\\left".concat(open))).toBe(true);
|
|
27
29
|
expect(out.endsWith("\\right".concat(close))).toBe(true);
|
|
28
30
|
});
|
|
@@ -226,4 +228,4 @@ describe('keypad label display normalisation', function () {
|
|
|
226
228
|
expect((0, _latexBridge.keyToAction)(key).value).not.toContain('pie-empty');
|
|
227
229
|
});
|
|
228
230
|
});
|
|
229
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF0ZXhCcmlkZ2UiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsIm91dCIsImxhdGV4Rm9yRGlzcGxheSIsImV4cGVjdCIsIm5vdCIsInRvRXF1YWwiLCJ0b0NvbnRhaW4iLCJlYWNoIiwiX25hbWUiLCJsYXRleCIsIm9wZW4iLCJjbG9zZSIsInRvTWF0aExpdmUiLCJzdGFydHNXaXRoIiwiY29uY2F0IiwidG9CZSIsImVuZHNXaXRoIiwiZm9yRWFjaCIsImdlb21ldHJ5IiwiT2JqZWN0IiwidmFsdWVzIiwia2V5IiwidG9NYXRjaCIsIl9yZXF1aXJlIiwicGxhY2Vob2xkZXJTdHlsZXMiLCJwb3NpdGlvbiIsImxlZnQiLCJ3aWR0aCIsIm1hcmdpbkxlZnQiLCJJTkRFWF9NQVJLVVAiLCJydWxlIiwiX3JlcXVpcmUyIiwicm9vdEluZGV4U3R5bGVzIiwic2VsZWN0b3JzIiwia2V5cyIsInRvSGF2ZUxlbmd0aCIsInNlbGVjdG9yIiwidmFsdWUiLCJmb250U2l6ZSIsImhvbGRlciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsIm1hdGNoZWQiLCJxdWVyeVNlbGVjdG9yQWxsIiwicmVwbGFjZSIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImVsIiwiaWQiLCJfcnVsZSIsImNzIiwiX3J1bGUyIiwibmFtZSIsInRvQmVEZWZpbmVkIiwiUk9PVF9JTkRFWF9DU1MiLCJzdHlsZSIsIl90eXBlb2YyIiwiX3JlcXVpcmUzIiwicGVyY2VudGFnZSIsImtleVRvQWN0aW9uIiwiX3JlcXVpcmU0IiwiYmFzZVNldCIsIl9yZXF1aXJlNSIsImdyYWRlU2V0cyIsImV2ZXJ5IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImciLCJzZXQiLCJ3YWxrIiwibm9kZSIsImlzQXJyYXkiLCJmaWVsZCIsInVuZGVmaW5lZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18va2V5cGFkLWxhYmVsLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhWaXNpYmxlRW1wdHlTbG90cyBhcyBsYXRleEZvckRpc3BsYXkgfSBmcm9tICcuLi9sYXRleC1icmlkZ2UnO1xuaW1wb3J0IHsga2V5VG9BY3Rpb24sIHRvTWF0aExpdmUgfSBmcm9tICcuLi9sYXRleC1icmlkZ2UnO1xuXG4vKipcbiAqIEtleXMgdXNlIGVtcHR5IGdyb3VwcyB0byBzaG93IGEgY29tbWFuZCdzIHNoYXBlIChgXFxmcmFje317fWAsIGB4Xnt9YCkuXG4gKiBNYXRoTGl2ZSByZW5kZXJzIGB7fWAgYXMgbm90aGluZywgc28gbGFiZWxzIG5lZWQgYSB2aXNpYmxlIHN0YW5kLWluIC0gYnV0IHRoZVxuICogdmFsdWUgdGhhdCBnZXRzICppbnNlcnRlZCogbXVzdCBzdGF5IHVudG91Y2hlZC5cbiAqL1xuZGVzY3JpYmUoJ2tleXBhZCBsYWJlbCBkaXNwbGF5IG5vcm1hbGlzYXRpb24nLCAoKSA9PiB7XG4gIGl0KCdnaXZlcyBlbXB0eSBncm91cHMgYSB2aXNpYmxlIGdseXBoJywgKCkgPT4ge1xuICAgIGNvbnN0IG91dCA9IGxhdGV4Rm9yRGlzcGxheSgnXFxcXGZyYWN7fXt9Jyk7XG5cbiAgICBleHBlY3Qob3V0KS5ub3QudG9FcXVhbCgnXFxcXGZyYWN7fXt9Jyk7XG4gICAgLy8gYSBcXHJ1bGUsIG5vdCBhIGdseXBoOiBmb250IG1ldHJpY3MgZm9yIGEgc3Vic3RpdHV0ZWQgZ2x5cGggZG8gbm90IG1hdGNoXG4gICAgLy8gTWF0aExpdmUncywgd2hpY2ggbGVmdCBzdHJldGNoeSBhY2NlbnRzIG5hcnJvd2VyIHRoYW4gdGhlIGJveFxuICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbignXFxcXHJ1bGUnKTtcbiAgICBleHBlY3Qob3V0KS50b0NvbnRhaW4oJ3BpZS1lbXB0eScpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICBbJ2Fic29sdXRlIHZhbHVlJywgJ1xcXFxhYnN7fScsICd8JywgJ3wnXSxcbiAgICBbJ3BhcmVudGhlc2lzJywgJ1xcXFxsZWZ0KFxcXFxyaWdodCknLCAnKCcsICcpJ10sXG4gICAgWydicmFja2V0cycsICdcXFxcbGVmdFtcXFxccmlnaHRdJywgJ1snLCAnXSddLFxuICBdKSgnZ2l2ZXMgYW4gZW1wdHkgJXMgYSB0YWxsLCBmaWxsZWQgc2xvdCAodGhlIHNhbWUgbXV0ZWQgdGFnIGFzIG90aGVyIHNsb3RzKScsIChfbmFtZSwgbGF0ZXgsIG9wZW4sIGNsb3NlKSA9PiB7XG4gICAgY29uc3Qgb3V0ID0gbGF0ZXhGb3JEaXNwbGF5KHRvTWF0aExpdmUobGF0ZXgpKTtcblxuICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbigncGllLWVtcHR5PTEnKTtcbiAgICBleHBlY3Qob3V0KS50b0NvbnRhaW4oJ1xcXFxydWxlezAuNTVlbX17MWVtfScpO1xuICAgIGV4cGVjdChvdXQpLm5vdC50b0NvbnRhaW4oJ1xcXFxib3hlZCcpO1xuICAgIGV4cGVjdChvdXQuc3RhcnRzV2l0aChgXFxcXGxlZnQke29wZW59YCkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KG91dC5lbmRzV2l0aChgXFxcXHJpZ2h0JHtjbG9zZX1gKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2xlYXZlcyBhIGZpbGxlZCBwYWlyIG9mIGZlbmNlcyBhbG9uZScsICgpID0+IHtcbiAgICBleHBlY3QobGF0ZXhGb3JEaXNwbGF5KHRvTWF0aExpdmUoJ1xcXFxhYnN7eH0nKSkpLnRvRXF1YWwoJ1xcXFxsZWZ0fHhcXFxccmlnaHR8Jyk7XG4gICAgZXhwZWN0KGxhdGV4Rm9yRGlzcGxheSgnXFxcXGxlZnQoeFxcXFxyaWdodCknKSkudG9FcXVhbCgnXFxcXGxlZnQoeFxcXFxyaWdodCknKTtcbiAgfSk7XG5cbiAgaXQoJ2hhbmRsZXMgZXZlcnkgZW1wdHktZ3JvdXAga2V5IHNoYXBlJywgKCkgPT4ge1xuICAgIFtcbiAgICAgICdcXFxcZnJhY3t9e30nLFxuICAgICAgJ1xcXFxvdmVybGluZXt9JyxcbiAgICAgICd4Xnt9JyxcbiAgICAgICd4X3t9JyxcbiAgICAgICdcXFxcc3FydHt9JyxcbiAgICAgICdcXFxcc3FydFt7fV17fScsXG4gICAgICAnXFxcXGFic3t9JyxcbiAgICAgICdcXFxcbG9nX3t9JyxcbiAgICAgICdcXFxcbG9uZ2Rpdnt9JyxcbiAgICBdLmZvckVhY2goKGxhdGV4KSA9PiB7XG4gICAgICBleHBlY3QobGF0ZXhGb3JEaXNwbGF5KGxhdGV4KSkubm90LnRvQ29udGFpbigne30nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3RyZWF0cyBhIHdoaXRlc3BhY2Utb25seSBncm91cCBhcyBlbXB0eScsICgpID0+IHtcbiAgICAvLyBlLmcuIFxcZnJhY3t4fXsgfVxuICAgIGV4cGVjdChsYXRleEZvckRpc3BsYXkoJ1xcXFxmcmFje3h9eyB9JykpLnRvQ29udGFpbigncGllLWVtcHR5Jyk7XG4gIH0pO1xuXG4gIC8vIE1hdGhRdWlsbCBuZWVkZWQgYSBuZXN0ZWQgXFxvdmVybGluZXt9IHRvIGRyYXcgdGhlIGVtcHR5IGJveC4gTWF0aExpdmVcbiAgLy8gcmVuZGVycyB0aGF0IGFzIGEgcmVhbCBsaW5lLCBzbyB0aG9zZSBsYWJlbHMgc2hvd2VkIGEgc3B1cmlvdXMgYmFyIChhIGxpbmVcbiAgLy8gdW5kZXIgdGhlIGFycm93cywgYW5kIGEgc3RyYWlnaHQgbGluZSBpbnN0ZWFkIG9mIHRoZSBhcmMpLlxuICBpdCgnYWNjZW50IGtleXMgZG8gbm90IGNhcnJ5IHRoZSBuZXN0ZWQtb3ZlcmxpbmUgYm94IGhhY2snLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgY29uc3QgZ2VvbWV0cnkgPSByZXF1aXJlKCcuLi9rZXlzL2dlb21ldHJ5Jyk7XG5cbiAgICBPYmplY3QudmFsdWVzKGdlb21ldHJ5KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChrZXkgJiYgdHlwZW9mIGtleS5sYXRleCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZXhwZWN0KGtleS5sYXRleCkubm90LnRvQ29udGFpbignXFxcXG92ZXJsaW5le319Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdhbiBhY2NlbnQgb3ZlciBhbiBlbXB0eSBzbG90IHN0aWxsIGdldHMgYSB2aXNpYmxlIGJveCcsICgpID0+IHtcbiAgICBbJ1xcXFxvdmVybGVmdHJpZ2h0YXJyb3d7fScsICdcXFxcb3ZlcmFyY3t9J10uZm9yRWFjaCgobGF0ZXgpID0+IHtcbiAgICAgIGNvbnN0IG91dCA9IGxhdGV4Rm9yRGlzcGxheShsYXRleCk7XG5cbiAgICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbigncGllLWVtcHR5Jyk7XG4gICAgICBleHBlY3Qob3V0KS5ub3QudG9Db250YWluKCdcXFxcb3ZlcmxpbmUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQSBnbHlwaCdzIHdpZHRoIGNvbWVzIGZyb20gZm9udCBtZXRyaWNzOyBVKzI1QUIgaXMgbm90IGluIHRoZSBLYVRlWCBmb250cyxcbiAgLy8gc28gdGhlIGJyb3dzZXIgc3Vic3RpdHV0ZWQgYSB3aWRlciBvbmUgYW5kIHN0cmV0Y2h5IGFjY2VudHMgY2FtZSBvdXRcbiAgLy8gbmFycm93ZXIgdGhhbiB0aGUgYm94LiBBIHJ1bGUgaGFzIGFuIGV4cGxpY2l0IHdpZHRoLlxuICBpdCgndGhlIGVtcHR5IHNsb3QgaGFzIGFuIGV4cGxpY2l0IHdpZHRoLCBub3QgZm9udC1kZXBlbmRlbnQgbWV0cmljcycsICgpID0+IHtcbiAgICBjb25zdCBvdXQgPSBsYXRleEZvckRpc3BsYXkoJ1xcXFxvdmVyYXJje30nKTtcblxuICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbignXFxcXHJ1bGUnKTtcbiAgICBleHBlY3Qob3V0KS50b01hdGNoKC9ydWxlXFx7W1xcZC5dK2VtXFx9XFx7W1xcZC5dK2VtXFx9Lyk7XG4gICAgZXhwZWN0KG91dCkubm90LnRvQ29udGFpbigndW5pY29kZScpO1xuICB9KTtcblxuICAvLyBNZWFzdXJlZCBpbiB0aGUgYnJvd3NlcjogdGhlIGFjY2VudCdzIGltbWVkaWF0ZSB3cmFwcGVyIGNvbXB1dGVzIHRvIDBweFxuICAvLyAoaXRzIC5NTF9fc3RyZXRjaHkgY2hpbGQgaXMgYWJzb2x1dGVseSBwb3NpdGlvbmVkKSwgc28gdGhlIHN2ZyB3aWR0aCBoYXMgdG9cbiAgLy8gcmVzb2x2ZSBhZ2FpbnN0IC5NTF9fYmFzZSAtIHdob3NlIHdpZHRoIGVxdWFscyB0aGUgY29udGVudC4gV2l0aG91dCBwaW5uaW5nXG4gIC8vIHRoYXQsIHRoZSBhcmMgY29sbGFwc2VkIHRvIGEgc3Bpa2UgYW5kIHNhdCByaWdodCBvZiB0aGUgYm94LlxuICBpdCgncGlucyB0aGUgYWNjZW50IGNvbnRhaW5pbmcgYmxvY2sgYW5kIGRyb3BzIHRoZSBjZW50ZXJpbmcgc2hpZnQnLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgY29uc3QgeyBwbGFjZWhvbGRlclN0eWxlcyB9ID0gcmVxdWlyZSgnLi4vbWYvY29tbW9uLXN0eWxlcycpO1xuXG4gICAgZXhwZWN0KHBsYWNlaG9sZGVyU3R5bGVzWycmIC5NTF9fYmFzZSddLnBvc2l0aW9uKS50b0VxdWFsKCdyZWxhdGl2ZScpO1xuICAgIGV4cGVjdChwbGFjZWhvbGRlclN0eWxlc1snJiAuTUxfX3N0cmV0Y2h5J10pLnRvRXF1YWwoeyBwb3NpdGlvbjogJ2Fic29sdXRlJywgbGVmdDogMCwgd2lkdGg6ICcxMDAlJyB9KTtcbiAgICAvLyBtdXN0IGJlICFpbXBvcnRhbnQ6IE1hdGhMaXZlIHdyaXRlcyBtYXJnaW4tbGVmdCBhcyBhbiBpbmxpbmUgc3R5bGUsIGFuZCBhXG4gICAgLy8gY2xhc3MgY2Fubm90IG92ZXJyaWRlIHRoYXQuIExlYXZpbmcgaXQgdW4taW1wb3J0YW50IGFsc28gaGFsdmVkIHRoZSBhcmMnc1xuICAgIC8vIHdpZHRoLCBiZWNhdXNlIC5NTF9fY2VudGVyIGlzIHRoZSBzdHJldGNoeSdzIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgZXhwZWN0KHBsYWNlaG9sZGVyU3R5bGVzWycmIC5NTF9fY2VudGVyOmhhcyguTUxfX3N0cmV0Y2h5KSddLm1hcmdpbkxlZnQpLnRvRXF1YWwoJzAgIWltcG9ydGFudCcpO1xuICB9KTtcblxuICAvLyBNYXRoTGl2ZSBzZXRzIHRoZSBpbmRleCBvZiBcXHNxcnRbbl17eH0gaW4gc2NyaXB0c2NyaXB0c3R5bGUgLSBhbiBpbmxpbmVcbiAgLy8gYGZvbnQtc2l6ZTogNTAlYCAtIHdoaWNoIGlzIHRvbyBzbWFsbCB0byByZWFkIG9uIHRoZSBudGgtcm9vdCBrZXkgYW5kIGluXG4gIC8vIGF1dGhvcmVkIHJhZGljYWxzLiBJdCBpcyBzY2FsZWQgdXAgdG8gODAlLlxuICBkZXNjcmliZSgncmFkaWNhbCBpbmRleCBzaXplJywgKCkgPT4ge1xuICAgIC8vIFJlYWwgTWF0aExpdmUgMC4xMTAgb3V0cHV0IGZvciBgXFxzcXJ0WzFdezJ9YCwgdHJpbW1lZCB0byB0aGUgaW5kZXguIFRoZVxuICAgIC8vIHNlbGVjdG9yIHdhbGtzIHRoaXMgZXhhY3QgY2hhaW4sIHNvIHRoaXMgZml4dHVyZSBpcyB3aGF0IHBpbnMgaXQgZG93bi5cbiAgICBjb25zdCBJTkRFWF9NQVJLVVAgPSBgXG4gICAgICA8c3BhbiBjbGFzcz1cIk1MX19iYXNlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiTUxfX3NxcnQtaW5kZXhcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIk1MX192bGlzdC10XCI+PHNwYW4gY2xhc3M9XCJNTF9fdmxpc3QtclwiPjxzcGFuIGNsYXNzPVwiTUxfX3ZsaXN0XCIgc3R5bGU9XCJoZWlnaHQ6MC43OGVtXCI+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cInRvcDotMy40NWVtXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiTUxfX3BzdHJ1dFwiIHN0eWxlPVwiaGVpZ2h0OjNlbVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJpbmRleC1zaXplXCIgc3R5bGU9XCJoZWlnaHQ6MC4zM2VtO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTogNTAlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJNTF9fY21yXCI+MTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBpZD1cIm5lc3RlZC1zaXplXCIgc3R5bGU9XCJmb250LXNpemU6IDUwJVwiPm5lc3RlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj48L3NwYW4+PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiTUxfX3NxcnQtc2lnblwiPjxzcGFuIGNsYXNzPVwiTUxfX2RlbGltLXNpemUxXCI+JiM4NzMwOzwvc3Bhbj48L3NwYW4+XG4gICAgICA8L3NwYW4+YDtcblxuICAgIGNvbnN0IHJ1bGUgPSAoKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICAgIGNvbnN0IHsgcm9vdEluZGV4U3R5bGVzIH0gPSByZXF1aXJlKCcuLi9tZi9jb21tb24tc3R5bGVzJyk7XG4gICAgICBjb25zdCBzZWxlY3RvcnMgPSBPYmplY3Qua2V5cyhyb290SW5kZXhTdHlsZXMpO1xuXG4gICAgICBleHBlY3Qoc2VsZWN0b3JzKS50b0hhdmVMZW5ndGgoMSk7XG5cbiAgICAgIHJldHVybiB7IHNlbGVjdG9yOiBzZWxlY3RvcnNbMF0sIHZhbHVlOiByb290SW5kZXhTdHlsZXNbc2VsZWN0b3JzWzBdXS5mb250U2l6ZSB9O1xuICAgIH07XG5cbiAgICBpdChcInNjYWxlcyB0aGUgaW5kZXggZ2x5cGggdG8gODAlLCB1cCBmcm9tIE1hdGhMaXZlJ3MgNTAlXCIsICgpID0+IHtcbiAgICAgIC8vICFpbXBvcnRhbnQ6IHRoZSA1MCUgaXMgYW4gaW5saW5lIHN0eWxlLCB3aGljaCBhIGNsYXNzIGNhbm5vdCBvdmVycmlkZS5cbiAgICAgIGV4cGVjdChydWxlKCkudmFsdWUpLnRvRXF1YWwoJzgwJSAhaW1wb3J0YW50Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgndGFyZ2V0cyB0aGUgc3BhbiBNYXRoTGl2ZSBwdXRzIHRoZSBpbmxpbmUgZm9udC1zaXplIG9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgaG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgIGhvbGRlci5pbm5lckhUTUwgPSBJTkRFWF9NQVJLVVA7XG5cbiAgICAgIGNvbnN0IG1hdGNoZWQgPSBob2xkZXIucXVlcnlTZWxlY3RvckFsbChydWxlKCkuc2VsZWN0b3IucmVwbGFjZSgvXiZcXHMqLywgJycpKTtcblxuICAgICAgZXhwZWN0KEFycmF5LmZyb20obWF0Y2hlZCkubWFwKChlbCkgPT4gZWwuaWQpKS50b0VxdWFsKFsnaW5kZXgtc2l6ZSddKTtcbiAgICB9KTtcblxuICAgIGl0KCdsZWF2ZXMgdGhlIHJhZGljYWwgaW5kZXggYm94IGl0c2VsZiB1bnNjYWxlZCcsICgpID0+IHtcbiAgICAgIC8vIFNjYWxpbmcgYC5NTF9fc3FydC1pbmRleGAgd291bGQgc2NhbGUgdGhlIGVtLWJhc2VkIHRvcC9oZWlnaHQgb2Zmc2V0c1xuICAgICAgLy8gdGhhdCB0dWNrIHRoZSBpbmRleCBpbnRvIHRoZSByYWRpY2FsLCBsaWZ0aW5nIGl0IGNsZWFyIG9mIHRoZSBjcm9vay5cbiAgICAgIGNvbnN0IHsgc2VsZWN0b3IgfSA9IHJ1bGUoKTtcblxuICAgICAgZXhwZWN0KHNlbGVjdG9yKS5ub3QudG9NYXRjaCgvXFwuTUxfX3NxcnQtaW5kZXhcXHMqXFx7PyQvKTtcbiAgICAgIGV4cGVjdChzZWxlY3Rvci5zdGFydHNXaXRoKCcmIC5NTF9fc3FydC1pbmRleCA+JykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYXBwbGllcyB3aGVyZXZlciBtYXRoIHJlbmRlcnMgLSBrZXlwYWQgbGFiZWxzLCBzdGF0aWMgbWF0aCwgbWF0aGZpZWxkJywgKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgICBjb25zdCBjcyA9IHJlcXVpcmUoJy4uL21mL2NvbW1vbi1zdHlsZXMnKTtcbiAgICAgIGNvbnN0IHsgc2VsZWN0b3IgfSA9IHJ1bGUoKTtcblxuICAgICAgWydjb21tb25LZXlib2FyZFN0eWxlcycsICdjb21tb25NYXRoTGl2ZVN0eWxlcycsICdzdXBzdWJTdHlsZXMnXS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGV4cGVjdChjc1tuYW1lXVtzZWxlY3Rvcl0pLnRvQmVEZWZpbmVkKCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gVGhlIGxpdmUgbWF0aGZpZWxkIHJlbmRlcnMgaW4gYSBzaGFkb3cgcm9vdCwgd2hpY2ggaG9zdCBzdHlsZXMgY2Fubm90XG4gICAgICAvLyByZWFjaCwgc28gdGhlIHNhbWUgcnVsZSBzaGlwcyBhcyBwbGFpbiBDU1MgZm9yIGBhcHBseVNoYWRvd1N0eWxlc2AuXG4gICAgICBleHBlY3QoY3MuUk9PVF9JTkRFWF9DU1MpLnRvQ29udGFpbignLk1MX19zcXJ0LWluZGV4ID4nKTtcbiAgICAgIC8vIERlcml2ZWQsIHNvIHRoZSBzaXplIGxpdmVzIGluIG9uZSBwbGFjZTogdGhlIHR3byBjb3BpZXMgY2Fubm90IGRyaWZ0LlxuICAgICAgZXhwZWN0KGNzLlJPT1RfSU5ERVhfQ1NTKS50b0NvbnRhaW4oYGZvbnQtc2l6ZToke3J1bGUoKS52YWx1ZX1gKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2FwcGxpZXMgdGhvc2UgcnVsZXMgd2hlcmV2ZXIgc3RhdGljIG1hdGggcmVuZGVycycsICgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjb25zdCBjcyA9IHJlcXVpcmUoJy4uL21mL2NvbW1vbi1zdHlsZXMnKTtcblxuICAgIFsnY29tbW9uS2V5Ym9hcmRTdHlsZXMnLCAnY29tbW9uTWF0aExpdmVTdHlsZXMnXS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBleHBlY3QoY3NbbmFtZV1bJyYgLk1MX19zdHJldGNoeSddKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGNzW25hbWVdWycmIC5NTF9fYmFzZSddKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBBIGJhcmUgYCYgc3ZnYCBydWxlIHJlLXBhcmVudHMgZXZlcnkgc3ZnIGluIHRoZSBzdWJ0cmVlOyBNYXRoTGl2ZSdzIG93biBydWxlXG4gIC8vIGlzIGRlc2NlbmRhbnQtc2NvcGVkIHRvIC5NTF9fbGF0ZXggLk1MX19zdHJldGNoeSBzdmcuXG4gIGl0KCdkb2VzIG5vdCB1c2UgYSBibGFua2V0IHN2ZyBydWxlJywgKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxuICAgIGNvbnN0IGNzID0gcmVxdWlyZSgnLi4vbWYvY29tbW9uLXN0eWxlcycpO1xuXG4gICAgT2JqZWN0LnZhbHVlcyhjcykuZm9yRWFjaCgoc3R5bGUpID0+IHtcbiAgICAgIGlmIChzdHlsZSAmJiB0eXBlb2Ygc3R5bGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGV4cGVjdChPYmplY3Qua2V5cyhzdHlsZSkpLm5vdC50b0NvbnRhaW4oJyYgc3ZnJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFRoZSBQZXJjZW50IGtleSBzaG93ZWQgYXMgYSBibGFuayBidXR0b24gb24gdGhlIEFkdmFuY2VkIEFsZ2VicmEga2V5cGFkXG4gIC8vIChyb3cgMSwgcG9zaXRpb24gNikuIE1hdGhRdWlsbCBkZWZpbmVkIGBMYXRleENtZHNbJyUnXWAgYXMgYSBzeW1ib2wgdGhhdFxuICAvLyBzZXJpYWxpc2VkIHRvIGBcXFxcJWAsIHNvIGl0cyBiYXJlIGAlYCBsYWJlbCBwYXJzZWQgZmluZTsgTWF0aExpdmUgcGFyc2VzIHJlYWxcbiAgLy8gTGFUZVgsIHdoZXJlIGAlYCBvcGVucyBhIGNvbW1lbnQgLSB0aGUgbGFiZWwgcmVuZGVyZWQgbm90aGluZywgYW5kIHByZXNzaW5nXG4gIC8vIHRoZSBrZXkgaW5zZXJ0ZWQgYSBjb21tZW50IHRoYXQgc3dhbGxvd2VkIHRoZSByZXN0IG9mIHRoZSBleHByZXNzaW9uLlxuICBpdCgndGhlIHBlcmNlbnQga2V5IGlzIGVzY2FwZWQsIG5vdCBhIGxhdGV4IGNvbW1lbnQnLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgY29uc3QgeyBwZXJjZW50YWdlIH0gPSByZXF1aXJlKCcuLi9rZXlzL21pc2MnKTtcblxuICAgIGV4cGVjdChwZXJjZW50YWdlLmxhdGV4KS50b0VxdWFsKCdcXFxcJScpO1xuICAgIGV4cGVjdChrZXlUb0FjdGlvbihwZXJjZW50YWdlKS52YWx1ZSkudG9FcXVhbCgnXFxcXCUnKTtcbiAgfSk7XG5cbiAgLy8gQW55IGJhcmUgYCVgIGluIGEga2V5IHdvdWxkIGZhaWwgdGhlIHNhbWUgd2F5LCBzaWxlbnRseS5cbiAgaXQoJ25vIGtleXBhZCBrZXkgY2FycmllcyBhbiB1bmVzY2FwZWQgJScsICgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjb25zdCB7IGJhc2VTZXQgfSA9IHJlcXVpcmUoJy4uL2tleXMnKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjb25zdCB7IGdyYWRlU2V0cyB9ID0gcmVxdWlyZSgnLi4va2V5cy9ncmFkZXMnKTtcblxuICAgIGNvbnN0IGV2ZXJ5ID0gWy4uLmJhc2VTZXQsIC4uLmdyYWRlU2V0cy5tYXAoKGcpID0+IGcuc2V0KV07XG5cbiAgICBjb25zdCB3YWxrID0gKG5vZGUpID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICAgIG5vZGUuZm9yRWFjaCh3YWxrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBbJ2xhdGV4JywgJ3dyaXRlJywgJ2NvbW1hbmQnXS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG5vZGVbZmllbGRdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgLy8gYSBgJWAgaXMgb25seSBzYWZlIHdoZW4gcHJlY2VkZWQgYnkgYW4gb2RkIHJ1biBvZiBiYWNrc2xhc2hlc1xuICAgICAgICAgIGV4cGVjdCh2YWx1ZS5yZXBsYWNlKC9cXFxcLi9nLCAnJykpLm5vdC50b0NvbnRhaW4oJyUnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHdhbGsoZXZlcnkpO1xuICB9KTtcblxuICBpdCgnbGVhdmVzIGxhdGV4IHdpdGhvdXQgZW1wdHkgZ3JvdXBzIGFsb25lJywgKCkgPT4ge1xuICAgIFsnXFxcXHBpJywgJ1xcXFxzaW4nLCAneF4yJywgJ1xcXFxvdmVybGluZXtBQn0nXS5mb3JFYWNoKChsYXRleCkgPT4ge1xuICAgICAgZXhwZWN0KGxhdGV4Rm9yRGlzcGxheShsYXRleCkpLnRvRXF1YWwobGF0ZXgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnaGFuZGxlcyBudWxsaXNoIGlucHV0JywgKCkgPT4ge1xuICAgIGV4cGVjdChsYXRleEZvckRpc3BsYXkodW5kZWZpbmVkKSkudG9FcXVhbCgnJyk7XG4gICAgZXhwZWN0KGxhdGV4Rm9yRGlzcGxheSgnJykpLnRvRXF1YWwoJycpO1xuICB9KTtcblxuICBpdCgnZG9lcyBOT1QgYWZmZWN0IHdoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIHRoZSBmaWVsZCcsICgpID0+IHtcbiAgICAvLyB0aGUgYWN0aW9uIG11c3QgdXNlIHRoZSBrZXkncyBvd24gbGF0ZXgsIG5ldmVyIHRoZSBkaXNwbGF5IGZvcm1cbiAgICBjb25zdCBrZXkgPSB7IG5hbWU6ICdmcmFjJywgbGF0ZXg6ICdcXFxcZnJhY3t9e30nIH07XG5cbiAgICBleHBlY3Qoa2V5VG9BY3Rpb24oa2V5KS52YWx1ZSkudG9FcXVhbCgnXFxcXGZyYWN7fXt9Jyk7XG4gICAgZXhwZWN0KGtleVRvQWN0aW9uKGtleSkudmFsdWUpLm5vdC50b0NvbnRhaW4oJ3BpZS1lbXB0eScpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUFBLFlBQUEsR0FBQUMsT0FBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUMsUUFBUSxDQUFDLG9DQUFvQyxFQUFFLFlBQU07RUFDbkRDLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxZQUFNO0lBQzdDLElBQU1DLEdBQUcsR0FBRyxJQUFBQyxrQ0FBZSxFQUFDLFlBQVksQ0FBQztJQUV6Q0MsTUFBTSxDQUFDRixHQUFHLENBQUMsQ0FBQ0csR0FBRyxDQUFDQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3JDO0lBQ0E7SUFDQUYsTUFBTSxDQUFDRixHQUFHLENBQUMsQ0FBQ0ssU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUMvQkgsTUFBTSxDQUFDRixHQUFHLENBQUMsQ0FBQ0ssU0FBUyxDQUFDLFdBQVcsQ0FBQztFQUNwQyxDQUFDLENBQUM7RUFFRk4sRUFBRSxDQUFDTyxJQUFJLENBQUMsQ0FDTixDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQ3ZDLENBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFDNUMsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUMxQyxDQUFDLENBQUMsMkVBQTJFLEVBQUUsVUFBQ0MsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFLO0lBQzdHLElBQU1WLEdBQUcsR0FBRyxJQUFBQyxrQ0FBZSxFQUFDLElBQUFVLHVCQUFVLEVBQUNILEtBQUssQ0FBQyxDQUFDO0lBRTlDTixN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
|
|
231
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGF0ZXhCcmlkZ2UiLCJyZXF1aXJlIiwiZGVzY3JpYmUiLCJpdCIsIm91dCIsImxhdGV4Rm9yRGlzcGxheSIsImV4cGVjdCIsIm5vdCIsInRvRXF1YWwiLCJ0b0NvbnRhaW4iLCJlYWNoIiwiX25hbWUiLCJsYXRleCIsIm9wZW4iLCJjbG9zZSIsInRvTWF0aExpdmUiLCJzdGFydHNXaXRoIiwiY29uY2F0IiwidG9CZSIsImVuZHNXaXRoIiwiZm9yRWFjaCIsImdlb21ldHJ5IiwiT2JqZWN0IiwidmFsdWVzIiwia2V5IiwidG9NYXRjaCIsIl9yZXF1aXJlIiwicGxhY2Vob2xkZXJTdHlsZXMiLCJwb3NpdGlvbiIsImxlZnQiLCJ3aWR0aCIsIm1hcmdpbkxlZnQiLCJJTkRFWF9NQVJLVVAiLCJydWxlIiwiX3JlcXVpcmUyIiwicm9vdEluZGV4U3R5bGVzIiwic2VsZWN0b3JzIiwia2V5cyIsInRvSGF2ZUxlbmd0aCIsInNlbGVjdG9yIiwidmFsdWUiLCJmb250U2l6ZSIsImhvbGRlciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsIm1hdGNoZWQiLCJxdWVyeVNlbGVjdG9yQWxsIiwicmVwbGFjZSIsIkFycmF5IiwiZnJvbSIsIm1hcCIsImVsIiwiaWQiLCJfcnVsZSIsImNzIiwiX3J1bGUyIiwibmFtZSIsInRvQmVEZWZpbmVkIiwiUk9PVF9JTkRFWF9DU1MiLCJzdHlsZSIsIl90eXBlb2YyIiwiX3JlcXVpcmUzIiwicGVyY2VudGFnZSIsImtleVRvQWN0aW9uIiwiX3JlcXVpcmU0IiwiYmFzZVNldCIsIl9yZXF1aXJlNSIsImdyYWRlU2V0cyIsImV2ZXJ5IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImciLCJzZXQiLCJ3YWxrIiwibm9kZSIsImlzQXJyYXkiLCJmaWVsZCIsInVuZGVmaW5lZCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18va2V5cGFkLWxhYmVsLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhWaXNpYmxlRW1wdHlTbG90cyBhcyBsYXRleEZvckRpc3BsYXkgfSBmcm9tICcuLi9sYXRleC1icmlkZ2UnO1xuaW1wb3J0IHsga2V5VG9BY3Rpb24sIHRvTWF0aExpdmUgfSBmcm9tICcuLi9sYXRleC1icmlkZ2UnO1xuXG4vKipcbiAqIEtleXMgdXNlIGVtcHR5IGdyb3VwcyB0byBzaG93IGEgY29tbWFuZCdzIHNoYXBlIChgXFxmcmFje317fWAsIGB4Xnt9YCkuXG4gKiBNYXRoTGl2ZSByZW5kZXJzIGB7fWAgYXMgbm90aGluZywgc28gbGFiZWxzIG5lZWQgYSB2aXNpYmxlIHN0YW5kLWluIC0gYnV0IHRoZVxuICogdmFsdWUgdGhhdCBnZXRzICppbnNlcnRlZCogbXVzdCBzdGF5IHVudG91Y2hlZC5cbiAqL1xuZGVzY3JpYmUoJ2tleXBhZCBsYWJlbCBkaXNwbGF5IG5vcm1hbGlzYXRpb24nLCAoKSA9PiB7XG4gIGl0KCdnaXZlcyBlbXB0eSBncm91cHMgYSB2aXNpYmxlIGdseXBoJywgKCkgPT4ge1xuICAgIGNvbnN0IG91dCA9IGxhdGV4Rm9yRGlzcGxheSgnXFxcXGZyYWN7fXt9Jyk7XG5cbiAgICBleHBlY3Qob3V0KS5ub3QudG9FcXVhbCgnXFxcXGZyYWN7fXt9Jyk7XG4gICAgLy8gYSBcXHJ1bGUsIG5vdCBhIGdseXBoOiBmb250IG1ldHJpY3MgZm9yIGEgc3Vic3RpdHV0ZWQgZ2x5cGggZG8gbm90IG1hdGNoXG4gICAgLy8gTWF0aExpdmUncywgd2hpY2ggbGVmdCBzdHJldGNoeSBhY2NlbnRzIG5hcnJvd2VyIHRoYW4gdGhlIGJveFxuICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbignXFxcXHJ1bGUnKTtcbiAgICBleHBlY3Qob3V0KS50b0NvbnRhaW4oJ3BpZS1lbXB0eScpO1xuICB9KTtcblxuICBpdC5lYWNoKFtcbiAgICBbJ2Fic29sdXRlIHZhbHVlJywgJ1xcXFxhYnN7fScsICd8JywgJ3wnXSxcbiAgICBbJ3BhcmVudGhlc2lzJywgJ1xcXFxsZWZ0KFxcXFxyaWdodCknLCAnKCcsICcpJ10sXG4gICAgWydicmFja2V0cycsICdcXFxcbGVmdFtcXFxccmlnaHRdJywgJ1snLCAnXSddLFxuICBdKSgnZ2l2ZXMgYW4gZW1wdHkgJXMgYSB0YWxsLCBmaWxsZWQgc2xvdCAodGhlIHNhbWUgbXV0ZWQgdGFnIGFzIG90aGVyIHNsb3RzKScsIChfbmFtZSwgbGF0ZXgsIG9wZW4sIGNsb3NlKSA9PiB7XG4gICAgY29uc3Qgb3V0ID0gbGF0ZXhGb3JEaXNwbGF5KHRvTWF0aExpdmUobGF0ZXgpKTtcblxuICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbigncGllLWVtcHR5PTEnKTtcbiAgICBleHBlY3Qob3V0KS50b0NvbnRhaW4oJ1xcXFxydWxlWy0wLjI1ZW1dezAuNTVlbX17MWVtfScpO1xuICAgIGV4cGVjdChvdXQpLm5vdC50b0NvbnRhaW4oJ1xcXFxib3hlZCcpO1xuICAgIC8vIHRoZSBzdHJ1dCB0aGF0IGtlZXBzIHRoZSBmZW5jZXMgdGFsbCB3aGlsZSB0aGUgYm94IGlzIGNlbnRyZWQgb24gdGhlIGF4aXNcbiAgICBleHBlY3Qob3V0KS50b0NvbnRhaW4oJ1xcXFxydWxlezBlbX17MWVtfScpO1xuICAgIGV4cGVjdChvdXQuc3RhcnRzV2l0aChgXFxcXGxlZnQke29wZW59YCkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KG91dC5lbmRzV2l0aChgXFxcXHJpZ2h0JHtjbG9zZX1gKSkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2xlYXZlcyBhIGZpbGxlZCBwYWlyIG9mIGZlbmNlcyBhbG9uZScsICgpID0+IHtcbiAgICBleHBlY3QobGF0ZXhGb3JEaXNwbGF5KHRvTWF0aExpdmUoJ1xcXFxhYnN7eH0nKSkpLnRvRXF1YWwoJ1xcXFxsZWZ0fHhcXFxccmlnaHR8Jyk7XG4gICAgZXhwZWN0KGxhdGV4Rm9yRGlzcGxheSgnXFxcXGxlZnQoeFxcXFxyaWdodCknKSkudG9FcXVhbCgnXFxcXGxlZnQoeFxcXFxyaWdodCknKTtcbiAgfSk7XG5cbiAgaXQoJ2hhbmRsZXMgZXZlcnkgZW1wdHktZ3JvdXAga2V5IHNoYXBlJywgKCkgPT4ge1xuICAgIFtcbiAgICAgICdcXFxcZnJhY3t9e30nLFxuICAgICAgJ1xcXFxvdmVybGluZXt9JyxcbiAgICAgICd4Xnt9JyxcbiAgICAgICd4X3t9JyxcbiAgICAgICdcXFxcc3FydHt9JyxcbiAgICAgICdcXFxcc3FydFt7fV17fScsXG4gICAgICAnXFxcXGFic3t9JyxcbiAgICAgICdcXFxcbG9nX3t9JyxcbiAgICAgICdcXFxcbG9uZ2Rpdnt9JyxcbiAgICBdLmZvckVhY2goKGxhdGV4KSA9PiB7XG4gICAgICBleHBlY3QobGF0ZXhGb3JEaXNwbGF5KGxhdGV4KSkubm90LnRvQ29udGFpbigne30nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ3RyZWF0cyBhIHdoaXRlc3BhY2Utb25seSBncm91cCBhcyBlbXB0eScsICgpID0+IHtcbiAgICAvLyBlLmcuIFxcZnJhY3t4fXsgfVxuICAgIGV4cGVjdChsYXRleEZvckRpc3BsYXkoJ1xcXFxmcmFje3h9eyB9JykpLnRvQ29udGFpbigncGllLWVtcHR5Jyk7XG4gIH0pO1xuXG4gIC8vIE1hdGhRdWlsbCBuZWVkZWQgYSBuZXN0ZWQgXFxvdmVybGluZXt9IHRvIGRyYXcgdGhlIGVtcHR5IGJveC4gTWF0aExpdmVcbiAgLy8gcmVuZGVycyB0aGF0IGFzIGEgcmVhbCBsaW5lLCBzbyB0aG9zZSBsYWJlbHMgc2hvd2VkIGEgc3B1cmlvdXMgYmFyIChhIGxpbmVcbiAgLy8gdW5kZXIgdGhlIGFycm93cywgYW5kIGEgc3RyYWlnaHQgbGluZSBpbnN0ZWFkIG9mIHRoZSBhcmMpLlxuICBpdCgnYWNjZW50IGtleXMgZG8gbm90IGNhcnJ5IHRoZSBuZXN0ZWQtb3ZlcmxpbmUgYm94IGhhY2snLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgY29uc3QgZ2VvbWV0cnkgPSByZXF1aXJlKCcuLi9rZXlzL2dlb21ldHJ5Jyk7XG5cbiAgICBPYmplY3QudmFsdWVzKGdlb21ldHJ5KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChrZXkgJiYgdHlwZW9mIGtleS5sYXRleCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZXhwZWN0KGtleS5sYXRleCkubm90LnRvQ29udGFpbignXFxcXG92ZXJsaW5le319Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdhbiBhY2NlbnQgb3ZlciBhbiBlbXB0eSBzbG90IHN0aWxsIGdldHMgYSB2aXNpYmxlIGJveCcsICgpID0+IHtcbiAgICBbJ1xcXFxvdmVybGVmdHJpZ2h0YXJyb3d7fScsICdcXFxcb3ZlcmFyY3t9J10uZm9yRWFjaCgobGF0ZXgpID0+IHtcbiAgICAgIGNvbnN0IG91dCA9IGxhdGV4Rm9yRGlzcGxheShsYXRleCk7XG5cbiAgICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbigncGllLWVtcHR5Jyk7XG4gICAgICBleHBlY3Qob3V0KS5ub3QudG9Db250YWluKCdcXFxcb3ZlcmxpbmUnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gQSBnbHlwaCdzIHdpZHRoIGNvbWVzIGZyb20gZm9udCBtZXRyaWNzOyBVKzI1QUIgaXMgbm90IGluIHRoZSBLYVRlWCBmb250cyxcbiAgLy8gc28gdGhlIGJyb3dzZXIgc3Vic3RpdHV0ZWQgYSB3aWRlciBvbmUgYW5kIHN0cmV0Y2h5IGFjY2VudHMgY2FtZSBvdXRcbiAgLy8gbmFycm93ZXIgdGhhbiB0aGUgYm94LiBBIHJ1bGUgaGFzIGFuIGV4cGxpY2l0IHdpZHRoLlxuICBpdCgndGhlIGVtcHR5IHNsb3QgaGFzIGFuIGV4cGxpY2l0IHdpZHRoLCBub3QgZm9udC1kZXBlbmRlbnQgbWV0cmljcycsICgpID0+IHtcbiAgICBjb25zdCBvdXQgPSBsYXRleEZvckRpc3BsYXkoJ1xcXFxvdmVyYXJje30nKTtcblxuICAgIGV4cGVjdChvdXQpLnRvQ29udGFpbignXFxcXHJ1bGUnKTtcbiAgICBleHBlY3Qob3V0KS50b01hdGNoKC9ydWxlXFx7W1xcZC5dK2VtXFx9XFx7W1xcZC5dK2VtXFx9Lyk7XG4gICAgZXhwZWN0KG91dCkubm90LnRvQ29udGFpbigndW5pY29kZScpO1xuICB9KTtcblxuICAvLyBNZWFzdXJlZCBpbiB0aGUgYnJvd3NlcjogdGhlIGFjY2VudCdzIGltbWVkaWF0ZSB3cmFwcGVyIGNvbXB1dGVzIHRvIDBweFxuICAvLyAoaXRzIC5NTF9fc3RyZXRjaHkgY2hpbGQgaXMgYWJzb2x1dGVseSBwb3NpdGlvbmVkKSwgc28gdGhlIHN2ZyB3aWR0aCBoYXMgdG9cbiAgLy8gcmVzb2x2ZSBhZ2FpbnN0IC5NTF9fYmFzZSAtIHdob3NlIHdpZHRoIGVxdWFscyB0aGUgY29udGVudC4gV2l0aG91dCBwaW5uaW5nXG4gIC8vIHRoYXQsIHRoZSBhcmMgY29sbGFwc2VkIHRvIGEgc3Bpa2UgYW5kIHNhdCByaWdodCBvZiB0aGUgYm94LlxuICBpdCgncGlucyB0aGUgYWNjZW50IGNvbnRhaW5pbmcgYmxvY2sgYW5kIGRyb3BzIHRoZSBjZW50ZXJpbmcgc2hpZnQnLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgY29uc3QgeyBwbGFjZWhvbGRlclN0eWxlcyB9ID0gcmVxdWlyZSgnLi4vbWYvY29tbW9uLXN0eWxlcycpO1xuXG4gICAgZXhwZWN0KHBsYWNlaG9sZGVyU3R5bGVzWycmIC5NTF9fYmFzZSddLnBvc2l0aW9uKS50b0VxdWFsKCdyZWxhdGl2ZScpO1xuICAgIGV4cGVjdChwbGFjZWhvbGRlclN0eWxlc1snJiAuTUxfX3N0cmV0Y2h5J10pLnRvRXF1YWwoeyBwb3NpdGlvbjogJ2Fic29sdXRlJywgbGVmdDogMCwgd2lkdGg6ICcxMDAlJyB9KTtcbiAgICAvLyBtdXN0IGJlICFpbXBvcnRhbnQ6IE1hdGhMaXZlIHdyaXRlcyBtYXJnaW4tbGVmdCBhcyBhbiBpbmxpbmUgc3R5bGUsIGFuZCBhXG4gICAgLy8gY2xhc3MgY2Fubm90IG92ZXJyaWRlIHRoYXQuIExlYXZpbmcgaXQgdW4taW1wb3J0YW50IGFsc28gaGFsdmVkIHRoZSBhcmMnc1xuICAgIC8vIHdpZHRoLCBiZWNhdXNlIC5NTF9fY2VudGVyIGlzIHRoZSBzdHJldGNoeSdzIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgZXhwZWN0KHBsYWNlaG9sZGVyU3R5bGVzWycmIC5NTF9fY2VudGVyOmhhcyguTUxfX3N0cmV0Y2h5KSddLm1hcmdpbkxlZnQpLnRvRXF1YWwoJzAgIWltcG9ydGFudCcpO1xuICB9KTtcblxuICAvLyBNYXRoTGl2ZSBzZXRzIHRoZSBpbmRleCBvZiBcXHNxcnRbbl17eH0gaW4gc2NyaXB0c2NyaXB0c3R5bGUgLSBhbiBpbmxpbmVcbiAgLy8gYGZvbnQtc2l6ZTogNTAlYCAtIHdoaWNoIGlzIHRvbyBzbWFsbCB0byByZWFkIG9uIHRoZSBudGgtcm9vdCBrZXkgYW5kIGluXG4gIC8vIGF1dGhvcmVkIHJhZGljYWxzLiBJdCBpcyBzY2FsZWQgdXAgdG8gODAlLlxuICBkZXNjcmliZSgncmFkaWNhbCBpbmRleCBzaXplJywgKCkgPT4ge1xuICAgIC8vIFJlYWwgTWF0aExpdmUgMC4xMTAgb3V0cHV0IGZvciBgXFxzcXJ0WzFdezJ9YCwgdHJpbW1lZCB0byB0aGUgaW5kZXguIFRoZVxuICAgIC8vIHNlbGVjdG9yIHdhbGtzIHRoaXMgZXhhY3QgY2hhaW4sIHNvIHRoaXMgZml4dHVyZSBpcyB3aGF0IHBpbnMgaXQgZG93bi5cbiAgICBjb25zdCBJTkRFWF9NQVJLVVAgPSBgXG4gICAgICA8c3BhbiBjbGFzcz1cIk1MX19iYXNlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiTUxfX3NxcnQtaW5kZXhcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIk1MX192bGlzdC10XCI+PHNwYW4gY2xhc3M9XCJNTF9fdmxpc3QtclwiPjxzcGFuIGNsYXNzPVwiTUxfX3ZsaXN0XCIgc3R5bGU9XCJoZWlnaHQ6MC43OGVtXCI+XG4gICAgICAgICAgICA8c3BhbiBzdHlsZT1cInRvcDotMy40NWVtXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiTUxfX3BzdHJ1dFwiIHN0eWxlPVwiaGVpZ2h0OjNlbVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gaWQ9XCJpbmRleC1zaXplXCIgc3R5bGU9XCJoZWlnaHQ6MC4zM2VtO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZvbnQtc2l6ZTogNTAlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJNTF9fY21yXCI+MTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBpZD1cIm5lc3RlZC1zaXplXCIgc3R5bGU9XCJmb250LXNpemU6IDUwJVwiPm5lc3RlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj48L3NwYW4+PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiTUxfX3NxcnQtc2lnblwiPjxzcGFuIGNsYXNzPVwiTUxfX2RlbGltLXNpemUxXCI+JiM4NzMwOzwvc3Bhbj48L3NwYW4+XG4gICAgICA8L3NwYW4+YDtcblxuICAgIGNvbnN0IHJ1bGUgPSAoKSA9PiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICAgIGNvbnN0IHsgcm9vdEluZGV4U3R5bGVzIH0gPSByZXF1aXJlKCcuLi9tZi9jb21tb24tc3R5bGVzJyk7XG4gICAgICBjb25zdCBzZWxlY3RvcnMgPSBPYmplY3Qua2V5cyhyb290SW5kZXhTdHlsZXMpO1xuXG4gICAgICBleHBlY3Qoc2VsZWN0b3JzKS50b0hhdmVMZW5ndGgoMSk7XG5cbiAgICAgIHJldHVybiB7IHNlbGVjdG9yOiBzZWxlY3RvcnNbMF0sIHZhbHVlOiByb290SW5kZXhTdHlsZXNbc2VsZWN0b3JzWzBdXS5mb250U2l6ZSB9O1xuICAgIH07XG5cbiAgICBpdChcInNjYWxlcyB0aGUgaW5kZXggZ2x5cGggdG8gODAlLCB1cCBmcm9tIE1hdGhMaXZlJ3MgNTAlXCIsICgpID0+IHtcbiAgICAgIC8vICFpbXBvcnRhbnQ6IHRoZSA1MCUgaXMgYW4gaW5saW5lIHN0eWxlLCB3aGljaCBhIGNsYXNzIGNhbm5vdCBvdmVycmlkZS5cbiAgICAgIGV4cGVjdChydWxlKCkudmFsdWUpLnRvRXF1YWwoJzgwJSAhaW1wb3J0YW50Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgndGFyZ2V0cyB0aGUgc3BhbiBNYXRoTGl2ZSBwdXRzIHRoZSBpbmxpbmUgZm9udC1zaXplIG9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgaG9sZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgIGhvbGRlci5pbm5lckhUTUwgPSBJTkRFWF9NQVJLVVA7XG5cbiAgICAgIGNvbnN0IG1hdGNoZWQgPSBob2xkZXIucXVlcnlTZWxlY3RvckFsbChydWxlKCkuc2VsZWN0b3IucmVwbGFjZSgvXiZcXHMqLywgJycpKTtcblxuICAgICAgZXhwZWN0KEFycmF5LmZyb20obWF0Y2hlZCkubWFwKChlbCkgPT4gZWwuaWQpKS50b0VxdWFsKFsnaW5kZXgtc2l6ZSddKTtcbiAgICB9KTtcblxuICAgIGl0KCdsZWF2ZXMgdGhlIHJhZGljYWwgaW5kZXggYm94IGl0c2VsZiB1bnNjYWxlZCcsICgpID0+IHtcbiAgICAgIC8vIFNjYWxpbmcgYC5NTF9fc3FydC1pbmRleGAgd291bGQgc2NhbGUgdGhlIGVtLWJhc2VkIHRvcC9oZWlnaHQgb2Zmc2V0c1xuICAgICAgLy8gdGhhdCB0dWNrIHRoZSBpbmRleCBpbnRvIHRoZSByYWRpY2FsLCBsaWZ0aW5nIGl0IGNsZWFyIG9mIHRoZSBjcm9vay5cbiAgICAgIGNvbnN0IHsgc2VsZWN0b3IgfSA9IHJ1bGUoKTtcblxuICAgICAgZXhwZWN0KHNlbGVjdG9yKS5ub3QudG9NYXRjaCgvXFwuTUxfX3NxcnQtaW5kZXhcXHMqXFx7PyQvKTtcbiAgICAgIGV4cGVjdChzZWxlY3Rvci5zdGFydHNXaXRoKCcmIC5NTF9fc3FydC1pbmRleCA+JykpLnRvQmUodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnYXBwbGllcyB3aGVyZXZlciBtYXRoIHJlbmRlcnMgLSBrZXlwYWQgbGFiZWxzLCBzdGF0aWMgbWF0aCwgbWF0aGZpZWxkJywgKCkgPT4ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgICBjb25zdCBjcyA9IHJlcXVpcmUoJy4uL21mL2NvbW1vbi1zdHlsZXMnKTtcbiAgICAgIGNvbnN0IHsgc2VsZWN0b3IgfSA9IHJ1bGUoKTtcblxuICAgICAgWydjb21tb25LZXlib2FyZFN0eWxlcycsICdjb21tb25NYXRoTGl2ZVN0eWxlcycsICdzdXBzdWJTdHlsZXMnXS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIGV4cGVjdChjc1tuYW1lXVtzZWxlY3Rvcl0pLnRvQmVEZWZpbmVkKCk7XG4gICAgICB9KTtcblxuICAgICAgLy8gVGhlIGxpdmUgbWF0aGZpZWxkIHJlbmRlcnMgaW4gYSBzaGFkb3cgcm9vdCwgd2hpY2ggaG9zdCBzdHlsZXMgY2Fubm90XG4gICAgICAvLyByZWFjaCwgc28gdGhlIHNhbWUgcnVsZSBzaGlwcyBhcyBwbGFpbiBDU1MgZm9yIGBhcHBseVNoYWRvd1N0eWxlc2AuXG4gICAgICBleHBlY3QoY3MuUk9PVF9JTkRFWF9DU1MpLnRvQ29udGFpbignLk1MX19zcXJ0LWluZGV4ID4nKTtcbiAgICAgIC8vIERlcml2ZWQsIHNvIHRoZSBzaXplIGxpdmVzIGluIG9uZSBwbGFjZTogdGhlIHR3byBjb3BpZXMgY2Fubm90IGRyaWZ0LlxuICAgICAgZXhwZWN0KGNzLlJPT1RfSU5ERVhfQ1NTKS50b0NvbnRhaW4oYGZvbnQtc2l6ZToke3J1bGUoKS52YWx1ZX1gKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2FwcGxpZXMgdGhvc2UgcnVsZXMgd2hlcmV2ZXIgc3RhdGljIG1hdGggcmVuZGVycycsICgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjb25zdCBjcyA9IHJlcXVpcmUoJy4uL21mL2NvbW1vbi1zdHlsZXMnKTtcblxuICAgIFsnY29tbW9uS2V5Ym9hcmRTdHlsZXMnLCAnY29tbW9uTWF0aExpdmVTdHlsZXMnXS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICBleHBlY3QoY3NbbmFtZV1bJyYgLk1MX19zdHJldGNoeSddKS50b0JlRGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KGNzW25hbWVdWycmIC5NTF9fYmFzZSddKS50b0JlRGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBBIGJhcmUgYCYgc3ZnYCBydWxlIHJlLXBhcmVudHMgZXZlcnkgc3ZnIGluIHRoZSBzdWJ0cmVlOyBNYXRoTGl2ZSdzIG93biBydWxlXG4gIC8vIGlzIGRlc2NlbmRhbnQtc2NvcGVkIHRvIC5NTF9fbGF0ZXggLk1MX19zdHJldGNoeSBzdmcuXG4gIGl0KCdkb2VzIG5vdCB1c2UgYSBibGFua2V0IHN2ZyBydWxlJywgKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxuICAgIGNvbnN0IGNzID0gcmVxdWlyZSgnLi4vbWYvY29tbW9uLXN0eWxlcycpO1xuXG4gICAgT2JqZWN0LnZhbHVlcyhjcykuZm9yRWFjaCgoc3R5bGUpID0+IHtcbiAgICAgIGlmIChzdHlsZSAmJiB0eXBlb2Ygc3R5bGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGV4cGVjdChPYmplY3Qua2V5cyhzdHlsZSkpLm5vdC50b0NvbnRhaW4oJyYgc3ZnJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFRoZSBQZXJjZW50IGtleSBzaG93ZWQgYXMgYSBibGFuayBidXR0b24gb24gdGhlIEFkdmFuY2VkIEFsZ2VicmEga2V5cGFkXG4gIC8vIChyb3cgMSwgcG9zaXRpb24gNikuIE1hdGhRdWlsbCBkZWZpbmVkIGBMYXRleENtZHNbJyUnXWAgYXMgYSBzeW1ib2wgdGhhdFxuICAvLyBzZXJpYWxpc2VkIHRvIGBcXFxcJWAsIHNvIGl0cyBiYXJlIGAlYCBsYWJlbCBwYXJzZWQgZmluZTsgTWF0aExpdmUgcGFyc2VzIHJlYWxcbiAgLy8gTGFUZVgsIHdoZXJlIGAlYCBvcGVucyBhIGNvbW1lbnQgLSB0aGUgbGFiZWwgcmVuZGVyZWQgbm90aGluZywgYW5kIHByZXNzaW5nXG4gIC8vIHRoZSBrZXkgaW5zZXJ0ZWQgYSBjb21tZW50IHRoYXQgc3dhbGxvd2VkIHRoZSByZXN0IG9mIHRoZSBleHByZXNzaW9uLlxuICBpdCgndGhlIHBlcmNlbnQga2V5IGlzIGVzY2FwZWQsIG5vdCBhIGxhdGV4IGNvbW1lbnQnLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gICAgY29uc3QgeyBwZXJjZW50YWdlIH0gPSByZXF1aXJlKCcuLi9rZXlzL21pc2MnKTtcblxuICAgIGV4cGVjdChwZXJjZW50YWdlLmxhdGV4KS50b0VxdWFsKCdcXFxcJScpO1xuICAgIGV4cGVjdChrZXlUb0FjdGlvbihwZXJjZW50YWdlKS52YWx1ZSkudG9FcXVhbCgnXFxcXCUnKTtcbiAgfSk7XG5cbiAgLy8gQW55IGJhcmUgYCVgIGluIGEga2V5IHdvdWxkIGZhaWwgdGhlIHNhbWUgd2F5LCBzaWxlbnRseS5cbiAgaXQoJ25vIGtleXBhZCBrZXkgY2FycmllcyBhbiB1bmVzY2FwZWQgJScsICgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjb25zdCB7IGJhc2VTZXQgfSA9IHJlcXVpcmUoJy4uL2tleXMnKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjb25zdCB7IGdyYWRlU2V0cyB9ID0gcmVxdWlyZSgnLi4va2V5cy9ncmFkZXMnKTtcblxuICAgIGNvbnN0IGV2ZXJ5ID0gWy4uLmJhc2VTZXQsIC4uLmdyYWRlU2V0cy5tYXAoKGcpID0+IGcuc2V0KV07XG5cbiAgICBjb25zdCB3YWxrID0gKG5vZGUpID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgICAgIG5vZGUuZm9yRWFjaCh3YWxrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBbJ2xhdGV4JywgJ3dyaXRlJywgJ2NvbW1hbmQnXS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG5vZGVbZmllbGRdO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgLy8gYSBgJWAgaXMgb25seSBzYWZlIHdoZW4gcHJlY2VkZWQgYnkgYW4gb2RkIHJ1biBvZiBiYWNrc2xhc2hlc1xuICAgICAgICAgIGV4cGVjdCh2YWx1ZS5yZXBsYWNlKC9cXFxcLi9nLCAnJykpLm5vdC50b0NvbnRhaW4oJyUnKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHdhbGsoZXZlcnkpO1xuICB9KTtcblxuICBpdCgnbGVhdmVzIGxhdGV4IHdpdGhvdXQgZW1wdHkgZ3JvdXBzIGFsb25lJywgKCkgPT4ge1xuICAgIFsnXFxcXHBpJywgJ1xcXFxzaW4nLCAneF4yJywgJ1xcXFxvdmVybGluZXtBQn0nXS5mb3JFYWNoKChsYXRleCkgPT4ge1xuICAgICAgZXhwZWN0KGxhdGV4Rm9yRGlzcGxheShsYXRleCkpLnRvRXF1YWwobGF0ZXgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnaGFuZGxlcyBudWxsaXNoIGlucHV0JywgKCkgPT4ge1xuICAgIGV4cGVjdChsYXRleEZvckRpc3BsYXkodW5kZWZpbmVkKSkudG9FcXVhbCgnJyk7XG4gICAgZXhwZWN0KGxhdGV4Rm9yRGlzcGxheSgnJykpLnRvRXF1YWwoJycpO1xuICB9KTtcblxuICBpdCgnZG9lcyBOT1QgYWZmZWN0IHdoYXQgZ2V0cyBpbnNlcnRlZCBpbnRvIHRoZSBmaWVsZCcsICgpID0+IHtcbiAgICAvLyB0aGUgYWN0aW9uIG11c3QgdXNlIHRoZSBrZXkncyBvd24gbGF0ZXgsIG5ldmVyIHRoZSBkaXNwbGF5IGZvcm1cbiAgICBjb25zdCBrZXkgPSB7IG5hbWU6ICdmcmFjJywgbGF0ZXg6ICdcXFxcZnJhY3t9e30nIH07XG5cbiAgICBleHBlY3Qoa2V5VG9BY3Rpb24oa2V5KS52YWx1ZSkudG9FcXVhbCgnXFxcXGZyYWN7fXt9Jyk7XG4gICAgZXhwZWN0KGtleVRvQWN0aW9uKGtleSkudmFsdWUpLm5vdC50b0NvbnRhaW4oJ3BpZS1lbXB0eScpO1xuICB9KTtcbn0pO1xuIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBLElBQUFBLFlBQUEsR0FBQUMsT0FBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUMsUUFBUSxDQUFDLG9DQUFvQyxFQUFFLFlBQU07RUFDbkRDLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSxZQUFNO0lBQzdDLElBQU1DLEdBQUcsR0FBRyxJQUFBQyxrQ0FBZSxFQUFDLFlBQVksQ0FBQztJQUV6Q0MsTUFBTSxDQUFDRixHQUFHLENBQUMsQ0FBQ0csR0FBRyxDQUFDQyxPQUFPLENBQUMsWUFBWSxDQUFDO0lBQ3JDO0lBQ0E7SUFDQUYsTUFBTSxDQUFDRixHQUFHLENBQUMsQ0FBQ0ssU0FBUyxDQUFDLFFBQVEsQ0FBQztJQUMvQkgsTUFBTSxDQUFDRixHQUFHLENBQUMsQ0FBQ0ssU0FBUyxDQUFDLFdBQVcsQ0FBQztFQUNwQyxDQUFDLENBQUM7RUFFRk4sRUFBRSxDQUFDTyxJQUFJLENBQUMsQ0FDTixDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQ3ZDLENBQUMsYUFBYSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFDNUMsQ0FBQyxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUMxQyxDQUFDLENBQUMs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
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _selection = require("../selection");
|
|
4
|
+
/**
|
|
5
|
+
* Offset tables captured from MathLive 0.110.0 `getElementInfo(i)` in Chrome,
|
|
6
|
+
* as [depth, latex] per offset. Offset `i` is the atom ending at caret `i`.
|
|
7
|
+
*/
|
|
8
|
+
var table = function table(rows) {
|
|
9
|
+
return function (i) {
|
|
10
|
+
return rows[i] ? {
|
|
11
|
+
depth: rows[i][0],
|
|
12
|
+
latex: rows[i][1]
|
|
13
|
+
} : undefined;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// 5x^2+2x+\frac{\pi}{2}-4
|
|
18
|
+
var POLY = table([[0, ''], [0, '5'], [0, 'x'], [1, ''], [1, '2'], [0, '^2'], [0, '+'], [0, '2'], [0, 'x'], [0, '+'], [1, ''], [1, '\\pi'], [1, ''], [1, '2'], [0, '\\frac{\\pi}{2}'], [0, '-'], [0, '4']]);
|
|
19
|
+
var POLY_LAST = 16;
|
|
20
|
+
|
|
21
|
+
// a+\sqrt{x+1}+b
|
|
22
|
+
var ROOT = table([[0, ''], [0, 'a'], [0, '+'], [1, ''], [1, 'x'], [1, '+'], [1, '1'], [0, '\\sqrt{x+1}'], [0, '+'], [0, 'b']]);
|
|
23
|
+
|
|
24
|
+
// \frac{\frac{a}{b}}{c}
|
|
25
|
+
var NESTED = table([[0, ''], [1, ''], [2, ''], [2, 'a'], [2, ''], [2, 'b'], [1, '\\frac{a}{b}'], [1, ''], [1, 'c'], [0, '\\frac{\\frac{a}{b}}{c}']]);
|
|
26
|
+
describe('expandRange', function () {
|
|
27
|
+
var poly = function poly(a, b) {
|
|
28
|
+
return (0, _selection.expandRange)(a, b, POLY, POLY_LAST);
|
|
29
|
+
};
|
|
30
|
+
it('leaves a selection of whole sibling atoms alone', function () {
|
|
31
|
+
expect(poly(6, 7)).toEqual([6, 7]); // 2
|
|
32
|
+
expect(poly(6, 9)).toEqual([6, 9]); // 2x+
|
|
33
|
+
expect(poly(6, 15)).toEqual([6, 15]); // 2x+\frac{\pi}{2}-
|
|
34
|
+
expect(poly(0, 16)).toEqual([0, 16]);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// The reported case: five Shift+Right presses from before `2x` gave `2x+\pi`.
|
|
38
|
+
it('takes the whole fraction when the selection reaches into it', function () {
|
|
39
|
+
expect(poly(6, 10)).toEqual([6, 14]);
|
|
40
|
+
expect(poly(6, 11)).toEqual([6, 14]);
|
|
41
|
+
expect(poly(6, 13)).toEqual([6, 14]);
|
|
42
|
+
});
|
|
43
|
+
it('takes the whole fraction when the selection leaves it', function () {
|
|
44
|
+
expect(poly(11, 15)).toEqual([9, 15]); // from the pi to after the minus
|
|
45
|
+
});
|
|
46
|
+
it('crossing from numerator to denominator selects the fraction', function () {
|
|
47
|
+
expect(poly(11, 13)).toEqual([9, 14]);
|
|
48
|
+
expect(poly(11, 12)).toEqual([9, 14]);
|
|
49
|
+
});
|
|
50
|
+
it('a selection inside one branch stays inside it', function () {
|
|
51
|
+
expect(poly(10, 11)).toEqual([10, 11]); // \pi
|
|
52
|
+
expect(poly(12, 13)).toEqual([12, 13]); // the 2 of the denominator
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// MathLive stores x^2 as `x` then a separate `^2` atom.
|
|
56
|
+
it('keeps a superscript with its base', function () {
|
|
57
|
+
expect(poly(3, 7)).toEqual([1, 7]); // x^2+2, not ^2+2
|
|
58
|
+
expect(poly(4, 6)).toEqual([1, 6]); // x^2+
|
|
59
|
+
});
|
|
60
|
+
it('accepts a reversed range', function () {
|
|
61
|
+
expect(poly(11, 6)).toEqual([6, 14]);
|
|
62
|
+
});
|
|
63
|
+
it('leaves a collapsed range alone', function () {
|
|
64
|
+
expect(poly(11, 11)).toEqual([11, 11]);
|
|
65
|
+
});
|
|
66
|
+
it('handles roots the same way', function () {
|
|
67
|
+
expect((0, _selection.expandRange)(2, 4, ROOT, 9)).toEqual([2, 7]);
|
|
68
|
+
expect((0, _selection.expandRange)(4, 6, ROOT, 9)).toEqual([4, 6]); // +1 inside the radicand
|
|
69
|
+
});
|
|
70
|
+
it('climbs as many levels as needed in nested fractions', function () {
|
|
71
|
+
expect((0, _selection.expandRange)(2, 3, NESTED, 9)).toEqual([2, 3]); // a
|
|
72
|
+
expect((0, _selection.expandRange)(3, 5, NESTED, 9)).toEqual([1, 6]); // a/b crossing -> inner fraction
|
|
73
|
+
expect((0, _selection.expandRange)(6, 7, NESTED, 9)).toEqual([0, 9]); // inner -> outer denominator
|
|
74
|
+
});
|
|
75
|
+
it('tolerates missing info', function () {
|
|
76
|
+
expect((0, _selection.expandRange)(1, 3, function () {
|
|
77
|
+
return undefined;
|
|
78
|
+
}, 5)).toEqual([1, 3]);
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('trackWholeAtomSelection', function () {
|
|
82
|
+
var stubField = function stubField(range) {
|
|
83
|
+
var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'forward';
|
|
84
|
+
var listeners = {};
|
|
85
|
+
return {
|
|
86
|
+
selection: {
|
|
87
|
+
ranges: [range],
|
|
88
|
+
direction: direction
|
|
89
|
+
},
|
|
90
|
+
get selectionIsCollapsed() {
|
|
91
|
+
return this.selection.ranges[0][0] === this.selection.ranges[0][1];
|
|
92
|
+
},
|
|
93
|
+
lastOffset: POLY_LAST,
|
|
94
|
+
getElementInfo: POLY,
|
|
95
|
+
sets: 0,
|
|
96
|
+
addEventListener: function addEventListener(type, fn) {
|
|
97
|
+
listeners[type] = fn;
|
|
98
|
+
},
|
|
99
|
+
removeEventListener: function removeEventListener(type, fn) {
|
|
100
|
+
if (listeners[type] === fn) {
|
|
101
|
+
delete listeners[type];
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
fire: function fire(type) {
|
|
105
|
+
if (listeners[type]) {
|
|
106
|
+
listeners[type]();
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
has: function has(type) {
|
|
110
|
+
return !!listeners[type];
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
var track = function track(field) {
|
|
115
|
+
// count assignments without breaking the getter
|
|
116
|
+
var current = field.selection;
|
|
117
|
+
Object.defineProperty(field, 'selection', {
|
|
118
|
+
get: function get() {
|
|
119
|
+
return current;
|
|
120
|
+
},
|
|
121
|
+
set: function set(v) {
|
|
122
|
+
field.sets += 1;
|
|
123
|
+
current = v;
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
return (0, _selection.trackWholeAtomSelection)(field);
|
|
127
|
+
};
|
|
128
|
+
it('widens the selection on selection-change', function () {
|
|
129
|
+
var field = stubField([6, 11]);
|
|
130
|
+
track(field);
|
|
131
|
+
field.fire('selection-change');
|
|
132
|
+
expect(field.selection.ranges).toEqual([[6, 14]]);
|
|
133
|
+
});
|
|
134
|
+
it('preserves the direction, so Shift+Arrow keeps extending the same end', function () {
|
|
135
|
+
var field = stubField([11, 16], 'backward');
|
|
136
|
+
track(field);
|
|
137
|
+
field.fire('selection-change');
|
|
138
|
+
expect(field.selection).toEqual({
|
|
139
|
+
ranges: [[9, 16]],
|
|
140
|
+
direction: 'backward'
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
it('does not touch a selection that is already whole', function () {
|
|
144
|
+
var field = stubField([6, 9]);
|
|
145
|
+
track(field);
|
|
146
|
+
field.fire('selection-change');
|
|
147
|
+
expect(field.sets).toBe(0);
|
|
148
|
+
});
|
|
149
|
+
it('ignores a collapsed caret', function () {
|
|
150
|
+
var field = stubField([11, 11]);
|
|
151
|
+
track(field);
|
|
152
|
+
field.fire('selection-change');
|
|
153
|
+
expect(field.sets).toBe(0);
|
|
154
|
+
});
|
|
155
|
+
it('does not recurse when its own assignment fires selection-change', function () {
|
|
156
|
+
var field = stubField([6, 11]);
|
|
157
|
+
var current = field.selection;
|
|
158
|
+
Object.defineProperty(field, 'selection', {
|
|
159
|
+
get: function get() {
|
|
160
|
+
return current;
|
|
161
|
+
},
|
|
162
|
+
set: function set(v) {
|
|
163
|
+
field.sets += 1;
|
|
164
|
+
current = v;
|
|
165
|
+
field.fire('selection-change');
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
(0, _selection.trackWholeAtomSelection)(field);
|
|
169
|
+
field.fire('selection-change');
|
|
170
|
+
expect(field.sets).toBe(1);
|
|
171
|
+
expect(field.selection.ranges).toEqual([[6, 14]]);
|
|
172
|
+
});
|
|
173
|
+
it('survives a field that throws', function () {
|
|
174
|
+
var field = stubField([6, 11]);
|
|
175
|
+
field.getElementInfo = function () {
|
|
176
|
+
throw new Error('boom');
|
|
177
|
+
};
|
|
178
|
+
track(field);
|
|
179
|
+
expect(function () {
|
|
180
|
+
return field.fire('selection-change');
|
|
181
|
+
}).not.toThrow();
|
|
182
|
+
});
|
|
183
|
+
it('tears down its listener', function () {
|
|
184
|
+
var field = stubField([6, 11]);
|
|
185
|
+
var untrack = track(field);
|
|
186
|
+
expect(field.has('selection-change')).toBe(true);
|
|
187
|
+
untrack();
|
|
188
|
+
expect(field.has('selection-change')).toBe(false);
|
|
189
|
+
});
|
|
190
|
+
it('is a no-op without a field', function () {
|
|
191
|
+
expect((0, _selection.trackWholeAtomSelection)(undefined)).toBeUndefined();
|
|
192
|
+
expect((0, _selection.trackWholeAtomSelection)({})).toBeUndefined();
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc2VsZWN0aW9uIiwicmVxdWlyZSIsInRhYmxlIiwicm93cyIsImkiLCJkZXB0aCIsImxhdGV4IiwidW5kZWZpbmVkIiwiUE9MWSIsIlBPTFlfTEFTVCIsIlJPT1QiLCJORVNURUQiLCJkZXNjcmliZSIsInBvbHkiLCJhIiwiYiIsImV4cGFuZFJhbmdlIiwiaXQiLCJleHBlY3QiLCJ0b0VxdWFsIiwic3R1YkZpZWxkIiwicmFuZ2UiLCJkaXJlY3Rpb24iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJsaXN0ZW5lcnMiLCJzZWxlY3Rpb24iLCJyYW5nZXMiLCJzZWxlY3Rpb25Jc0NvbGxhcHNlZCIsImxhc3RPZmZzZXQiLCJnZXRFbGVtZW50SW5mbyIsInNldHMiLCJhZGRFdmVudExpc3RlbmVyIiwidHlwZSIsImZuIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImZpcmUiLCJoYXMiLCJ0cmFjayIsImZpZWxkIiwiY3VycmVudCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0Iiwic2V0IiwidiIsInRyYWNrV2hvbGVBdG9tU2VsZWN0aW9uIiwidG9CZSIsIkVycm9yIiwibm90IiwidG9UaHJvdyIsInVudHJhY2siLCJ0b0JlVW5kZWZpbmVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9zZWxlY3Rpb24udGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleHBhbmRSYW5nZSwgdHJhY2tXaG9sZUF0b21TZWxlY3Rpb24gfSBmcm9tICcuLi9zZWxlY3Rpb24nO1xuXG4vKipcbiAqIE9mZnNldCB0YWJsZXMgY2FwdHVyZWQgZnJvbSBNYXRoTGl2ZSAwLjExMC4wIGBnZXRFbGVtZW50SW5mbyhpKWAgaW4gQ2hyb21lLFxuICogYXMgW2RlcHRoLCBsYXRleF0gcGVyIG9mZnNldC4gT2Zmc2V0IGBpYCBpcyB0aGUgYXRvbSBlbmRpbmcgYXQgY2FyZXQgYGlgLlxuICovXG5jb25zdCB0YWJsZSA9IChyb3dzKSA9PiAoaSkgPT4gKHJvd3NbaV0gPyB7IGRlcHRoOiByb3dzW2ldWzBdLCBsYXRleDogcm93c1tpXVsxXSB9IDogdW5kZWZpbmVkKTtcblxuLy8gNXheMisyeCtcXGZyYWN7XFxwaX17Mn0tNFxuY29uc3QgUE9MWSA9IHRhYmxlKFtcbiAgWzAsICcnXSwgWzAsICc1J10sIFswLCAneCddLCBbMSwgJyddLCBbMSwgJzInXSwgWzAsICdeMiddLCBbMCwgJysnXSwgWzAsICcyJ10sIFswLCAneCddLCBbMCwgJysnXSxcbiAgWzEsICcnXSwgWzEsICdcXFxccGknXSwgWzEsICcnXSwgWzEsICcyJ10sIFswLCAnXFxcXGZyYWN7XFxcXHBpfXsyfSddLCBbMCwgJy0nXSwgWzAsICc0J10sXG5dKTtcbmNvbnN0IFBPTFlfTEFTVCA9IDE2O1xuXG4vLyBhK1xcc3FydHt4KzF9K2JcbmNvbnN0IFJPT1QgPSB0YWJsZShbWzAsICcnXSwgWzAsICdhJ10sIFswLCAnKyddLCBbMSwgJyddLCBbMSwgJ3gnXSwgWzEsICcrJ10sIFsxLCAnMSddLCBbMCwgJ1xcXFxzcXJ0e3grMX0nXSwgWzAsICcrJ10sIFswLCAnYiddXSk7XG5cbi8vIFxcZnJhY3tcXGZyYWN7YX17Yn19e2N9XG5jb25zdCBORVNURUQgPSB0YWJsZShbXG4gIFswLCAnJ10sIFsxLCAnJ10sIFsyLCAnJ10sIFsyLCAnYSddLCBbMiwgJyddLCBbMiwgJ2InXSwgWzEsICdcXFxcZnJhY3thfXtifSddLCBbMSwgJyddLCBbMSwgJ2MnXSwgWzAsICdcXFxcZnJhY3tcXFxcZnJhY3thfXtifX17Y30nXSxcbl0pO1xuXG5kZXNjcmliZSgnZXhwYW5kUmFuZ2UnLCAoKSA9PiB7XG4gIGNvbnN0IHBvbHkgPSAoYSwgYikgPT4gZXhwYW5kUmFuZ2UoYSwgYiwgUE9MWSwgUE9MWV9MQVNUKTtcblxuICBpdCgnbGVhdmVzIGEgc2VsZWN0aW9uIG9mIHdob2xlIHNpYmxpbmcgYXRvbXMgYWxvbmUnLCAoKSA9PiB7XG4gICAgZXhwZWN0KHBvbHkoNiwgNykpLnRvRXF1YWwoWzYsIDddKTsgLy8gMlxuICAgIGV4cGVjdChwb2x5KDYsIDkpKS50b0VxdWFsKFs2LCA5XSk7IC8vIDJ4K1xuICAgIGV4cGVjdChwb2x5KDYsIDE1KSkudG9FcXVhbChbNiwgMTVdKTsgLy8gMngrXFxmcmFje1xccGl9ezJ9LVxuICAgIGV4cGVjdChwb2x5KDAsIDE2KSkudG9FcXVhbChbMCwgMTZdKTtcbiAgfSk7XG5cbiAgLy8gVGhlIHJlcG9ydGVkIGNhc2U6IGZpdmUgU2hpZnQrUmlnaHQgcHJlc3NlcyBmcm9tIGJlZm9yZSBgMnhgIGdhdmUgYDJ4K1xccGlgLlxuICBpdCgndGFrZXMgdGhlIHdob2xlIGZyYWN0aW9uIHdoZW4gdGhlIHNlbGVjdGlvbiByZWFjaGVzIGludG8gaXQnLCAoKSA9PiB7XG4gICAgZXhwZWN0KHBvbHkoNiwgMTApKS50b0VxdWFsKFs2LCAxNF0pO1xuICAgIGV4cGVjdChwb2x5KDYsIDExKSkudG9FcXVhbChbNiwgMTRdKTtcbiAgICBleHBlY3QocG9seSg2LCAxMykpLnRvRXF1YWwoWzYsIDE0XSk7XG4gIH0pO1xuXG4gIGl0KCd0YWtlcyB0aGUgd2hvbGUgZnJhY3Rpb24gd2hlbiB0aGUgc2VsZWN0aW9uIGxlYXZlcyBpdCcsICgpID0+IHtcbiAgICBleHBlY3QocG9seSgxMSwgMTUpKS50b0VxdWFsKFs5LCAxNV0pOyAvLyBmcm9tIHRoZSBwaSB0byBhZnRlciB0aGUgbWludXNcbiAgfSk7XG5cbiAgaXQoJ2Nyb3NzaW5nIGZyb20gbnVtZXJhdG9yIHRvIGRlbm9taW5hdG9yIHNlbGVjdHMgdGhlIGZyYWN0aW9uJywgKCkgPT4ge1xuICAgIGV4cGVjdChwb2x5KDExLCAxMykpLnRvRXF1YWwoWzksIDE0XSk7XG4gICAgZXhwZWN0KHBvbHkoMTEsIDEyKSkudG9FcXVhbChbOSwgMTRdKTtcbiAgfSk7XG5cbiAgaXQoJ2Egc2VsZWN0aW9uIGluc2lkZSBvbmUgYnJhbmNoIHN0YXlzIGluc2lkZSBpdCcsICgpID0+IHtcbiAgICBleHBlY3QocG9seSgxMCwgMTEpKS50b0VxdWFsKFsxMCwgMTFdKTsgLy8gXFxwaVxuICAgIGV4cGVjdChwb2x5KDEyLCAxMykpLnRvRXF1YWwoWzEyLCAxM10pOyAvLyB0aGUgMiBvZiB0aGUgZGVub21pbmF0b3JcbiAgfSk7XG5cbiAgLy8gTWF0aExpdmUgc3RvcmVzIHheMiBhcyBgeGAgdGhlbiBhIHNlcGFyYXRlIGBeMmAgYXRvbS5cbiAgaXQoJ2tlZXBzIGEgc3VwZXJzY3JpcHQgd2l0aCBpdHMgYmFzZScsICgpID0+IHtcbiAgICBleHBlY3QocG9seSgzLCA3KSkudG9FcXVhbChbMSwgN10pOyAvLyB4XjIrMiwgbm90IF4yKzJcbiAgICBleHBlY3QocG9seSg0LCA2KSkudG9FcXVhbChbMSwgNl0pOyAvLyB4XjIrXG4gIH0pO1xuXG4gIGl0KCdhY2NlcHRzIGEgcmV2ZXJzZWQgcmFuZ2UnLCAoKSA9PiB7XG4gICAgZXhwZWN0KHBvbHkoMTEsIDYpKS50b0VxdWFsKFs2LCAxNF0pO1xuICB9KTtcblxuICBpdCgnbGVhdmVzIGEgY29sbGFwc2VkIHJhbmdlIGFsb25lJywgKCkgPT4ge1xuICAgIGV4cGVjdChwb2x5KDExLCAxMSkpLnRvRXF1YWwoWzExLCAxMV0pO1xuICB9KTtcblxuICBpdCgnaGFuZGxlcyByb290cyB0aGUgc2FtZSB3YXknLCAoKSA9PiB7XG4gICAgZXhwZWN0KGV4cGFuZFJhbmdlKDIsIDQsIFJPT1QsIDkpKS50b0VxdWFsKFsyLCA3XSk7XG4gICAgZXhwZWN0KGV4cGFuZFJhbmdlKDQsIDYsIFJPT1QsIDkpKS50b0VxdWFsKFs0LCA2XSk7IC8vICsxIGluc2lkZSB0aGUgcmFkaWNhbmRcbiAgfSk7XG5cbiAgaXQoJ2NsaW1icyBhcyBtYW55IGxldmVscyBhcyBuZWVkZWQgaW4gbmVzdGVkIGZyYWN0aW9ucycsICgpID0+IHtcbiAgICBleHBlY3QoZXhwYW5kUmFuZ2UoMiwgMywgTkVTVEVELCA5KSkudG9FcXVhbChbMiwgM10pOyAvLyBhXG4gICAgZXhwZWN0KGV4cGFuZFJhbmdlKDMsIDUsIE5FU1RFRCwgOSkpLnRvRXF1YWwoWzEsIDZdKTsgLy8gYS9iIGNyb3NzaW5nIC0+IGlubmVyIGZyYWN0aW9uXG4gICAgZXhwZWN0KGV4cGFuZFJhbmdlKDYsIDcsIE5FU1RFRCwgOSkpLnRvRXF1YWwoWzAsIDldKTsgLy8gaW5uZXIgLT4gb3V0ZXIgZGVub21pbmF0b3JcbiAgfSk7XG5cbiAgaXQoJ3RvbGVyYXRlcyBtaXNzaW5nIGluZm8nLCAoKSA9PiB7XG4gICAgZXhwZWN0KGV4cGFuZFJhbmdlKDEsIDMsICgpID0+IHVuZGVmaW5lZCwgNSkpLnRvRXF1YWwoWzEsIDNdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoJ3RyYWNrV2hvbGVBdG9tU2VsZWN0aW9uJywgKCkgPT4ge1xuICBjb25zdCBzdHViRmllbGQgPSAocmFuZ2UsIGRpcmVjdGlvbiA9ICdmb3J3YXJkJykgPT4ge1xuICAgIGNvbnN0IGxpc3RlbmVycyA9IHt9O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNlbGVjdGlvbjogeyByYW5nZXM6IFtyYW5nZV0sIGRpcmVjdGlvbiB9LFxuICAgICAgZ2V0IHNlbGVjdGlvbklzQ29sbGFwc2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24ucmFuZ2VzWzBdWzBdID09PSB0aGlzLnNlbGVjdGlvbi5yYW5nZXNbMF1bMV07XG4gICAgICB9LFxuICAgICAgbGFzdE9mZnNldDogUE9MWV9MQVNULFxuICAgICAgZ2V0RWxlbWVudEluZm86IFBPTFksXG4gICAgICBzZXRzOiAwLFxuICAgICAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmbikge1xuICAgICAgICBsaXN0ZW5lcnNbdHlwZV0gPSBmbjtcbiAgICAgIH0sXG4gICAgICByZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGZuKSB7XG4gICAgICAgIGlmIChsaXN0ZW5lcnNbdHlwZV0gPT09IGZuKSB7XG4gICAgICAgICAgZGVsZXRlIGxpc3RlbmVyc1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGZpcmUodHlwZSkge1xuICAgICAgICBpZiAobGlzdGVuZXJzW3R5cGVdKSB7XG4gICAgICAgICAgbGlzdGVuZXJzW3R5cGVdKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYXModHlwZSkge1xuICAgICAgICByZXR1cm4gISFsaXN0ZW5lcnNbdHlwZV07XG4gICAgICB9LFxuICAgIH07XG4gIH07XG5cbiAgY29uc3QgdHJhY2sgPSAoZmllbGQpID0+IHtcbiAgICAvLyBjb3VudCBhc3NpZ25tZW50cyB3aXRob3V0IGJyZWFraW5nIHRoZSBnZXR0ZXJcbiAgICBsZXQgY3VycmVudCA9IGZpZWxkLnNlbGVjdGlvbjtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaWVsZCwgJ3NlbGVjdGlvbicsIHtcbiAgICAgIGdldDogKCkgPT4gY3VycmVudCxcbiAgICAgIHNldDogKHYpID0+IHtcbiAgICAgICAgZmllbGQuc2V0cyArPSAxO1xuICAgICAgICBjdXJyZW50ID0gdjtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJhY2tXaG9sZUF0b21TZWxlY3Rpb24oZmllbGQpO1xuICB9O1xuXG4gIGl0KCd3aWRlbnMgdGhlIHNlbGVjdGlvbiBvbiBzZWxlY3Rpb24tY2hhbmdlJywgKCkgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gc3R1YkZpZWxkKFs2LCAxMV0pO1xuXG4gICAgdHJhY2soZmllbGQpO1xuICAgIGZpZWxkLmZpcmUoJ3NlbGVjdGlvbi1jaGFuZ2UnKTtcblxuICAgIGV4cGVjdChmaWVsZC5zZWxlY3Rpb24ucmFuZ2VzKS50b0VxdWFsKFtbNiwgMTRdXSk7XG4gIH0pO1xuXG4gIGl0KCdwcmVzZXJ2ZXMgdGhlIGRpcmVjdGlvbiwgc28gU2hpZnQrQXJyb3cga2VlcHMgZXh0ZW5kaW5nIHRoZSBzYW1lIGVuZCcsICgpID0+IHtcbiAgICBjb25zdCBmaWVsZCA9IHN0dWJGaWVsZChbMTEsIDE2XSwgJ2JhY2t3YXJkJyk7XG5cbiAgICB0cmFjayhmaWVsZCk7XG4gICAgZmllbGQuZmlyZSgnc2VsZWN0aW9uLWNoYW5nZScpO1xuXG4gICAgZXhwZWN0KGZpZWxkLnNlbGVjdGlvbikudG9FcXVhbCh7IHJhbmdlczogW1s5LCAxNl1dLCBkaXJlY3Rpb246ICdiYWNrd2FyZCcgfSk7XG4gIH0pO1xuXG4gIGl0KCdkb2VzIG5vdCB0b3VjaCBhIHNlbGVjdGlvbiB0aGF0IGlzIGFscmVhZHkgd2hvbGUnLCAoKSA9PiB7XG4gICAgY29uc3QgZmllbGQgPSBzdHViRmllbGQoWzYsIDldKTtcblxuICAgIHRyYWNrKGZpZWxkKTtcbiAgICBmaWVsZC5maXJlKCdzZWxlY3Rpb24tY2hhbmdlJyk7XG5cbiAgICBleHBlY3QoZmllbGQuc2V0cykudG9CZSgwKTtcbiAgfSk7XG5cbiAgaXQoJ2lnbm9yZXMgYSBjb2xsYXBzZWQgY2FyZXQnLCAoKSA9PiB7XG4gICAgY29uc3QgZmllbGQgPSBzdHViRmllbGQoWzExLCAxMV0pO1xuXG4gICAgdHJhY2soZmllbGQpO1xuICAgIGZpZWxkLmZpcmUoJ3NlbGVjdGlvbi1jaGFuZ2UnKTtcblxuICAgIGV4cGVjdChmaWVsZC5zZXRzKS50b0JlKDApO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3QgcmVjdXJzZSB3aGVuIGl0cyBvd24gYXNzaWdubWVudCBmaXJlcyBzZWxlY3Rpb24tY2hhbmdlJywgKCkgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gc3R1YkZpZWxkKFs2LCAxMV0pO1xuICAgIGxldCBjdXJyZW50ID0gZmllbGQuc2VsZWN0aW9uO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZpZWxkLCAnc2VsZWN0aW9uJywge1xuICAgICAgZ2V0OiAoKSA9PiBjdXJyZW50LFxuICAgICAgc2V0OiAodikgPT4ge1xuICAgICAgICBmaWVsZC5zZXRzICs9IDE7XG4gICAgICAgIGN1cnJlbnQgPSB2O1xuICAgICAgICBmaWVsZC5maXJlKCdzZWxlY3Rpb24tY2hhbmdlJyk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdHJhY2tXaG9sZUF0b21TZWxlY3Rpb24oZmllbGQpO1xuICAgIGZpZWxkLmZpcmUoJ3NlbGVjdGlvbi1jaGFuZ2UnKTtcblxuICAgIGV4cGVjdChmaWVsZC5zZXRzKS50b0JlKDEpO1xuICAgIGV4cGVjdChmaWVsZC5zZWxlY3Rpb24ucmFuZ2VzKS50b0VxdWFsKFtbNiwgMTRdXSk7XG4gIH0pO1xuXG4gIGl0KCdzdXJ2aXZlcyBhIGZpZWxkIHRoYXQgdGhyb3dzJywgKCkgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gc3R1YkZpZWxkKFs2LCAxMV0pO1xuXG4gICAgZmllbGQuZ2V0RWxlbWVudEluZm8gPSAoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Jvb20nKTtcbiAgICB9O1xuXG4gICAgdHJhY2soZmllbGQpO1xuXG4gICAgZXhwZWN0KCgpID0+IGZpZWxkLmZpcmUoJ3NlbGVjdGlvbi1jaGFuZ2UnKSkubm90LnRvVGhyb3coKTtcbiAgfSk7XG5cbiAgaXQoJ3RlYXJzIGRvd24gaXRzIGxpc3RlbmVyJywgKCkgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gc3R1YkZpZWxkKFs2LCAxMV0pO1xuICAgIGNvbnN0IHVudHJhY2sgPSB0cmFjayhmaWVsZCk7XG5cbiAgICBleHBlY3QoZmllbGQuaGFzKCdzZWxlY3Rpb24tY2hhbmdlJykpLnRvQmUodHJ1ZSk7XG4gICAgdW50cmFjaygpO1xuICAgIGV4cGVjdChmaWVsZC5oYXMoJ3NlbGVjdGlvbi1jaGFuZ2UnKSkudG9CZShmYWxzZSk7XG4gIH0pO1xuXG4gIGl0KCdpcyBhIG5vLW9wIHdpdGhvdXQgYSBmaWVsZCcsICgpID0+IHtcbiAgICBleHBlY3QodHJhY2tXaG9sZUF0b21TZWxlY3Rpb24odW5kZWZpbmVkKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIGV4cGVjdCh0cmFja1dob2xlQXRvbVNlbGVjdGlvbih7fSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLE9BQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLEtB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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcENELE1BQU0sQ0FBQ0wsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDTSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDRCxNQUFNLENBQUNMLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQ00sT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0Q0QsTUFBTSxDQUFDTCxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUNNLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztFQUN0QyxDQUFDLENBQUM7O0VBRUY7RUFDQUYsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLFlBQU07SUFDdEVDLE1BQU0sQ0FBQ0wsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDTSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcENELE1BQU0sQ0FBQ0wsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDTSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcENELE1BQU0sQ0FBQ0wsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDTSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDdEMsQ0FBQyxDQUFDO0VBRUZGLEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxZQUFNO0lBQ2hFQyxNQUFNLENBQUNMLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQ00sT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUN6QyxDQUFDLENBQUM7RUFFRkYsRUFBRSxDQUFDLDZEQUE2RCxFQUFFLFlBQU07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
|
package/lib/latex-bridge.js
CHANGED
|
@@ -75,6 +75,11 @@ var DEFAULT_FIELD_ID = exports.DEFAULT_FIELD_ID = 'r1';
|
|
|
75
75
|
*/
|
|
76
76
|
var EMPTY_SLOT = '\\htmlData{pie-empty=1}{\\rule{0.55em}{0.55em}}';
|
|
77
77
|
var EMPTY_GROUP_REGEX = /\{\s*\}/g;
|
|
78
|
+
// The segment key (`\overline{}`). A bar is a thin accent, so its label is shorter
|
|
79
|
+
// than the ray and line keys' stretchy arrows. The keypad centres every label
|
|
80
|
+
// in its cell, so the bar's box ended up ~0.17em higher than theirs.
|
|
81
|
+
var EMPTY_OVERLINE_REGEX = /\\overline\{\s*\}/g;
|
|
82
|
+
var EMPTY_OVERLINE_STRUT = '\\rule{0em}{1.08em}';
|
|
78
83
|
// Empty delimiter pairs: `\abs{}` is converted to `\left|\right|`, and the
|
|
79
84
|
// parenthesis / bracket keys are `\left(\right)` / `\left[\right]`. None has a
|
|
80
85
|
// `{}` group for the rule above to catch, so they would render as bare fences.
|
|
@@ -103,7 +108,7 @@ var EMPTY_FENCE_SLOT = '\\rule{0em}{1em}\\htmlData{pie-empty=1}{\\rule[-0.25em]{
|
|
|
103
108
|
* @returns {string}
|
|
104
109
|
*/
|
|
105
110
|
var withVisibleEmptySlots = exports.withVisibleEmptySlots = function withVisibleEmptySlots(latex) {
|
|
106
|
-
return (latex || '').replace(EMPTY_GROUP_REGEX, "{".concat(EMPTY_SLOT, "}")).replace(EMPTY_FENCE_REGEX, function (_m, open, close) {
|
|
111
|
+
return (latex || '').replace(EMPTY_OVERLINE_REGEX, "\\overline{".concat(EMPTY_OVERLINE_STRUT).concat(EMPTY_SLOT, "}")).replace(EMPTY_GROUP_REGEX, "{".concat(EMPTY_SLOT, "}")).replace(EMPTY_FENCE_REGEX, function (_m, open, close) {
|
|
107
112
|
return "\\left".concat(open).concat(EMPTY_FENCE_SLOT, "\\right").concat(close);
|
|
108
113
|
});
|
|
109
114
|
};
|