@hmcts/media-viewer 3.1.1 → 3.1.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/esm2020/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.mjs +11 -13
- package/fesm2015/hmcts-media-viewer.mjs +10 -12
- package/fesm2015/hmcts-media-viewer.mjs.map +1 -1
- package/fesm2020/hmcts-media-viewer.mjs +10 -12
- package/fesm2020/hmcts-media-viewer.mjs.map +1 -1
- package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts +2 -1
- package/lib/viewers/pdf-viewer/side-bar/bookmarks/bookmarks.component.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -31,7 +31,8 @@ export class BookmarksComponent {
|
|
|
31
31
|
this._bookmarkNodes = [];
|
|
32
32
|
// expansion model tracks expansion state
|
|
33
33
|
this.expansionModel = new SelectionModel(true);
|
|
34
|
-
this.
|
|
34
|
+
this.isDraggingOn = false;
|
|
35
|
+
this.isUserdragging = false;
|
|
35
36
|
this.expandDelay = 1000;
|
|
36
37
|
this.pageLookup = {};
|
|
37
38
|
this.BOOKMARK_CHAR_LIMIT = 30;
|
|
@@ -148,12 +149,14 @@ export class BookmarksComponent {
|
|
|
148
149
|
}
|
|
149
150
|
positionSortBookmarks() {
|
|
150
151
|
this.bookmarkNodes.sort((a, b) => a.pageNumber === b.pageNumber ? a.yCoordinate - b.yCoordinate : a.pageNumber - b.pageNumber);
|
|
152
|
+
this.isDraggingOn = false;
|
|
151
153
|
this.rebuildTreeForData(this.bookmarkNodes);
|
|
152
154
|
}
|
|
153
155
|
customSortBookmarks() {
|
|
154
156
|
if (this.bookmarkNodes.length > 1) {
|
|
155
157
|
this.bookmarkNodes.sort((a, b) => a.index - b.index);
|
|
156
158
|
}
|
|
159
|
+
this.isDraggingOn = true;
|
|
157
160
|
this.rebuildTreeForData(this.bookmarkNodes);
|
|
158
161
|
}
|
|
159
162
|
scaledY(yCoordinate, height, page) {
|
|
@@ -256,13 +259,13 @@ export class BookmarksComponent {
|
|
|
256
259
|
dragStart() {
|
|
257
260
|
this.dragNodeInsertToParent = false;
|
|
258
261
|
this.hoveredNode = null;
|
|
259
|
-
this.
|
|
262
|
+
this.isUserdragging = true;
|
|
260
263
|
}
|
|
261
264
|
dragEnd() {
|
|
262
|
-
this.
|
|
265
|
+
this.isUserdragging = false;
|
|
263
266
|
}
|
|
264
267
|
dragHover(event, node) {
|
|
265
|
-
if (this.
|
|
268
|
+
if (this.isUserdragging) {
|
|
266
269
|
const newEvent = event;
|
|
267
270
|
const percentageX = newEvent.offsetX / newEvent.target.clientWidth;
|
|
268
271
|
if (percentageX > .55) {
|
|
@@ -273,19 +276,14 @@ export class BookmarksComponent {
|
|
|
273
276
|
this.hoveredNode = null;
|
|
274
277
|
this.dragNodeInsertToParent = false;
|
|
275
278
|
}
|
|
276
|
-
clearTimeout(this.expandTimeout);
|
|
277
|
-
this.expandTimeout = setTimeout(() => {
|
|
278
|
-
this.treeControl.expand(node);
|
|
279
|
-
}, this.expandDelay);
|
|
280
279
|
}
|
|
281
280
|
}
|
|
282
281
|
dragHoverEnd(event, node) {
|
|
283
|
-
if (this.
|
|
282
|
+
if (this.isUserdragging) {
|
|
284
283
|
if (!node || this.hoveredNode?.id !== node.id) {
|
|
285
284
|
this.dragNodeInsertToParent = false;
|
|
286
285
|
this.hoveredNode = null;
|
|
287
286
|
}
|
|
288
|
-
clearTimeout(this.expandTimeout);
|
|
289
287
|
}
|
|
290
288
|
}
|
|
291
289
|
onNodeExpand(node) {
|
|
@@ -338,10 +336,10 @@ export class BookmarksComponent {
|
|
|
338
336
|
}
|
|
339
337
|
}
|
|
340
338
|
/** @nocollapse */ BookmarksComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BookmarksComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component });
|
|
341
|
-
/** @nocollapse */ BookmarksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BookmarksComponent, selector: "mv-bookmarks", inputs: { bookmarkNodes: "bookmarkNodes", zoom: "zoom", rotate: "rotate" }, outputs: { goToDestination: "goToDestination" }, ngImport: i0, template: "<a *ngIf=\"bookmarkNodes?.length === 0\" class=\"highlightedOutlineItem\"\n >No bookmarks created yet</a\n>\n<cdk-tree\n cdkDropList\n class=\"bookmarks-tree\"\n *ngIf=\"datasource\"\n [dataSource]=\"datasource\"\n [treeControl]=\"treeControl\"\n (cdkDropListDropped)=\"drop($event)\"\n>\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node class=\"node-wrapper\" *cdkTreeNodeDef=\"let node\">\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n class=\"node-wrapper\"\n *cdkTreeNodeDef=\"let node; when: hasChild\"\n >\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark2\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <span\n cdkTreeNodeToggle\n class=\"toggle-children-wrapper\"\n [ngClass]=\"onNodeExpand(node)\"\n ><span class=\"toggle-children\"></span\n ></span>\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark2>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n <div class=\"nested-tree-node-children\" *ngIf=\"treeControl.isExpanded(node)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n</cdk-tree>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.CdkNestedTreeNode, selector: "cdk-nested-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i3.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i3.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i3.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i3.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }] });
|
|
339
|
+
/** @nocollapse */ BookmarksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BookmarksComponent, selector: "mv-bookmarks", inputs: { bookmarkNodes: "bookmarkNodes", zoom: "zoom", rotate: "rotate" }, outputs: { goToDestination: "goToDestination" }, ngImport: i0, template: "<a *ngIf=\"bookmarkNodes?.length === 0\" class=\"highlightedOutlineItem\"\n >No bookmarks created yet</a\n>\n<cdk-tree\n cdkDropList\n [cdkDropListDisabled]=\"!isDraggingOn\"\n class=\"bookmarks-tree\"\n *ngIf=\"datasource\"\n [dataSource]=\"datasource\"\n [treeControl]=\"treeControl\"\n (cdkDropListDropped)=\"drop($event)\"\n>\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node class=\"node-wrapper\" *cdkTreeNodeDef=\"let node\">\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n class=\"node-wrapper\"\n *cdkTreeNodeDef=\"let node; when: hasChild\"\n >\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark2\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <span\n cdkTreeNodeToggle\n class=\"toggle-children-wrapper\"\n [ngClass]=\"onNodeExpand(node)\"\n ><span class=\"toggle-children\"></span\n ></span>\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark2>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n <div class=\"nested-tree-node-children\" *ngIf=\"treeControl.isExpanded(node)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n</cdk-tree>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.CdkNestedTreeNode, selector: "cdk-nested-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i3.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i3.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i3.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i3.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "directive", type: i4.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }] });
|
|
342
340
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BookmarksComponent, decorators: [{
|
|
343
341
|
type: Component,
|
|
344
|
-
args: [{ selector: 'mv-bookmarks', template: "<a *ngIf=\"bookmarkNodes?.length === 0\" class=\"highlightedOutlineItem\"\n >No bookmarks created yet</a\n>\n<cdk-tree\n cdkDropList\n class=\"bookmarks-tree\"\n *ngIf=\"datasource\"\n [dataSource]=\"datasource\"\n [treeControl]=\"treeControl\"\n (cdkDropListDropped)=\"drop($event)\"\n>\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node class=\"node-wrapper\" *cdkTreeNodeDef=\"let node\">\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n class=\"node-wrapper\"\n *cdkTreeNodeDef=\"let node; when: hasChild\"\n >\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark2\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <span\n cdkTreeNodeToggle\n class=\"toggle-children-wrapper\"\n [ngClass]=\"onNodeExpand(node)\"\n ><span class=\"toggle-children\"></span\n ></span>\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark2>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n <div class=\"nested-tree-node-children\" *ngIf=\"treeControl.isExpanded(node)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n</cdk-tree>\n" }]
|
|
342
|
+
args: [{ selector: 'mv-bookmarks', template: "<a *ngIf=\"bookmarkNodes?.length === 0\" class=\"highlightedOutlineItem\"\n >No bookmarks created yet</a\n>\n<cdk-tree\n cdkDropList\n [cdkDropListDisabled]=\"!isDraggingOn\"\n class=\"bookmarks-tree\"\n *ngIf=\"datasource\"\n [dataSource]=\"datasource\"\n [treeControl]=\"treeControl\"\n (cdkDropListDropped)=\"drop($event)\"\n>\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node class=\"node-wrapper\" *cdkTreeNodeDef=\"let node\">\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n class=\"node-wrapper\"\n *cdkTreeNodeDef=\"let node; when: hasChild\"\n >\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark2\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <span\n cdkTreeNodeToggle\n class=\"toggle-children-wrapper\"\n [ngClass]=\"onNodeExpand(node)\"\n ><span class=\"toggle-children\"></span\n ></span>\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark2>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n <div class=\"nested-tree-node-children\" *ngIf=\"treeControl.isExpanded(node)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n</cdk-tree>\n" }]
|
|
345
343
|
}], ctorParameters: function () { return [{ type: i1.Store }]; }, propDecorators: { bookmarkNodes: [{
|
|
346
344
|
type: Input
|
|
347
345
|
}], zoom: [{
|
|
@@ -351,4 +349,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
351
349
|
}], goToDestination: [{
|
|
352
350
|
type: Output
|
|
353
351
|
}] } });
|
|
354
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va21hcmtzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3ZpZXdlcnMvcGRmLXZpZXdlci9zaWRlLWJhci9ib29rbWFya3MvYm9va21hcmtzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3ZpZXdlcnMvcGRmLXZpZXdlci9zaWRlLWJhci9ib29rbWFya3MvYm9va21hcmtzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxNQUFNLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFHNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFILE9BQU8sS0FBSyxrQkFBa0IsTUFBTSxnREFBZ0QsQ0FBQztBQUdyRixPQUFPLEtBQUssWUFBWSxNQUFNLGdEQUFnRCxDQUFDO0FBRS9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQW1CLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7OztBQVF2RSxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLElBQ0ksYUFBYSxDQUFDLEtBQWlCO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFL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QUMsV0FBVyxHQUFHLElBQUksaUJBQWlCLENBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNoRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHVCQUF1QixDQUFDLGdCQUE0QixFQUFFLE1BQWdCO1FBRXBFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQixPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQy9CLENBQUM7O21JQTNZVSxrQkFBa0I7dUhBQWxCLGtCQUFrQixpTEN4Qi9CLHMwR0EwR0E7NEZEbEZhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDRSxjQUFjOzRGQU9wQixhQUFhO3NCQURoQixLQUFLO2dCQVlHLElBQUk7c0JBQVosS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHByb3ZpZGVNb2NrQWN0aW9ucyB9IGZyb20gJ0BuZ3J4L2VmZmVjdHMvdGVzdGluZyc7XG5pbXBvcnQgeyBCb29rbWFyayB9IGZyb20gJy4vLi4vLi4vLi4vLi4vc3RvcmUvbW9kZWxzL2Jvb2ttYXJrcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIGZyb20gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQ3JlYXRlQm9va21hcmssIERlbGV0ZUJvb2ttYXJrLCBNb3ZlQm9va21hcmssIFVwZGF0ZUJvb2ttYXJrIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3RvcmUvYWN0aW9ucy9ib29rbWFyay5hY3Rpb25zJztcbmltcG9ydCAqIGFzIGJvb2ttYXJrc1NlbGVjdG9ycyBmcm9tICcuLi8uLi8uLi8uLi9zdG9yZS9zZWxlY3RvcnMvYm9va21hcmsuc2VsZWN0b3JzJztcbmltcG9ydCB7IEFubm90YXRpb25TZXRTdGF0ZSB9IGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlL3JlZHVjZXJzL2Fubm90YXRpb25zLnJlZHVjZXInO1xuaW1wb3J0IHsgRG9jdW1lbnRQYWdlcyB9IGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlL3JlZHVjZXJzL2RvY3VtZW50LnJlZHVjZXInO1xuaW1wb3J0ICogYXMgZnJvbURvY3VtZW50IGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlL3NlbGVjdG9ycy9kb2N1bWVudC5zZWxlY3RvcnMnO1xuaW1wb3J0ICogYXMgZnJvbUJvb2ttYXJrcyBmcm9tICcuLi8uLi8uLi8uLi9zdG9yZS9yZWR1Y2Vycy9ib29rbWFya3MucmVkdWNlcic7XG5pbXBvcnQgeyBnZXRCb29rbWFya0NoaWxkcmVuIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3RvcmUvYm9va21hcmtzLXN0b3JlLXV0aWxzJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgdXVpZCBmcm9tICd1dWlkJztcbmltcG9ydCB7IEFycmF5RGF0YVNvdXJjZSwgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgRmxhdFRyZWVDb250cm9sLCBOZXN0ZWRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7IENka0RyYWdEcm9wIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ212LWJvb2ttYXJrcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9ib29rbWFya3MuY29tcG9uZW50Lmh0bWwnXG59KVxuXG5leHBvcnQgY2xhc3MgQm9va21hcmtzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpXG4gIHNldCBib29rbWFya05vZGVzKHZhbHVlOiBCb29rbWFya1tdKSB7XG4gICAgdGhpcy5yZWJ1aWxkVHJlZUZvckRhdGEodmFsdWUpO1xuICAgIGlmICh0aGlzLl9ib29rbWFya05vZGVzICYmIHRoaXMuc29ydE1vZGUgIT09IHRoaXMuY3VzdG9tU29ydCkge1xuICAgICAgdGhpcy5zb3J0Qm9va21hcmtzKCk7XG4gICAgfVxuICB9O1xuXG4gIGdldCBib29rbWFya05vZGVzKCkge1xuICAgIHJldHVybiB0aGlzLl9ib29rbWFya05vZGVzO1xuICB9O1xuXG4gIEBJbnB1dCgpIHpvb206IG51bWJlcjtcbiAgQElucHV0KCkgcm90YXRlOiBudW1iZXI7XG4gIEBPdXRwdXQoKSBnb1RvRGVzdGluYXRpb24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIHByaXZhdGUgX2Jvb2ttYXJrTm9kZXM6IEJvb2ttYXJrW10gPSBbXTtcbiAgZGF0YXNvdXJjZTogQXJyYXlEYXRhU291cmNlPEJvb2ttYXJrPjtcbiAgdHJlZUNvbnRyb2w6IEZsYXRUcmVlQ29udHJvbDxCb29rbWFyaz47XG4gIGhvdmVyZWROb2RlOiBCb29rbWFyaztcbiAgLy8gZXhwYW5zaW9uIG1vZGVsIHRyYWNrcyBleHBhbnNpb24gc3RhdGVcbiAgZXhwYW5zaW9uTW9kZWwgPSBuZXcgU2VsZWN0aW9uTW9kZWw8Qm9va21hcms+KHRydWUpO1xuICBkcmFnZ2luZyA9IGZhbHNlO1xuICBleHBhbmRUaW1lb3V0OiBhbnk7XG4gIGV4cGFuZERlbGF5ID0gMTAwMDtcbiAgZHJhZ05vZGVJbnNlcnRUb1BhcmVudDogYm9vbGVhbjtcblxuICBwYWdlTG9va3VwOiB7IFtwYWdlSWQ6IG51bWJlcl06IERvY3VtZW50UGFnZXMgfSA9IHt9O1xuICBlZGl0YWJsZUJvb2ttYXJrOiBzdHJpbmc7XG4gIEJPT0tNQVJLX0NIQVJfTElNSVQgPSAzMDtcblxuICBkcmFnTm9kZTogYW55O1xuICBkcmFnTm9kZUV4cGFuZE92ZXJXYWl0VGltZU1zID0gMzAwO1xuICBkcmFnTm9kZUV4cGFuZE92ZXJOb2RlOiBhbnk7XG4gIGRyYWdOb2RlRXhwYW5kT3ZlclRpbWU6IG51bWJlcjtcbiAgZHJhZ05vZGVFeHBhbmRPdmVyQXJlYTogbnVtYmVyO1xuXG4gIG9wdGlvbnMgPSB7XG4gICAgYWxsb3dEcmFnOiB0cnVlLFxuICAgIGFsbG93RHJvcDogdHJ1ZVxuICB9O1xuXG4gICRzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcml2YXRlIHNvcnRNb2RlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfY3VzdG9tU29ydCA9ICdDVVNUT00nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wb3NpdGlvblNvcnQgPSAnUE9TSVRJT04nO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc3RvcmU6IFN0b3JlPGZyb21Cb29rbWFya3MuQm9va21hcmtzU3RhdGUgfCBBbm5vdGF0aW9uU2V0U3RhdGU+KSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNvcnRNb2RlID0gdGhpcy5jdXN0b21Tb3J0O1xuICAgIHRoaXMuJHN1YnNjcmlwdGlvbiA9IHRoaXMuc3RvcmUucGlwZShzZWxlY3QoYm9va21hcmtzU2VsZWN0b3JzLmdldEVkaXRhYmxlQm9va21hcmspKVxuICAgICAgLnN1YnNjcmliZShlZGl0YWJsZUlkID0+IHRoaXMuZWRpdGFibGVCb29rbWFyayA9IGVkaXRhYmxlSWQpO1xuICAgIHRoaXMuJHN1YnNjcmlwdGlvbi5hZGQodGhpcy5zdG9yZS5zZWxlY3QoZnJvbURvY3VtZW50LmdldFBhZ2VzKVxuICAgICAgLnN1YnNjcmliZShwYWdlcyA9PiB7XG5cbiAgICAgICAgT2JqZWN0LmtleXMocGFnZXMpLm1hcChrZXkgPT4ge1xuICAgICAgICAgIHRoaXMucGFnZUxvb2t1cFtrZXldID0gcGFnZXNba2V5XTtcbiAgICAgICAgfSk7XG5cbiAgICAgIH0pKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuJHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZWRpdEJvb2ttYXJrKGlkKSB7XG4gICAgdGhpcy5lZGl0YWJsZUJvb2ttYXJrID0gaWQ7XG4gIH1cblxuICBvbkFkZEJvb2ttYXJrQ2xpY2soKSB7XG4gICAgdGhpcy5zdG9yZS5waXBlKHNlbGVjdChib29rbWFya3NTZWxlY3RvcnMuZ2V0Qm9va21hcmtJbmZvKSwgdGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKGJvb2ttYXJrSW5mbykgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBDcmVhdGVCb29rbWFyayh7XG4gICAgICAgICAgLi4uYm9va21hcmtJbmZvLCBuYW1lOiAnJywgaWQ6IHV1aWQoKVxuICAgICAgICB9IGFzIGFueSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBkZWxldGVCb29rbWFyazIobm9kZTogQm9va21hcmspIHtcbiAgICB0aGlzLmN1c3RvbVNvcnRCb29rbWFya3MoKTtcbiAgICBsZXQgbmV4dDogQm9va21hcms7XG5cbiAgICBjb25zdCBjaGFuZ2VkRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5ib29rbWFya05vZGVzKSk7XG4gICAgY29uc3Qgc2libGluZ3MgPSB0aGlzLmZpbmROb2RlU2libGluZ3MoY2hhbmdlZERhdGEsIG5vZGUuaWQpO1xuICAgIGlmIChzaWJsaW5ncyAmJiBzaWJsaW5ncy5sZW5ndGggPiBub2RlLmluZGV4ICsgMSkge1xuICAgICAgbmV4dCA9IHNpYmxpbmdzW25vZGUuaW5kZXggKyAxXTtcbiAgICAgIG5leHQucHJldmlvdXMgPSBub2RlLnByZXZpb3VzO1xuICAgIH1cbiAgICBjb25zdCB0b0RlbGV0ZSA9IFtub2RlLmlkLCAuLi5nZXRCb29rbWFya0NoaWxkcmVuKG5vZGUuY2hpbGRyZW4pXTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBEZWxldGVCb29rbWFyayh7XG4gICAgICBkZWxldGVkOiB0b0RlbGV0ZSwgdXBkYXRlZDogbmV4dFxuICAgIH0pKTtcbiAgfVxuXG4gIHVwZGF0ZUJvb2ttYXJrKGJvb2ttYXJrOiBCb29rbWFyaywgbmFtZSkge1xuICAgIGNvbnN0IGVkaXRlZEJvb2ttYXJrID0ge1xuICAgICAgLi4uYm9va21hcmssXG4gICAgICBuYW1lXG4gICAgfTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgVXBkYXRlQm9va21hcmsoZWRpdGVkQm9va21hcmspKTtcbiAgICAgIHRoaXMuZWRpdGFibGVCb29rbWFyayA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBnb1RvQm9va21hcmsoYm9va21hcms6IEJvb2ttYXJrKSB7XG4gICAgY29uc3QgdGhpc1BhZ2UgPSB0aGlzLnBhZ2VMb29rdXBbYm9va21hcmsucGFnZU51bWJlciArIDFdO1xuICAgIGNvbnN0IGRlZmF1bHRIZWlnaHQgPSB0aGlzUGFnZS5zdHlsZXMuaGVpZ2h0O1xuICAgIGNvbnN0IGRlZmF1bHRTY2FsZVkgPSB0aGlzLnNjYWxlZFkoYm9va21hcmsueUNvb3JkaW5hdGUsIGRlZmF1bHRIZWlnaHQsIHRoaXNQYWdlKTtcblxuICAgIGxldCB0b3AgPSAwLCBsZWZ0ID0gMDtcbiAgICBzd2l0Y2ggKHRoaXMucm90YXRlKSB7XG4gICAgICBjYXNlIDkwOlxuICAgICAgICBsZWZ0ID0gLSBkZWZhdWx0U2NhbGVZO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMTgwOlxuICAgICAgICB0b3AgPSB0aGlzLnNjYWxlZFkoYm9va21hcmsueUNvb3JkaW5hdGUsIChkZWZhdWx0SGVpZ2h0IC0gKDI0ICogdGhpcy56b29tKSksIHRoaXNQYWdlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI3MDpcbiAgICAgICAgbGVmdCA9IGRlZmF1bHRTY2FsZVk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdG9wID0gZGVmYXVsdFNjYWxlWTtcbiAgICB9XG5cbiAgICB0aGlzLmdvVG9EZXN0aW5hdGlvbi5lbWl0KFtcbiAgICAgIGJvb2ttYXJrLnBhZ2VOdW1iZXIsXG4gICAgICB7ICduYW1lJzogJ1hZWicgfSxcbiAgICAgIGxlZnQsXG4gICAgICB0b3BcbiAgICBdKTtcbiAgfVxuXG4gIGdldCBjdXN0b21Tb3J0KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXN0b21Tb3J0O1xuICB9XG5cbiAgZ2V0IHBvc2l0aW9uU29ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcG9zaXRpb25Tb3J0O1xuICB9XG5cbiAgc29ydChtb2RlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNvcnRNb2RlID0gbW9kZTtcbiAgICB0aGlzLnNvcnRCb29rbWFya3MoKTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydEJvb2ttYXJrcygpIHtcbiAgICBzd2l0Y2ggKHRoaXMuc29ydE1vZGUpIHtcbiAgICAgIGNhc2UgdGhpcy5jdXN0b21Tb3J0OiB7XG4gICAgICAgIHRoaXMuY3VzdG9tU29ydEJvb2ttYXJrcygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgdGhpcy5wb3NpdGlvblNvcnQ6IHtcbiAgICAgICAgdGhpcy5wb3NpdGlvblNvcnRCb29rbWFya3MoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRoaXMuY3VzdG9tU29ydEJvb2ttYXJrcygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBvc2l0aW9uU29ydEJvb2ttYXJrcygpIHtcbiAgICB0aGlzLmJvb2ttYXJrTm9kZXMuc29ydCgoYSwgYikgPT4gYS5wYWdlTnVtYmVyID09PSBiLnBhZ2VOdW1iZXIgPyBhLnlDb29yZGluYXRlIC0gYi55Q29vcmRpbmF0ZSA6IGEucGFnZU51bWJlciAtIGIucGFnZU51bWJlcik7XG4gICAgdGhpcy5yZWJ1aWxkVHJlZUZvckRhdGEodGhpcy5ib29rbWFya05vZGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgY3VzdG9tU29ydEJvb2ttYXJrcygpIHtcbiAgICBpZiAodGhpcy5ib29rbWFya05vZGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuYm9va21hcmtOb2Rlcy5zb3J0KChhLCBiKSA9PiBhLmluZGV4IC0gYi5pbmRleCk7XG4gICAgfVxuICAgIHRoaXMucmVidWlsZFRyZWVGb3JEYXRhKHRoaXMuYm9va21hcmtOb2Rlcyk7XG4gIH1cblxuICBwcml2YXRlIHNjYWxlZFkoeUNvb3JkaW5hdGU6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHBhZ2U6IERvY3VtZW50UGFnZXMpOiBudW1iZXIge1xuICAgIGNvbnN0IHZpZXdwb3J0U2NhbGUgPSBwYWdlLnZpZXdwb3J0U2NhbGUgLyB0aGlzLnpvb207XG4gICAgcmV0dXJuICgoaGVpZ2h0IC8gdGhpcy56b29tKSAtIHlDb29yZGluYXRlKSAvIHZpZXdwb3J0U2NhbGU7XG4gIH1cblxuICBoYXNDaGlsZCA9IChfOiBudW1iZXIsIG5vZGU6IEJvb2ttYXJrKSA9PiB7XG4gICAgcmV0dXJuIG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwO1xuICB9XG5cbiAgZ2V0Tm9kZShib29rbWFya3MsIHBhcmVudElkKSB7XG4gICAgaWYgKHR5cGVvZiBib29rbWFya3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvb2ttYXJrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYm9va21hcmtzW2ldLmlkID09PSBwYXJlbnRJZCkge1xuICAgICAgICAgIHJldHVybiBbYm9va21hcmtzW2ldXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhID0gdGhpcy5nZXROb2RlKGJvb2ttYXJrc1tpXS5jaGlsZHJlbiwgcGFyZW50SWQpO1xuICAgICAgICBpZiAoYSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8Qm9va21hcms+KSB7XG5cbiAgICBpZiAoIWV2ZW50LmlzUG9pbnRlck92ZXJDb250YWluZXIgfHwgKGV2ZW50LnByZXZpb3VzSW5kZXggPT09IGV2ZW50LmN1cnJlbnRJbmRleCkpIHJldHVybjtcblxuICAgIGNvbnN0IGhhc01vdmVkVXBUaGVUcmVlID0gZXZlbnQucHJldmlvdXNJbmRleCA+IGV2ZW50LmN1cnJlbnRJbmRleDtcbiAgICBjb25zdCBib29rbWFya05vZGVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodGhpcy5fYm9va21hcmtOb2Rlcyk7XG4gICAgY29uc3QgY2hhbmdlZERhdGEgPSBKU09OLnBhcnNlKGJvb2ttYXJrTm9kZXNTdHJpbmcpO1xuICAgIGNvbnN0IHZpc2libGVOb2RlcyA9IHRoaXMudmlzaWJsZU5vZGVzKHRoaXMuX2Jvb2ttYXJrTm9kZXMpO1xuICAgIGNvbnN0IHRvTm9kZSA9IHZpc2libGVOb2Rlc1tldmVudC5jdXJyZW50SW5kZXhdIGFzIEJvb2ttYXJrO1xuICAgIGNvbnN0IHRvTm9kZVNpYmxpbmdzID0gdGhpcy5maW5kTm9kZVNpYmxpbmdzKGNoYW5nZWREYXRhLCB0b05vZGUuaWQpO1xuXG4gICAgY29uc3QgdG9Ob2RlUGFyZW50ID0gdG9Ob2RlU2libGluZ3NbMF0ucGFyZW50O1xuICAgIGNvbnN0IHRvSW5kZXggPSB0b05vZGVTaWJsaW5ncy5maW5kSW5kZXgocyA9PiBzLmlkID09PSB0b05vZGUuaWQpO1xuXG4gICAgY29uc3QgZnJvbU5vZGUgPSBldmVudC5pdGVtLmRhdGEgYXMgQm9va21hcms7XG4gICAgY29uc3QgZnJvbU5vZGVTaWJsaW5ncyA9IHRoaXMuZmluZE5vZGVTaWJsaW5ncyhjaGFuZ2VkRGF0YSwgZnJvbU5vZGUuaWQpO1xuICAgIGNvbnN0IGZyb21JbmRleCA9IGZyb21Ob2RlU2libGluZ3MuZmluZEluZGV4KG4gPT4gbi5pZCA9PT0gZnJvbU5vZGUuaWQpO1xuXG4gICAgaWYgKHRoaXMuaXNUb05vZGVDaGlsZE9mRnJvbU5vZGUoZnJvbU5vZGU/LmNoaWxkcmVuLCB0b05vZGUpKSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5kcmFnTm9kZUluc2VydFRvUGFyZW50KSB7XG5cbiAgICAgIGNvbnN0IGluZGV4T2ZQYXJlbnQgPSB0b05vZGVTaWJsaW5ncy5maW5kSW5kZXgoZWxlbWVudCA9PiBlbGVtZW50LmlkID09PSB0b05vZGUuaWQpO1xuICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRvTm9kZVNpYmxpbmdzW2luZGV4T2ZQYXJlbnRdO1xuICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IHBhcmVudE5vZGU/LmNoaWxkcmVuICYmIHBhcmVudE5vZGU/LmNoaWxkcmVuLmxlbmd0aCA+IDAgPyBwYXJlbnROb2RlLmNoaWxkcmVuWzBdIDogbnVsbDtcbiAgICAgIGxldCBtb3ZlZEJvb2ttYXJrc1dpdGhQYXJlbnQgPSBbeyAuLi5mcm9tTm9kZSwgcGFyZW50OiBwYXJlbnROb2RlLmlkLCBwcmV2aW91czogbnVsbCB9XTtcblxuICAgICAgaWYgKGZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbW92ZWRCb29rbWFya3NXaXRoUGFyZW50ID0gWy4uLm1vdmVkQm9va21hcmtzV2l0aFBhcmVudCwgeyAuLi5maXJzdENoaWxkLCBwcmV2aW91czogZnJvbU5vZGUuaWQgfV07XG4gICAgICB9XG5cbiAgICAgIGxldCBmcm9tTm9kZVNpYmxpbmcgPSB0aGlzLmdldFNpYmxpbmdGcm9tQWxsU2libGlpbmdzKGZyb21Ob2RlU2libGluZ3MsIGZyb21JbmRleCArIDEpO1xuICAgICAgY29uc3QgbmV4dEZyb21pbmRleGZvclBhcmVudCA9IGZyb21JbmRleCArIDE7XG4gICAgICBmcm9tTm9kZVNpYmxpbmcgPSBmcm9tTm9kZVNpYmxpbmcgJiYgZnJvbU5vZGVTaWJsaW5nLmlkID09PSBmcm9tTm9kZS5wcmV2aW91cyA/IHRoaXMuZ2V0U2libGluZ0Zyb21BbGxTaWJsaWluZ3MoZnJvbU5vZGVTaWJsaW5ncywgbmV4dEZyb21pbmRleGZvclBhcmVudCArIDEpIDogZnJvbU5vZGVTaWJsaW5nO1xuXG4gICAgICBpZiAoZnJvbU5vZGVTaWJsaW5nICYmIGZyb21Ob2RlU2libGluZy5pZCAhPT0gcGFyZW50Tm9kZS5pZCkge1xuICAgICAgICBtb3ZlZEJvb2ttYXJrc1dpdGhQYXJlbnQgPSBbLi4ubW92ZWRCb29rbWFya3NXaXRoUGFyZW50LCB7IC4uLmZyb21Ob2RlU2libGluZywgcHJldmlvdXM6IGZyb21Ob2RlLnByZXZpb3VzIH1dO1xuICAgICAgfVxuXG4gICAgICBsZXQgcHJldmlvdXNTaWJsaW5nRm9yUGFyZW50SW5kZXggPSB0b0luZGV4IC0gMTtcbiAgICAgIGxldCBwYXJlbnROb2RlU2libGluZyA9IHRoaXMuZ2V0U2libGluZ0Zyb21BbGxTaWJsaWluZ3ModG9Ob2RlU2libGluZ3MsIHByZXZpb3VzU2libGluZ0ZvclBhcmVudEluZGV4KTtcblxuICAgICAgaWYgKHBhcmVudE5vZGVTaWJsaW5nICYmIHBhcmVudE5vZGVTaWJsaW5nLmlkID09IGZyb21Ob2RlLmlkKSB7XG4gICAgICAgIHByZXZpb3VzU2libGluZ0ZvclBhcmVudEluZGV4ID0gcHJldmlvdXNTaWJsaW5nRm9yUGFyZW50SW5kZXggLSAxO1xuICAgICAgICBpZiAocHJldmlvdXNTaWJsaW5nRm9yUGFyZW50SW5kZXggPj0gMCkge1xuICAgICAgICAgIHBhcmVudE5vZGVTaWJsaW5nID0gdGhpcy5nZXRTaWJsaW5nRnJvbUFsbFNpYmxpaW5ncyh0b05vZGVTaWJsaW5ncywgcHJldmlvdXNTaWJsaW5nRm9yUGFyZW50SW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHBhcmVudE5vZGVTaWJsaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBtb3ZlZEJvb2ttYXJrc1dpdGhQYXJlbnQgPSBbLi4ubW92ZWRCb29rbWFya3NXaXRoUGFyZW50LCB7IC4uLnBhcmVudE5vZGUsIHByZXZpb3VzOiBwYXJlbnROb2RlU2libGluZz8uaWQgfV07XG5cbiAgICAgIGNvbnN0IGhhc1BhcmVudER1cHMgPSAobW92ZWRCb29rbWFya3NXaXRoUGFyZW50IGFzIEJvb2ttYXJrW10pLm1hcCh4ID0+IHguaWQpLnNvbWUoZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gLnNvbWUgd2lsbCBicmVhayBhcyBzb29uIGFzIGR1cGxpY2F0ZSBmb3VuZCAobm8gbmVlZCB0byBpdHRlcmF0ZSBvdmVyIGFsbCBhcnJheSlcbiAgICAgICAgcmV0dXJuIGFycmF5LmluZGV4T2YodmFsdWUpICE9PSBhcnJheS5sYXN0SW5kZXhPZih2YWx1ZSk7ICAgLy8gY29tcGFyaW5nIGZpcnN0IGFuZCBsYXN0IGluZGV4ZXMgb2YgdGhlIHNhbWUgdmFsdWVcbiAgICAgIH0pXG4gICAgICBpZiAoaGFzUGFyZW50RHVwcyB8fCBtb3ZlZEJvb2ttYXJrc1dpdGhQYXJlbnQgJiYgbW92ZWRCb29rbWFya3NXaXRoUGFyZW50Lmxlbmd0aCA8PSAxKSByZXR1cm47XG5cbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE1vdmVCb29rbWFyayhtb3ZlZEJvb2ttYXJrc1dpdGhQYXJlbnQpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRvTm9kZVNpYmxpbmdzKSByZXR1cm47XG5cbiAgICBjb25zdCBmcm9tTm9kZVByZXZpb3VzID0gaGFzTW92ZWRVcFRoZVRyZWUgPyB0b05vZGUucHJldmlvdXMgOiB0b05vZGUuaWQ7XG4gICAgbGV0IG1vdmVkQm9va21hcmtzID0gW3tcbiAgICAgIC4uLmZyb21Ob2RlLFxuICAgICAgcHJldmlvdXM6IHRvTm9kZS5pbmRleCA+IDAgPyBmcm9tTm9kZVByZXZpb3VzIDogdW5kZWZpbmVkLFxuICAgICAgcGFyZW50OiB0b05vZGVQYXJlbnRcbiAgICB9XTtcblxuICAgIGxldCBmcm9tTm9kZVNpYmxpbmcgPSB0aGlzLmdldFNpYmxpbmdGcm9tQWxsU2libGlpbmdzKGZyb21Ob2RlU2libGluZ3MsIGZyb21JbmRleCArIDEpO1xuICAgIGNvbnN0IG5leHRGcm9taW5kZXggPSBmcm9tSW5kZXggKyAxO1xuICAgIGZyb21Ob2RlU2libGluZyA9IGZyb21Ob2RlU2libGluZyAmJiBmcm9tTm9kZVNpYmxpbmcuaWQgPT09IGZyb21Ob2RlLnByZXZpb3VzID8gdGhpcy5nZXRTaWJsaW5nRnJvbUFsbFNpYmxpaW5ncyhmcm9tTm9kZVNpYmxpbmdzLCBuZXh0RnJvbWluZGV4ICsgMSkgOiBmcm9tTm9kZVNpYmxpbmc7XG5cbiAgICBpZiAoZnJvbU5vZGVTaWJsaW5nKSB7XG4gICAgICBtb3ZlZEJvb2ttYXJrcyA9IFsuLi5tb3ZlZEJvb2ttYXJrcywgeyAuLi5mcm9tTm9kZVNpYmxpbmcsIHByZXZpb3VzOiBmcm9tTm9kZS5wcmV2aW91cyB9XTtcbiAgICB9XG5cblxuICAgIGxldCB0b05vZGVTaWJsaW5nSW5kZXggPSBoYXNNb3ZlZFVwVGhlVHJlZSA/IHRvSW5kZXggOiB0b0luZGV4ICsgMTtcbiAgICBsZXQgdG9Ob2RlU2libGluZyA9IHRoaXMuZ2V0U2libGluZ0Zyb21BbGxTaWJsaWluZ3ModG9Ob2RlU2libGluZ3MsIHRvTm9kZVNpYmxpbmdJbmRleCk7XG5cbiAgICBpZiAodG9Ob2RlU2libGluZykge1xuICAgICAgbW92ZWRCb29rbWFya3MgPSBbLi4ubW92ZWRCb29rbWFya3MsIHsgLi4udG9Ob2RlU2libGluZywgcHJldmlvdXM6IGZyb21Ob2RlLmlkIH1dO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc0R1cHMgPSAobW92ZWRCb29rbWFya3MgYXMgQm9va21hcmtbXSkubWFwKHggPT4geC5pZCkuc29tZShmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuc29tZSB3aWxsIGJyZWFrIGFzIHNvb24gYXMgZHVwbGljYXRlIGZvdW5kIChubyBuZWVkIHRvIGl0dGVyYXRlIG92ZXIgYWxsIGFycmF5KVxuICAgICAgcmV0dXJuIGFycmF5LmluZGV4T2YodmFsdWUpICE9PSBhcnJheS5sYXN0SW5kZXhPZih2YWx1ZSk7ICAgLy8gY29tcGFyaW5nIGZpcnN0IGFuZCBsYXN0IGluZGV4ZXMgb2YgdGhlIHNhbWUgdmFsdWVcbiAgICB9KVxuICAgIGlmIChoYXNEdXBzIHx8IG1vdmVkQm9va21hcmtzICYmIG1vdmVkQm9va21hcmtzLmxlbmd0aCA8PSAxKSByZXR1cm47XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBNb3ZlQm9va21hcmsobW92ZWRCb29rbWFya3MpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2libGluZ0Zyb21BbGxTaWJsaWluZ3Moc2libGluZzogQm9va21hcmtbXSwgaW5kZXgpIHtcbiAgICByZXR1cm4gc2libGluZy5sZW5ndGggPiBpbmRleCA/IHNpYmxpbmdbaW5kZXhdIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZHJhZ1N0YXJ0KCkge1xuICAgIHRoaXMuZHJhZ05vZGVJbnNlcnRUb1BhcmVudCA9IGZhbHNlO1xuICAgIHRoaXMuaG92ZXJlZE5vZGUgPSBudWxsO1xuICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xuICB9XG5cbiAgZHJhZ0VuZCgpIHtcbiAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XG4gIH1cblxuICBkcmFnSG92ZXIoZXZlbnQ6IGFueSwgbm9kZTogQm9va21hcmspIHtcbiAgICBpZiAodGhpcy5kcmFnZ2luZykge1xuICAgICAgY29uc3QgbmV3RXZlbnQ6IGFueSA9IGV2ZW50O1xuICAgICAgY29uc3QgcGVyY2VudGFnZVggPSBuZXdFdmVudC5vZmZzZXRYIC8gbmV3RXZlbnQudGFyZ2V0LmNsaWVudFdpZHRoO1xuICAgICAgaWYgKHBlcmNlbnRhZ2VYID4gLjU1KSB7XG4gICAgICAgIHRoaXMuaG92ZXJlZE5vZGUgPSBub2RlO1xuICAgICAgICB0aGlzLmRyYWdOb2RlSW5zZXJ0VG9QYXJlbnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ob3ZlcmVkTm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZHJhZ05vZGVJbnNlcnRUb1BhcmVudCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZXhwYW5kVGltZW91dCk7XG4gICAgICB0aGlzLmV4cGFuZFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQobm9kZSk7XG4gICAgICB9LCB0aGlzLmV4cGFuZERlbGF5KTtcbiAgICB9XG4gIH1cblxuICBkcmFnSG92ZXJFbmQoZXZlbnQ6IGFueSwgbm9kZTogQm9va21hcmspIHtcbiAgICBpZiAodGhpcy5kcmFnZ2luZykge1xuICAgICAgaWYgKCFub2RlIHx8IHRoaXMuaG92ZXJlZE5vZGU/LmlkICE9PSBub2RlLmlkKSB7XG4gICAgICAgIHRoaXMuZHJhZ05vZGVJbnNlcnRUb1BhcmVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhvdmVyZWROb2RlID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmV4cGFuZFRpbWVvdXQpO1xuICAgIH1cbiAgfVxuXG4gIG9uTm9kZUV4cGFuZChub2RlOiBCb29rbWFyaykge1xuICAgIGNvbnN0IGlzRXhwYW5kZWQgPSB0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSk7XG4gICAgcmV0dXJuIGlzRXhwYW5kZWQgPyBcInRvZ2dsZS1jaGlsZHJlbi13cmFwcGVyLWV4cGFuZGVkXCIgOiBcInRvZ2dsZS1jaGlsZHJlbi13cmFwcGVyLWNvbGxhcHNlZFwiO1xuICB9XG5cbiAgdmlzaWJsZU5vZGVzKGJvb2ttYXJrczogQm9va21hcmtbXSk6IEJvb2ttYXJrW10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgZnVuY3Rpb24gYWRkRXhwYW5kZWRDaGlsZHJlbihub2RlOiBCb29rbWFyaywgZXhwYW5kZWQ6IEJvb2ttYXJrW10pIHtcbiAgICAgIHJlc3VsdC5wdXNoKG5vZGUpO1xuICAgICAgaWYgKGV4cGFuZGVkLnNvbWUoYm9va21hcmsgPT4gYm9va21hcmsgJiYgYm9va21hcmsuaWQgPT09IG5vZGUuaWQpICYmIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgbm9kZS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiBhZGRFeHBhbmRlZENoaWxkcmVuKGNoaWxkLCBleHBhbmRlZCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBib29rbWFya3MuZm9yRWFjaCgobm9kZSkgPT4ge1xuICAgICAgYWRkRXhwYW5kZWRDaGlsZHJlbihub2RlLCB0aGlzLnRyZWVDb250cm9sLmV4cGFuc2lvbk1vZGVsLnNlbGVjdGVkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZmluZE5vZGVTaWJsaW5ncyhhcnI6IEFycmF5PGFueT4sIGlkOiBzdHJpbmcpOiBBcnJheTxhbnk+IHtcbiAgICBsZXQgcmVzdWx0LCBzdWJSZXN1bHQ7XG4gICAgYXJyLmZvckVhY2goKGl0ZW0sIGkpID0+IHtcbiAgICAgIGlmIChpdGVtLmlkID09PSBpZCkge1xuICAgICAgICByZXN1bHQgPSBhcnI7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW0/LmNoaWxkcmVuKSB7XG4gICAgICAgIHN1YlJlc3VsdCA9IHRoaXMuZmluZE5vZGVTaWJsaW5ncyhpdGVtLmNoaWxkcmVuLCBpZCk7XG4gICAgICAgIGlmIChzdWJSZXN1bHQpIHJlc3VsdCA9IHN1YlJlc3VsdDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmVidWlsZFRyZWVGb3JEYXRhKGRhdGE6IGFueSkge1xuICAgIHRoaXMuX2Jvb2ttYXJrTm9kZXMgPSBkYXRhID8/IFtdO1xuICAgIHRoaXMuZGF0YXNvdXJjZSA9IG5ldyBBcnJheURhdGFTb3VyY2UodGhpcy5fYm9va21hcmtOb2Rlcyk7XG4gICAgdGhpcy50cmVlQ29udHJvbCA9IG5ldyBOZXN0ZWRUcmVlQ29udHJvbDxCb29rbWFyaz4obm9kZSA9PiBub2RlLmNoaWxkcmVuKTtcbiAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2RlcyA9IHRoaXMuX2Jvb2ttYXJrTm9kZXM7XG4gICAgdGhpcy5leHBhbnNpb25Nb2RlbC5zZWxlY3RlZC5mb3JFYWNoKChib29rbWFyaykgPT4ge1xuICAgICAgY29uc3Qgbm9kZSA9IHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzLmZpbmQoKG4pID0+IG4uaWQgPT09IGJvb2ttYXJrLmlkKTtcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgaXNUb05vZGVDaGlsZE9mRnJvbU5vZGUoZnJvbU5vZGVDaGlsZHJlbjogQm9va21hcmtbXSwgdG9Ob2RlOiBCb29rbWFyaykge1xuXG4gICAgaWYgKCFmcm9tTm9kZUNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5nZXROb2RlKGZyb21Ob2RlQ2hpbGRyZW4sIHRvTm9kZS5pZCk7XG4gICAgcmV0dXJuIHJlc3VsdCA/IHRydWUgOiBmYWxzZTtcbiAgfVxufVxuIiwiPGEgKm5nSWY9XCJib29rbWFya05vZGVzPy5sZW5ndGggPT09IDBcIiBjbGFzcz1cImhpZ2hsaWdodGVkT3V0bGluZUl0ZW1cIlxuICA+Tm8gYm9va21hcmtzIGNyZWF0ZWQgeWV0PC9hXG4+XG48Y2RrLXRyZWVcbiAgY2RrRHJvcExpc3RcbiAgY2xhc3M9XCJib29rbWFya3MtdHJlZVwiXG4gICpuZ0lmPVwiZGF0YXNvdXJjZVwiXG4gIFtkYXRhU291cmNlXT1cImRhdGFzb3VyY2VcIlxuICBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIlxuICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiXG4+XG4gIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBsZWFmIG5vZGVzIC0tPlxuICA8Y2RrLW5lc3RlZC10cmVlLW5vZGUgY2xhc3M9XCJub2RlLXdyYXBwZXJcIiAqY2RrVHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiPlxuICAgIDxkaXYgKm5nSWY9XCJub2RlLmlkICE9PSBlZGl0YWJsZUJvb2ttYXJrOyBlbHNlIGlucHV0Qm9va21hcmtcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJub2RlLWNvbnRlbnQtd3JhcHBlciBuZXN0ZWQtdHJlZS1ub2RlXCJcbiAgICAgICAgY2RrRHJhZ1xuICAgICAgICBbY2RrRHJhZ0RhdGFdPVwibm9kZVwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cImRyYWdIb3ZlcigkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwiZHJhZ0hvdmVyRW5kKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwiZHJhZ1N0YXJ0KClcIlxuICAgICAgICAoY2RrRHJhZ1JlbGVhc2VkKT1cImRyYWdFbmQoKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdXRsaW5lSXRlbVwiPlxuICAgICAgICAgIDxhIChjbGljayk9XCJnb1RvQm9va21hcmsobm9kZSlcIj5cbiAgICAgICAgICAgIHt7IG5vZGUubmFtZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJvb2ttYXJrX19yZW5hbWVcIlxuICAgICAgICAgIChjbGljayk9XCJlZGl0Qm9va21hcmsobm9kZS5pZClcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJvb2ttYXJrX19kZWxldGVcIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVCb29rbWFyazIobm9kZSlcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJub2RlLWRyb3Atc2xvdFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjaW5wdXRCb29rbWFyaz5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjYm9va21hcmtOYW1lXG4gICAgICAgIGNsYXNzPVwiYm9va21hcmtfX2lucHV0XCJcbiAgICAgICAgW3ZhbHVlXT1cIm5vZGUubmFtZVwiXG4gICAgICAgIFttYXhMZW5ndGhdPVwiQk9PS01BUktfQ0hBUl9MSU1JVFwiXG4gICAgICAvPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJvb2ttYXJrX19zYXZlXCJcbiAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUJvb2ttYXJrKG5vZGUsIGJvb2ttYXJrTmFtZS52YWx1ZSlcIlxuICAgICAgPjwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBleHBhbmRhYmxlIG5vZGVzIC0tPlxuICA8Y2RrLW5lc3RlZC10cmVlLW5vZGVcbiAgICBjbGFzcz1cIm5vZGUtd3JhcHBlclwiXG4gICAgKmNka1RyZWVOb2RlRGVmPVwibGV0IG5vZGU7IHdoZW46IGhhc0NoaWxkXCJcbiAgPlxuICAgIDxkaXYgKm5nSWY9XCJub2RlLmlkICE9PSBlZGl0YWJsZUJvb2ttYXJrOyBlbHNlIGlucHV0Qm9va21hcmsyXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibm9kZS1jb250ZW50LXdyYXBwZXIgbmVzdGVkLXRyZWUtbm9kZVwiXG4gICAgICAgIGNka0RyYWdcbiAgICAgICAgW2Nka0RyYWdEYXRhXT1cIm5vZGVcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJkcmFnSG92ZXIoJGV2ZW50LCBub2RlKVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cImRyYWdIb3ZlckVuZCgkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cImRyYWdTdGFydCgpXCJcbiAgICAgICAgKGNka0RyYWdSZWxlYXNlZCk9XCJkcmFnRW5kKClcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3V0bGluZUl0ZW1cIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2RrVHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWNoaWxkcmVuLXdyYXBwZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwib25Ob2RlRXhwYW5kKG5vZGUpXCJcbiAgICAgICAgICAgID48c3BhbiBjbGFzcz1cInRvZ2dsZS1jaGlsZHJlblwiPjwvc3BhblxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPGEgKGNsaWNrKT1cImdvVG9Cb29rbWFyayhub2RlKVwiPlxuICAgICAgICAgICAge3sgbm9kZS5uYW1lIH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYm9va21hcmtfX3JlbmFtZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImVkaXRCb29rbWFyayhub2RlLmlkKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYm9va21hcmtfX2RlbGV0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUJvb2ttYXJrMihub2RlKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm5vZGUtZHJvcC1zbG90XCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNpbnB1dEJvb2ttYXJrMj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjYm9va21hcmtOYW1lXG4gICAgICAgIGNsYXNzPVwiYm9va21hcmtfX2lucHV0XCJcbiAgICAgICAgW3ZhbHVlXT1cIm5vZGUubmFtZVwiXG4gICAgICAgIFttYXhMZW5ndGhdPVwiQk9PS01BUktfQ0hBUl9MSU1JVFwiXG4gICAgICAvPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJvb2ttYXJrX19zYXZlXCJcbiAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUJvb2ttYXJrKG5vZGUsIGJvb2ttYXJrTmFtZS52YWx1ZSlcIlxuICAgICAgPjwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cIm5lc3RlZC10cmVlLW5vZGUtY2hpbGRyZW5cIiAqbmdJZj1cInRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgY2RrVHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG48L2Nkay10cmVlPlxuIl19
|
|
352
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9va21hcmtzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3ZpZXdlcnMvcGRmLXZpZXdlci9zaWRlLWJhci9ib29rbWFya3MvYm9va21hcmtzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21lZGlhLXZpZXdlci9zcmMvbGliL3ZpZXdlcnMvcGRmLXZpZXdlci9zaWRlLWJhci9ib29rbWFya3MvYm9va21hcmtzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxNQUFNLEVBQVMsTUFBTSxhQUFhLENBQUM7QUFHNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzFILE9BQU8sS0FBSyxrQkFBa0IsTUFBTSxnREFBZ0QsQ0FBQztBQUdyRixPQUFPLEtBQUssWUFBWSxNQUFNLGdEQUFnRCxDQUFDO0FBRS9FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQW1CLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7OztBQVF2RSxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLElBQ0ksYUFBYSxDQUFDLEtBQWlCO1FBQ2pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFL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Y0FBYyxDQUFDO1FBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2hELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsZ0JBQTRCLEVBQUUsTUFBZ0I7UUFFcEUsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDL0IsQ0FBQzs7bUlBellVLGtCQUFrQjt1SEFBbEIsa0JBQWtCLGlMQ3ZCL0IsaTNHQTJHQTs0RkRwRmEsa0JBQWtCO2tCQUw5QixTQUFTOytCQUNFLGNBQWM7NEZBT3BCLGFBQWE7c0JBRGhCLEtBQUs7Z0JBWUcsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQm9va21hcmsgfSBmcm9tICcuLy4uLy4uLy4uLy4uL3N0b3JlL21vZGVscy9ib29rbWFya3MuaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENyZWF0ZUJvb2ttYXJrLCBEZWxldGVCb29rbWFyaywgTW92ZUJvb2ttYXJrLCBVcGRhdGVCb29rbWFyayB9IGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlL2FjdGlvbnMvYm9va21hcmsuYWN0aW9ucyc7XG5pbXBvcnQgKiBhcyBib29rbWFya3NTZWxlY3RvcnMgZnJvbSAnLi4vLi4vLi4vLi4vc3RvcmUvc2VsZWN0b3JzL2Jvb2ttYXJrLnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBBbm5vdGF0aW9uU2V0U3RhdGUgfSBmcm9tICcuLi8uLi8uLi8uLi9zdG9yZS9yZWR1Y2Vycy9hbm5vdGF0aW9ucy5yZWR1Y2VyJztcbmltcG9ydCB7IERvY3VtZW50UGFnZXMgfSBmcm9tICcuLi8uLi8uLi8uLi9zdG9yZS9yZWR1Y2Vycy9kb2N1bWVudC5yZWR1Y2VyJztcbmltcG9ydCAqIGFzIGZyb21Eb2N1bWVudCBmcm9tICcuLi8uLi8uLi8uLi9zdG9yZS9zZWxlY3RvcnMvZG9jdW1lbnQuc2VsZWN0b3JzJztcbmltcG9ydCAqIGFzIGZyb21Cb29rbWFya3MgZnJvbSAnLi4vLi4vLi4vLi4vc3RvcmUvcmVkdWNlcnMvYm9va21hcmtzLnJlZHVjZXInO1xuaW1wb3J0IHsgZ2V0Qm9va21hcmtDaGlsZHJlbiB9IGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlL2Jvb2ttYXJrcy1zdG9yZS11dGlscyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHV1aWQgZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBBcnJheURhdGFTb3VyY2UsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCwgTmVzdGVkVHJlZUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQgeyBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdi1ib29rbWFya3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vYm9va21hcmtzLmNvbXBvbmVudC5odG1sJ1xufSlcblxuZXhwb3J0IGNsYXNzIEJvb2ttYXJrc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBASW5wdXQoKVxuICBzZXQgYm9va21hcmtOb2Rlcyh2YWx1ZTogQm9va21hcmtbXSkge1xuICAgIHRoaXMucmVidWlsZFRyZWVGb3JEYXRhKHZhbHVlKTtcbiAgICBpZiAodGhpcy5fYm9va21hcmtOb2RlcyAmJiB0aGlzLnNvcnRNb2RlICE9PSB0aGlzLmN1c3RvbVNvcnQpIHtcbiAgICAgIHRoaXMuc29ydEJvb2ttYXJrcygpO1xuICAgIH1cbiAgfTtcblxuICBnZXQgYm9va21hcmtOb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fYm9va21hcmtOb2RlcztcbiAgfTtcblxuICBASW5wdXQoKSB6b29tOiBudW1iZXI7XG4gIEBJbnB1dCgpIHJvdGF0ZTogbnVtYmVyO1xuICBAT3V0cHV0KCkgZ29Ub0Rlc3RpbmF0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICBwcml2YXRlIF9ib29rbWFya05vZGVzOiBCb29rbWFya1tdID0gW107XG4gIGRhdGFzb3VyY2U6IEFycmF5RGF0YVNvdXJjZTxCb29rbWFyaz47XG4gIHRyZWVDb250cm9sOiBGbGF0VHJlZUNvbnRyb2w8Qm9va21hcms+O1xuICBob3ZlcmVkTm9kZTogQm9va21hcms7XG4gIC8vIGV4cGFuc2lvbiBtb2RlbCB0cmFja3MgZXhwYW5zaW9uIHN0YXRlXG4gIGV4cGFuc2lvbk1vZGVsID0gbmV3IFNlbGVjdGlvbk1vZGVsPEJvb2ttYXJrPih0cnVlKTtcbiAgaXNEcmFnZ2luZ09uID0gZmFsc2U7XG4gIGlzVXNlcmRyYWdnaW5nID0gZmFsc2U7XG4gIGV4cGFuZFRpbWVvdXQ6IGFueTtcbiAgZXhwYW5kRGVsYXkgPSAxMDAwO1xuICBkcmFnTm9kZUluc2VydFRvUGFyZW50OiBib29sZWFuO1xuXG4gIHBhZ2VMb29rdXA6IHsgW3BhZ2VJZDogbnVtYmVyXTogRG9jdW1lbnRQYWdlcyB9ID0ge307XG4gIGVkaXRhYmxlQm9va21hcms6IHN0cmluZztcbiAgQk9PS01BUktfQ0hBUl9MSU1JVCA9IDMwO1xuXG4gIGRyYWdOb2RlOiBhbnk7XG4gIGRyYWdOb2RlRXhwYW5kT3ZlcldhaXRUaW1lTXMgPSAzMDA7XG4gIGRyYWdOb2RlRXhwYW5kT3Zlck5vZGU6IGFueTtcbiAgZHJhZ05vZGVFeHBhbmRPdmVyVGltZTogbnVtYmVyO1xuICBkcmFnTm9kZUV4cGFuZE92ZXJBcmVhOiBudW1iZXI7XG5cbiAgb3B0aW9ucyA9IHtcbiAgICBhbGxvd0RyYWc6IHRydWUsXG4gICAgYWxsb3dEcm9wOiB0cnVlXG4gIH07XG5cbiAgJHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgc29ydE1vZGU6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IF9jdXN0b21Tb3J0ID0gJ0NVU1RPTSc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Bvc2l0aW9uU29ydCA9ICdQT1NJVElPTic7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBzdG9yZTogU3RvcmU8ZnJvbUJvb2ttYXJrcy5Cb29rbWFya3NTdGF0ZSB8IEFubm90YXRpb25TZXRTdGF0ZT4pIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc29ydE1vZGUgPSB0aGlzLmN1c3RvbVNvcnQ7XG4gICAgdGhpcy4kc3Vic2NyaXB0aW9uID0gdGhpcy5zdG9yZS5waXBlKHNlbGVjdChib29rbWFya3NTZWxlY3RvcnMuZ2V0RWRpdGFibGVCb29rbWFyaykpXG4gICAgICAuc3Vic2NyaWJlKGVkaXRhYmxlSWQgPT4gdGhpcy5lZGl0YWJsZUJvb2ttYXJrID0gZWRpdGFibGVJZCk7XG4gICAgdGhpcy4kc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnN0b3JlLnNlbGVjdChmcm9tRG9jdW1lbnQuZ2V0UGFnZXMpXG4gICAgICAuc3Vic2NyaWJlKHBhZ2VzID0+IHtcblxuICAgICAgICBPYmplY3Qua2V5cyhwYWdlcykubWFwKGtleSA9PiB7XG4gICAgICAgICAgdGhpcy5wYWdlTG9va3VwW2tleV0gPSBwYWdlc1trZXldO1xuICAgICAgICB9KTtcblxuICAgICAgfSkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy4kc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBlZGl0Qm9va21hcmsoaWQpIHtcbiAgICB0aGlzLmVkaXRhYmxlQm9va21hcmsgPSBpZDtcbiAgfVxuXG4gIG9uQWRkQm9va21hcmtDbGljaygpIHtcbiAgICB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KGJvb2ttYXJrc1NlbGVjdG9ycy5nZXRCb29rbWFya0luZm8pLCB0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoYm9va21hcmtJbmZvKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IENyZWF0ZUJvb2ttYXJrKHtcbiAgICAgICAgICAuLi5ib29rbWFya0luZm8sIG5hbWU6ICcnLCBpZDogdXVpZCgpXG4gICAgICAgIH0gYXMgYW55KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZUJvb2ttYXJrMihub2RlOiBCb29rbWFyaykge1xuICAgIHRoaXMuY3VzdG9tU29ydEJvb2ttYXJrcygpO1xuICAgIGxldCBuZXh0OiBCb29rbWFyaztcblxuICAgIGNvbnN0IGNoYW5nZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmJvb2ttYXJrTm9kZXMpKTtcbiAgICBjb25zdCBzaWJsaW5ncyA9IHRoaXMuZmluZE5vZGVTaWJsaW5ncyhjaGFuZ2VkRGF0YSwgbm9kZS5pZCk7XG4gICAgaWYgKHNpYmxpbmdzICYmIHNpYmxpbmdzLmxlbmd0aCA+IG5vZGUuaW5kZXggKyAxKSB7XG4gICAgICBuZXh0ID0gc2libGluZ3Nbbm9kZS5pbmRleCArIDFdO1xuICAgICAgbmV4dC5wcmV2aW91cyA9IG5vZGUucHJldmlvdXM7XG4gICAgfVxuICAgIGNvbnN0IHRvRGVsZXRlID0gW25vZGUuaWQsIC4uLmdldEJvb2ttYXJrQ2hpbGRyZW4obm9kZS5jaGlsZHJlbildO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IERlbGV0ZUJvb2ttYXJrKHtcbiAgICAgIGRlbGV0ZWQ6IHRvRGVsZXRlLCB1cGRhdGVkOiBuZXh0XG4gICAgfSkpO1xuICB9XG5cbiAgdXBkYXRlQm9va21hcmsoYm9va21hcms6IEJvb2ttYXJrLCBuYW1lKSB7XG4gICAgY29uc3QgZWRpdGVkQm9va21hcmsgPSB7XG4gICAgICAuLi5ib29rbWFyayxcbiAgICAgIG5hbWVcbiAgICB9O1xuICAgIGlmIChuYW1lKSB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVcGRhdGVCb29rbWFyayhlZGl0ZWRCb29rbWFyaykpO1xuICAgICAgdGhpcy5lZGl0YWJsZUJvb2ttYXJrID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGdvVG9Cb29rbWFyayhib29rbWFyazogQm9va21hcmspIHtcbiAgICBjb25zdCB0aGlzUGFnZSA9IHRoaXMucGFnZUxvb2t1cFtib29rbWFyay5wYWdlTnVtYmVyICsgMV07XG4gICAgY29uc3QgZGVmYXVsdEhlaWdodCA9IHRoaXNQYWdlLnN0eWxlcy5oZWlnaHQ7XG4gICAgY29uc3QgZGVmYXVsdFNjYWxlWSA9IHRoaXMuc2NhbGVkWShib29rbWFyay55Q29vcmRpbmF0ZSwgZGVmYXVsdEhlaWdodCwgdGhpc1BhZ2UpO1xuXG4gICAgbGV0IHRvcCA9IDAsIGxlZnQgPSAwO1xuICAgIHN3aXRjaCAodGhpcy5yb3RhdGUpIHtcbiAgICAgIGNhc2UgOTA6XG4gICAgICAgIGxlZnQgPSAtIGRlZmF1bHRTY2FsZVk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAxODA6XG4gICAgICAgIHRvcCA9IHRoaXMuc2NhbGVkWShib29rbWFyay55Q29vcmRpbmF0ZSwgKGRlZmF1bHRIZWlnaHQgLSAoMjQgKiB0aGlzLnpvb20pKSwgdGhpc1BhZ2UpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMjcwOlxuICAgICAgICBsZWZ0ID0gZGVmYXVsdFNjYWxlWTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0b3AgPSBkZWZhdWx0U2NhbGVZO1xuICAgIH1cblxuICAgIHRoaXMuZ29Ub0Rlc3RpbmF0aW9uLmVtaXQoW1xuICAgICAgYm9va21hcmsucGFnZU51bWJlcixcbiAgICAgIHsgJ25hbWUnOiAnWFlaJyB9LFxuICAgICAgbGVmdCxcbiAgICAgIHRvcFxuICAgIF0pO1xuICB9XG5cbiAgZ2V0IGN1c3RvbVNvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1c3RvbVNvcnQ7XG4gIH1cblxuICBnZXQgcG9zaXRpb25Tb3J0KCkge1xuICAgIHJldHVybiB0aGlzLl9wb3NpdGlvblNvcnQ7XG4gIH1cblxuICBzb3J0KG1vZGU6IHN0cmluZykge1xuICAgIHRoaXMuc29ydE1vZGUgPSBtb2RlO1xuICAgIHRoaXMuc29ydEJvb2ttYXJrcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0Qm9va21hcmtzKCkge1xuICAgIHN3aXRjaCAodGhpcy5zb3J0TW9kZSkge1xuICAgICAgY2FzZSB0aGlzLmN1c3RvbVNvcnQ6IHtcbiAgICAgICAgdGhpcy5jdXN0b21Tb3J0Qm9va21hcmtzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSB0aGlzLnBvc2l0aW9uU29ydDoge1xuICAgICAgICB0aGlzLnBvc2l0aW9uU29ydEJvb2ttYXJrcygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgdGhpcy5jdXN0b21Tb3J0Qm9va21hcmtzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcG9zaXRpb25Tb3J0Qm9va21hcmtzKCkge1xuICAgIHRoaXMuYm9va21hcmtOb2Rlcy5zb3J0KChhLCBiKSA9PiBhLnBhZ2VOdW1iZXIgPT09IGIucGFnZU51bWJlciA/IGEueUNvb3JkaW5hdGUgLSBiLnlDb29yZGluYXRlIDogYS5wYWdlTnVtYmVyIC0gYi5wYWdlTnVtYmVyKTtcbiAgICB0aGlzLmlzRHJhZ2dpbmdPbiA9IGZhbHNlO1xuICAgIHRoaXMucmVidWlsZFRyZWVGb3JEYXRhKHRoaXMuYm9va21hcmtOb2Rlcyk7XG4gIH1cblxuICBwcml2YXRlIGN1c3RvbVNvcnRCb29rbWFya3MoKSB7XG4gICAgaWYgKHRoaXMuYm9va21hcmtOb2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aGlzLmJvb2ttYXJrTm9kZXMuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuICAgIH1cbiAgICB0aGlzLmlzRHJhZ2dpbmdPbiA9IHRydWU7XG4gICAgdGhpcy5yZWJ1aWxkVHJlZUZvckRhdGEodGhpcy5ib29rbWFya05vZGVzKTtcbiAgfVxuXG4gIHByaXZhdGUgc2NhbGVkWSh5Q29vcmRpbmF0ZTogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcGFnZTogRG9jdW1lbnRQYWdlcyk6IG51bWJlciB7XG4gICAgY29uc3Qgdmlld3BvcnRTY2FsZSA9IHBhZ2Uudmlld3BvcnRTY2FsZSAvIHRoaXMuem9vbTtcbiAgICByZXR1cm4gKChoZWlnaHQgLyB0aGlzLnpvb20pIC0geUNvb3JkaW5hdGUpIC8gdmlld3BvcnRTY2FsZTtcbiAgfVxuXG4gIGhhc0NoaWxkID0gKF86IG51bWJlciwgbm9kZTogQm9va21hcmspID0+IHtcbiAgICByZXR1cm4gbm9kZS5jaGlsZHJlbiAmJiBub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDA7XG4gIH1cblxuICBnZXROb2RlKGJvb2ttYXJrcywgcGFyZW50SWQpIHtcbiAgICBpZiAodHlwZW9mIGJvb2ttYXJrcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9va21hcmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChib29rbWFya3NbaV0uaWQgPT09IHBhcmVudElkKSB7XG4gICAgICAgICAgcmV0dXJuIFtib29rbWFya3NbaV1dO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLmdldE5vZGUoYm9va21hcmtzW2ldLmNoaWxkcmVuLCBwYXJlbnRJZCk7XG4gICAgICAgIGlmIChhICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxCb29rbWFyaz4pIHtcblxuICAgIGlmICghZXZlbnQuaXNQb2ludGVyT3ZlckNvbnRhaW5lciB8fCAoZXZlbnQucHJldmlvdXNJbmRleCA9PT0gZXZlbnQuY3VycmVudEluZGV4KSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaGFzTW92ZWRVcFRoZVRyZWUgPSBldmVudC5wcmV2aW91c0luZGV4ID4gZXZlbnQuY3VycmVudEluZGV4O1xuICAgIGNvbnN0IGJvb2ttYXJrTm9kZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeSh0aGlzLl9ib29rbWFya05vZGVzKTtcbiAgICBjb25zdCBjaGFuZ2VkRGF0YSA9IEpTT04ucGFyc2UoYm9va21hcmtOb2Rlc1N0cmluZyk7XG4gICAgY29uc3QgdmlzaWJsZU5vZGVzID0gdGhpcy52aXNpYmxlTm9kZXModGhpcy5fYm9va21hcmtOb2Rlcyk7XG4gICAgY29uc3QgdG9Ob2RlID0gdmlzaWJsZU5vZGVzW2V2ZW50LmN1cnJlbnRJbmRleF0gYXMgQm9va21hcms7XG4gICAgY29uc3QgdG9Ob2RlU2libGluZ3MgPSB0aGlzLmZpbmROb2RlU2libGluZ3MoY2hhbmdlZERhdGEsIHRvTm9kZS5pZCk7XG5cbiAgICBjb25zdCB0b05vZGVQYXJlbnQgPSB0b05vZGVTaWJsaW5nc1swXS5wYXJlbnQ7XG4gICAgY29uc3QgdG9JbmRleCA9IHRvTm9kZVNpYmxpbmdzLmZpbmRJbmRleChzID0+IHMuaWQgPT09IHRvTm9kZS5pZCk7XG5cbiAgICBjb25zdCBmcm9tTm9kZSA9IGV2ZW50Lml0ZW0uZGF0YSBhcyBCb29rbWFyaztcbiAgICBjb25zdCBmcm9tTm9kZVNpYmxpbmdzID0gdGhpcy5maW5kTm9kZVNpYmxpbmdzKGNoYW5nZWREYXRhLCBmcm9tTm9kZS5pZCk7XG4gICAgY29uc3QgZnJvbUluZGV4ID0gZnJvbU5vZGVTaWJsaW5ncy5maW5kSW5kZXgobiA9PiBuLmlkID09PSBmcm9tTm9kZS5pZCk7XG5cbiAgICBpZiAodGhpcy5pc1RvTm9kZUNoaWxkT2ZGcm9tTm9kZShmcm9tTm9kZT8uY2hpbGRyZW4sIHRvTm9kZSkpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmRyYWdOb2RlSW5zZXJ0VG9QYXJlbnQpIHtcblxuICAgICAgY29uc3QgaW5kZXhPZlBhcmVudCA9IHRvTm9kZVNpYmxpbmdzLmZpbmRJbmRleChlbGVtZW50ID0+IGVsZW1lbnQuaWQgPT09IHRvTm9kZS5pZCk7XG4gICAgICBjb25zdCBwYXJlbnROb2RlID0gdG9Ob2RlU2libGluZ3NbaW5kZXhPZlBhcmVudF07XG4gICAgICBjb25zdCBmaXJzdENoaWxkID0gcGFyZW50Tm9kZT8uY2hpbGRyZW4gJiYgcGFyZW50Tm9kZT8uY2hpbGRyZW4ubGVuZ3RoID4gMCA/IHBhcmVudE5vZGUuY2hpbGRyZW5bMF0gOiBudWxsO1xuICAgICAgbGV0IG1vdmVkQm9va21hcmtzV2l0aFBhcmVudCA9IFt7IC4uLmZyb21Ob2RlLCBwYXJlbnQ6IHBhcmVudE5vZGUuaWQsIHByZXZpb3VzOiBudWxsIH1dO1xuXG4gICAgICBpZiAoZmlyc3RDaGlsZCkge1xuICAgICAgICBtb3ZlZEJvb2ttYXJrc1dpdGhQYXJlbnQgPSBbLi4ubW92ZWRCb29rbWFya3NXaXRoUGFyZW50LCB7IC4uLmZpcnN0Q2hpbGQsIHByZXZpb3VzOiBmcm9tTm9kZS5pZCB9XTtcbiAgICAgIH1cblxuICAgICAgbGV0IGZyb21Ob2RlU2libGluZyA9IHRoaXMuZ2V0U2libGluZ0Zyb21BbGxTaWJsaWluZ3MoZnJvbU5vZGVTaWJsaW5ncywgZnJvbUluZGV4ICsgMSk7XG4gICAgICBjb25zdCBuZXh0RnJvbWluZGV4Zm9yUGFyZW50ID0gZnJvbUluZGV4ICsgMTtcbiAgICAgIGZyb21Ob2RlU2libGluZyA9IGZyb21Ob2RlU2libGluZyAmJiBmcm9tTm9kZVNpYmxpbmcuaWQgPT09IGZyb21Ob2RlLnByZXZpb3VzID8gdGhpcy5nZXRTaWJsaW5nRnJvbUFsbFNpYmxpaW5ncyhmcm9tTm9kZVNpYmxpbmdzLCBuZXh0RnJvbWluZGV4Zm9yUGFyZW50ICsgMSkgOiBmcm9tTm9kZVNpYmxpbmc7XG5cbiAgICAgIGlmIChmcm9tTm9kZVNpYmxpbmcgJiYgZnJvbU5vZGVTaWJsaW5nLmlkICE9PSBwYXJlbnROb2RlLmlkKSB7XG4gICAgICAgIG1vdmVkQm9va21hcmtzV2l0aFBhcmVudCA9IFsuLi5tb3ZlZEJvb2ttYXJrc1dpdGhQYXJlbnQsIHsgLi4uZnJvbU5vZGVTaWJsaW5nLCBwcmV2aW91czogZnJvbU5vZGUucHJldmlvdXMgfV07XG4gICAgICB9XG5cbiAgICAgIGxldCBwcmV2aW91c1NpYmxpbmdGb3JQYXJlbnRJbmRleCA9IHRvSW5kZXggLSAxO1xuICAgICAgbGV0IHBhcmVudE5vZGVTaWJsaW5nID0gdGhpcy5nZXRTaWJsaW5nRnJvbUFsbFNpYmxpaW5ncyh0b05vZGVTaWJsaW5ncywgcHJldmlvdXNTaWJsaW5nRm9yUGFyZW50SW5kZXgpO1xuXG4gICAgICBpZiAocGFyZW50Tm9kZVNpYmxpbmcgJiYgcGFyZW50Tm9kZVNpYmxpbmcuaWQgPT0gZnJvbU5vZGUuaWQpIHtcbiAgICAgICAgcHJldmlvdXNTaWJsaW5nRm9yUGFyZW50SW5kZXggPSBwcmV2aW91c1NpYmxpbmdGb3JQYXJlbnRJbmRleCAtIDE7XG4gICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmdGb3JQYXJlbnRJbmRleCA+PSAwKSB7XG4gICAgICAgICAgcGFyZW50Tm9kZVNpYmxpbmcgPSB0aGlzLmdldFNpYmxpbmdGcm9tQWxsU2libGlpbmdzKHRvTm9kZVNpYmxpbmdzLCBwcmV2aW91c1NpYmxpbmdGb3JQYXJlbnRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcGFyZW50Tm9kZVNpYmxpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1vdmVkQm9va21hcmtzV2l0aFBhcmVudCA9IFsuLi5tb3ZlZEJvb2ttYXJrc1dpdGhQYXJlbnQsIHsgLi4ucGFyZW50Tm9kZSwgcHJldmlvdXM6IHBhcmVudE5vZGVTaWJsaW5nPy5pZCB9XTtcblxuICAgICAgY29uc3QgaGFzUGFyZW50RHVwcyA9IChtb3ZlZEJvb2ttYXJrc1dpdGhQYXJlbnQgYXMgQm9va21hcmtbXSkubWFwKHggPT4geC5pZCkuc29tZShmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAuc29tZSB3aWxsIGJyZWFrIGFzIHNvb24gYXMgZHVwbGljYXRlIGZvdW5kIChubyBuZWVkIHRvIGl0dGVyYXRlIG92ZXIgYWxsIGFycmF5KVxuICAgICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZih2YWx1ZSkgIT09IGFycmF5Lmxhc3RJbmRleE9mKHZhbHVlKTsgICAvLyBjb21wYXJpbmcgZmlyc3QgYW5kIGxhc3QgaW5kZXhlcyBvZiB0aGUgc2FtZSB2YWx1ZVxuICAgICAgfSlcbiAgICAgIGlmIChoYXNQYXJlbnREdXBzIHx8IG1vdmVkQm9va21hcmtzV2l0aFBhcmVudCAmJiBtb3ZlZEJvb2ttYXJrc1dpdGhQYXJlbnQubGVuZ3RoIDw9IDEpIHJldHVybjtcblxuICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgTW92ZUJvb2ttYXJrKG1vdmVkQm9va21hcmtzV2l0aFBhcmVudCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdG9Ob2RlU2libGluZ3MpIHJldHVybjtcblxuICAgIGNvbnN0IGZyb21Ob2RlUHJldmlvdXMgPSBoYXNNb3ZlZFVwVGhlVHJlZSA/IHRvTm9kZS5wcmV2aW91cyA6IHRvTm9kZS5pZDtcbiAgICBsZXQgbW92ZWRCb29rbWFya3MgPSBbe1xuICAgICAgLi4uZnJvbU5vZGUsXG4gICAgICBwcmV2aW91czogdG9Ob2RlLmluZGV4ID4gMCA/IGZyb21Ob2RlUHJldmlvdXMgOiB1bmRlZmluZWQsXG4gICAgICBwYXJlbnQ6IHRvTm9kZVBhcmVudFxuICAgIH1dO1xuXG4gICAgbGV0IGZyb21Ob2RlU2libGluZyA9IHRoaXMuZ2V0U2libGluZ0Zyb21BbGxTaWJsaWluZ3MoZnJvbU5vZGVTaWJsaW5ncywgZnJvbUluZGV4ICsgMSk7XG4gICAgY29uc3QgbmV4dEZyb21pbmRleCA9IGZyb21JbmRleCArIDE7XG4gICAgZnJvbU5vZGVTaWJsaW5nID0gZnJvbU5vZGVTaWJsaW5nICYmIGZyb21Ob2RlU2libGluZy5pZCA9PT0gZnJvbU5vZGUucHJldmlvdXMgPyB0aGlzLmdldFNpYmxpbmdGcm9tQWxsU2libGlpbmdzKGZyb21Ob2RlU2libGluZ3MsIG5leHRGcm9taW5kZXggKyAxKSA6IGZyb21Ob2RlU2libGluZztcblxuICAgIGlmIChmcm9tTm9kZVNpYmxpbmcpIHtcbiAgICAgIG1vdmVkQm9va21hcmtzID0gWy4uLm1vdmVkQm9va21hcmtzLCB7IC4uLmZyb21Ob2RlU2libGluZywgcHJldmlvdXM6IGZyb21Ob2RlLnByZXZpb3VzIH1dO1xuICAgIH1cblxuXG4gICAgbGV0IHRvTm9kZVNpYmxpbmdJbmRleCA9IGhhc01vdmVkVXBUaGVUcmVlID8gdG9JbmRleCA6IHRvSW5kZXggKyAxO1xuICAgIGxldCB0b05vZGVTaWJsaW5nID0gdGhpcy5nZXRTaWJsaW5nRnJvbUFsbFNpYmxpaW5ncyh0b05vZGVTaWJsaW5ncywgdG9Ob2RlU2libGluZ0luZGV4KTtcblxuICAgIGlmICh0b05vZGVTaWJsaW5nKSB7XG4gICAgICBtb3ZlZEJvb2ttYXJrcyA9IFsuLi5tb3ZlZEJvb2ttYXJrcywgeyAuLi50b05vZGVTaWJsaW5nLCBwcmV2aW91czogZnJvbU5vZGUuaWQgfV07XG4gICAgfVxuXG4gICAgY29uc3QgaGFzRHVwcyA9IChtb3ZlZEJvb2ttYXJrcyBhcyBCb29rbWFya1tdKS5tYXAoeCA9PiB4LmlkKS5zb21lKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICByZXR1cm4gYXJyYXkuaW5kZXhPZih2YWx1ZSkgIT09IGFycmF5Lmxhc3RJbmRleE9mKHZhbHVlKTsgICAvLyBjb21wYXJpbmcgZmlyc3QgYW5kIGxhc3QgaW5kZXhlcyBvZiB0aGUgc2FtZSB2YWx1ZVxuICAgIH0pXG4gICAgaWYgKGhhc0R1cHMgfHwgbW92ZWRCb29rbWFya3MgJiYgbW92ZWRCb29rbWFya3MubGVuZ3RoIDw9IDEpIHJldHVybjtcblxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE1vdmVCb29rbWFyayhtb3ZlZEJvb2ttYXJrcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaWJsaW5nRnJvbUFsbFNpYmxpaW5ncyhzaWJsaW5nOiBCb29rbWFya1tdLCBpbmRleCkge1xuICAgIHJldHVybiBzaWJsaW5nLmxlbmd0aCA+IGluZGV4ID8gc2libGluZ1tpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBkcmFnU3RhcnQoKSB7XG4gICAgdGhpcy5kcmFnTm9kZUluc2VydFRvUGFyZW50ID0gZmFsc2U7XG4gICAgdGhpcy5ob3ZlcmVkTm9kZSA9IG51bGw7XG4gICAgdGhpcy5pc1VzZXJkcmFnZ2luZyA9IHRydWU7XG4gIH1cblxuICBkcmFnRW5kKCkge1xuICAgIHRoaXMuaXNVc2VyZHJhZ2dpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGRyYWdIb3ZlcihldmVudDogYW55LCBub2RlOiBCb29rbWFyaykge1xuICAgIGlmICh0aGlzLmlzVXNlcmRyYWdnaW5nKSB7XG4gICAgICBjb25zdCBuZXdFdmVudDogYW55ID0gZXZlbnQ7XG4gICAgICBjb25zdCBwZXJjZW50YWdlWCA9IG5ld0V2ZW50Lm9mZnNldFggLyBuZXdFdmVudC50YXJnZXQuY2xpZW50V2lkdGg7XG4gICAgICBpZiAocGVyY2VudGFnZVggPiAuNTUpIHtcbiAgICAgICAgdGhpcy5ob3ZlcmVkTm9kZSA9IG5vZGU7XG4gICAgICAgIHRoaXMuZHJhZ05vZGVJbnNlcnRUb1BhcmVudCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmhvdmVyZWROb2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5kcmFnTm9kZUluc2VydFRvUGFyZW50ID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZHJhZ0hvdmVyRW5kKGV2ZW50OiBhbnksIG5vZGU6IEJvb2ttYXJrKSB7XG4gICAgaWYgKHRoaXMuaXNVc2VyZHJhZ2dpbmcpIHtcbiAgICAgIGlmICghbm9kZSB8fCB0aGlzLmhvdmVyZWROb2RlPy5pZCAhPT0gbm9kZS5pZCkge1xuICAgICAgICB0aGlzLmRyYWdOb2RlSW5zZXJ0VG9QYXJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ob3ZlcmVkTm9kZSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Ob2RlRXhwYW5kKG5vZGU6IEJvb2ttYXJrKSB7XG4gICAgY29uc3QgaXNFeHBhbmRlZCA9IHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChub2RlKTtcbiAgICByZXR1cm4gaXNFeHBhbmRlZCA/IFwidG9nZ2xlLWNoaWxkcmVuLXdyYXBwZXItZXhwYW5kZWRcIiA6IFwidG9nZ2xlLWNoaWxkcmVuLXdyYXBwZXItY29sbGFwc2VkXCI7XG4gIH1cblxuICB2aXNpYmxlTm9kZXMoYm9va21hcmtzOiBCb29rbWFya1tdKTogQm9va21hcmtbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICBmdW5jdGlvbiBhZGRFeHBhbmRlZENoaWxkcmVuKG5vZGU6IEJvb2ttYXJrLCBleHBhbmRlZDogQm9va21hcmtbXSkge1xuICAgICAgcmVzdWx0LnB1c2gobm9kZSk7XG4gICAgICBpZiAoZXhwYW5kZWQuc29tZShib29rbWFyayA9PiBib29rbWFyayAmJiBib29rbWFyay5pZCA9PT0gbm9kZS5pZCkgJiYgbm9kZS5jaGlsZHJlbikge1xuICAgICAgICBub2RlLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IGFkZEV4cGFuZGVkQ2hpbGRyZW4oY2hpbGQsIGV4cGFuZGVkKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGJvb2ttYXJrcy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBhZGRFeHBhbmRlZENoaWxkcmVuKG5vZGUsIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5zaW9uTW9kZWwuc2VsZWN0ZWQpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmaW5kTm9kZVNpYmxpbmdzKGFycjogQXJyYXk8YW55PiwgaWQ6IHN0cmluZyk6IEFycmF5PGFueT4ge1xuICAgIGxldCByZXN1bHQsIHN1YlJlc3VsdDtcbiAgICBhcnIuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xuICAgICAgaWYgKGl0ZW0uaWQgPT09IGlkKSB7XG4gICAgICAgIHJlc3VsdCA9IGFycjtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbT8uY2hpbGRyZW4pIHtcbiAgICAgICAgc3ViUmVzdWx0ID0gdGhpcy5maW5kTm9kZVNpYmxpbmdzKGl0ZW0uY2hpbGRyZW4sIGlkKTtcbiAgICAgICAgaWYgKHN1YlJlc3VsdCkgcmVzdWx0ID0gc3ViUmVzdWx0O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZWJ1aWxkVHJlZUZvckRhdGEoZGF0YTogYW55KSB7XG4gICAgdGhpcy5fYm9va21hcmtOb2RlcyA9IGRhdGEgPz8gW107XG4gICAgdGhpcy5kYXRhc291cmNlID0gbmV3IEFycmF5RGF0YVNvdXJjZSh0aGlzLl9ib29rbWFya05vZGVzKTtcbiAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IE5lc3RlZFRyZWVDb250cm9sPEJvb2ttYXJrPihub2RlID0+IG5vZGUuY2hpbGRyZW4pO1xuICAgIHRoaXMudHJlZUNvbnRyb2wuZGF0YU5vZGVzID0gdGhpcy5fYm9va21hcmtOb2RlcztcbiAgICB0aGlzLmV4cGFuc2lvbk1vZGVsLnNlbGVjdGVkLmZvckVhY2goKGJvb2ttYXJrKSA9PiB7XG4gICAgICBjb25zdCBub2RlID0gdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZCgobikgPT4gbi5pZCA9PT0gYm9va21hcmsuaWQpO1xuICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQobm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICBpc1RvTm9kZUNoaWxkT2ZGcm9tTm9kZShmcm9tTm9kZUNoaWxkcmVuOiBCb29rbWFya1tdLCB0b05vZGU6IEJvb2ttYXJrKSB7XG5cbiAgICBpZiAoIWZyb21Ob2RlQ2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldE5vZGUoZnJvbU5vZGVDaGlsZHJlbiwgdG9Ob2RlLmlkKTtcbiAgICByZXR1cm4gcmVzdWx0ID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG59XG4iLCI8YSAqbmdJZj1cImJvb2ttYXJrTm9kZXM/Lmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiaGlnaGxpZ2h0ZWRPdXRsaW5lSXRlbVwiXG4gID5ObyBib29rbWFya3MgY3JlYXRlZCB5ZXQ8L2Fcbj5cbjxjZGstdHJlZVxuICBjZGtEcm9wTGlzdFxuICBbY2RrRHJvcExpc3REaXNhYmxlZF09XCIhaXNEcmFnZ2luZ09uXCJcbiAgY2xhc3M9XCJib29rbWFya3MtdHJlZVwiXG4gICpuZ0lmPVwiZGF0YXNvdXJjZVwiXG4gIFtkYXRhU291cmNlXT1cImRhdGFzb3VyY2VcIlxuICBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIlxuICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiXG4+XG4gIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBsZWFmIG5vZGVzIC0tPlxuICA8Y2RrLW5lc3RlZC10cmVlLW5vZGUgY2xhc3M9XCJub2RlLXdyYXBwZXJcIiAqY2RrVHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiPlxuICAgIDxkaXYgKm5nSWY9XCJub2RlLmlkICE9PSBlZGl0YWJsZUJvb2ttYXJrOyBlbHNlIGlucHV0Qm9va21hcmtcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJub2RlLWNvbnRlbnQtd3JhcHBlciBuZXN0ZWQtdHJlZS1ub2RlXCJcbiAgICAgICAgY2RrRHJhZ1xuICAgICAgICBbY2RrRHJhZ0RhdGFdPVwibm9kZVwiXG4gICAgICAgIChtb3VzZWVudGVyKT1cImRyYWdIb3ZlcigkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgKG1vdXNlbGVhdmUpPVwiZHJhZ0hvdmVyRW5kKCRldmVudCwgbm9kZSlcIlxuICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwiZHJhZ1N0YXJ0KClcIlxuICAgICAgICAoY2RrRHJhZ1JlbGVhc2VkKT1cImRyYWdFbmQoKVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvdXRsaW5lSXRlbVwiPlxuICAgICAgICAgIDxhIChjbGljayk9XCJnb1RvQm9va21hcmsobm9kZSlcIj5cbiAgICAgICAgICAgIHt7IG5vZGUubmFtZSB9fVxuICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJvb2ttYXJrX19yZW5hbWVcIlxuICAgICAgICAgIChjbGljayk9XCJlZGl0Qm9va21hcmsobm9kZS5pZClcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cImJvb2ttYXJrX19kZWxldGVcIlxuICAgICAgICAgIChjbGljayk9XCJkZWxldGVCb29rbWFyazIobm9kZSlcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJub2RlLWRyb3Atc2xvdFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjaW5wdXRCb29rbWFyaz5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjYm9va21hcmtOYW1lXG4gICAgICAgIGNsYXNzPVwiYm9va21hcmtfX2lucHV0XCJcbiAgICAgICAgW3ZhbHVlXT1cIm5vZGUubmFtZVwiXG4gICAgICAgIFttYXhMZW5ndGhdPVwiQk9PS01BUktfQ0hBUl9MSU1JVFwiXG4gICAgICAvPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJvb2ttYXJrX19zYXZlXCJcbiAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUJvb2ttYXJrKG5vZGUsIGJvb2ttYXJrTmFtZS52YWx1ZSlcIlxuICAgICAgPjwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG4gIDwhLS0gVGhpcyBpcyB0aGUgdHJlZSBub2RlIHRlbXBsYXRlIGZvciBleHBhbmRhYmxlIG5vZGVzIC0tPlxuICA8Y2RrLW5lc3RlZC10cmVlLW5vZGVcbiAgICBjbGFzcz1cIm5vZGUtd3JhcHBlclwiXG4gICAgKmNka1RyZWVOb2RlRGVmPVwibGV0IG5vZGU7IHdoZW46IGhhc0NoaWxkXCJcbiAgPlxuICAgIDxkaXYgKm5nSWY9XCJub2RlLmlkICE9PSBlZGl0YWJsZUJvb2ttYXJrOyBlbHNlIGlucHV0Qm9va21hcmsyXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibm9kZS1jb250ZW50LXdyYXBwZXIgbmVzdGVkLXRyZWUtbm9kZVwiXG4gICAgICAgIGNka0RyYWdcbiAgICAgICAgW2Nka0RyYWdEYXRhXT1cIm5vZGVcIlxuICAgICAgICAobW91c2VlbnRlcik9XCJkcmFnSG92ZXIoJGV2ZW50LCBub2RlKVwiXG4gICAgICAgIChtb3VzZWxlYXZlKT1cImRyYWdIb3ZlckVuZCgkZXZlbnQsIG5vZGUpXCJcbiAgICAgICAgKGNka0RyYWdTdGFydGVkKT1cImRyYWdTdGFydCgpXCJcbiAgICAgICAgKGNka0RyYWdSZWxlYXNlZCk9XCJkcmFnRW5kKClcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib3V0bGluZUl0ZW1cIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2RrVHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgIGNsYXNzPVwidG9nZ2xlLWNoaWxkcmVuLXdyYXBwZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwib25Ob2RlRXhwYW5kKG5vZGUpXCJcbiAgICAgICAgICAgID48c3BhbiBjbGFzcz1cInRvZ2dsZS1jaGlsZHJlblwiPjwvc3BhblxuICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgPGEgKGNsaWNrKT1cImdvVG9Cb29rbWFyayhub2RlKVwiPlxuICAgICAgICAgICAge3sgbm9kZS5uYW1lIH19XG4gICAgICAgICAgPC9hPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYm9va21hcmtfX3JlbmFtZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImVkaXRCb29rbWFyayhub2RlLmlkKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYm9va21hcmtfX2RlbGV0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUJvb2ttYXJrMihub2RlKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm5vZGUtZHJvcC1zbG90XCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNpbnB1dEJvb2ttYXJrMj5cbiAgICAgIDxpbnB1dFxuICAgICAgICAjYm9va21hcmtOYW1lXG4gICAgICAgIGNsYXNzPVwiYm9va21hcmtfX2lucHV0XCJcbiAgICAgICAgW3ZhbHVlXT1cIm5vZGUubmFtZVwiXG4gICAgICAgIFttYXhMZW5ndGhdPVwiQk9PS01BUktfQ0hBUl9MSU1JVFwiXG4gICAgICAvPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJvb2ttYXJrX19zYXZlXCJcbiAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUJvb2ttYXJrKG5vZGUsIGJvb2ttYXJrTmFtZS52YWx1ZSlcIlxuICAgICAgPjwvYnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPGRpdiBjbGFzcz1cIm5lc3RlZC10cmVlLW5vZGUtY2hpbGRyZW5cIiAqbmdJZj1cInRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSlcIj5cbiAgICAgIDxuZy1jb250YWluZXIgY2RrVHJlZU5vZGVPdXRsZXQ+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvY2RrLW5lc3RlZC10cmVlLW5vZGU+XG48L2Nkay10cmVlPlxuIl19
|
|
@@ -4478,7 +4478,8 @@ class BookmarksComponent {
|
|
|
4478
4478
|
this._bookmarkNodes = [];
|
|
4479
4479
|
// expansion model tracks expansion state
|
|
4480
4480
|
this.expansionModel = new SelectionModel(true);
|
|
4481
|
-
this.
|
|
4481
|
+
this.isDraggingOn = false;
|
|
4482
|
+
this.isUserdragging = false;
|
|
4482
4483
|
this.expandDelay = 1000;
|
|
4483
4484
|
this.pageLookup = {};
|
|
4484
4485
|
this.BOOKMARK_CHAR_LIMIT = 30;
|
|
@@ -4590,12 +4591,14 @@ class BookmarksComponent {
|
|
|
4590
4591
|
}
|
|
4591
4592
|
positionSortBookmarks() {
|
|
4592
4593
|
this.bookmarkNodes.sort((a, b) => a.pageNumber === b.pageNumber ? a.yCoordinate - b.yCoordinate : a.pageNumber - b.pageNumber);
|
|
4594
|
+
this.isDraggingOn = false;
|
|
4593
4595
|
this.rebuildTreeForData(this.bookmarkNodes);
|
|
4594
4596
|
}
|
|
4595
4597
|
customSortBookmarks() {
|
|
4596
4598
|
if (this.bookmarkNodes.length > 1) {
|
|
4597
4599
|
this.bookmarkNodes.sort((a, b) => a.index - b.index);
|
|
4598
4600
|
}
|
|
4601
|
+
this.isDraggingOn = true;
|
|
4599
4602
|
this.rebuildTreeForData(this.bookmarkNodes);
|
|
4600
4603
|
}
|
|
4601
4604
|
scaledY(yCoordinate, height, page) {
|
|
@@ -4694,13 +4697,13 @@ class BookmarksComponent {
|
|
|
4694
4697
|
dragStart() {
|
|
4695
4698
|
this.dragNodeInsertToParent = false;
|
|
4696
4699
|
this.hoveredNode = null;
|
|
4697
|
-
this.
|
|
4700
|
+
this.isUserdragging = true;
|
|
4698
4701
|
}
|
|
4699
4702
|
dragEnd() {
|
|
4700
|
-
this.
|
|
4703
|
+
this.isUserdragging = false;
|
|
4701
4704
|
}
|
|
4702
4705
|
dragHover(event, node) {
|
|
4703
|
-
if (this.
|
|
4706
|
+
if (this.isUserdragging) {
|
|
4704
4707
|
const newEvent = event;
|
|
4705
4708
|
const percentageX = newEvent.offsetX / newEvent.target.clientWidth;
|
|
4706
4709
|
if (percentageX > .55) {
|
|
@@ -4711,20 +4714,15 @@ class BookmarksComponent {
|
|
|
4711
4714
|
this.hoveredNode = null;
|
|
4712
4715
|
this.dragNodeInsertToParent = false;
|
|
4713
4716
|
}
|
|
4714
|
-
clearTimeout(this.expandTimeout);
|
|
4715
|
-
this.expandTimeout = setTimeout(() => {
|
|
4716
|
-
this.treeControl.expand(node);
|
|
4717
|
-
}, this.expandDelay);
|
|
4718
4717
|
}
|
|
4719
4718
|
}
|
|
4720
4719
|
dragHoverEnd(event, node) {
|
|
4721
4720
|
var _a;
|
|
4722
|
-
if (this.
|
|
4721
|
+
if (this.isUserdragging) {
|
|
4723
4722
|
if (!node || ((_a = this.hoveredNode) === null || _a === void 0 ? void 0 : _a.id) !== node.id) {
|
|
4724
4723
|
this.dragNodeInsertToParent = false;
|
|
4725
4724
|
this.hoveredNode = null;
|
|
4726
4725
|
}
|
|
4727
|
-
clearTimeout(this.expandTimeout);
|
|
4728
4726
|
}
|
|
4729
4727
|
}
|
|
4730
4728
|
onNodeExpand(node) {
|
|
@@ -4777,10 +4775,10 @@ class BookmarksComponent {
|
|
|
4777
4775
|
}
|
|
4778
4776
|
}
|
|
4779
4777
|
/** @nocollapse */ BookmarksComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BookmarksComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component });
|
|
4780
|
-
/** @nocollapse */ BookmarksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BookmarksComponent, selector: "mv-bookmarks", inputs: { bookmarkNodes: "bookmarkNodes", zoom: "zoom", rotate: "rotate" }, outputs: { goToDestination: "goToDestination" }, ngImport: i0, template: "<a *ngIf=\"bookmarkNodes?.length === 0\" class=\"highlightedOutlineItem\"\n >No bookmarks created yet</a\n>\n<cdk-tree\n cdkDropList\n class=\"bookmarks-tree\"\n *ngIf=\"datasource\"\n [dataSource]=\"datasource\"\n [treeControl]=\"treeControl\"\n (cdkDropListDropped)=\"drop($event)\"\n>\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node class=\"node-wrapper\" *cdkTreeNodeDef=\"let node\">\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n class=\"node-wrapper\"\n *cdkTreeNodeDef=\"let node; when: hasChild\"\n >\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark2\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <span\n cdkTreeNodeToggle\n class=\"toggle-children-wrapper\"\n [ngClass]=\"onNodeExpand(node)\"\n ><span class=\"toggle-children\"></span\n ></span>\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark2>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n <div class=\"nested-tree-node-children\" *ngIf=\"treeControl.isExpanded(node)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n</cdk-tree>\n", dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.CdkNestedTreeNode, selector: "cdk-nested-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i3.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i3.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i3.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i3.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "directive", type: i4$3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4$3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }] });
|
|
4778
|
+
/** @nocollapse */ BookmarksComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BookmarksComponent, selector: "mv-bookmarks", inputs: { bookmarkNodes: "bookmarkNodes", zoom: "zoom", rotate: "rotate" }, outputs: { goToDestination: "goToDestination" }, ngImport: i0, template: "<a *ngIf=\"bookmarkNodes?.length === 0\" class=\"highlightedOutlineItem\"\n >No bookmarks created yet</a\n>\n<cdk-tree\n cdkDropList\n [cdkDropListDisabled]=\"!isDraggingOn\"\n class=\"bookmarks-tree\"\n *ngIf=\"datasource\"\n [dataSource]=\"datasource\"\n [treeControl]=\"treeControl\"\n (cdkDropListDropped)=\"drop($event)\"\n>\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node class=\"node-wrapper\" *cdkTreeNodeDef=\"let node\">\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n class=\"node-wrapper\"\n *cdkTreeNodeDef=\"let node; when: hasChild\"\n >\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark2\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <span\n cdkTreeNodeToggle\n class=\"toggle-children-wrapper\"\n [ngClass]=\"onNodeExpand(node)\"\n ><span class=\"toggle-children\"></span\n ></span>\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark2>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n <div class=\"nested-tree-node-children\" *ngIf=\"treeControl.isExpanded(node)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n</cdk-tree>\n", dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.CdkNestedTreeNode, selector: "cdk-nested-tree-node", inputs: ["role", "disabled", "tabIndex"], exportAs: ["cdkNestedTreeNode"] }, { kind: "directive", type: i3.CdkTreeNodeDef, selector: "[cdkTreeNodeDef]", inputs: ["cdkTreeNodeDefWhen"] }, { kind: "directive", type: i3.CdkTreeNodeToggle, selector: "[cdkTreeNodeToggle]", inputs: ["cdkTreeNodeToggleRecursive"] }, { kind: "component", type: i3.CdkTree, selector: "cdk-tree", inputs: ["dataSource", "treeControl", "trackBy"], exportAs: ["cdkTree"] }, { kind: "directive", type: i3.CdkTreeNodeOutlet, selector: "[cdkTreeNodeOutlet]" }, { kind: "directive", type: i4$3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i4$3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }] });
|
|
4781
4779
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BookmarksComponent, decorators: [{
|
|
4782
4780
|
type: Component,
|
|
4783
|
-
args: [{ selector: 'mv-bookmarks', template: "<a *ngIf=\"bookmarkNodes?.length === 0\" class=\"highlightedOutlineItem\"\n >No bookmarks created yet</a\n>\n<cdk-tree\n cdkDropList\n class=\"bookmarks-tree\"\n *ngIf=\"datasource\"\n [dataSource]=\"datasource\"\n [treeControl]=\"treeControl\"\n (cdkDropListDropped)=\"drop($event)\"\n>\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node class=\"node-wrapper\" *cdkTreeNodeDef=\"let node\">\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n class=\"node-wrapper\"\n *cdkTreeNodeDef=\"let node; when: hasChild\"\n >\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark2\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <span\n cdkTreeNodeToggle\n class=\"toggle-children-wrapper\"\n [ngClass]=\"onNodeExpand(node)\"\n ><span class=\"toggle-children\"></span\n ></span>\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark2>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n <div class=\"nested-tree-node-children\" *ngIf=\"treeControl.isExpanded(node)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n</cdk-tree>\n" }]
|
|
4781
|
+
args: [{ selector: 'mv-bookmarks', template: "<a *ngIf=\"bookmarkNodes?.length === 0\" class=\"highlightedOutlineItem\"\n >No bookmarks created yet</a\n>\n<cdk-tree\n cdkDropList\n [cdkDropListDisabled]=\"!isDraggingOn\"\n class=\"bookmarks-tree\"\n *ngIf=\"datasource\"\n [dataSource]=\"datasource\"\n [treeControl]=\"treeControl\"\n (cdkDropListDropped)=\"drop($event)\"\n>\n <!-- This is the tree node template for leaf nodes -->\n <cdk-nested-tree-node class=\"node-wrapper\" *cdkTreeNodeDef=\"let node\">\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n </cdk-nested-tree-node>\n <!-- This is the tree node template for expandable nodes -->\n <cdk-nested-tree-node\n class=\"node-wrapper\"\n *cdkTreeNodeDef=\"let node; when: hasChild\"\n >\n <div *ngIf=\"node.id !== editableBookmark; else inputBookmark2\">\n <div\n class=\"node-content-wrapper nested-tree-node\"\n cdkDrag\n [cdkDragData]=\"node\"\n (mouseenter)=\"dragHover($event, node)\"\n (mouseleave)=\"dragHoverEnd($event, node)\"\n (cdkDragStarted)=\"dragStart()\"\n (cdkDragReleased)=\"dragEnd()\"\n >\n <div class=\"outlineItem\">\n <span\n cdkTreeNodeToggle\n class=\"toggle-children-wrapper\"\n [ngClass]=\"onNodeExpand(node)\"\n ><span class=\"toggle-children\"></span\n ></span>\n <a (click)=\"goToBookmark(node)\">\n {{ node.name }}\n </a>\n </div>\n <button\n class=\"bookmark__rename\"\n (click)=\"editBookmark(node.id)\"\n ></button>\n <button\n class=\"bookmark__delete\"\n (click)=\"deleteBookmark2(node)\"\n ></button>\n </div>\n <div class=\"node-drop-slot\"></div>\n </div>\n <ng-template #inputBookmark2>\n <input\n #bookmarkName\n class=\"bookmark__input\"\n [value]=\"node.name\"\n [maxLength]=\"BOOKMARK_CHAR_LIMIT\"\n />\n <button\n class=\"bookmark__save\"\n (click)=\"updateBookmark(node, bookmarkName.value)\"\n ></button>\n </ng-template>\n <div class=\"nested-tree-node-children\" *ngIf=\"treeControl.isExpanded(node)\">\n <ng-container cdkTreeNodeOutlet></ng-container>\n </div>\n </cdk-nested-tree-node>\n</cdk-tree>\n" }]
|
|
4784
4782
|
}], ctorParameters: function () { return [{ type: i1.Store }]; }, propDecorators: { bookmarkNodes: [{
|
|
4785
4783
|
type: Input
|
|
4786
4784
|
}], zoom: [{
|