1 | ;
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports["default"] = void 0;
|
7 |
|
8 | var _reactMapGl = require("react-map-gl");
|
9 |
|
10 | var _react = _interopRequireWildcard(require("react"));
|
11 |
|
12 | var _editModes = require("@nebula.gl/edit-modes");
|
13 |
|
14 | var _memoize = _interopRequireDefault(require("./memoize"));
|
15 |
|
16 | var _constants = require("./constants");
|
17 |
|
18 | var _utils = require("./edit-modes/utils");
|
19 |
|
20 | var _editModes2 = require("./edit-modes");
|
21 |
|
22 | var _Object$freeze;
|
23 |
|
24 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
25 |
|
26 | function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
|
27 |
|
28 | function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
29 |
|
30 | function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
31 |
|
32 | function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
33 |
|
34 | function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
35 |
|
36 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
37 |
|
38 | function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
39 |
|
40 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
41 |
|
42 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
43 |
|
44 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
45 |
|
46 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
47 |
|
48 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
49 |
|
50 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
51 |
|
52 | function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
53 |
|
54 | var MODE_TO_HANDLER = Object.freeze((_Object$freeze = {}, _defineProperty(_Object$freeze, _constants.MODES.READ_ONLY, null), _defineProperty(_Object$freeze, _constants.MODES.SELECT, _editModes2.SelectMode), _defineProperty(_Object$freeze, _constants.MODES.EDITING, _editModes2.EditingMode), _defineProperty(_Object$freeze, _constants.MODES.DRAW_POINT, _editModes2.DrawPointMode), _defineProperty(_Object$freeze, _constants.MODES.DRAW_PATH, _editModes2.DrawLineStringMode), _defineProperty(_Object$freeze, _constants.MODES.DRAW_RECTANGLE, _editModes2.DrawRectangleMode), _defineProperty(_Object$freeze, _constants.MODES.DRAW_POLYGON, _editModes2.DrawPolygonMode), _Object$freeze));
|
55 | var defaultProps = {
|
56 | mode: _constants.MODES.READ_ONLY,
|
57 | features: null,
|
58 | onSelect: null,
|
59 | onUpdate: null
|
60 | };
|
61 | var defaultState = {
|
62 | featureCollection: new _editModes.ImmutableFeatureCollection({
|
63 | type: 'FeatureCollection',
|
64 | features: []
|
65 | }),
|
66 | selectedFeatureIndex: null,
|
67 | // index, isGuide, mapCoords, screenCoords
|
68 | hovered: null,
|
69 | isDragging: false,
|
70 | didDrag: false,
|
71 | lastPointerMoveEvent: null,
|
72 | pointerDownPicks: null,
|
73 | pointerDownScreenCoords: null,
|
74 | pointerDownMapCoords: null
|
75 | };
|
76 |
|
77 | var ModeHandler =
|
78 | /*#__PURE__*/
|
79 | function (_PureComponent) {
|
80 | _inherits(ModeHandler, _PureComponent);
|
81 |
|
82 | function ModeHandler() {
|
83 | var _this;
|
84 |
|
85 | _classCallCheck(this, ModeHandler);
|
86 |
|
87 | _this = _possibleConstructorReturn(this, _getPrototypeOf(ModeHandler).call(this));
|
88 |
|
89 | _defineProperty(_assertThisInitialized(_this), "_events", void 0);
|
90 |
|
91 | _defineProperty(_assertThisInitialized(_this), "_eventsRegistered", void 0);
|
92 |
|
93 | _defineProperty(_assertThisInitialized(_this), "_modeHandler", void 0);
|
94 |
|
95 | _defineProperty(_assertThisInitialized(_this), "_context", void 0);
|
96 |
|
97 | _defineProperty(_assertThisInitialized(_this), "_containerRef", void 0);
|
98 |
|
99 | _defineProperty(_assertThisInitialized(_this), "getFeatures", function () {
|
100 | var featureCollection = _this._getFeatureCollection();
|
101 |
|
102 | featureCollection = featureCollection && featureCollection.getObject();
|
103 | return featureCollection && featureCollection.features;
|
104 | });
|
105 |
|
106 | _defineProperty(_assertThisInitialized(_this), "addFeatures", function (features) {
|
107 | var featureCollection = _this._getFeatureCollection();
|
108 |
|
109 | if (featureCollection) {
|
110 | if (!Array.isArray(features)) {
|
111 | features = [features];
|
112 | }
|
113 |
|
114 | featureCollection = featureCollection.addFeatures(features);
|
115 |
|
116 | _this.setState({
|
117 | featureCollection: featureCollection
|
118 | });
|
119 | }
|
120 | });
|
121 |
|
122 | _defineProperty(_assertThisInitialized(_this), "deleteFeatures", function (featureIndexes) {
|
123 | var featureCollection = _this._getFeatureCollection();
|
124 |
|
125 | var selectedFeatureIndex = _this._getSelectedFeatureIndex();
|
126 |
|
127 | if (featureCollection) {
|
128 | if (!Array.isArray(featureIndexes)) {
|
129 | featureIndexes = [featureIndexes];
|
130 | }
|
131 |
|
132 | featureCollection = featureCollection.deleteFeatures(featureIndexes);
|
133 | var newState = {
|
134 | featureCollection: featureCollection
|
135 | };
|
136 |
|
137 | if (featureIndexes.findIndex(function (index) {
|
138 | return selectedFeatureIndex === index;
|
139 | }) >= 0) {
|
140 | newState.selectedFeatureIndex = null;
|
141 | }
|
142 |
|
143 | _this.setState(newState);
|
144 | }
|
145 | });
|
146 |
|
147 | _defineProperty(_assertThisInitialized(_this), "_getMemorizedFeatureCollection", (0, _memoize["default"])(function (_ref) {
|
148 | var propsFeatures = _ref.propsFeatures,
|
149 | stateFeatures = _ref.stateFeatures;
|
150 | var features = propsFeatures || stateFeatures; // Any changes in ImmutableFeatureCollection will create a new object
|
151 |
|
152 | if (features instanceof _editModes.ImmutableFeatureCollection) {
|
153 | return features;
|
154 | }
|
155 |
|
156 | if (features && features.type === 'FeatureCollection') {
|
157 | return new _editModes.ImmutableFeatureCollection({
|
158 | type: 'FeatureCollection',
|
159 | features: features.features
|
160 | });
|
161 | }
|
162 |
|
163 | return new _editModes.ImmutableFeatureCollection({
|
164 | type: 'FeatureCollection',
|
165 | features: features || []
|
166 | });
|
167 | }));
|
168 |
|
169 | _defineProperty(_assertThisInitialized(_this), "_getFeatureCollection", function () {
|
170 | return _this._getMemorizedFeatureCollection({
|
171 | propsFeatures: _this.props.features,
|
172 | stateFeatures: _this.state.featureCollection
|
173 | });
|
174 | });
|
175 |
|
176 | _defineProperty(_assertThisInitialized(_this), "_setupModeHandler", function () {
|
177 | var mode = _this.props.mode;
|
178 |
|
179 | if (!mode || mode === _constants.MODES.READ_ONLY) {
|
180 | _this._degregisterEvents();
|
181 |
|
182 | _this._modeHandler = null;
|
183 | return;
|
184 | }
|
185 |
|
186 | _this._registerEvents();
|
187 |
|
188 | var HandlerClass = MODE_TO_HANDLER[mode];
|
189 | _this._modeHandler = HandlerClass ? new HandlerClass() : null;
|
190 | });
|
191 |
|
192 | _defineProperty(_assertThisInitialized(_this), "_clearEditingState", function () {
|
193 | _this.setState({
|
194 | selectedFeatureIndex: null,
|
195 | hovered: null,
|
196 | pointerDownPicks: null,
|
197 | pointerDownScreenCoords: null,
|
198 | pointerDownMapCoords: null,
|
199 | isDragging: false,
|
200 | didDrag: false
|
201 | });
|
202 | });
|
203 |
|
204 | _defineProperty(_assertThisInitialized(_this), "_getSelectedFeatureIndex", function () {
|
205 | if ('selectedFeatureIndex' in _this.props) {
|
206 | return _this.props.selectedFeatureIndex;
|
207 | }
|
208 |
|
209 | return _this.state.selectedFeatureIndex;
|
210 | });
|
211 |
|
212 | _defineProperty(_assertThisInitialized(_this), "_getSelectedFeature", function (featureIndex) {
|
213 | var features = _this.getFeatures();
|
214 |
|
215 | featureIndex = (0, _utils.isNumeric)(featureIndex) ? featureIndex : _this._getSelectedFeatureIndex();
|
216 | return features[featureIndex];
|
217 | });
|
218 |
|
219 | _defineProperty(_assertThisInitialized(_this), "_onSelect", function (selected) {
|
220 | _this.setState({
|
221 | selectedFeatureIndex: selected && selected.selectedFeatureIndex
|
222 | });
|
223 |
|
224 | if (_this.props.onSelect) {
|
225 | _this.props.onSelect(selected);
|
226 | }
|
227 | });
|
228 |
|
229 | _defineProperty(_assertThisInitialized(_this), "_onUpdate", function (editAction, isInternal) {
|
230 | var editType = editAction.editType,
|
231 | updatedData = editAction.updatedData,
|
232 | editContext = editAction.editContext;
|
233 |
|
234 | _this.setState({
|
235 | featureCollection: new _editModes.ImmutableFeatureCollection(updatedData)
|
236 | });
|
237 |
|
238 | if (_this.props.onUpdate && !isInternal) {
|
239 | _this.props.onUpdate({
|
240 | data: updatedData && updatedData.features,
|
241 | editType: editType,
|
242 | editContext: editContext
|
243 | });
|
244 | }
|
245 | });
|
246 |
|
247 | _defineProperty(_assertThisInitialized(_this), "_onEdit", function (editAction) {
|
248 | var mode = _this.props.mode;
|
249 | var editType = editAction.editType,
|
250 | updatedData = editAction.updatedData;
|
251 |
|
252 | switch (editType) {
|
253 | case _constants.EDIT_TYPE.MOVE_POSITION:
|
254 | // intermediate feature, do not need forward to application
|
255 | // only need update editor internal state
|
256 | _this._onUpdate(editAction, true);
|
257 |
|
258 | break;
|
259 |
|
260 | case _constants.EDIT_TYPE.ADD_FEATURE:
|
261 | _this._onUpdate(editAction);
|
262 |
|
263 | if (mode === _constants.MODES.DRAW_PATH) {
|
264 | var context = editAction.editContext && editAction.editContext[0] || {};
|
265 | var screenCoords = context.screenCoords,
|
266 | mapCoords = context.mapCoords;
|
267 | var featureIndex = updatedData.features.length - 1;
|
268 |
|
269 | var selectedFeature = _this._getSelectedFeature(featureIndex);
|
270 |
|
271 | _this._onSelect({
|
272 | selectedFeature: selectedFeature,
|
273 | selectedFeatureIndex: featureIndex,
|
274 | selectedEditHandleIndex: null,
|
275 | screenCoords: screenCoords,
|
276 | mapCoords: mapCoords
|
277 | });
|
278 | }
|
279 |
|
280 | break;
|
281 |
|
282 | case _constants.EDIT_TYPE.ADD_POSITION:
|
283 | case _constants.EDIT_TYPE.REMOVE_POSITION:
|
284 | case _constants.EDIT_TYPE.FINISH_MOVE_POSITION:
|
285 | _this._onUpdate(editAction);
|
286 |
|
287 | break;
|
288 |
|
289 | default:
|
290 | }
|
291 | });
|
292 |
|
293 | _defineProperty(_assertThisInitialized(_this), "_degregisterEvents", function () {
|
294 | var eventManager = _this._context && _this._context.eventManager;
|
295 |
|
296 | if (!_this._events || !eventManager) {
|
297 | return;
|
298 | }
|
299 |
|
300 | if (_this._eventsRegistered) {
|
301 | eventManager.off(_this._events);
|
302 | _this._eventsRegistered = false;
|
303 | }
|
304 | });
|
305 |
|
306 | _defineProperty(_assertThisInitialized(_this), "_registerEvents", function () {
|
307 | var ref = _this._containerRef;
|
308 | var eventManager = _this._context && _this._context.eventManager;
|
309 |
|
310 | if (!_this._events || !ref || !eventManager) {
|
311 | return;
|
312 | }
|
313 |
|
314 | if (_this._eventsRegistered) {
|
315 | return;
|
316 | }
|
317 |
|
318 | eventManager.on(_this._events, ref);
|
319 | _this._eventsRegistered = true;
|
320 | });
|
321 |
|
322 | _defineProperty(_assertThisInitialized(_this), "_onEvent", function (handler, evt, stopPropagation) {
|
323 | var event = _this._getEvent(evt);
|
324 |
|
325 | handler(event);
|
326 |
|
327 | if (stopPropagation) {
|
328 | evt.stopImmediatePropagation();
|
329 | }
|
330 | });
|
331 |
|
332 | _defineProperty(_assertThisInitialized(_this), "_onClick", function (event) {
|
333 | var mode = _this.props.mode;
|
334 |
|
335 | if (mode === _constants.MODES.SELECT || mode === _constants.MODES.EDITING) {
|
336 | var mapCoords = event.mapCoords,
|
337 | screenCoords = event.screenCoords;
|
338 | var pickedObject = event.picks && event.picks[0] && event.picks[0].object;
|
339 |
|
340 | if (pickedObject && (0, _utils.isNumeric)(pickedObject.featureIndex)) {
|
341 | var selectedFeatureIndex = pickedObject.featureIndex;
|
342 |
|
343 | var selectedFeature = _this._getSelectedFeature(selectedFeatureIndex);
|
344 |
|
345 | _this._onSelect({
|
346 | selectedFeature: selectedFeature,
|
347 | selectedFeatureIndex: selectedFeatureIndex,
|
348 | selectedEditHandleIndex: pickedObject.type === _constants.ELEMENT_TYPE.EDIT_HANDLE ? pickedObject.index : null,
|
349 | mapCoords: mapCoords,
|
350 | screenCoords: screenCoords
|
351 | });
|
352 | } else {
|
353 | _this._onSelect({
|
354 | selectedFeature: null,
|
355 | selectedFeatureIndex: null,
|
356 | selectedEditHandleIndex: null,
|
357 | mapCoords: mapCoords,
|
358 | screenCoords: screenCoords
|
359 | });
|
360 | }
|
361 | }
|
362 |
|
363 | var modeProps = _this.getModeProps();
|
364 |
|
365 | _this._modeHandler.handleClick(event, modeProps);
|
366 | });
|
367 |
|
368 | _defineProperty(_assertThisInitialized(_this), "_onPointerMove", function (event) {
|
369 | // hovering
|
370 | var hovered = _this._getHoverState(event);
|
371 |
|
372 | var _this$state = _this.state,
|
373 | isDragging = _this$state.isDragging,
|
374 | didDrag = _this$state.didDrag,
|
375 | pointerDownPicks = _this$state.pointerDownPicks,
|
376 | pointerDownScreenCoords = _this$state.pointerDownScreenCoords,
|
377 | pointerDownMapCoords = _this$state.pointerDownMapCoords;
|
378 |
|
379 | if (isDragging && !didDrag && pointerDownScreenCoords) {
|
380 | var dx = event.screenCoords[0] - pointerDownScreenCoords[0];
|
381 | var dy = event.screenCoords[1] - pointerDownScreenCoords[1];
|
382 |
|
383 | if (dx * dx + dy * dy > 5) {
|
384 | _this.setState({
|
385 | didDrag: true
|
386 | });
|
387 | }
|
388 | }
|
389 |
|
390 | var pointerMoveEvent = _objectSpread({}, event, {
|
391 | isDragging: isDragging,
|
392 | pointerDownPicks: pointerDownPicks,
|
393 | pointerDownScreenCoords: pointerDownScreenCoords,
|
394 | pointerDownMapCoords: pointerDownMapCoords
|
395 | });
|
396 |
|
397 | if (_this.state.didDrag) {
|
398 | var modeProps = _this.getModeProps();
|
399 |
|
400 | _this._modeHandler.handlePointerMove(pointerMoveEvent, modeProps);
|
401 | }
|
402 |
|
403 | _this.setState({
|
404 | hovered: hovered,
|
405 | lastPointerMoveEvent: pointerMoveEvent
|
406 | });
|
407 | });
|
408 |
|
409 | _defineProperty(_assertThisInitialized(_this), "_onPointerDown", function (event) {
|
410 | var pickedObject = event.picks && event.picks[0] && event.picks[0].object;
|
411 |
|
412 | var startDraggingEvent = _objectSpread({}, event, {
|
413 | pointerDownScreenCoords: event.screenCoords,
|
414 | pointerDownMapCoords: event.mapCoords
|
415 | });
|
416 |
|
417 | var newState = {
|
418 | isDragging: pickedObject && (0, _utils.isNumeric)(pickedObject.featureIndex),
|
419 | pointerDownPicks: event.picks,
|
420 | pointerDownScreenCoords: event.screenCoords,
|
421 | pointerDownMapCoords: event.mapCoords
|
422 | };
|
423 |
|
424 | _this.setState(newState);
|
425 |
|
426 | var modeProps = _this.getModeProps();
|
427 |
|
428 | _this._modeHandler.handleStartDragging(startDraggingEvent, modeProps);
|
429 | });
|
430 |
|
431 | _defineProperty(_assertThisInitialized(_this), "_onPointerUp", function (event) {
|
432 | var stopDraggingEvent = _objectSpread({}, event, {
|
433 | pointerDownScreenCoords: _this.state.pointerDownScreenCoords,
|
434 | pointerDownMapCoords: _this.state.pointerDownMapCoords
|
435 | });
|
436 |
|
437 | var newState = {
|
438 | isDragging: false,
|
439 | didDrag: false,
|
440 | pointerDownPicks: null,
|
441 | pointerDownScreenCoords: null,
|
442 | pointerDownMapCoords: null
|
443 | };
|
444 |
|
445 | _this.setState(newState);
|
446 |
|
447 | var modeProps = _this.getModeProps();
|
448 |
|
449 | _this._modeHandler.handleStopDragging(stopDraggingEvent, modeProps);
|
450 | });
|
451 |
|
452 | _defineProperty(_assertThisInitialized(_this), "_onPan", function (event) {
|
453 | var isDragging = _this.state.isDragging;
|
454 |
|
455 | if (isDragging) {
|
456 | event.sourceEvent.stopImmediatePropagation();
|
457 | }
|
458 | });
|
459 |
|
460 | _defineProperty(_assertThisInitialized(_this), "project", function (pt) {
|
461 | var viewport = _this._context && _this._context.viewport;
|
462 | return viewport && viewport.project(pt);
|
463 | });
|
464 |
|
465 | _defineProperty(_assertThisInitialized(_this), "unproject", function (pt) {
|
466 | var viewport = _this._context && _this._context.viewport;
|
467 | return viewport && viewport.unproject(pt);
|
468 | });
|
469 |
|
470 | _defineProperty(_assertThisInitialized(_this), "_getHoverState", function (event) {
|
471 | var object = event.picks && event.picks[0] && event.picks[0].object;
|
472 |
|
473 | if (!object) {
|
474 | return null;
|
475 | }
|
476 |
|
477 | return _objectSpread({
|
478 | screenCoords: event.screenCoords,
|
479 | mapCoords: event.mapCoords
|
480 | }, object);
|
481 | });
|
482 |
|
483 | _this.state = defaultState;
|
484 | _this._eventsRegistered = false;
|
485 | _this._events = {
|
486 | anyclick: function anyclick(evt) {
|
487 | return _this._onEvent(_this._onClick, evt, true);
|
488 | },
|
489 | click: function click(evt) {
|
490 | return evt.stopImmediatePropagation();
|
491 | },
|
492 | pointermove: function pointermove(evt) {
|
493 | return _this._onEvent(_this._onPointerMove, evt, true);
|
494 | },
|
495 | pointerdown: function pointerdown(evt) {
|
496 | return _this._onEvent(_this._onPointerDown, evt, true);
|
497 | },
|
498 | pointerup: function pointerup(evt) {
|
499 | return _this._onEvent(_this._onPointerUp, evt, true);
|
500 | },
|
501 | panmove: function panmove(evt) {
|
502 | return _this._onEvent(_this._onPan, evt, false);
|
503 | },
|
504 | panstart: function panstart(evt) {
|
505 | return _this._onEvent(_this._onPan, evt, false);
|
506 | },
|
507 | panend: function panend(evt) {
|
508 | return _this._onEvent(_this._onPan, evt, false);
|
509 | }
|
510 | };
|
511 | return _this;
|
512 | }
|
513 |
|
514 | _createClass(ModeHandler, [{
|
515 | key: "componentDidMount",
|
516 | value: function componentDidMount() {
|
517 | this._setupModeHandler();
|
518 | }
|
519 | }, {
|
520 | key: "componentDidUpdate",
|
521 | value: function componentDidUpdate(prevProps) {
|
522 | if (prevProps.mode !== this.props.mode) {
|
523 | this._clearEditingState();
|
524 |
|
525 | this._setupModeHandler();
|
526 | }
|
527 | }
|
528 | }, {
|
529 | key: "componentWillUnmount",
|
530 | value: function componentWillUnmount() {
|
531 | this._degregisterEvents();
|
532 | }
|
533 | }, {
|
534 | key: "getModeProps",
|
535 | value: function getModeProps() {
|
536 | var featureCollection = this._getFeatureCollection();
|
537 |
|
538 | var lastPointerMoveEvent = this.state.lastPointerMoveEvent;
|
539 |
|
540 | var selectedFeatureIndex = this._getSelectedFeatureIndex();
|
541 |
|
542 | var viewport = this._context && this._context.viewport;
|
543 | return {
|
544 | data: featureCollection,
|
545 | selectedIndexes: [selectedFeatureIndex],
|
546 | lastPointerMoveEvent: lastPointerMoveEvent,
|
547 | viewport: viewport,
|
548 | onEdit: this._onEdit
|
549 | };
|
550 | }
|
551 | /* MEMORIZERS */
|
552 |
|
553 | }, {
|
554 | key: "_getEvent",
|
555 | value: function _getEvent(evt) {
|
556 | var picked = (0, _utils.parseEventElement)(evt);
|
557 | var screenCoords = (0, _utils.getScreenCoords)(evt);
|
558 | var mapCoords = this.unproject(screenCoords);
|
559 | return {
|
560 | picks: picked ? [picked] : null,
|
561 | screenCoords: screenCoords,
|
562 | mapCoords: mapCoords,
|
563 | sourceEvent: evt
|
564 | };
|
565 | }
|
566 | }, {
|
567 | key: "_isDrawing",
|
568 | value: function _isDrawing() {
|
569 | var mode = this.props.mode;
|
570 | return _constants.DRAWING_MODE.findIndex(function (m) {
|
571 | return m === mode;
|
572 | }) >= 0;
|
573 | }
|
574 | }, {
|
575 | key: "render",
|
576 | value: function render(child) {
|
577 | var _this2 = this;
|
578 |
|
579 | return _react["default"].createElement(_reactMapGl._MapContext.Consumer, null, function (context) {
|
580 | _this2._context = context;
|
581 | var viewport = context && context.viewport;
|
582 |
|
583 | if (!viewport || viewport.height <= 0 || viewport.width <= 0) {
|
584 | return null;
|
585 | }
|
586 |
|
587 | return child;
|
588 | });
|
589 | }
|
590 | }]);
|
591 |
|
592 | return ModeHandler;
|
593 | }(_react.PureComponent);
|
594 |
|
595 | exports["default"] = ModeHandler;
|
596 |
|
597 | _defineProperty(ModeHandler, "defaultProps", defaultProps);
|
598 |
|
599 | ModeHandler.displayName = 'ModeHandler';
|
600 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tb2RlLWhhbmRsZXIuanMiXSwibmFtZXMiOlsiTU9ERV9UT19IQU5ETEVSIiwiT2JqZWN0IiwiZnJlZXplIiwiTU9ERVMiLCJSRUFEX09OTFkiLCJTRUxFQ1QiLCJTZWxlY3RNb2RlIiwiRURJVElORyIsIkVkaXRpbmdNb2RlIiwiRFJBV19QT0lOVCIsIkRyYXdQb2ludE1vZGUiLCJEUkFXX1BBVEgiLCJEcmF3TGluZVN0cmluZ01vZGUiLCJEUkFXX1JFQ1RBTkdMRSIsIkRyYXdSZWN0YW5nbGVNb2RlIiwiRFJBV19QT0xZR09OIiwiRHJhd1BvbHlnb25Nb2RlIiwiZGVmYXVsdFByb3BzIiwibW9kZSIsImZlYXR1cmVzIiwib25TZWxlY3QiLCJvblVwZGF0ZSIsImRlZmF1bHRTdGF0ZSIsImZlYXR1cmVDb2xsZWN0aW9uIiwiSW1tdXRhYmxlRmVhdHVyZUNvbGxlY3Rpb24iLCJ0eXBlIiwic2VsZWN0ZWRGZWF0dXJlSW5kZXgiLCJob3ZlcmVkIiwiaXNEcmFnZ2luZyIsImRpZERyYWciLCJsYXN0UG9pbnRlck1vdmVFdmVudCIsInBvaW50ZXJEb3duUGlja3MiLCJwb2ludGVyRG93blNjcmVlbkNvb3JkcyIsInBvaW50ZXJEb3duTWFwQ29vcmRzIiwiTW9kZUhhbmRsZXIiLCJfZ2V0RmVhdHVyZUNvbGxlY3Rpb24iLCJnZXRPYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJhZGRGZWF0dXJlcyIsInNldFN0YXRlIiwiZmVhdHVyZUluZGV4ZXMiLCJfZ2V0U2VsZWN0ZWRGZWF0dXJlSW5kZXgiLCJkZWxldGVGZWF0dXJlcyIsIm5ld1N0YXRlIiwiZmluZEluZGV4IiwiaW5kZXgiLCJwcm9wc0ZlYXR1cmVzIiwic3RhdGVGZWF0dXJlcyIsIl9nZXRNZW1vcml6ZWRGZWF0dXJlQ29sbGVjdGlvbiIsInByb3BzIiwic3RhdGUiLCJfZGVncmVnaXN0ZXJFdmVudHMiLCJfbW9kZUhhbmRsZXIiLCJfcmVnaXN0ZXJFdmVudHMiLCJIYW5kbGVyQ2xhc3MiLCJmZWF0dXJlSW5kZXgiLCJnZXRGZWF0dXJlcyIsInNlbGVjdGVkIiwiZWRpdEFjdGlvbiIsImlzSW50ZXJuYWwiLCJlZGl0VHlwZSIsInVwZGF0ZWREYXRhIiwiZWRpdENvbnRleHQiLCJkYXRhIiwiRURJVF9UWVBFIiwiTU9WRV9QT1NJVElPTiIsIl9vblVwZGF0ZSIsIkFERF9GRUFUVVJFIiwiY29udGV4dCIsInNjcmVlbkNvb3JkcyIsIm1hcENvb3JkcyIsImxlbmd0aCIsInNlbGVjdGVkRmVhdHVyZSIsIl9nZXRTZWxlY3RlZEZlYXR1cmUiLCJfb25TZWxlY3QiLCJzZWxlY3RlZEVkaXRIYW5kbGVJbmRleCIsIkFERF9QT1NJVElPTiIsIlJFTU9WRV9QT1NJVElPTiIsIkZJTklTSF9NT1ZFX1BPU0lUSU9OIiwiZXZlbnRNYW5hZ2VyIiwiX2NvbnRleHQiLCJfZXZlbnRzIiwiX2V2ZW50c1JlZ2lzdGVyZWQiLCJvZmYiLCJyZWYiLCJfY29udGFpbmVyUmVmIiwib24iLCJoYW5kbGVyIiwiZXZ0Iiwic3RvcFByb3BhZ2F0aW9uIiwiZXZlbnQiLCJfZ2V0RXZlbnQiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJwaWNrZWRPYmplY3QiLCJwaWNrcyIsIm9iamVjdCIsIkVMRU1FTlRfVFlQRSIsIkVESVRfSEFORExFIiwibW9kZVByb3BzIiwiZ2V0TW9kZVByb3BzIiwiaGFuZGxlQ2xpY2siLCJfZ2V0SG92ZXJTdGF0ZSIsImR4IiwiZHkiLCJwb2ludGVyTW92ZUV2ZW50IiwiaGFuZGxlUG9pbnRlck1vdmUiLCJzdGFydERyYWdnaW5nRXZlbnQiLCJoYW5kbGVTdGFydERyYWdnaW5nIiwic3RvcERyYWdnaW5nRXZlbnQiLCJoYW5kbGVTdG9wRHJhZ2dpbmciLCJzb3VyY2VFdmVudCIsInB0Iiwidmlld3BvcnQiLCJwcm9qZWN0IiwidW5wcm9qZWN0IiwiYW55Y2xpY2siLCJfb25FdmVudCIsIl9vbkNsaWNrIiwiY2xpY2siLCJwb2ludGVybW92ZSIsIl9vblBvaW50ZXJNb3ZlIiwicG9pbnRlcmRvd24iLCJfb25Qb2ludGVyRG93biIsInBvaW50ZXJ1cCIsIl9vblBvaW50ZXJVcCIsInBhbm1vdmUiLCJfb25QYW4iLCJwYW5zdGFydCIsInBhbmVuZCIsIl9zZXR1cE1vZGVIYW5kbGVyIiwicHJldlByb3BzIiwiX2NsZWFyRWRpdGluZ1N0YXRlIiwic2VsZWN0ZWRJbmRleGVzIiwib25FZGl0IiwiX29uRWRpdCIsInBpY2tlZCIsIkRSQVdJTkdfTU9ERSIsIm0iLCJjaGlsZCIsImhlaWdodCIsIndpZHRoIiwiUHVyZUNvbXBvbmVudCIsImRpc3BsYXlOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBS0E7O0FBRUE7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTQSxJQUFNQSxlQUFlLEdBQUdDLE1BQU0sQ0FBQ0MsTUFBUCx1REFDckJDLGlCQUFNQyxTQURlLEVBQ0gsSUFERyxtQ0FFckJELGlCQUFNRSxNQUZlLEVBRU5DLHNCQUZNLG1DQUdyQkgsaUJBQU1JLE9BSGUsRUFHTEMsdUJBSEssbUNBSXJCTCxpQkFBTU0sVUFKZSxFQUlGQyx5QkFKRSxtQ0FLckJQLGlCQUFNUSxTQUxlLEVBS0hDLDhCQUxHLG1DQU1yQlQsaUJBQU1VLGNBTmUsRUFNRUMsNkJBTkYsbUNBT3JCWCxpQkFBTVksWUFQZSxFQU9BQywyQkFQQSxtQkFBeEI7QUFVQSxJQUFNQyxZQUFZLEdBQUc7QUFDbkJDLEVBQUFBLElBQUksRUFBRWYsaUJBQU1DLFNBRE87QUFFbkJlLEVBQUFBLFFBQVEsRUFBRSxJQUZTO0FBR25CQyxFQUFBQSxRQUFRLEVBQUUsSUFIUztBQUluQkMsRUFBQUEsUUFBUSxFQUFFO0FBSlMsQ0FBckI7QUFPQSxJQUFNQyxZQUFZLEdBQUc7QUFDbkJDLEVBQUFBLGlCQUFpQixFQUFFLElBQUlDLHFDQUFKLENBQStCO0FBQ2hEQyxJQUFBQSxJQUFJLEVBQUUsbUJBRDBDO0FBRWhETixJQUFBQSxRQUFRLEVBQUU7QUFGc0MsR0FBL0Is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QUFDQSxZQUFNNEMsUUFBUSxHQUFHNUMsT0FBTyxJQUFJQSxPQUFPLENBQUM0QyxRQUFwQzs7QUFFQSxZQUFJLENBQUNBLFFBQUQsSUFBYUEsUUFBUSxDQUFDMkIsTUFBVCxJQUFtQixDQUFoQyxJQUFxQzNCLFFBQVEsQ0FBQzRCLEtBQVQsSUFBa0IsQ0FBM0QsRUFBOEQ7QUFDNUQsaUJBQU8sSUFBUDtBQUNEOztBQUVELGVBQU9GLEtBQVA7QUFDRCxPQVZILENBREY7QUFjRDs7OztFQTlhc0NHLG9COzs7O2dCQUFwQjVHLFcsa0JBQ0dqQixZOztBQWdieEJpQixXQUFXLENBQUM2RyxXQUFaLEdBQTBCLGFBQTFCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcbmltcG9ydCB7IF9NYXBDb250ZXh0IGFzIE1hcENvbnRleHQgfSBmcm9tICdyZWFjdC1tYXAtZ2wnO1xuaW1wb3J0IFJlYWN0LCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJbW11dGFibGVGZWF0dXJlQ29sbGVjdGlvbiB9IGZyb20gJ0BuZWJ1bGEuZ2wvZWRpdC1tb2Rlcyc7XG5cbmltcG9ydCB0eXBlIHsgRmVhdHVyZSwgUG9zaXRpb24sIEVkaXRBY3Rpb24gfSBmcm9tICdAbmVidWxhLmdsL2VkaXQtbW9kZXMnO1xuaW1wb3J0IHR5cGUgeyBNam9sbmlyRXZlbnQgfSBmcm9tICdtam9sbmlyLmpzJztcbmltcG9ydCB0eXBlIHsgQmFzZUV2ZW50LCBFZGl0b3JQcm9wcywgRWRpdG9yU3RhdGUsIFNlbGVjdEFjdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnLi9tZW1vaXplJztcblxuaW1wb3J0IHsgRFJBV0lOR19NT0RFLCBFRElUX1RZUEUsIEVMRU1FTlRfVFlQRSwgTU9ERVMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBnZXRTY3JlZW5Db29yZHMsIGlzTnVtZXJpYywgcGFyc2VFdmVudEVsZW1lbnQgfSBmcm9tICcuL2VkaXQtbW9kZXMvdXRpbHMnO1xuaW1wb3J0IHtcbiAgU2VsZWN0TW9kZSxcbiAgRWRpdGluZ01vZGUsXG4gIERyYXdQb2ludE1vZGUsXG4gIERyYXdMaW5lU3RyaW5nTW9kZSxcbiAgRHJhd1JlY3RhbmdsZU1vZGUsXG4gIERyYXdQb2x5Z29uTW9kZVxufSBmcm9tICcuL2VkaXQtbW9kZXMnO1xuXG5jb25zdCBNT0RFX1RPX0hBTkRMRVIgPSBPYmplY3QuZnJlZXplKHtcbiAgW01PREVTLlJFQURfT05MWV06IG51bGwsXG4gIFtNT0RFUy5TRUxFQ1RdOiBTZWxlY3RNb2RlLFxuICBbTU9ERVMuRURJVElOR106IEVkaXRpbmdNb2RlLFxuICBbTU9ERVMuRFJBV19QT0lOVF06IERyYXdQb2ludE1vZGUsXG4gIFtNT0RFUy5EUkFXX1BBVEhdOiBEcmF3TGluZVN0cmluZ01vZGUsXG4gIFtNT0RFUy5EUkFXX1JFQ1RBTkdMRV06IERyYXdSZWN0YW5nbGVNb2RlLFxuICBbTU9ERVMuRFJBV19QT0xZR09OXTogRHJhd1BvbHlnb25Nb2RlXG59KTtcblxuY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICBtb2RlOiBNT0RFUy5SRUFEX09OTFksXG4gIGZlYXR1cmVzOiBudWxsLFxuICBvblNlbGVjdDogbnVsbCxcbiAgb25VcGRhdGU6IG51bGxcbn07XG5cbmNvbnN0IGRlZmF1bHRTdGF0ZSA9IHtcbiAgZmVhdHVyZUNvbGxlY3Rpb246IG5ldyBJbW11dGFibGVGZWF0dXJlQ29sbGVjdGlvbih7XG4gICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICBmZWF0dXJlczogW11cbiAgfSksXG5cbiAgc2VsZWN0ZWRGZWF0dXJlSW5kZXg6IG51bGwsXG5cbiAgLy8gaW5kZXgsIGlzR3VpZGUsIG1hcENvb3Jkcywgc2NyZWVuQ29vcmRzXG4gIGhvdmVyZWQ6IG51bGwsXG5cbiAgaXNEcmFnZ2luZzogZmFsc2UsXG4gIGRpZERyYWc6IGZhbHNlLFxuXG4gIGxhc3RQb2ludGVyTW92ZUV2ZW50OiBudWxsLFxuXG4gIHBvaW50ZXJEb3duUGlja3M6IG51bGwsXG4gIHBvaW50ZXJEb3duU2NyZWVuQ29vcmRzOiBudWxsLFxuICBwb2ludGVyRG93bk1hcENvb3JkczogbnVsbFxufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9kZUhhbmRsZXIgZXh0ZW5kcyBQdXJlQ29tcG9uZW50PEVkaXRvclByb3BzLCBFZGl0b3JTdGF0ZT4ge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zdGF0ZSA9IGRlZmF1bHRTdGF0ZTtcbiAgICB0aGlzLl9ldmVudHNSZWdpc3RlcmVkID0gZmFsc2U7XG5cbiAgICB0aGlzLl9ldmVudHMgPSB7XG4gICAgICBhbnljbGljazogZXZ0ID0+IHRoaXMuX29uRXZlbnQodGhpcy5fb25DbGljaywgZXZ0LCB0cnVlKSxcbiAgICAgIGNsaWNrOiBldnQgPT4gZXZ0LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLFxuICAgICAgcG9pbnRlcm1vdmU6IGV2dCA9PiB0aGlzLl9vbkV2ZW50KHRoaXMuX29uUG9pbnRlck1vdmUsIGV2dCwgdHJ1ZSksXG4gICAgICBwb2ludGVyZG93bjogZXZ0ID0+IHRoaXMuX29uRXZlbnQodGhpcy5fb25Qb2ludGVyRG93biwgZXZ0LCB0cnVlKSxcbiAgICAgIHBvaW50ZXJ1cDogZXZ0ID0+IHRoaXMuX29uRXZlbnQodGhpcy5fb25Qb2ludGVyVXAsIGV2dCwgdHJ1ZSksXG4gICAgICBwYW5tb3ZlOiBldnQgPT4gdGhpcy5fb25FdmVudCh0aGlzLl9vblBhbiwgZXZ0LCBmYWxzZSksXG4gICAgICBwYW5zdGFydDogZXZ0ID0+IHRoaXMuX29uRXZlbnQodGhpcy5fb25QYW4sIGV2dCwgZmFsc2UpLFxuICAgICAgcGFuZW5kOiBldnQgPT4gdGhpcy5fb25FdmVudCh0aGlzLl9vblBhbiwgZXZ0LCBmYWxzZSlcbiAgICB9O1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5fc2V0dXBNb2RlSGFuZGxlcigpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogRWRpdG9yUHJvcHMpIHtcbiAgICBpZiAocHJldlByb3BzLm1vZGUgIT09IHRoaXMucHJvcHMubW9kZSkge1xuICAgICAgdGhpcy5fY2xlYXJFZGl0aW5nU3RhdGUoKTtcbiAgICAgIHRoaXMuX3NldHVwTW9kZUhhbmRsZXIoKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLl9kZWdyZWdpc3RlckV2ZW50cygpO1xuICB9XG5cbiAgX2V2ZW50czogYW55O1xuICBfZXZlbnRzUmVnaXN0ZXJlZDogYm9vbGVhbjtcbiAgX21vZGVIYW5kbGVyOiBhbnk7XG4gIF9jb250ZXh0OiA/TWFwQ29udGV4dDtcbiAgX2NvbnRhaW5lclJlZjogP0hUTUxFbGVtZW50O1xuXG4gIGdldEZlYXR1cmVzID0gKCkgPT4ge1xuICAgIGxldCBmZWF0dXJlQ29sbGVjdGlvbiA9IHRoaXMuX2dldEZlYXR1cmVDb2xsZWN0aW9uKCk7XG4gICAgZmVhdHVyZUNvbGxlY3Rpb24gPSBmZWF0dXJlQ29sbGVjdGlvbiAmJiBmZWF0dXJlQ29sbGVjdGlvbi5nZXRPYmplY3QoKTtcbiAgICByZXR1cm4gZmVhdHVyZUNvbGxlY3Rpb24gJiYgZmVhdHVyZUNvbGxlY3Rpb24uZmVhdHVyZXM7XG4gIH07XG5cbiAgYWRkRmVhdHVyZXMgPSAoZmVhdHVyZXM6IEZlYXR1cmUgfCBGZWF0dXJlW10pID0+IHtcbiAgICBsZXQgZmVhdHVyZUNvbGxlY3Rpb24gPSB0aGlzLl9nZXRGZWF0dXJlQ29sbGVjdGlvbigpO1xuICAgIGlmIChmZWF0dXJlQ29sbGVjdGlvbikge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZlYXR1cmVzKSkge1xuICAgICAgICBmZWF0dXJlcyA9IFtmZWF0dXJlc107XG4gICAgICB9XG5cbiAgICAgIGZlYXR1cmVDb2xsZWN0aW9uID0gZmVhdHVyZUNvbGxlY3Rpb24uYWRkRmVhdHVyZXMoZmVhdHVyZXMpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGZlYXR1cmVDb2xsZWN0aW9uIH0pO1xuICAgIH1cbiAgfTtcblxuICBkZWxldGVGZWF0dXJlcyA9IChmZWF0dXJlSW5kZXhlczogbnVtYmVyIHwgbnVtYmVyW10pID0+IHtcbiAgICBsZXQgZmVhdHVyZUNvbGxlY3Rpb24gPSB0aGlzLl9nZXRGZWF0dXJlQ29sbGVjdGlvbigpO1xuICAgIGNvbnN0IHNlbGVjdGVkRmVhdHVyZUluZGV4ID0gdGhpcy5fZ2V0U2VsZWN0ZWRGZWF0dXJlSW5kZXgoKTtcbiAgICBpZiAoZmVhdHVyZUNvbGxlY3Rpb24pIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShmZWF0dXJlSW5kZXhlcykpIHtcbiAgICAgICAgZmVhdHVyZUluZGV4ZXMgPSBbZmVhdHVyZUluZGV4ZXNdO1xuICAgICAgfVxuICAgICAgZmVhdHVyZUNvbGxlY3Rpb24gPSBmZWF0dXJlQ29sbGVjdGlvbi5kZWxldGVGZWF0dXJlcyhmZWF0dXJlSW5kZXhlcyk7XG4gICAgICBjb25zdCBuZXdTdGF0ZTogYW55ID0geyBmZWF0dXJlQ29sbGVjdGlvbiB9O1xuICAgICAgaWYgKGZlYXR1cmVJbmRleGVzLmZpbmRJbmRleChpbmRleCA9PiBzZWxlY3RlZEZlYXR1cmVJbmRleCA9PT0gaW5kZXgpID49IDApIHtcbiAgICAgICAgbmV3U3RhdGUuc2VsZWN0ZWRGZWF0dXJlSW5kZXggPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIGdldE1vZGVQcm9wcygpIHtcbiAgICBjb25zdCBmZWF0dXJlQ29sbGVjdGlvbiA9IHRoaXMuX2dldEZlYXR1cmVDb2xsZWN0aW9uKCk7XG5cbiAgICBjb25zdCB7IGxhc3RQb2ludGVyTW92ZUV2ZW50IH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHNlbGVjdGVkRmVhdHVyZUluZGV4ID0gdGhpcy5fZ2V0U2VsZWN0ZWRGZWF0dXJlSW5kZXgoKTtcbiAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuX2NvbnRleHQgJiYgdGhpcy5fY29udGV4dC52aWV3cG9ydDtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiBmZWF0dXJlQ29sbGVjdGlvbixcbiAgICAgIHNlbGVjdGVkSW5kZXhlczogW3NlbGVjdGVkRmVhdHVyZUluZGV4XSxcbiAgICAgIGxhc3RQb2ludGVyTW92ZUV2ZW50LFxuICAgICAgdmlld3BvcnQsXG4gICAgICBvbkVkaXQ6IHRoaXMuX29uRWRpdFxuICAgIH07XG4gIH1cblxuICAvKiBNRU1PUklaRVJTICovXG4gIF9nZXRNZW1vcml6ZWRGZWF0dXJlQ29sbGVjdGlvbiA9IG1lbW9pemUoKHsgcHJvcHNGZWF0dXJlcywgc3RhdGVGZWF0dXJlcyB9OiBhbnkpID0+IHtcbiAgICBjb25zdCBmZWF0dXJlcyA9IHByb3BzRmVhdHVyZXMgfHwgc3RhdGVGZWF0dXJlcztcbiAgICAvLyBBbnkgY2hhbmdlcyBpbiBJbW11dGFibGVGZWF0dXJlQ29sbGVjdGlvbiB3aWxsIGNyZWF0ZSBhIG5ldyBvYmplY3RcbiAgICBpZiAoZmVhdHVyZXMgaW5zdGFuY2VvZiBJbW11dGFibGVGZWF0dXJlQ29sbGVjdGlvbikge1xuICAgICAgcmV0dXJuIGZlYXR1cmVzO1xuICAgIH1cblxuICAgIGlmIChmZWF0dXJlcyAmJiBmZWF0dXJlcy50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICByZXR1cm4gbmV3IEltbXV0YWJsZUZlYXR1cmVDb2xsZWN0aW9uKHtcbiAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgZmVhdHVyZXM6IGZlYXR1cmVzLmZlYXR1cmVzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltbXV0YWJsZUZlYXR1cmVDb2xsZWN0aW9uKHtcbiAgICAgIHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICBmZWF0dXJlczogZmVhdHVyZXMgfHwgW11cbiAgICB9KTtcbiAgfSk7XG5cbiAgX2dldEZlYXR1cmVDb2xsZWN0aW9uID0gKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLl9nZXRNZW1vcml6ZWRGZWF0dXJlQ29sbGVjdGlvbih7XG4gICAgICBwcm9wc0ZlYXR1cmVzOiB0aGlzLnByb3BzLmZlYXR1cmVzLFxuICAgICAgc3RhdGVGZWF0dXJlczogdGhpcy5zdGF0ZS5mZWF0dXJlQ29sbGVjdGlvblxuICAgIH0pO1xuICB9O1xuXG4gIF9zZXR1cE1vZGVIYW5kbGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IG1vZGUgPSB0aGlzLnByb3BzLm1vZGU7XG5cbiAgICBpZiAoIW1vZGUgfHwgbW9kZSA9PT0gTU9ERVMuUkVBRF9PTkxZKSB7XG4gICAgICB0aGlzLl9kZWdyZWdpc3RlckV2ZW50cygpO1xuICAgICAgdGhpcy5fbW9kZUhhbmRsZXIgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3JlZ2lzdGVyRXZlbnRzKCk7XG5cbiAgICBjb25zdCBIYW5kbGVyQ2xhc3MgPSBNT0RFX1RPX0hBTkRMRVJbbW9kZV07XG4gICAgdGhpcy5fbW9kZUhhbmRsZXIgPSBIYW5kbGVyQ2xhc3MgPyBuZXcgSGFuZGxlckNsYXNzKCkgOiBudWxsO1xuICB9O1xuXG4gIC8qIEVESVRJTkcgT1BFUkFUSU9OUyAqL1xuICBfY2xlYXJFZGl0aW5nU3RhdGUgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzZWxlY3RlZEZlYXR1cmVJbmRleDogbnVsbCxcblxuICAgICAgaG92ZXJlZDogbnVsbCxcblxuICAgICAgcG9pbnRlckRvd25QaWNrczogbnVsbCxcbiAgICAgIHBvaW50ZXJEb3duU2NyZWVuQ29vcmRzOiBudWxsLFxuICAgICAgcG9pbnRlckRvd25NYXBDb29yZHM6IG51bGwsXG5cbiAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlLFxuICAgICAgZGlkRHJhZzogZmFsc2VcbiAgICB9KTtcbiAgfTtcblxuICBfZ2V0U2VsZWN0ZWRGZWF0dXJlSW5kZXggPSAoKSA9PiB7XG4gICAgaWYgKCdzZWxlY3RlZEZlYXR1cmVJbmRleCcgaW4gdGhpcy5wcm9wcykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuc2VsZWN0ZWRGZWF0dXJlSW5kZXg7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXRlLnNlbGVjdGVkRmVhdHVyZUluZGV4O1xuICB9O1xuXG4gIF9nZXRTZWxlY3RlZEZlYXR1cmUgPSAoZmVhdHVyZUluZGV4OiA/bnVtYmVyKSA9PiB7XG4gICAgY29uc3QgZmVhdHVyZXMgPSB0aGlzLmdldEZlYXR1cmVzKCk7XG4gICAgZmVhdHVyZUluZGV4ID0gaXNOdW1lcmljKGZlYXR1cmVJbmRleCkgPyBmZWF0dXJlSW5kZXggOiB0aGlzLl9nZXRTZWxlY3RlZEZlYXR1cmVJbmRleCgpO1xuICAgIHJldHVybiBmZWF0dXJlc1tmZWF0dXJlSW5kZXhdO1xuICB9O1xuXG4gIF9vblNlbGVjdCA9IChzZWxlY3RlZDogU2VsZWN0QWN0aW9uKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IHNlbGVjdGVkRmVhdHVyZUluZGV4OiBzZWxlY3RlZCAmJiBzZWxlY3RlZC5zZWxlY3RlZEZlYXR1cmVJbmRleCB9KTtcbiAgICBpZiAodGhpcy5wcm9wcy5vblNlbGVjdCkge1xuICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdChzZWxlY3RlZCk7XG4gICAgfVxuICB9O1xuXG4gIF9vblVwZGF0ZSA9IChlZGl0QWN0aW9uOiBFZGl0QWN0aW9uLCBpc0ludGVybmFsOiA/Ym9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHsgZWRpdFR5cGUsIHVwZGF0ZWREYXRhLCBlZGl0Q29udGV4dCB9ID0gZWRpdEFjdGlvbjtcbiAgICB0aGlzLnNldFN0YXRlKHsgZmVhdHVyZUNvbGxlY3Rpb246IG5ldyBJbW11dGFibGVGZWF0dXJlQ29sbGVjdGlvbih1cGRhdGVkRGF0YSkgfSk7XG4gICAgaWYgKHRoaXMucHJvcHMub25VcGRhdGUgJiYgIWlzSW50ZXJuYWwpIHtcbiAgICAgIHRoaXMucHJvcHMub25VcGRhdGUoe1xuICAgICAgICBkYXRhOiB1cGRhdGVkRGF0YSAmJiB1cGRhdGVkRGF0YS5mZWF0dXJlcyxcbiAgICAgICAgZWRpdFR5cGUsXG4gICAgICAgIGVkaXRDb250ZXh0XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX29uRWRpdCA9IChlZGl0QWN0aW9uOiBFZGl0QWN0aW9uKSA9PiB7XG4gICAgY29uc3QgeyBtb2RlIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgZWRpdFR5cGUsIHVwZGF0ZWREYXRhIH0gPSBlZGl0QWN0aW9uO1xuXG4gICAgc3dpdGNoIChlZGl0VHlwZSkge1xuICAgICAgY2FzZSBFRElUX1RZUEUuTU9WRV9QT1NJVElPTjpcbiAgICAgICAgLy8gaW50ZXJtZWRpYXRlIGZlYXR1cmUsIGRvIG5vdCBuZWVkIGZvcndhcmQgdG8gYXBwbGljYXRpb25cbiAgICAgICAgLy8gb25seSBuZWVkIHVwZGF0ZSBlZGl0b3IgaW50ZXJuYWwgc3RhdGVcbiAgICAgICAgdGhpcy5fb25VcGRhdGUoZWRpdEFjdGlvbiwgdHJ1ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFRElUX1RZUEUuQUREX0ZFQVRVUkU6XG4gICAgICAgIHRoaXMuX29uVXBkYXRlKGVkaXRBY3Rpb24pO1xuICAgICAgICBpZiAobW9kZSA9PT0gTU9ERVMuRFJBV19QQVRIKSB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IChlZGl0QWN0aW9uLmVkaXRDb250ZXh0ICYmIGVkaXRBY3Rpb24uZWRpdENvbnRleHRbMF0pIHx8IHt9O1xuICAgICAgICAgIGNvbnN0IHsgc2NyZWVuQ29vcmRzLCBtYXBDb29yZHMgfSA9IGNvbnRleHQ7XG4gICAgICAgICAgY29uc3QgZmVhdHVyZUluZGV4ID0gdXBkYXRlZERhdGEuZmVhdHVyZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZEZlYXR1cmUgPSB0aGlzLl9nZXRTZWxlY3RlZEZlYXR1cmUoZmVhdHVyZUluZGV4KTtcbiAgICAgICAgICB0aGlzLl9vblNlbGVjdCh7XG4gICAgICAgICAgICBzZWxlY3RlZEZlYXR1cmUsXG4gICAgICAgICAgICBzZWxlY3RlZEZlYXR1cmVJbmRleDogZmVhdHVyZUluZGV4LFxuICAgICAgICAgICAgc2VsZWN0ZWRFZGl0SGFuZGxlSW5kZXg6IG51bGwsXG4gICAgICAgICAgICBzY3JlZW5Db29yZHMsXG4gICAgICAgICAgICBtYXBDb29yZHNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgRURJVF9UWVBFLkFERF9QT1NJVElPTjpcbiAgICAgIGNhc2UgRURJVF9UWVBFLlJFTU9WRV9QT1NJVElPTjpcbiAgICAgIGNhc2UgRURJVF9UWVBFLkZJTklTSF9NT1ZFX1BPU0lUSU9OOlxuICAgICAgICB0aGlzLl9vblVwZGF0ZShlZGl0QWN0aW9uKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9O1xuXG4gIC8qIEVWRU5UUyAqL1xuICBfZGVncmVnaXN0ZXJFdmVudHMgPSAoKSA9PiB7XG4gICAgY29uc3QgZXZlbnRNYW5hZ2VyID0gdGhpcy5fY29udGV4dCAmJiB0aGlzLl9jb250ZXh0LmV2ZW50TWFuYWdlcjtcbiAgICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhZXZlbnRNYW5hZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50c1JlZ2lzdGVyZWQpIHtcbiAgICAgIGV2ZW50TWFuYWdlci5vZmYodGhpcy5fZXZlbnRzKTtcbiAgICAgIHRoaXMuX2V2ZW50c1JlZ2lzdGVyZWQgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgX3JlZ2lzdGVyRXZlbnRzID0gKCkgPT4ge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuX2NvbnRhaW5lclJlZjtcbiAgICBjb25zdCBldmVudE1hbmFnZXIgPSB0aGlzLl9jb250ZXh0ICYmIHRoaXMuX2NvbnRleHQuZXZlbnRNYW5hZ2VyO1xuICAgIGlmICghdGhpcy5fZXZlbnRzIHx8ICFyZWYgfHwgIWV2ZW50TWFuYWdlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9ldmVudHNSZWdpc3RlcmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnRNYW5hZ2VyLm9uKHRoaXMuX2V2ZW50cywgcmVmKTtcbiAgICB0aGlzLl9ldmVudHNSZWdpc3RlcmVkID0gdHJ1ZTtcbiAgfTtcblxuICBfb25FdmVudCA9IChoYW5kbGVyOiBGdW5jdGlvbiwgZXZ0OiBNam9sbmlyRXZlbnQsIHN0b3BQcm9wYWdhdGlvbjogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IGV2ZW50ID0gdGhpcy5fZ2V0RXZlbnQoZXZ0KTtcbiAgICBoYW5kbGVyKGV2ZW50KTtcblxuICAgIGlmIChzdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgIGV2dC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICB9XG4gIH07XG5cbiAgX29uQ2xpY2sgPSAoZXZlbnQ6IEJhc2VFdmVudCkgPT4ge1xuICAgIGNvbnN0IHsgbW9kZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAobW9kZSA9PT0gTU9ERVMuU0VMRUNUIHx8IG1vZGUgPT09IE1PREVTLkVESVRJTkcpIHtcbiAgICAgIGNvbnN0IHsgbWFwQ29vcmRzLCBzY3JlZW5Db29yZHMgfSA9IGV2ZW50O1xuICAgICAgY29uc3QgcGlja2VkT2JqZWN0ID0gZXZlbnQucGlja3MgJiYgZXZlbnQucGlja3NbMF0gJiYgZXZlbnQucGlja3NbMF0ub2JqZWN0O1xuICAgICAgaWYgKHBpY2tlZE9iamVjdCAmJiBpc051bWVyaWMocGlja2VkT2JqZWN0LmZlYXR1cmVJbmRleCkpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRGZWF0dXJlSW5kZXggPSBwaWNrZWRPYmplY3QuZmVhdHVyZUluZGV4O1xuICAgICAgICBjb25zdCBzZWxlY3RlZEZlYXR1cmUgPSB0aGlzLl9nZXRTZWxlY3RlZEZlYXR1cmUoc2VsZWN0ZWRGZWF0dXJlSW5kZXgpO1xuICAgICAgICB0aGlzLl9vblNlbGVjdCh7XG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlLFxuICAgICAgICAgIHNlbGVjdGVkRmVhdHVyZUluZGV4LFxuICAgICAgICAgIHNlbGVjdGVkRWRpdEhhbmRsZUluZGV4OlxuICAgICAgICAgICAgcGlja2VkT2JqZWN0LnR5cGUgPT09IEVMRU1FTlRfVFlQRS5FRElUX0hBTkRMRSA/IHBpY2tlZE9iamVjdC5pbmRleCA6IG51bGwsXG4gICAgICAgICAgbWFwQ29vcmRzLFxuICAgICAgICAgIHNjcmVlbkNvb3Jkc1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX29uU2VsZWN0KHtcbiAgICAgICAgICBzZWxlY3RlZEZlYXR1cmU6IG51bGwsXG4gICAgICAgICAgc2VsZWN0ZWRGZWF0dXJlSW5kZXg6IG51bGwsXG4gICAgICAgICAgc2VsZWN0ZWRFZGl0SGFuZGxlSW5kZXg6IG51bGwsXG4gICAgICAgICAgbWFwQ29vcmRzLFxuICAgICAgICAgIHNjcmVlbkNvb3Jkc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtb2RlUHJvcHMgPSB0aGlzLmdldE1vZGVQcm9wcygpO1xuICAgIHRoaXMuX21vZGVIYW5kbGVyLmhhbmRsZUNsaWNrKGV2ZW50LCBtb2RlUHJvcHMpO1xuICB9O1xuXG4gIF9vblBvaW50ZXJNb3ZlID0gKGV2ZW50OiBCYXNlRXZlbnQpID0+IHtcbiAgICAvLyBob3ZlcmluZ1xuICAgIGNvbnN0IGhvdmVyZWQgPSB0aGlzLl9nZXRIb3ZlclN0YXRlKGV2ZW50KTtcbiAgICBjb25zdCB7XG4gICAgICBpc0RyYWdnaW5nLFxuICAgICAgZGlkRHJhZyxcbiAgICAgIHBvaW50ZXJEb3duUGlja3MsXG4gICAgICBwb2ludGVyRG93blNjcmVlbkNvb3JkcyxcbiAgICAgIHBvaW50ZXJEb3duTWFwQ29vcmRzXG4gICAgfSA9IHRoaXMuc3RhdGU7XG5cbiAgICBpZiAoaXNEcmFnZ2luZyAmJiAhZGlkRHJhZyAmJiBwb2ludGVyRG93blNjcmVlbkNvb3Jkcykge1xuICAgICAgY29uc3QgZHggPSBldmVudC5zY3JlZW5Db29yZHNbMF0gLSBwb2ludGVyRG93blNjcmVlbkNvb3Jkc1swXTtcbiAgICAgIGNvbnN0IGR5ID0gZXZlbnQuc2NyZWVuQ29vcmRzWzFdIC0gcG9pbnRlckRvd25TY3JlZW5Db29yZHNbMV07XG4gICAgICBpZiAoZHggKiBkeCArIGR5ICogZHkgPiA1KSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkaWREcmFnOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBvaW50ZXJNb3ZlRXZlbnQgPSB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIGlzRHJhZ2dpbmcsXG4gICAgICBwb2ludGVyRG93blBpY2tzLFxuICAgICAgcG9pbnRlckRvd25TY3JlZW5Db29yZHMsXG4gICAgICBwb2ludGVyRG93bk1hcENvb3Jkc1xuICAgIH07XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5kaWREcmFnKSB7XG4gICAgICBjb25zdCBtb2RlUHJvcHMgPSB0aGlzLmdldE1vZGVQcm9wcygpO1xuICAgICAgdGhpcy5fbW9kZUhhbmRsZXIuaGFuZGxlUG9pbnRlck1vdmUocG9pbnRlck1vdmVFdmVudCwgbW9kZVByb3BzKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGhvdmVyZWQsXG4gICAgICBsYXN0UG9pbnRlck1vdmVFdmVudDogcG9pbnRlck1vdmVFdmVudFxuICAgIH0pO1xuICB9O1xuXG4gIF9vblBvaW50ZXJEb3duID0gKGV2ZW50OiBCYXNlRXZlbnQpID0+IHtcbiAgICBjb25zdCBwaWNrZWRPYmplY3QgPSBldmVudC5waWNrcyAmJiBldmVudC5waWNrc1swXSAmJiBldmVudC5waWNrc1swXS5vYmplY3Q7XG4gICAgY29uc3Qgc3RhcnREcmFnZ2luZ0V2ZW50ID0ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICBwb2ludGVyRG93blNjcmVlbkNvb3JkczogZXZlbnQuc2NyZWVuQ29vcmRzLFxuICAgICAgcG9pbnRlckRvd25NYXBDb29yZHM6IGV2ZW50Lm1hcENvb3Jkc1xuICAgIH07XG5cbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGlzRHJhZ2dpbmc6IHBpY2tlZE9iamVjdCAmJiBpc051bWVyaWMocGlja2VkT2JqZWN0LmZlYXR1cmVJbmRleCksXG4gICAgICBwb2ludGVyRG93blBpY2tzOiBldmVudC5waWNrcyxcbiAgICAgIHBvaW50ZXJEb3duU2NyZWVuQ29vcmRzOiBldmVudC5zY3JlZW5Db29yZHMsXG4gICAgICBwb2ludGVyRG93bk1hcENvb3JkczogZXZlbnQubWFwQ29vcmRzXG4gICAgfTtcblxuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuXG4gICAgY29uc3QgbW9kZVByb3BzID0gdGhpcy5nZXRNb2RlUHJvcHMoKTtcbiAgICB0aGlzLl9tb2RlSGFuZGxlci5oYW5kbGVTdGFydERyYWdnaW5nKHN0YXJ0RHJhZ2dpbmdFdmVudCwgbW9kZVByb3BzKTtcbiAgfTtcblxuICBfb25Qb2ludGVyVXAgPSAoZXZlbnQ6IE1qb2xuaXJFdmVudCkgPT4ge1xuICAgIGNvbnN0IHN0b3BEcmFnZ2luZ0V2ZW50ID0ge1xuICAgICAgLi4uZXZlbnQsXG4gICAgICBwb2ludGVyRG93blNjcmVlbkNvb3JkczogdGhpcy5zdGF0ZS5wb2ludGVyRG93blNjcmVlbkNvb3JkcyxcbiAgICAgIHBvaW50ZXJEb3duTWFwQ29vcmRzOiB0aGlzLnN0YXRlLnBvaW50ZXJEb3duTWFwQ29vcmRzXG4gICAgfTtcblxuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgaXNEcmFnZ2luZzogZmFsc2UsXG4gICAgICBkaWREcmFnOiBmYWxzZSxcbiAgICAgIHBvaW50ZXJEb3duUGlja3M6IG51bGwsXG4gICAgICBwb2ludGVyRG93blNjcmVlbkNvb3JkczogbnVsbCxcbiAgICAgIHBvaW50ZXJEb3duTWFwQ29vcmRzOiBudWxsXG4gICAgfTtcblxuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuXG4gICAgY29uc3QgbW9kZVByb3BzID0gdGhpcy5nZXRNb2RlUHJvcHMoKTtcbiAgICB0aGlzLl9tb2RlSGFuZGxlci5oYW5kbGVTdG9wRHJhZ2dpbmcoc3RvcERyYWdnaW5nRXZlbnQsIG1vZGVQcm9wcyk7XG4gIH07XG5cbiAgX29uUGFuID0gKGV2ZW50OiBCYXNlRXZlbnQpID0+IHtcbiAgICBjb25zdCB7IGlzRHJhZ2dpbmcgfSA9IHRoaXMuc3RhdGU7XG4gICAgaWYgKGlzRHJhZ2dpbmcpIHtcbiAgICAgIGV2ZW50LnNvdXJjZUV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfTtcblxuICAvKiBIRUxQRVJTICovXG4gIHByb2plY3QgPSAocHQ6IFBvc2l0aW9uKSA9PiB7XG4gICAgY29uc3Qgdmlld3BvcnQgPSB0aGlzLl9jb250ZXh0ICYmIHRoaXMuX2NvbnRleHQudmlld3BvcnQ7XG4gICAgcmV0dXJuIHZpZXdwb3J0ICYmIHZpZXdwb3J0LnByb2plY3QocHQpO1xuICB9O1xuXG4gIHVucHJvamVjdCA9IChwdDogUG9zaXRpb24pID0+IHtcbiAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuX2NvbnRleHQgJiYgdGhpcy5fY29udGV4dC52aWV3cG9ydDtcbiAgICByZXR1cm4gdmlld3BvcnQgJiYgdmlld3BvcnQudW5wcm9qZWN0KHB0KTtcbiAgfTtcblxuICBfZ2V0RXZlbnQoZXZ0OiBNam9sbmlyRXZlbnQpIHtcbiAgICBjb25zdCBwaWNrZWQgPSBwYXJzZUV2ZW50RWxlbWVudChldnQpO1xuICAgIGNvbnN0IHNjcmVlbkNvb3JkcyA9IGdldFNjcmVlbkNvb3JkcyhldnQpO1xuICAgIGNvbnN0IG1hcENvb3JkcyA9IHRoaXMudW5wcm9qZWN0KHNjcmVlbkNvb3Jkcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGlja3M6IHBpY2tlZCA/IFtwaWNrZWRdIDogbnVsbCxcbiAgICAgIHNjcmVlbkNvb3JkcyxcbiAgICAgIG1hcENvb3JkcyxcbiAgICAgIHNvdXJjZUV2ZW50OiBldnRcbiAgICB9O1xuICB9XG5cbiAgX2dldEhvdmVyU3RhdGUgPSAoZXZlbnQ6IEJhc2VFdmVudCkgPT4ge1xuICAgIGNvbnN0IG9iamVjdCA9IGV2ZW50LnBpY2tzICYmIGV2ZW50LnBpY2tzWzBdICYmIGV2ZW50LnBpY2tzWzBdLm9iamVjdDtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHNjcmVlbkNvb3JkczogZXZlbnQuc2NyZWVuQ29vcmRzLFxuICAgICAgbWFwQ29vcmRzOiBldmVudC5tYXBDb29yZHMsXG4gICAgICAuLi5vYmplY3RcbiAgICB9O1xuICB9O1xuXG4gIF9pc0RyYXdpbmcoKSB7XG4gICAgY29uc3QgeyBtb2RlIH0gPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiBEUkFXSU5HX01PREUuZmluZEluZGV4KG0gPT4gbSA9PT0gbW9kZSkgPj0gMDtcbiAgfVxuXG4gIHJlbmRlcihjaGlsZDogYW55KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNYXBDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICB7Y29udGV4dCA9PiB7XG4gICAgICAgICAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBjb250ZXh0ICYmIGNvbnRleHQudmlld3BvcnQ7XG5cbiAgICAgICAgICBpZiAoIXZpZXdwb3J0IHx8IHZpZXdwb3J0LmhlaWdodCA8PSAwIHx8IHZpZXdwb3J0LndpZHRoIDw9IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgfX1cbiAgICAgIDwvTWFwQ29udGV4dC5Db25zdW1lcj5cbiAgICApO1xuICB9XG59XG5cbk1vZGVIYW5kbGVyLmRpc3BsYXlOYW1lID0gJ01vZGVIYW5kbGVyJztcbiJdfQ== |
\ | No newline at end of file |