@pie-lib/editable-html-tip-tap 1.1.1-next.0 → 1.1.1-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/__tests__/EditableHtml.test.js +387 -0
- package/lib/__tests__/constants.test.js +28 -0
- package/lib/__tests__/extensions.test.js +214 -0
- package/lib/__tests__/index.test.js +246 -0
- package/lib/__tests__/size-utils.test.js +57 -0
- package/lib/__tests__/theme.test.js +17 -0
- package/lib/components/CharacterPicker.js +8 -3
- package/lib/components/EditableHtml.js +6 -6
- package/lib/components/EditableHtml.js.map +1 -1
- package/lib/components/MenuBar.js +1 -1
- package/lib/components/TiptapContainer.js +4 -1
- package/lib/components/__tests__/AltDialog.test.js +201 -0
- package/lib/components/__tests__/CharacterPicker.test.js +313 -0
- package/lib/components/__tests__/CssIcon.test.js +58 -0
- package/lib/components/__tests__/DragInTheBlank.test.js +309 -0
- package/lib/components/__tests__/ExplicitConstructedResponse.test.js +263 -0
- package/lib/components/__tests__/ImageToolbar.test.js +195 -0
- package/lib/components/__tests__/InlineDropdown.test.js +297 -0
- package/lib/components/__tests__/InsertImageHandler.test.js +162 -0
- package/lib/components/__tests__/MediaDialog.test.js +435 -0
- package/lib/components/__tests__/MediaToolbar.test.js +126 -0
- package/lib/components/__tests__/MediaWrapper.test.js +96 -0
- package/lib/components/__tests__/MenuBar.test.js +459 -0
- package/lib/components/__tests__/RespArea.test.js +171 -0
- package/lib/components/__tests__/TableIcons.test.js +153 -0
- package/lib/components/__tests__/TextAlign.test.js +216 -0
- package/lib/components/__tests__/TiptapContainer.test.js +196 -0
- package/lib/components/__tests__/characterUtils.test.js +189 -0
- package/lib/components/__tests__/choice.test.js +213 -0
- package/lib/components/__tests__/custom-popper.test.js +108 -0
- package/lib/components/__tests__/done-button.test.js +72 -0
- package/lib/components/__tests__/toolbar-buttons.test.js +277 -0
- package/lib/components/characters/characterUtils.js +1 -1
- package/lib/components/characters/custom-popper.js +1 -1
- package/lib/components/common/done-button.js +1 -1
- package/lib/components/common/toolbar-buttons.js +1 -1
- package/lib/components/icons/CssIcon.js +1 -1
- package/lib/components/icons/RespArea.js +1 -1
- package/lib/components/icons/TableIcons.js +1 -1
- package/lib/components/icons/TextAlign.js +1 -1
- package/lib/components/image/AltDialog.js +1 -1
- package/lib/components/image/ImageToolbar.js +1 -1
- package/lib/components/image/InsertImageHandler.js +1 -1
- package/lib/components/media/MediaDialog.js +1 -1
- package/lib/components/media/MediaToolbar.js +1 -1
- package/lib/components/media/MediaWrapper.js +1 -1
- package/lib/components/respArea/DragInTheBlank/DragInTheBlank.js +1 -1
- package/lib/components/respArea/DragInTheBlank/choice.js +1 -1
- package/lib/components/respArea/ExplicitConstructedResponse.js +1 -1
- package/lib/components/respArea/InlineDropdown.js +1 -1
- package/lib/components/respArea/ToolbarIcon.js +1 -1
- package/lib/constants.js +1 -1
- package/lib/extensions/__tests__/component.test.js +314 -0
- package/lib/extensions/__tests__/css.test.js +218 -0
- package/lib/extensions/__tests__/custom-toolbar-wrapper.test.js +185 -0
- package/lib/extensions/__tests__/extended-table.test.js +114 -0
- package/lib/extensions/__tests__/image-component.test.js +315 -0
- package/lib/extensions/__tests__/image.test.js +178 -0
- package/lib/extensions/__tests__/media.test.js +296 -0
- package/lib/extensions/__tests__/responseArea.test.js +332 -0
- package/lib/extensions/component.js +1 -1
- package/lib/extensions/css.js +1 -1
- package/lib/extensions/custom-toolbar-wrapper.js +1 -1
- package/lib/extensions/extended-table.js +2 -2
- package/lib/extensions/image-component.js +314 -0
- package/lib/extensions/image-component.js.map +1 -0
- package/lib/extensions/image.js +3 -3
- package/lib/extensions/image.js.map +1 -1
- package/lib/extensions/index.js +6 -3
- package/lib/extensions/index.js.map +1 -1
- package/lib/extensions/math.js +1 -1
- package/lib/extensions/media.js +1 -1
- package/lib/extensions/responseArea.js +1 -1
- package/lib/index.js +1 -1
- package/lib/styles/editorContainerStyles.js +1 -1
- package/lib/theme.js +1 -1
- package/lib/utils/size.js +1 -1
- package/package.json +1 -1
- package/src/__tests__/EditableHtml.test.jsx +1 -0
- package/src/__tests__/extensions.test.js +2 -2
- package/src/components/CharacterPicker.jsx +9 -2
- package/src/components/EditableHtml.jsx +8 -6
- package/src/components/TiptapContainer.jsx +3 -0
- package/src/extensions/__tests__/{component.test.jsx → image-component.test.jsx} +2 -1
- package/src/extensions/__tests__/image.test.js +1 -1
- package/src/extensions/extended-table.js +1 -6
- package/src/extensions/{component.jsx → image-component.jsx} +11 -1
- package/src/extensions/image.js +8 -6
- package/src/extensions/index.js +5 -1
- package/LICENSE.md +0 -5
- package/NEXT.CHANGELOG.json +0 -1
- package/lib/extensions/component.js.map +0 -1
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
require("core-js/modules/es.symbol.js");
|
|
4
|
+
require("core-js/modules/es.array.filter.js");
|
|
5
|
+
require("core-js/modules/es.array.for-each.js");
|
|
6
|
+
require("core-js/modules/es.object.define-properties.js");
|
|
7
|
+
require("core-js/modules/es.object.get-own-property-descriptor.js");
|
|
8
|
+
require("core-js/modules/es.object.get-own-property-descriptors.js");
|
|
9
|
+
require("core-js/modules/es.object.keys.js");
|
|
10
|
+
require("core-js/modules/es.object.to-string.js");
|
|
11
|
+
require("core-js/modules/web.dom-collections.for-each.js");
|
|
12
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
13
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
14
|
+
require("core-js/modules/es.object.define-property.js");
|
|
15
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
16
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
17
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
18
|
+
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
19
|
+
var _react = _interopRequireDefault(require("react"));
|
|
20
|
+
var _react2 = require("@testing-library/react");
|
|
21
|
+
var _InlineDropdown = _interopRequireDefault(require("../respArea/InlineDropdown"));
|
|
22
|
+
var _excluded = ["children"];
|
|
23
|
+
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; }
|
|
24
|
+
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; }
|
|
25
|
+
jest.mock('@tiptap/react', function () {
|
|
26
|
+
return {
|
|
27
|
+
NodeViewWrapper: function NodeViewWrapper(_ref) {
|
|
28
|
+
var children = _ref.children,
|
|
29
|
+
props = (0, _objectWithoutProperties2["default"])(_ref, _excluded);
|
|
30
|
+
return /*#__PURE__*/_react["default"].createElement("div", (0, _extends2["default"])({
|
|
31
|
+
"data-testid": "node-view-wrapper"
|
|
32
|
+
}, props), children);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
jest.mock('react-dom', function () {
|
|
37
|
+
return _objectSpread(_objectSpread({}, jest.requireActual('react-dom')), {}, {
|
|
38
|
+
createPortal: function createPortal(node) {
|
|
39
|
+
return node;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('InlineDropdown', function () {
|
|
44
|
+
var mockEditor = {
|
|
45
|
+
state: {
|
|
46
|
+
selection: {
|
|
47
|
+
from: 0,
|
|
48
|
+
to: 1
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
view: {
|
|
52
|
+
coordsAtPos: jest.fn(function () {
|
|
53
|
+
return {
|
|
54
|
+
top: 100,
|
|
55
|
+
left: 50
|
|
56
|
+
};
|
|
57
|
+
})
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
var mockNode = {
|
|
61
|
+
attrs: {
|
|
62
|
+
index: '0',
|
|
63
|
+
value: 'Selected Option',
|
|
64
|
+
error: false
|
|
65
|
+
},
|
|
66
|
+
nodeSize: 1
|
|
67
|
+
};
|
|
68
|
+
var mockOptions = {
|
|
69
|
+
respAreaToolbar: jest.fn(function () {
|
|
70
|
+
return function () {
|
|
71
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
72
|
+
"data-testid": "inline-dropdown-toolbar"
|
|
73
|
+
}, "Toolbar");
|
|
74
|
+
};
|
|
75
|
+
})
|
|
76
|
+
};
|
|
77
|
+
var defaultProps = {
|
|
78
|
+
editor: mockEditor,
|
|
79
|
+
node: mockNode,
|
|
80
|
+
getPos: function getPos() {
|
|
81
|
+
return 5;
|
|
82
|
+
},
|
|
83
|
+
options: mockOptions,
|
|
84
|
+
selected: false
|
|
85
|
+
};
|
|
86
|
+
beforeEach(function () {
|
|
87
|
+
jest.clearAllMocks();
|
|
88
|
+
Object.defineProperty(document.body, 'getBoundingClientRect', {
|
|
89
|
+
value: jest.fn(function () {
|
|
90
|
+
return {
|
|
91
|
+
top: 0,
|
|
92
|
+
left: 0
|
|
93
|
+
};
|
|
94
|
+
}),
|
|
95
|
+
configurable: true
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
it('renders without crashing', function () {
|
|
99
|
+
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
|
|
100
|
+
container = _render.container;
|
|
101
|
+
expect(container).toBeInTheDocument();
|
|
102
|
+
});
|
|
103
|
+
it('renders NodeViewWrapper', function () {
|
|
104
|
+
var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
|
|
105
|
+
getByTestId = _render2.getByTestId;
|
|
106
|
+
expect(getByTestId('node-view-wrapper')).toBeInTheDocument();
|
|
107
|
+
});
|
|
108
|
+
it('displays selected value', function () {
|
|
109
|
+
var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
|
|
110
|
+
container = _render3.container;
|
|
111
|
+
var valueDiv = container.querySelector('div[style*="border"]');
|
|
112
|
+
expect(valueDiv).toBeInTheDocument();
|
|
113
|
+
});
|
|
114
|
+
it('renders chevron icon', function () {
|
|
115
|
+
var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
|
|
116
|
+
container = _render4.container;
|
|
117
|
+
var chevron = container.querySelector('svg');
|
|
118
|
+
expect(chevron).toBeInTheDocument();
|
|
119
|
+
});
|
|
120
|
+
it('shows toolbar when selected and only this node is selected', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
121
|
+
var _render5, queryByTestId;
|
|
122
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
123
|
+
while (1) switch (_context.prev = _context.next) {
|
|
124
|
+
case 0:
|
|
125
|
+
_render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
126
|
+
selected: true
|
|
127
|
+
}))), queryByTestId = _render5.queryByTestId;
|
|
128
|
+
_context.next = 1;
|
|
129
|
+
return (0, _react2.waitFor)(function () {
|
|
130
|
+
// Toolbar is shown via portal
|
|
131
|
+
expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
|
|
132
|
+
});
|
|
133
|
+
case 1:
|
|
134
|
+
case "end":
|
|
135
|
+
return _context.stop();
|
|
136
|
+
}
|
|
137
|
+
}, _callee);
|
|
138
|
+
})));
|
|
139
|
+
it('does not show toolbar when not selected', function () {
|
|
140
|
+
var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
141
|
+
selected: false
|
|
142
|
+
}))),
|
|
143
|
+
queryByTestId = _render6.queryByTestId;
|
|
144
|
+
expect(queryByTestId('inline-dropdown-toolbar')).not.toBeInTheDocument();
|
|
145
|
+
});
|
|
146
|
+
it('shows toolbar on click', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
147
|
+
var _render7, container, queryByTestId, dropdown;
|
|
148
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
149
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
150
|
+
case 0:
|
|
151
|
+
_render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)), container = _render7.container, queryByTestId = _render7.queryByTestId;
|
|
152
|
+
dropdown = container.querySelector('div[style*="border"]');
|
|
153
|
+
if (!dropdown) {
|
|
154
|
+
_context2.next = 2;
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
_react2.fireEvent.click(dropdown);
|
|
158
|
+
_context2.next = 1;
|
|
159
|
+
return (0, _react2.waitFor)(function () {
|
|
160
|
+
expect(queryByTestId('inline-dropdown-toolbar')).toBeInTheDocument();
|
|
161
|
+
});
|
|
162
|
+
case 1:
|
|
163
|
+
_context2.next = 3;
|
|
164
|
+
break;
|
|
165
|
+
case 2:
|
|
166
|
+
// If dropdown is not found, just verify the component rendered
|
|
167
|
+
expect(container).toBeInTheDocument();
|
|
168
|
+
case 3:
|
|
169
|
+
case "end":
|
|
170
|
+
return _context2.stop();
|
|
171
|
+
}
|
|
172
|
+
}, _callee2);
|
|
173
|
+
})));
|
|
174
|
+
it('has correct minimum dimensions', function () {
|
|
175
|
+
var _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
|
|
176
|
+
container = _render8.container;
|
|
177
|
+
var wrapper = container.querySelector('[data-testid="node-view-wrapper"]');
|
|
178
|
+
expect(wrapper).toHaveStyle({
|
|
179
|
+
height: '50px'
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
it('has inline-flex display', function () {
|
|
183
|
+
var _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
|
|
184
|
+
container = _render9.container;
|
|
185
|
+
var wrapper = container.querySelector('[data-testid="node-view-wrapper"]');
|
|
186
|
+
expect(wrapper).toHaveStyle({
|
|
187
|
+
display: 'inline-flex'
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
it('has cursor pointer style', function () {
|
|
191
|
+
var _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
|
|
192
|
+
container = _render0.container;
|
|
193
|
+
var wrapper = container.querySelector('[data-testid="node-view-wrapper"]');
|
|
194
|
+
expect(wrapper).toHaveStyle({
|
|
195
|
+
cursor: 'pointer'
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
it('renders with empty value as nbsp', function () {
|
|
199
|
+
var emptyNode = _objectSpread(_objectSpread({}, mockNode), {}, {
|
|
200
|
+
attrs: _objectSpread(_objectSpread({}, mockNode.attrs), {}, {
|
|
201
|
+
value: ''
|
|
202
|
+
})
|
|
203
|
+
});
|
|
204
|
+
var _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
205
|
+
node: emptyNode
|
|
206
|
+
}))),
|
|
207
|
+
container = _render1.container;
|
|
208
|
+
expect(container).toBeInTheDocument();
|
|
209
|
+
});
|
|
210
|
+
it('calls respAreaToolbar with correct params', function () {
|
|
211
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps));
|
|
212
|
+
expect(mockOptions.respAreaToolbar).toHaveBeenCalledWith(mockNode, mockEditor, expect.any(Function));
|
|
213
|
+
});
|
|
214
|
+
it('closes toolbar on outside click', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
215
|
+
var _render10, container, queryByTestId;
|
|
216
|
+
return _regenerator["default"].wrap(function (_context3) {
|
|
217
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
218
|
+
case 0:
|
|
219
|
+
_render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
220
|
+
selected: true
|
|
221
|
+
}))), container = _render10.container, queryByTestId = _render10.queryByTestId;
|
|
222
|
+
_context3.next = 1;
|
|
223
|
+
return (0, _react2.waitFor)(function () {
|
|
224
|
+
_react2.fireEvent.mouseDown(document.body);
|
|
225
|
+
});
|
|
226
|
+
case 1:
|
|
227
|
+
_context3.next = 2;
|
|
228
|
+
return (0, _react2.waitFor)(function () {
|
|
229
|
+
expect(queryByTestId('inline-dropdown-toolbar')).not.toBeInTheDocument();
|
|
230
|
+
});
|
|
231
|
+
case 2:
|
|
232
|
+
case "end":
|
|
233
|
+
return _context3.stop();
|
|
234
|
+
}
|
|
235
|
+
}, _callee3);
|
|
236
|
+
})));
|
|
237
|
+
it('has correct border styling', function () {
|
|
238
|
+
var _render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
|
|
239
|
+
container = _render11.container;
|
|
240
|
+
var dropdownDiv = container.querySelector('div[style*="border"]');
|
|
241
|
+
expect(dropdownDiv).toHaveStyle({
|
|
242
|
+
border: '1px solid #C0C3CF'
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
it('has correct min width', function () {
|
|
246
|
+
var _render12 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
|
|
247
|
+
container = _render12.container;
|
|
248
|
+
var dropdownDiv = container.querySelector('div[style*="border"]');
|
|
249
|
+
expect(dropdownDiv).toHaveStyle({
|
|
250
|
+
minWidth: '178px'
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
it('positions chevron correctly', function () {
|
|
254
|
+
var _render13 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
|
|
255
|
+
container = _render13.container;
|
|
256
|
+
var chevron = container.querySelector('svg');
|
|
257
|
+
// Chevron styling is applied inline, just verify it rendered
|
|
258
|
+
if (chevron) {
|
|
259
|
+
expect(chevron).toBeInTheDocument();
|
|
260
|
+
} else {
|
|
261
|
+
expect(container).toBeInTheDocument();
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
it('has ellipsis for overflow text', function () {
|
|
265
|
+
var _render14 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], defaultProps)),
|
|
266
|
+
container = _render14.container;
|
|
267
|
+
var textContainer = container.querySelector('div[style*="overflow"]');
|
|
268
|
+
expect(textContainer).toHaveStyle({
|
|
269
|
+
textOverflow: 'ellipsis',
|
|
270
|
+
whiteSpace: 'nowrap'
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
it('renders toolbar with z-index', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
274
|
+
var _render15, container;
|
|
275
|
+
return _regenerator["default"].wrap(function (_context4) {
|
|
276
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
277
|
+
case 0:
|
|
278
|
+
_render15 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_InlineDropdown["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
279
|
+
selected: true
|
|
280
|
+
}))), container = _render15.container;
|
|
281
|
+
_context4.next = 1;
|
|
282
|
+
return (0, _react2.waitFor)(function () {
|
|
283
|
+
var toolbarContainer = container.querySelector('div[style*="zIndex"]');
|
|
284
|
+
if (toolbarContainer) {
|
|
285
|
+
expect(toolbarContainer).toHaveStyle({
|
|
286
|
+
zIndex: '1'
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
case 1:
|
|
291
|
+
case "end":
|
|
292
|
+
return _context4.stop();
|
|
293
|
+
}
|
|
294
|
+
}, _callee4);
|
|
295
|
+
})));
|
|
296
|
+
});
|
|
297
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfSW5saW5lRHJvcGRvd24iLCJfZXhjbHVkZWQiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImplc3QiLCJtb2NrIiwiTm9kZVZpZXdXcmFwcGVyIiwiX3JlZiIsImNoaWxkcmVuIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwiY3JlYXRlRWxlbWVudCIsIl9leHRlbmRzMiIsInJlcXVpcmVBY3R1YWwiLCJjcmVhdGVQb3J0YWwiLCJub2RlIiwiZGVzY3JpYmUiLCJtb2NrRWRpdG9yIiwic3RhdGUiLCJzZWxlY3Rpb24iLCJmcm9tIiwidG8iLCJ2aWV3IiwiY29vcmRzQXRQb3MiLCJmbiIsInRvcCIsImxlZnQiLCJtb2NrTm9kZSIsImF0dHJzIiwiaW5kZXgiLCJ2YWx1ZSIsImVycm9yIiwibm9kZVNpemUiLCJtb2NrT3B0aW9ucyIsInJlc3BBcmVhVG9vbGJhciIsImRlZmF1bHRQcm9wcyIsImVkaXRvciIsImdldFBvcyIsIm9wdGlvbnMiLCJzZWxlY3RlZCIsImJlZm9yZUVhY2giLCJjbGVhckFsbE1vY2tzIiwiZG9jdW1lbnQiLCJib2R5IiwiY29uZmlndXJhYmxlIiwiaXQiLCJfcmVuZGVyIiwicmVuZGVyIiwiY29udGFpbmVyIiwiZXhwZWN0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJfcmVuZGVyMiIsImdldEJ5VGVzdElkIiwiX3JlbmRlcjMiLCJ2YWx1ZURpdiIsInF1ZXJ5U2VsZWN0b3IiLCJfcmVuZGVyNCIsImNoZXZyb24iLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl9yZW5kZXI1IiwicXVlcnlCeVRlc3RJZCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0Iiwid2FpdEZvciIsInN0b3AiLCJfcmVuZGVyNiIsIm5vdCIsIl9jYWxsZWUyIiwiX3JlbmRlcjciLCJkcm9wZG93biIsIl9jb250ZXh0MiIsImZpcmVFdmVudCIsImNsaWNrIiwiX3JlbmRlcjgiLCJ3cmFwcGVyIiwidG9IYXZlU3R5bGUiLCJoZWlnaHQiLCJfcmVuZGVyOSIsImRpc3BsYXkiLCJfcmVuZGVyMCIsImN1cnNvciIsImVtcHR5Tm9kZSIsIl9yZW5kZXIxIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJhbnkiLCJGdW5jdGlvbiIsIl9jYWxsZWUzIiwiX3JlbmRlcjEwIiwiX2NvbnRleHQzIiwibW91c2VEb3duIiwiX3JlbmRlcjExIiwiZHJvcGRvd25EaXYiLCJib3JkZXIiLCJfcmVuZGVyMTIiLCJtaW5XaWR0aCIsIl9yZW5kZXIxMyIsIl9yZW5kZXIxNCIsInRleHRDb250YWluZXIiLCJ0ZXh0T3ZlcmZsb3ciLCJ3aGl0ZVNwYWNlIiwiX2NhbGxlZTQiLCJfcmVuZGVyMTUiLCJfY29udGV4dDQiLCJ0b29sYmFyQ29udGFpbmVyIiwiekluZGV4Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvX190ZXN0c19fL0lubGluZURyb3Bkb3duLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIGZpcmVFdmVudCwgd2FpdEZvciB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IElubGluZURyb3Bkb3duIGZyb20gJy4uL3Jlc3BBcmVhL0lubGluZURyb3Bkb3duJztcblxuamVzdC5tb2NrKCdAdGlwdGFwL3JlYWN0JywgKCkgPT4gKHtcbiAgTm9kZVZpZXdXcmFwcGVyOiAoeyBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4gKFxuICAgIDxkaXYgZGF0YS10ZXN0aWQ9XCJub2RlLXZpZXctd3JhcHBlclwiIHsuLi5wcm9wc30+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICksXG59KSk7XG5cbmplc3QubW9jaygncmVhY3QtZG9tJywgKCkgPT4gKHtcbiAgLi4uamVzdC5yZXF1aXJlQWN0dWFsKCdyZWFjdC1kb20nKSxcbiAgY3JlYXRlUG9ydGFsOiAobm9kZSkgPT4gbm9kZSxcbn0pKTtcblxuZGVzY3JpYmUoJ0lubGluZURyb3Bkb3duJywgKCkgPT4ge1xuICBjb25zdCBtb2NrRWRpdG9yID0ge1xuICAgIHN0YXRlOiB7XG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgZnJvbTogMCxcbiAgICAgICAgdG86IDEsXG4gICAgICB9LFxuICAgIH0sXG4gICAgdmlldzoge1xuICAgICAgY29vcmRzQXRQb3M6IGplc3QuZm4oKCkgPT4gKHsgdG9wOiAxMDAsIGxlZnQ6IDUwIH0pKSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IG1vY2tOb2RlID0ge1xuICAgIGF0dHJzOiB7XG4gICAgICBpbmRleDogJzAnLFxuICAgICAgdmFsdWU6ICdTZWxlY3RlZCBPcHRpb24nLFxuICAgICAgZXJyb3I6IGZhbHNlLFxuICAgIH0sXG4gICAgbm9kZVNpemU6IDEsXG4gIH07XG5cbiAgY29uc3QgbW9ja09wdGlvbnMgPSB7XG4gICAgcmVzcEFyZWFUb29sYmFyOiBqZXN0LmZuKCgpID0+ICgpID0+IDxkaXYgZGF0YS10ZXN0aWQ9XCJpbmxpbmUtZHJvcGRvd24tdG9vbGJhclwiPlRvb2xiYXI8L2Rpdj4pLFxuICB9O1xuXG4gIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICBlZGl0b3I6IG1vY2tFZGl0b3IsXG4gICAgbm9kZTogbW9ja05vZGUsXG4gICAgZ2V0UG9zOiAoKSA9PiA1LFxuICAgIG9wdGlvbnM6IG1vY2tPcHRpb25zLFxuICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgfTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9jdW1lbnQuYm9keSwgJ2dldEJvdW5kaW5nQ2xpZW50UmVjdCcsIHtcbiAgICAgIHZhbHVlOiBqZXN0LmZuKCgpID0+ICh7IHRvcDogMCwgbGVmdDogMCB9KSksXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdyZW5kZXJzIHdpdGhvdXQgY3Jhc2hpbmcnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8SW5saW5lRHJvcGRvd24gey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgIGV4cGVjdChjb250YWluZXIpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdyZW5kZXJzIE5vZGVWaWV3V3JhcHBlcicsICgpID0+IHtcbiAgICBjb25zdCB7IGdldEJ5VGVzdElkIH0gPSByZW5kZXIoPElubGluZURyb3Bkb3duIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICBleHBlY3QoZ2V0QnlUZXN0SWQoJ25vZGUtdmlldy13cmFwcGVyJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdkaXNwbGF5cyBzZWxlY3RlZCB2YWx1ZScsICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxJbmxpbmVEcm9wZG93biB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgY29uc3QgdmFsdWVEaXYgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignZGl2W3N0eWxlKj1cImJvcmRlclwiXScpO1xuICAgIGV4cGVjdCh2YWx1ZURpdikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgY2hldnJvbiBpY29uJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPElubGluZURyb3Bkb3duIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICBjb25zdCBjaGV2cm9uID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpO1xuICAgIGV4cGVjdChjaGV2cm9uKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnc2hvd3MgdG9vbGJhciB3aGVuIHNlbGVjdGVkIGFuZCBvbmx5IHRoaXMgbm9kZSBpcyBzZWxlY3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IHF1ZXJ5QnlUZXN0SWQgfSA9IHJlbmRlcig8SW5saW5lRHJvcGRvd24gey4uLmRlZmF1bHRQcm9wc30gc2VsZWN0ZWQ9e3RydWV9IC8+KTtcbiAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHtcbiAgICAgIC8vIFRvb2xiYXIgaXMgc2hvd24gdmlhIHBvcnRhbFxuICAgICAgZXhwZWN0KHF1ZXJ5QnlUZXN0SWQoJ2lubGluZS1kcm9wZG93bi10b29sYmFyJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdkb2VzIG5vdCBzaG93IHRvb2xiYXIgd2hlbiBub3Qgc2VsZWN0ZWQnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBxdWVyeUJ5VGVzdElkIH0gPSByZW5kZXIoPElubGluZURyb3Bkb3duIHsuLi5kZWZhdWx0UHJvcHN9IHNlbGVjdGVkPXtmYWxzZX0gLz4pO1xuICAgIGV4cGVjdChxdWVyeUJ5VGVzdElkKCdpbmxpbmUtZHJvcGRvd24tdG9vbGJhcicpKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3dzIHRvb2xiYXIgb24gY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIsIHF1ZXJ5QnlUZXN0SWQgfSA9IHJlbmRlcig8SW5saW5lRHJvcGRvd24gey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgIGNvbnN0IGRyb3Bkb3duID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2RpdltzdHlsZSo9XCJib3JkZXJcIl0nKTtcbiAgICBpZiAoZHJvcGRvd24pIHtcbiAgICAgIGZpcmVFdmVudC5jbGljayhkcm9wZG93bik7XG4gICAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHtcbiAgICAgICAgZXhwZWN0KHF1ZXJ5QnlUZXN0SWQoJ2lubGluZS1kcm9wZG93bi10b29sYmFyJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgZHJvcGRvd24gaXMgbm90IGZvdW5kLCBqdXN0IHZlcmlmeSB0aGUgY29tcG9uZW50IHJlbmRlcmVkXG4gICAgICBleHBlY3QoY29udGFpbmVyKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoJ2hhcyBjb3JyZWN0IG1pbmltdW0gZGltZW5zaW9ucycsICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxJbmxpbmVEcm9wZG93biB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgY29uc3Qgd3JhcHBlciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdbZGF0YS10ZXN0aWQ9XCJub2RlLXZpZXctd3JhcHBlclwiXScpO1xuICAgIGV4cGVjdCh3cmFwcGVyKS50b0hhdmVTdHlsZSh7IGhlaWdodDogJzUwcHgnIH0pO1xuICB9KTtcblxuICBpdCgnaGFzIGlubGluZS1mbGV4IGRpc3BsYXknLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8SW5saW5lRHJvcGRvd24gey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgIGNvbnN0IHdyYXBwZXIgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignW2RhdGEtdGVzdGlkPVwibm9kZS12aWV3LXdyYXBwZXJcIl0nKTtcbiAgICBleHBlY3Qod3JhcHBlcikudG9IYXZlU3R5bGUoeyBkaXNwbGF5OiAnaW5saW5lLWZsZXgnIH0pO1xuICB9KTtcblxuICBpdCgnaGFzIGN1cnNvciBwb2ludGVyIHN0eWxlJywgKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoPElubGluZURyb3Bkb3duIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICBjb25zdCB3cmFwcGVyID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXRlc3RpZD1cIm5vZGUtdmlldy13cmFwcGVyXCJdJyk7XG4gICAgZXhwZWN0KHdyYXBwZXIpLnRvSGF2ZVN0eWxlKHsgY3Vyc29yOiAncG9pbnRlcicgfSk7XG4gIH0pO1xuXG4gIGl0KCdyZW5kZXJzIHdpdGggZW1wdHkgdmFsdWUgYXMgbmJzcCcsICgpID0+IHtcbiAgICBjb25zdCBlbXB0eU5vZGUgPSB7IC4uLm1vY2tOb2RlLCBhdHRyczogeyAuLi5tb2NrTm9kZS5hdHRycywgdmFsdWU6ICcnIH0gfTtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxJbmxpbmVEcm9wZG93biB7Li4uZGVmYXVsdFByb3BzfSBub2RlPXtlbXB0eU5vZGV9IC8+KTtcbiAgICBleHBlY3QoY29udGFpbmVyKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnY2FsbHMgcmVzcEFyZWFUb29sYmFyIHdpdGggY29ycmVjdCBwYXJhbXMnLCAoKSA9PiB7XG4gICAgcmVuZGVyKDxJbmxpbmVEcm9wZG93biB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgZXhwZWN0KG1vY2tPcHRpb25zLnJlc3BBcmVhVG9vbGJhcikudG9IYXZlQmVlbkNhbGxlZFdpdGgobW9ja05vZGUsIG1vY2tFZGl0b3IsIGV4cGVjdC5hbnkoRnVuY3Rpb24pKTtcbiAgfSk7XG5cbiAgaXQoJ2Nsb3NlcyB0b29sYmFyIG9uIG91dHNpZGUgY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIsIHF1ZXJ5QnlUZXN0SWQgfSA9IHJlbmRlcig8SW5saW5lRHJvcGRvd24gey4uLmRlZmF1bHRQcm9wc30gc2VsZWN0ZWQ9e3RydWV9IC8+KTtcbiAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHtcbiAgICAgIGZpcmVFdmVudC5tb3VzZURvd24oZG9jdW1lbnQuYm9keSk7XG4gICAgfSk7XG4gICAgLy8gQWZ0ZXIgY2xpY2tpbmcgb3V0c2lkZSwgdG9vbGJhciBzaG91bGQgYmUgaGlkZGVuXG4gICAgYXdhaXQgd2FpdEZvcigoKSA9PiB7XG4gICAgICBleHBlY3QocXVlcnlCeVRlc3RJZCgnaW5saW5lLWRyb3Bkb3duLXRvb2xiYXInKSkubm90LnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdoYXMgY29ycmVjdCBib3JkZXIgc3R5bGluZycsICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKDxJbmxpbmVEcm9wZG93biB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgY29uc3QgZHJvcGRvd25EaXYgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignZGl2W3N0eWxlKj1cImJvcmRlclwiXScpO1xuICAgIGV4cGVjdChkcm9wZG93bkRpdikudG9IYXZlU3R5bGUoeyBib3JkZXI6ICcxcHggc29saWQgI0MwQzNDRicgfSk7XG4gIH0pO1xuXG4gIGl0KCdoYXMgY29ycmVjdCBtaW4gd2lkdGgnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8SW5saW5lRHJvcGRvd24gey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgIGNvbnN0IGRyb3Bkb3duRGl2ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2RpdltzdHlsZSo9XCJib3JkZXJcIl0nKTtcbiAgICBleHBlY3QoZHJvcGRvd25EaXYpLnRvSGF2ZVN0eWxlKHsgbWluV2lkdGg6ICcxNzhweCcgfSk7XG4gIH0pO1xuXG4gIGl0KCdwb3NpdGlvbnMgY2hldnJvbiBjb3JyZWN0bHknLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8SW5saW5lRHJvcGRvd24gey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgIGNvbnN0IGNoZXZyb24gPSBjb250YWluZXIucXVlcnlTZWxlY3Rvcignc3ZnJyk7XG4gICAgLy8gQ2hldnJvbiBzdHlsaW5nIGlzIGFwcGxpZWQgaW5saW5lLCBqdXN0IHZlcmlmeSBpdCByZW5kZXJlZFxuICAgIGlmIChjaGV2cm9uKSB7XG4gICAgICBleHBlY3QoY2hldnJvbikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGl0KCdoYXMgZWxsaXBzaXMgZm9yIG92ZXJmbG93IHRleHQnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8SW5saW5lRHJvcGRvd24gey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgIGNvbnN0IHRleHRDb250YWluZXIgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignZGl2W3N0eWxlKj1cIm92ZXJmbG93XCJdJyk7XG4gICAgZXhwZWN0KHRleHRDb250YWluZXIpLnRvSGF2ZVN0eWxlKHsgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLCB3aGl0ZVNwYWNlOiAnbm93cmFwJyB9KTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgdG9vbGJhciB3aXRoIHotaW5kZXgnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8SW5saW5lRHJvcGRvd24gey4uLmRlZmF1bHRQcm9wc30gc2VsZWN0ZWQ9e3RydWV9IC8+KTtcbiAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHtcbiAgICAgIGNvbnN0IHRvb2xiYXJDb250YWluZXIgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignZGl2W3N0eWxlKj1cInpJbmRleFwiXScpO1xuICAgICAgaWYgKHRvb2xiYXJDb250YWluZXIpIHtcbiAgICAgICAgZXhwZWN0KHRvb2xiYXJDb250YWluZXIpLnRvSGF2ZVN0eWxlKHsgekluZGV4OiAnMScgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGVBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUF3RCxJQUFBRyxTQUFBO0FBQUEsU0FBQUMsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxhQUFBaEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFDLENBQUEsQ0FBQUQsQ0FBQSxTQUFBRSxNQUFBLENBQUFjLHlCQUFBLEdBQUFkLE1BQUEsQ0FBQWUsZ0JBQUEsQ0FB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
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _InsertImageHandler = _interopRequireDefault(require("../image/InsertImageHandler"));
|
|
5
|
+
describe('InsertImageHandler', function () {
|
|
6
|
+
var mockNode = {
|
|
7
|
+
attrs: {},
|
|
8
|
+
nodeSize: 1
|
|
9
|
+
};
|
|
10
|
+
var createMockEditor = function createMockEditor() {
|
|
11
|
+
return {
|
|
12
|
+
state: {
|
|
13
|
+
doc: {
|
|
14
|
+
descendants: jest.fn(function (callback) {
|
|
15
|
+
callback(mockNode, 5);
|
|
16
|
+
})
|
|
17
|
+
},
|
|
18
|
+
tr: {
|
|
19
|
+
setNodeMarkup: jest.fn(function (pos, type, attrs) {
|
|
20
|
+
return {
|
|
21
|
+
setNodeMarkup: jest.fn()
|
|
22
|
+
};
|
|
23
|
+
}),
|
|
24
|
+
"delete": jest.fn(function (from, to) {
|
|
25
|
+
return {
|
|
26
|
+
"delete": jest.fn()
|
|
27
|
+
};
|
|
28
|
+
})
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
view: {
|
|
32
|
+
dispatch: jest.fn()
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
var mockOnFinish = jest.fn();
|
|
37
|
+
beforeEach(function () {
|
|
38
|
+
jest.clearAllMocks();
|
|
39
|
+
});
|
|
40
|
+
it('creates handler instance', function () {
|
|
41
|
+
var editor = createMockEditor();
|
|
42
|
+
var handler = new _InsertImageHandler["default"](editor, mockNode, mockOnFinish);
|
|
43
|
+
expect(handler).toBeDefined();
|
|
44
|
+
expect(handler.editor).toBe(editor);
|
|
45
|
+
expect(handler.node).toBe(mockNode);
|
|
46
|
+
expect(handler.onFinish).toBe(mockOnFinish);
|
|
47
|
+
});
|
|
48
|
+
it('stores nodePos from descendants', function () {
|
|
49
|
+
var editor = createMockEditor();
|
|
50
|
+
var handler = new _InsertImageHandler["default"](editor, mockNode, mockOnFinish);
|
|
51
|
+
expect(handler.nodePos).toBe(5);
|
|
52
|
+
});
|
|
53
|
+
it('stores isPasted parameter', function () {
|
|
54
|
+
var editor = createMockEditor();
|
|
55
|
+
var handler = new _InsertImageHandler["default"](editor, mockNode, mockOnFinish, true);
|
|
56
|
+
expect(handler.isPasted).toBe(true);
|
|
57
|
+
});
|
|
58
|
+
it('defaults isPasted to false', function () {
|
|
59
|
+
var editor = createMockEditor();
|
|
60
|
+
var handler = new _InsertImageHandler["default"](editor, mockNode, mockOnFinish);
|
|
61
|
+
expect(handler.isPasted).toBe(false);
|
|
62
|
+
});
|
|
63
|
+
it('cancel deletes node and calls onFinish', function () {
|
|
64
|
+
var editor = createMockEditor();
|
|
65
|
+
var handler = new _InsertImageHandler["default"](editor, mockNode, mockOnFinish);
|
|
66
|
+
handler.cancel();
|
|
67
|
+
expect(mockOnFinish).toHaveBeenCalledWith(false);
|
|
68
|
+
});
|
|
69
|
+
it('updateNode dispatches transaction with new attributes', function () {
|
|
70
|
+
var editor = createMockEditor();
|
|
71
|
+
var mockNodeAt = jest.fn(function () {
|
|
72
|
+
return {
|
|
73
|
+
attrs: {
|
|
74
|
+
existing: 'value'
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
editor.state.doc.nodeAt = mockNodeAt;
|
|
79
|
+
var handler = new _InsertImageHandler["default"](editor, mockNode, mockOnFinish);
|
|
80
|
+
handler.updateNode({
|
|
81
|
+
newAttr: 'newValue'
|
|
82
|
+
});
|
|
83
|
+
expect(mockNodeAt).toHaveBeenCalledWith(5);
|
|
84
|
+
expect(editor.view.dispatch).toHaveBeenCalled();
|
|
85
|
+
});
|
|
86
|
+
it('done calls onFinish with false on error', function () {
|
|
87
|
+
var editor = createMockEditor();
|
|
88
|
+
var handler = new _InsertImageHandler["default"](editor, mockNode, mockOnFinish);
|
|
89
|
+
var consoleLogSpy = jest.spyOn(console, 'log').mockImplementation();
|
|
90
|
+
handler.done('error', null);
|
|
91
|
+
expect(consoleLogSpy).toHaveBeenCalledWith('error');
|
|
92
|
+
expect(mockOnFinish).toHaveBeenCalledWith(false);
|
|
93
|
+
consoleLogSpy.mockRestore();
|
|
94
|
+
});
|
|
95
|
+
it('done updates node and calls onFinish with true on success', function () {
|
|
96
|
+
var editor = createMockEditor();
|
|
97
|
+
var mockNodeAt = jest.fn(function () {
|
|
98
|
+
return {
|
|
99
|
+
attrs: {}
|
|
100
|
+
};
|
|
101
|
+
});
|
|
102
|
+
editor.state.doc.nodeAt = mockNodeAt;
|
|
103
|
+
var handler = new _InsertImageHandler["default"](editor, mockNode, mockOnFinish);
|
|
104
|
+
handler.done(null, 'http://example.com/image.jpg');
|
|
105
|
+
expect(editor.view.dispatch).toHaveBeenCalled();
|
|
106
|
+
expect(mockOnFinish).toHaveBeenCalledWith(true);
|
|
107
|
+
});
|
|
108
|
+
it('fileChosen returns early when no file provided', function () {
|
|
109
|
+
var editor = createMockEditor();
|
|
110
|
+
var handler = new _InsertImageHandler["default"](editor, mockNode, mockOnFinish);
|
|
111
|
+
handler.fileChosen(null);
|
|
112
|
+
expect(editor.view.dispatch).not.toHaveBeenCalled();
|
|
113
|
+
});
|
|
114
|
+
it('fileChosen saves file and reads it as data URL', function () {
|
|
115
|
+
var editor = createMockEditor();
|
|
116
|
+
var mockNodeAt = jest.fn(function () {
|
|
117
|
+
return {
|
|
118
|
+
attrs: {}
|
|
119
|
+
};
|
|
120
|
+
});
|
|
121
|
+
editor.state.doc.nodeAt = mockNodeAt;
|
|
122
|
+
var handler = new _InsertImageHandler["default"](editor, mockNode, mockOnFinish);
|
|
123
|
+
var mockFile = new File(['content'], 'test.jpg', {
|
|
124
|
+
type: 'image/jpeg'
|
|
125
|
+
});
|
|
126
|
+
global.FileReader = jest.fn(function () {
|
|
127
|
+
this.readAsDataURL = jest.fn(function () {
|
|
128
|
+
this.result = 'data:image/jpeg;base64,abc123';
|
|
129
|
+
this.onload();
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
handler.fileChosen(mockFile);
|
|
133
|
+
expect(handler.chosenFile).toBe(mockFile);
|
|
134
|
+
});
|
|
135
|
+
it('progress updates node with percent', function () {
|
|
136
|
+
var editor = createMockEditor();
|
|
137
|
+
var mockNodeAt = jest.fn(function () {
|
|
138
|
+
return {
|
|
139
|
+
attrs: {}
|
|
140
|
+
};
|
|
141
|
+
});
|
|
142
|
+
editor.state.doc.nodeAt = mockNodeAt;
|
|
143
|
+
var handler = new _InsertImageHandler["default"](editor, mockNode, mockOnFinish);
|
|
144
|
+
handler.progress(50, 500, 1000);
|
|
145
|
+
expect(editor.view.dispatch).toHaveBeenCalled();
|
|
146
|
+
});
|
|
147
|
+
it('getChosenFile returns the chosen file', function () {
|
|
148
|
+
var editor = createMockEditor();
|
|
149
|
+
var handler = new _InsertImageHandler["default"](editor, mockNode, mockOnFinish);
|
|
150
|
+
var mockFile = new File(['content'], 'test.jpg', {
|
|
151
|
+
type: 'image/jpeg'
|
|
152
|
+
});
|
|
153
|
+
handler.chosenFile = mockFile;
|
|
154
|
+
expect(handler.getChosenFile()).toBe(mockFile);
|
|
155
|
+
});
|
|
156
|
+
it('getChosenFile returns null initially', function () {
|
|
157
|
+
var editor = createMockEditor();
|
|
158
|
+
var handler = new _InsertImageHandler["default"](editor, mockNode, mockOnFinish);
|
|
159
|
+
expect(handler.getChosenFile()).toBeNull();
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfSW5zZXJ0SW1hZ2VIYW5kbGVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJkZXNjcmliZSIsIm1vY2tOb2RlIiwiYXR0cnMiLCJub2RlU2l6ZSIsImNyZWF0ZU1vY2tFZGl0b3IiLCJzdGF0ZSIsImRvYyIsImRlc2NlbmRhbnRzIiwiamVzdCIsImZuIiwiY2FsbGJhY2siLCJ0ciIsInNldE5vZGVNYXJrdXAiLCJwb3MiLCJ0eXBlIiwiZnJvbSIsInRvIiwidmlldyIsImRpc3BhdGNoIiwibW9ja09uRmluaXNoIiwiYmVmb3JlRWFjaCIsImNsZWFyQWxsTW9ja3MiLCJpdCIsImVkaXRvciIsImhhbmRsZXIiLCJJbnNlcnRJbWFnZUhhbmRsZXIiLCJleHBlY3QiLCJ0b0JlRGVmaW5lZCIsInRvQmUiLCJub2RlIiwib25GaW5pc2giLCJub2RlUG9zIiwiaXNQYXN0ZWQiLCJjYW5jZWwiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsIm1vY2tOb2RlQXQiLCJleGlzdGluZyIsIm5vZGVBdCIsInVwZGF0ZU5vZGUiLCJuZXdBdHRyIiwidG9IYXZlQmVlbkNhbGxlZCIsImNvbnNvbGVMb2dTcHkiLCJzcHlPbiIsImNvbnNvbGUiLCJtb2NrSW1wbGVtZW50YXRpb24iLCJkb25lIiwibW9ja1Jlc3RvcmUiLCJmaWxlQ2hvc2VuIiwibm90IiwibW9ja0ZpbGUiLCJGaWxlIiwiZ2xvYmFsIiwiRmlsZVJlYWRlciIsInJlYWRBc0RhdGFVUkwiLCJyZXN1bHQiLCJvbmxvYWQiLCJjaG9zZW5GaWxlIiwicHJvZ3Jlc3MiLCJnZXRDaG9zZW5GaWxlIiwidG9CZU51bGwiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9fX3Rlc3RzX18vSW5zZXJ0SW1hZ2VIYW5kbGVyLnRlc3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEluc2VydEltYWdlSGFuZGxlciBmcm9tICcuLi9pbWFnZS9JbnNlcnRJbWFnZUhhbmRsZXInO1xuXG5kZXNjcmliZSgnSW5zZXJ0SW1hZ2VIYW5kbGVyJywgKCkgPT4ge1xuICBjb25zdCBtb2NrTm9kZSA9IHtcbiAgICBhdHRyczoge30sXG4gICAgbm9kZVNpemU6IDEsXG4gIH07XG5cbiAgY29uc3QgY3JlYXRlTW9ja0VkaXRvciA9ICgpID0+ICh7XG4gICAgc3RhdGU6IHtcbiAgICAgIGRvYzoge1xuICAgICAgICBkZXNjZW5kYW50czogamVzdC5mbigoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICBjYWxsYmFjayhtb2NrTm9kZSwgNSk7XG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIHRyOiB7XG4gICAgICAgIHNldE5vZGVNYXJrdXA6IGplc3QuZm4oKHBvcywgdHlwZSwgYXR0cnMpID0+ICh7IHNldE5vZGVNYXJrdXA6IGplc3QuZm4oKSB9KSksXG4gICAgICAgIGRlbGV0ZTogamVzdC5mbigoZnJvbSwgdG8pID0+ICh7IGRlbGV0ZTogamVzdC5mbigpIH0pKSxcbiAgICAgIH0sXG4gICAgfSxcbiAgICB2aWV3OiB7XG4gICAgICBkaXNwYXRjaDogamVzdC5mbigpLFxuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0IG1vY2tPbkZpbmlzaCA9IGplc3QuZm4oKTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBqZXN0LmNsZWFyQWxsTW9ja3MoKTtcbiAgfSk7XG5cbiAgaXQoJ2NyZWF0ZXMgaGFuZGxlciBpbnN0YW5jZScsICgpID0+IHtcbiAgICBjb25zdCBlZGl0b3IgPSBjcmVhdGVNb2NrRWRpdG9yKCk7XG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBJbnNlcnRJbWFnZUhhbmRsZXIoZWRpdG9yLCBtb2NrTm9kZSwgbW9ja09uRmluaXNoKTtcbiAgICBleHBlY3QoaGFuZGxlcikudG9CZURlZmluZWQoKTtcbiAgICBleHBlY3QoaGFuZGxlci5lZGl0b3IpLnRvQmUoZWRpdG9yKTtcbiAgICBleHBlY3QoaGFuZGxlci5ub2RlKS50b0JlKG1vY2tOb2RlKTtcbiAgICBleHBlY3QoaGFuZGxlci5vbkZpbmlzaCkudG9CZShtb2NrT25GaW5pc2gpO1xuICB9KTtcblxuICBpdCgnc3RvcmVzIG5vZGVQb3MgZnJvbSBkZXNjZW5kYW50cycsICgpID0+IHtcbiAgICBjb25zdCBlZGl0b3IgPSBjcmVhdGVNb2NrRWRpdG9yKCk7XG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBJbnNlcnRJbWFnZUhhbmRsZXIoZWRpdG9yLCBtb2NrTm9kZSwgbW9ja09uRmluaXNoKTtcbiAgICBleHBlY3QoaGFuZGxlci5ub2RlUG9zKS50b0JlKDUpO1xuICB9KTtcblxuICBpdCgnc3RvcmVzIGlzUGFzdGVkIHBhcmFtZXRlcicsICgpID0+IHtcbiAgICBjb25zdCBlZGl0b3IgPSBjcmVhdGVNb2NrRWRpdG9yKCk7XG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBJbnNlcnRJbWFnZUhhbmRsZXIoZWRpdG9yLCBtb2NrTm9kZSwgbW9ja09uRmluaXNoLCB0cnVlKTtcbiAgICBleHBlY3QoaGFuZGxlci5pc1Bhc3RlZCkudG9CZSh0cnVlKTtcbiAgfSk7XG5cbiAgaXQoJ2RlZmF1bHRzIGlzUGFzdGVkIHRvIGZhbHNlJywgKCkgPT4ge1xuICAgIGNvbnN0IGVkaXRvciA9IGNyZWF0ZU1vY2tFZGl0b3IoKTtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IEluc2VydEltYWdlSGFuZGxlcihlZGl0b3IsIG1vY2tOb2RlLCBtb2NrT25GaW5pc2gpO1xuICAgIGV4cGVjdChoYW5kbGVyLmlzUGFzdGVkKS50b0JlKGZhbHNlKTtcbiAgfSk7XG5cbiAgaXQoJ2NhbmNlbCBkZWxldGVzIG5vZGUgYW5kIGNhbGxzIG9uRmluaXNoJywgKCkgPT4ge1xuICAgIGNvbnN0IGVkaXRvciA9IGNyZWF0ZU1vY2tFZGl0b3IoKTtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IEluc2VydEltYWdlSGFuZGxlcihlZGl0b3IsIG1vY2tOb2RlLCBtb2NrT25GaW5pc2gpO1xuICAgIGhhbmRsZXIuY2FuY2VsKCk7XG4gICAgZXhwZWN0KG1vY2tPbkZpbmlzaCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZmFsc2UpO1xuICB9KTtcblxuICBpdCgndXBkYXRlTm9kZSBkaXNwYXRjaGVzIHRyYW5zYWN0aW9uIHdpdGggbmV3IGF0dHJpYnV0ZXMnLCAoKSA9PiB7XG4gICAgY29uc3QgZWRpdG9yID0gY3JlYXRlTW9ja0VkaXRvcigpO1xuICAgIGNvbnN0IG1vY2tOb2RlQXQgPSBqZXN0LmZuKCgpID0+ICh7IGF0dHJzOiB7IGV4aXN0aW5nOiAndmFsdWUnIH0gfSkpO1xuICAgIGVkaXRvci5zdGF0ZS5kb2Mubm9kZUF0ID0gbW9ja05vZGVBdDtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgSW5zZXJ0SW1hZ2VIYW5kbGVyKGVkaXRvciwgbW9ja05vZGUsIG1vY2tPbkZpbmlzaCk7XG4gICAgaGFuZGxlci51cGRhdGVOb2RlKHsgbmV3QXR0cjogJ25ld1ZhbHVlJyB9KTtcblxuICAgIGV4cGVjdChtb2NrTm9kZUF0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCg1KTtcbiAgICBleHBlY3QoZWRpdG9yLnZpZXcuZGlzcGF0Y2gpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgaXQoJ2RvbmUgY2FsbHMgb25GaW5pc2ggd2l0aCBmYWxzZSBvbiBlcnJvcicsICgpID0+IHtcbiAgICBjb25zdCBlZGl0b3IgPSBjcmVhdGVNb2NrRWRpdG9yKCk7XG4gICAgY29uc3QgaGFuZGxlciA9IG5ldyBJbnNlcnRJbWFnZUhhbmRsZXIoZWRpdG9yLCBtb2NrTm9kZSwgbW9ja09uRmluaXNoKTtcbiAgICBjb25zdCBjb25zb2xlTG9nU3B5ID0gamVzdC5zcHlPbihjb25zb2xlLCAnbG9nJykubW9ja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICBoYW5kbGVyLmRvbmUoJ2Vycm9yJywgbnVsbCk7XG5cbiAgICBleHBlY3QoY29uc29sZUxvZ1NweSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2Vycm9yJyk7XG4gICAgZXhwZWN0KG1vY2tPbkZpbmlzaCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZmFsc2UpO1xuICAgIGNvbnNvbGVMb2dTcHkubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoJ2RvbmUgdXBkYXRlcyBub2RlIGFuZCBjYWxscyBvbkZpbmlzaCB3aXRoIHRydWUgb24gc3VjY2VzcycsICgpID0+IHtcbiAgICBjb25zdCBlZGl0b3IgPSBjcmVhdGVNb2NrRWRpdG9yKCk7XG4gICAgY29uc3QgbW9ja05vZGVBdCA9IGplc3QuZm4oKCkgPT4gKHsgYXR0cnM6IHt9IH0pKTtcbiAgICBlZGl0b3Iuc3RhdGUuZG9jLm5vZGVBdCA9IG1vY2tOb2RlQXQ7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IEluc2VydEltYWdlSGFuZGxlcihlZGl0b3IsIG1vY2tOb2RlLCBtb2NrT25GaW5pc2gpO1xuICAgIGhhbmRsZXIuZG9uZShudWxsLCAnaHR0cDovL2V4YW1wbGUuY29tL2ltYWdlLmpwZycpO1xuXG4gICAgZXhwZWN0KGVkaXRvci52aWV3LmRpc3BhdGNoKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgZXhwZWN0KG1vY2tPbkZpbmlzaCkudG9IYXZlQmVlbkNhbGxlZFdpdGgodHJ1ZSk7XG4gIH0pO1xuXG4gIGl0KCdmaWxlQ2hvc2VuIHJldHVybnMgZWFybHkgd2hlbiBubyBmaWxlIHByb3ZpZGVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGVkaXRvciA9IGNyZWF0ZU1vY2tFZGl0b3IoKTtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IEluc2VydEltYWdlSGFuZGxlcihlZGl0b3IsIG1vY2tOb2RlLCBtb2NrT25GaW5pc2gpO1xuICAgIGhhbmRsZXIuZmlsZUNob3NlbihudWxsKTtcbiAgICBleHBlY3QoZWRpdG9yLnZpZXcuZGlzcGF0Y2gpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KCdmaWxlQ2hvc2VuIHNhdmVzIGZpbGUgYW5kIHJlYWRzIGl0IGFzIGRhdGEgVVJMJywgKCkgPT4ge1xuICAgIGNvbnN0IGVkaXRvciA9IGNyZWF0ZU1vY2tFZGl0b3IoKTtcbiAgICBjb25zdCBtb2NrTm9kZUF0ID0gamVzdC5mbigoKSA9PiAoeyBhdHRyczoge30gfSkpO1xuICAgIGVkaXRvci5zdGF0ZS5kb2Mubm9kZUF0ID0gbW9ja05vZGVBdDtcblxuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgSW5zZXJ0SW1hZ2VIYW5kbGVyKGVkaXRvciwgbW9ja05vZGUsIG1vY2tPbkZpbmlzaCk7XG4gICAgY29uc3QgbW9ja0ZpbGUgPSBuZXcgRmlsZShbJ2NvbnRlbnQnXSwgJ3Rlc3QuanBnJywgeyB0eXBlOiAnaW1hZ2UvanBlZycgfSk7XG5cbiAgICBnbG9iYWwuRmlsZVJlYWRlciA9IGplc3QuZm4oZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5yZWFkQXNEYXRhVVJMID0gamVzdC5mbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmVzdWx0ID0gJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsYWJjMTIzJztcbiAgICAgICAgdGhpcy5vbmxvYWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaGFuZGxlci5maWxlQ2hvc2VuKG1vY2tGaWxlKTtcblxuICAgIGV4cGVjdChoYW5kbGVyLmNob3NlbkZpbGUpLnRvQmUobW9ja0ZpbGUpO1xuICB9KTtcblxuICBpdCgncHJvZ3Jlc3MgdXBkYXRlcyBub2RlIHdpdGggcGVyY2VudCcsICgpID0+IHtcbiAgICBjb25zdCBlZGl0b3IgPSBjcmVhdGVNb2NrRWRpdG9yKCk7XG4gICAgY29uc3QgbW9ja05vZGVBdCA9IGplc3QuZm4oKCkgPT4gKHsgYXR0cnM6IHt9IH0pKTtcbiAgICBlZGl0b3Iuc3RhdGUuZG9jLm5vZGVBdCA9IG1vY2tOb2RlQXQ7XG5cbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IEluc2VydEltYWdlSGFuZGxlcihlZGl0b3IsIG1vY2tOb2RlLCBtb2NrT25GaW5pc2gpO1xuICAgIGhhbmRsZXIucHJvZ3Jlc3MoNTAsIDUwMCwgMTAwMCk7XG5cbiAgICBleHBlY3QoZWRpdG9yLnZpZXcuZGlzcGF0Y2gpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgaXQoJ2dldENob3NlbkZpbGUgcmV0dXJucyB0aGUgY2hvc2VuIGZpbGUnLCAoKSA9PiB7XG4gICAgY29uc3QgZWRpdG9yID0gY3JlYXRlTW9ja0VkaXRvcigpO1xuICAgIGNvbnN0IGhhbmRsZXIgPSBuZXcgSW5zZXJ0SW1hZ2VIYW5kbGVyKGVkaXRvciwgbW9ja05vZGUsIG1vY2tPbkZpbmlzaCk7XG4gICAgY29uc3QgbW9ja0ZpbGUgPSBuZXcgRmlsZShbJ2NvbnRlbnQnXSwgJ3Rlc3QuanBnJywgeyB0eXBlOiAnaW1hZ2UvanBlZycgfSk7XG4gICAgaGFuZGxlci5jaG9zZW5GaWxlID0gbW9ja0ZpbGU7XG5cbiAgICBleHBlY3QoaGFuZGxlci5nZXRDaG9zZW5GaWxlKCkpLnRvQmUobW9ja0ZpbGUpO1xuICB9KTtcblxuICBpdCgnZ2V0Q2hvc2VuRmlsZSByZXR1cm5zIG51bGwgaW5pdGlhbGx5JywgKCkgPT4ge1xuICAgIGNvbnN0IGVkaXRvciA9IGNyZWF0ZU1vY2tFZGl0b3IoKTtcbiAgICBjb25zdCBoYW5kbGVyID0gbmV3IEluc2VydEltYWdlSGFuZGxlcihlZGl0b3IsIG1vY2tOb2RlLCBtb2NrT25GaW5pc2gpO1xuICAgIGV4cGVjdChoYW5kbGVyLmdldENob3NlbkZpbGUoKSkudG9CZU51bGwoKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsbUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBQyxRQUFRLENBQUMsb0JBQW9CLEVBQUUsWUFBTTtFQUNuQyxJQUFNQyxRQUFRLEdBQUc7SUFDZkMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNUQyxRQUFRLEVBQUU7RUFDWixDQUFDO0VBRUQsSUFBTUMsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBQTtJQUFBLE9BQVU7TUFDOUJDLEtBQUssRUFBRTtRQUNMQyxHQUFHLEVBQUU7VUFDSEMsV0FBVyxFQUFFQyxJQUFJ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LENBQUMsb0NBQW9DLEVBQUUsWUFBTTtJQUM3QyxJQUFNQyxNQUFNLEdBQUduQixnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2pDLElBQU0rQixVQUFVLEdBQUczQixJQUFJLENBQUNDLEVBQUUsQ0FBQztNQUFBLE9BQU87UUFBRVAsS0FBSyxFQUFFLENBQUM7TUFBRSxDQUFDO0lBQUEsQ0FBQyxDQUFDO0lBQ2pEcUIsTUFBTSxDQUFDbEIsS0FBSyxDQUFDQyxHQUFHLENBQUMrQixNQUFNLEdBQUdGLFVBQVU7SUFFcEMsSUFBTVgsT0FBTyxHQUFHLElBQUlDLDhCQUFrQixDQUFDRixNQUFNLEVBQUV0QixRQUFRLEVBQUVrQixZQUFZLENBQUM7SUFDdEVLLE9BQU8sQ0FBQ2lDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQztJQUUvQi9CLE1BQU0sQ0FBQ0gsTUFBTSxDQUFDTixJQUFJLENBQUNDLFFBQVEsQ0FBQyxDQUFDc0IsZ0JBQWdCLENBQUMsQ0FBQztFQUNqRCxDQUFDLENBQUM7RUFFRmxCLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxZQUFNO0lBQ2hELElBQU1DLE1BQU0sR0FBR25CLGdCQUFnQixDQUFDLENBQUM7SUFDakMsSUFBTW9CLE9BQU8sR0FBRyxJQUFJQyw4QkFBa0IsQ0FBQ0YsTUFBTSxFQUFFdEIsUUFBUSxFQUFFa0IsWUFBWSxDQUFDO0lBQ3RFLElBQU04QixRQUFRLEdBQUcsSUFBSUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsVUFBVSxFQUFFO01BQUVwQyxJQUFJLEVBQUU7SUFBYSxDQUFDLENBQUM7SUFDMUVVLE9BQU8sQ0FBQ2dDLFVBQVUsR0FBR1AsUUFBUTtJQUU3QnZCLE1BQU0sQ0FBQ0YsT0FBTyxDQUFDa0MsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDOUIsSUFBSSxDQUFDcUIsUUFBUSxDQUFDO0VBQ2hELENBQUMsQ0FBQztFQUVGM0IsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLFlBQU07SUFDL0MsSUFBTUMsTUFBTSxHQUFHbkIsZ0JBQWdCLENBQUMsQ0FBQztJQUNqQyxJQUFNb0IsT0FBTyxHQUFHLElBQUlDLDhCQUFrQixDQUFDRixNQUFNLEVBQUV0QixRQUFRLEVBQUVrQixZQUFZLENBQUM7SUFDdEVPLE1BQU0sQ0FBQ0YsT0FBTyxDQUFDa0MsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxRQUFRLENBQUMsQ0FBQztFQUM1QyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|