UNPKG

ng2-right-click-menu

Version:
407 lines 28.2 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { Overlay } from '@angular/cdk/overlay'; import { TemplatePortal } from '@angular/cdk/portal'; var ShContextMenuService = /** @class */ (function () { function ShContextMenuService(overlay) { this.overlay = overlay; this.activeOverlays = []; } /** * @param {?} ctxEvent * @return {?} */ ShContextMenuService.prototype.openMenu = /** * @param {?} ctxEvent * @return {?} */ function (ctxEvent) { this.closeCurrentOverlays(); var menu = ctxEvent.menu, mouseEvent = ctxEvent.mouseEvent, data = ctxEvent.data; this.activeMenu = menu; this.anchorElement = this.createAnchorElement(); /** @type {?} */ var scrollStrategy = this.buildScrollStrategy(); /** @type {?} */ var positionStrategy = this.buildPositionStrategy(this.anchorElement, mouseEvent); this.attachContextToItems(menu, data); /** @type {?} */ var overlayRef = this.createAndAttachOverlay(positionStrategy, scrollStrategy, menu, true); this.attachOverlayRef(menu, overlayRef); this.registerDetachEvents(overlayRef); }; /** * @param {?} ctxEvent * @return {?} */ ShContextMenuService.prototype.openSubMenu = /** * @param {?} ctxEvent * @return {?} */ function (ctxEvent) { var menu = ctxEvent.menu, mouseEvent = ctxEvent.mouseEvent, targetElement = ctxEvent.targetElement, data = ctxEvent.data, parentMenu = ctxEvent.parentMenu; mouseEvent.preventDefault(); mouseEvent.stopPropagation(); /** @type {?} */ var scrollStrategy = this.buildScrollStrategy(); /** @type {?} */ var positionStrategy = this.buildPositionStrategyForSubMenu(targetElement); /** @type {?} */ var overlayRef = this.createAndAttachOverlay(positionStrategy, scrollStrategy, menu, false); this.attachContextToItems(menu, data); this.attachThisContext(menu, parentMenu); this.attachOverlayRef(menu, overlayRef); }; /** * @return {?} */ ShContextMenuService.prototype.destroy = /** * @return {?} */ function () { this.closeCurrentOverlays(); this.subs.unsubscribe(); }; /** * @return {?} */ ShContextMenuService.prototype.ngOnDestroy = /** * @return {?} */ function () { this.destroy(); }; /** * @param {?} menu * @return {?} */ ShContextMenuService.prototype.closeSubMenus = /** * @param {?} menu * @return {?} */ function (menu) { var _this = this; /** @type {?} */ var itemsWithSubMenus = menu.menuItems.filter((/** * @param {?} i * @return {?} */ function (i) { return !!i.subMenu && !!i.subMenu.overlayRef; })); if (itemsWithSubMenus.length) { itemsWithSubMenus.forEach((/** * @param {?} sm * @return {?} */ function (sm) { return _this.closeSubMenus(sm.subMenu); })); /** @type {?} */ var overlayRefs = itemsWithSubMenus.map((/** * @param {?} i * @return {?} */ function (i) { return i.subMenu.overlayRef; })); overlayRefs.forEach((/** * @param {?} r * @return {?} */ function (r) { return r.dispose(); })); } }; /** * @private * @param {?} overlayRef * @return {?} */ ShContextMenuService.prototype.registerDetachEvents = /** * @private * @param {?} overlayRef * @return {?} */ function (overlayRef) { this.subs = overlayRef .backdropClick() .subscribe(this.closeCurrentOverlays.bind(this)); this.subs.add(overlayRef.detachments().subscribe(this.closeCurrentOverlays.bind(this))); }; /** * @private * @param {?} positionStrategy * @param {?} scrollStrategy * @param {?} menu * @param {?=} hasBackdrop * @return {?} */ ShContextMenuService.prototype.createAndAttachOverlay = /** * @private * @param {?} positionStrategy * @param {?} scrollStrategy * @param {?} menu * @param {?=} hasBackdrop * @return {?} */ function (positionStrategy, scrollStrategy, menu, hasBackdrop) { if (hasBackdrop === void 0) { hasBackdrop = true; } /** @type {?} */ var overlayRef = this.overlay.create({ positionStrategy: positionStrategy, scrollStrategy: scrollStrategy, hasBackdrop: hasBackdrop, backdropClass: 'sh-backdrop' }); /* TODO: try passing the TemplatePortal context (data) and then injecting it to the *ngTemplateOutlet in the component template */ /** @type {?} */ var menuPortal = new TemplatePortal(menu.menuTemplate, menu.menuContainer); overlayRef.attach(menuPortal); this.activeOverlays.push(overlayRef); return overlayRef; }; /** * @private * @return {?} */ ShContextMenuService.prototype.buildScrollStrategy = /** * @private * @return {?} */ function () { return this.overlay.scrollStrategies.reposition({ autoClose: true }); }; /** * @private * @param {?} ele * @param {?} event * @return {?} */ ShContextMenuService.prototype.buildPositionStrategy = /** * @private * @param {?} ele * @param {?} event * @return {?} */ function (ele, event) { var x = event.x, y = event.y; return this.overlay .position() .flexibleConnectedTo(ele) .withDefaultOffsetX(x) .withDefaultOffsetY(y) .withPositions(this.buildPositions()) .withFlexibleDimensions(false) .withPush(true); }; /** * @private * @param {?} elm * @return {?} */ ShContextMenuService.prototype.buildPositionStrategyForSubMenu = /** * @private * @param {?} elm * @return {?} */ function (elm) { return this.overlay .position() .flexibleConnectedTo(elm) .withPositions(this.buildSubMenuPositions()) .withFlexibleDimensions(false) .withPush(true); }; /** * @private * @return {?} */ ShContextMenuService.prototype.closeCurrentOverlays = /** * @private * @return {?} */ function () { if (this.anchorElement) { this.anchorElement.remove(); } this.activeOverlays.forEach((/** * @param {?} o * @return {?} */ function (o) { o.detach(); o.dispose(); })); this.activeOverlays = []; // TODO: create close subject and emit. // subscribe in component if (this.activeMenu) { this.activeMenu.close(); } }; /** * @private * @param {?} menu * @param {?} data * @return {?} */ ShContextMenuService.prototype.attachContextToItems = /** * @private * @param {?} menu * @param {?} data * @return {?} */ function (menu, data) { menu.menuItems.forEach((/** * @param {?} i * @return {?} */ function (i) { return (i.context.$implicit = data); })); }; /** * @private * @param {?} menu * @param {?} parentMenu * @return {?} */ ShContextMenuService.prototype.attachThisContext = /** * @private * @param {?} menu * @param {?} parentMenu * @return {?} */ function (menu, parentMenu) { menu.thisContext = parentMenu.thisContext; }; /** * @private * @param {?} menu * @param {?} overlayRef * @return {?} */ ShContextMenuService.prototype.attachOverlayRef = /** * @private * @param {?} menu * @param {?} overlayRef * @return {?} */ function (menu, overlayRef) { menu.overlayRef = overlayRef; }; /** * @private * @return {?} */ ShContextMenuService.prototype.createAnchorElement = /** * @private * @return {?} */ function () { /** @type {?} */ var div = document.createElement('div'); div.style.position = 'absolute'; div.style.top = '0'; div.style.bottom = '0'; div.style.left = '0'; div.style.right = '0'; document.body.appendChild(div); return div; }; /** * @private * @return {?} */ ShContextMenuService.prototype.buildSubMenuPositions = /** * @private * @return {?} */ function () { return [ { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top' }, { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top' }, { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom' }, { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom' } ]; }; /** * @private * @return {?} */ ShContextMenuService.prototype.buildPositions = /** * @private * @return {?} */ function () { return [ { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'top' }, { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top' }, { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom' }, { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'bottom' } ]; }; ShContextMenuService.decorators = [ { type: Injectable } ]; /** @nocollapse */ ShContextMenuService.ctorParameters = function () { return [ { type: Overlay } ]; }; return ShContextMenuService; }()); export { ShContextMenuService }; if (false) { /** @type {?} */ ShContextMenuService.prototype.activeOverlays; /** @type {?} */ ShContextMenuService.prototype.subs; /** @type {?} */ ShContextMenuService.prototype.activeMenu; /** @type {?} */ ShContextMenuService.prototype.anchorElement; /** * @type {?} * @private */ ShContextMenuService.prototype.overlay; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2gtY29udGV4dC1tZW51LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZzItcmlnaHQtY2xpY2stbWVudS8iLCJzb3VyY2VzIjpbImxpYi9zaC1jb250ZXh0LW1lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFjLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUVsRSxPQUFPLEVBSU4sT0FBTyxFQUVQLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBUXJEO0lBT0MsOEJBQW9CLE9BQWdCO1FBQWhCLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFMcEMsbUJBQWMsR0FBaUIsRUFBRSxDQUFDO0lBS0ssQ0FBQzs7Ozs7SUFFeEMsdUNBQVE7Ozs7SUFBUixVQUFTLFFBQTRCO1FBQ3BDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3BCLElBQUEsb0JBQUksRUFBRSxnQ0FBVSxFQUFFLG9CQUFJO1FBRTlCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBRXZCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7O1lBQzFDLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7O1lBQzNDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDbEQsSUFBSSxDQUFDLGFBQWEsRUFDbEIsVUFBVSxDQUNWO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7WUFFaEMsVUFBVSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FDN0MsZ0JBQWdCLEVBQ2hCLGNBQWMsRUFDZCxJQUFJLEVBQ0osSUFBSSxDQUNKO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsb0JBQW9CLENBQUMs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S0FBSztnQkFDZCxRQUFRLEVBQUUsT0FBTztnQkFDakIsUUFBUSxFQUFFLFFBQVE7YUFDbEI7WUFDRDtnQkFDQyxPQUFPLEVBQUUsT0FBTztnQkFDaEIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsUUFBUSxFQUFFLFFBQVE7YUFDbEI7U0FDRCxDQUFDO0lBQ0gsQ0FBQzs7Z0JBaFFELFVBQVU7Ozs7Z0JBWFYsT0FBTzs7SUE0UVIsMkJBQUM7Q0FBQSxBQWpRRCxJQWlRQztTQWhRWSxvQkFBb0I7OztJQUNoQyw4Q0FBa0M7O0lBQ2xDLG9DQUFtQjs7SUFDbkIsMENBQW1DOztJQUNuQyw2Q0FBMkI7Ozs7O0lBRWYsdUNBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaENvbnRleHRNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9zaC1jb250ZXh0LW1lbnUuY29tcG9uZW50JztcbmltcG9ydCB7XG5cdENvbm5lY3Rpb25Qb3NpdGlvblBhaXIsXG5cdEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSxcblx0R2xvYmFsUG9zaXRpb25TdHJhdGVneSxcblx0T3ZlcmxheSxcblx0U2Nyb2xsU3RyYXRlZ3lcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG5cdFNoQ29udGV4dE1lbnVFdmVudCxcblx0U2hDb250ZXh0U3ViTWVudUV2ZW50XG59IGZyb20gJy4vc2gtY29udGV4dC1tZW51Lm1vZGVscyc7XG5pbXBvcnQgeyBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNoQ29udGV4dE1lbnVTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblx0YWN0aXZlT3ZlcmxheXM6IE92ZXJsYXlSZWZbXSA9IFtdO1xuXHRzdWJzOiBTdWJzY3JpcHRpb247XG5cdGFjdGl2ZU1lbnU6IFNoQ29udGV4dE1lbnVDb21wb25lbnQ7XG5cdGFuY2hvckVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG5cdGNvbnN0cnVjdG9yKHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSkge31cblxuXHRvcGVuTWVudShjdHhFdmVudDogU2hDb250ZXh0TWVudUV2ZW50KSB7XG5cdFx0dGhpcy5jbG9zZUN1cnJlbnRPdmVybGF5cygpO1xuXHRcdGNvbnN0IHsgbWVudSwgbW91c2VFdmVudCwgZGF0YSB9ID0gY3R4RXZlbnQ7XG5cblx0XHR0aGlzLmFjdGl2ZU1lbnUgPSBtZW51O1xuXG5cdFx0dGhpcy5hbmNob3JFbGVtZW50ID0gdGhpcy5jcmVhdGVBbmNob3JFbGVtZW50KCk7XG5cdFx0Y29uc3Qgc2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLmJ1aWxkU2Nyb2xsU3RyYXRlZ3koKTtcblx0XHRjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5idWlsZFBvc2l0aW9uU3RyYXRlZ3koXG5cdFx0XHR0aGlzLmFuY2hvckVsZW1lbnQsXG5cdFx0XHRtb3VzZUV2ZW50XG5cdFx0KTtcblxuXHRcdHRoaXMuYXR0YWNoQ29udGV4dFRvSXRlbXMobWVudSwgZGF0YSk7XG5cblx0XHRjb25zdCBvdmVybGF5UmVmID0gdGhpcy5jcmVhdGVBbmRBdHRhY2hPdmVybGF5KFxuXHRcdFx0cG9zaXRpb25TdHJhdGVneSxcblx0XHRcdHNjcm9sbFN0cmF0ZWd5LFxuXHRcdFx0bWVudSxcblx0XHRcdHRydWVcblx0XHQpO1xuXHRcdHRoaXMuYXR0YWNoT3ZlcmxheVJlZihtZW51LCBvdmVybGF5UmVmKTtcblxuXHRcdHRoaXMucmVnaXN0ZXJEZXRhY2hFdmVudHMob3ZlcmxheVJlZik7XG5cdH1cblxuXHRvcGVuU3ViTWVudShjdHhFdmVudDogU2hDb250ZXh0U3ViTWVudUV2ZW50KTogYW55IHtcblx0XHRjb25zdCB7IG1lbnUsIG1vdXNlRXZlbnQsIHRhcmdldEVsZW1lbnQsIGRhdGEsIHBhcmVudE1lbnUgfSA9IGN0eEV2ZW50O1xuXG5cdFx0bW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdG1vdXNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHRjb25zdCBzY3JvbGxTdHJhdGVneSA9IHRoaXMuYnVpbGRTY3JvbGxTdHJhdGVneSgpO1xuXHRcdGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3kgPSB0aGlzLmJ1aWxkUG9zaXRpb25TdHJhdGVneUZvclN1Yk1lbnUoXG5cdFx0XHR0YXJnZXRFbGVtZW50XG5cdFx0KTtcblx0XHRjb25zdCBvdmVybGF5UmVmID0gdGhpcy5jcmVhdGVBbmRBdHRhY2hPdmVybGF5KFxuXHRcdFx0cG9zaXRpb25TdHJhdGVneSxcblx0XHRcdHNjcm9sbFN0cmF0ZWd5LFxuXHRcdFx0bWVudSxcblx0XHRcdGZhbHNlXG5cdFx0KTtcblxuXHRcdHRoaXMuYXR0YWNoQ29udGV4dFRvSXRlbXMobWVudSwgZGF0YSk7XG5cdFx0dGhpcy5hdHRhY2hUaGlzQ29udGV4dChtZW51LCBwYXJlbnRNZW51KTtcblx0XHR0aGlzLmF0dGFjaE92ZXJsYXlSZWYobWVudSwgb3ZlcmxheVJlZik7XG5cdH1cblxuXHRkZXN0cm95KCkge1xuXHRcdHRoaXMuY2xvc2VDdXJyZW50T3ZlcmxheXMoKTtcblx0XHR0aGlzLnN1YnMudW5zdWJzY3JpYmUoKTtcblx0fVxuXG5cdG5nT25EZXN0cm95KCk6IHZvaWQge1xuXHRcdHRoaXMuZGVzdHJveSgpO1xuXHR9XG5cblx0Y2xvc2VTdWJNZW51cyhtZW51OiBTaENvbnRleHRNZW51Q29tcG9uZW50KSB7XG5cdFx0Y29uc3QgaXRlbXNXaXRoU3ViTWVudXMgPSBtZW51Lm1lbnVJdGVtcy5maWx0ZXIoXG5cdFx0XHRpID0+ICEhaS5zdWJNZW51ICYmICEhaS5zdWJNZW51Lm92ZXJsYXlSZWZcblx0XHQpO1xuXG5cdFx0aWYgKGl0ZW1zV2l0aFN1Yk1lbnVzLmxlbmd0aCkge1xuXHRcdFx0aXRlbXNXaXRoU3ViTWVudXMuZm9yRWFjaChzbSA9PiB0aGlzLmNsb3NlU3ViTWVudXMoc20uc3ViTWVudSkpO1xuXG5cdFx0XHRjb25zdCBvdmVybGF5UmVmcyA9IGl0ZW1zV2l0aFN1Yk1lbnVzLm1hcChpID0+IGkuc3ViTWVudS5vdmVybGF5UmVmKTtcblxuXHRcdFx0b3ZlcmxheVJlZnMuZm9yRWFjaChyID0+IHIuZGlzcG9zZSgpKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHJlZ2lzdGVyRGV0YWNoRXZlbnRzKG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYpIHtcblx0XHR0aGlzLnN1YnMgPSBvdmVybGF5UmVmXG5cdFx0XHQuYmFja2Ryb3BDbGljaygpXG5cdFx0XHQuc3Vic2NyaWJlKHRoaXMuY2xvc2VDdXJyZW50T3ZlcmxheXMuYmluZCh0aGlzKSk7XG5cdFx0dGhpcy5zdWJzLmFkZChcblx0XHRcdG92ZXJsYXlSZWYuZGV0YWNobWVudHMoKS5zdWJzY3JpYmUodGhpcy5jbG9zZUN1cnJlbnRPdmVybGF5cy5iaW5kKHRoaXMpKVxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUFuZEF0dGFjaE92ZXJsYXkoXG5cdFx0cG9zaXRpb25TdHJhdGVneTpcblx0XHRcdHwgR2xvYmFsUG9zaXRpb25TdHJhdGVneVxuXHRcdFx0fCBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3ksXG5cdFx0c2Nyb2xsU3RyYXRlZ3k6IFNjcm9sbFN0cmF0ZWd5LFxuXHRcdG1lbnU6IFNoQ29udGV4dE1lbnVDb21wb25lbnQsXG5cdFx0aGFzQmFja2Ryb3A6IGJvb2xlYW4gPSB0cnVlXG5cdCkge1xuXHRcdGNvbnN0IG92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHtcblx0XHRcdHBvc2l0aW9uU3RyYXRlZ3ksXG5cdFx0XHRzY3JvbGxTdHJhdGVneSxcblx0XHRcdGhhc0JhY2tkcm9wOiBoYXNCYWNrZHJvcCxcblx0XHRcdGJhY2tkcm9wQ2xhc3M6ICdzaC1iYWNrZHJvcCdcblx0XHR9KTtcblxuXHRcdC8qXG4gICAgIFRPRE86IHRyeSBwYXNzaW5nIHRoZSBUZW1wbGF0ZVBvcnRhbCBjb250ZXh0IChkYXRhKVxuICAgICBhbmQgdGhlbiBpbmplY3RpbmcgaXQgdG8gdGhlICpuZ1RlbXBsYXRlT3V0bGV0IGluIHRoZSBjb21wb25lbnQgdGVtcGxhdGVcbiAgICAqL1xuXHRcdGNvbnN0IG1lbnVQb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwoXG5cdFx0XHRtZW51Lm1lbnVUZW1wbGF0ZSxcblx0XHRcdG1lbnUubWVudUNvbnRhaW5lclxuXHRcdCk7XG5cdFx0b3ZlcmxheVJlZi5hdHRhY2gobWVudVBvcnRhbCk7XG5cblx0XHR0aGlzLmFjdGl2ZU92ZXJsYXlzLnB1c2gob3ZlcmxheVJlZik7XG5cblx0XHRyZXR1cm4gb3ZlcmxheVJlZjtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRTY3JvbGxTdHJhdGVneSgpOiBTY3JvbGxTdHJhdGVneSB7XG5cdFx0cmV0dXJuIHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oeyBhdXRvQ2xvc2U6IHRydWUgfSk7XG5cdH1cblxuXHRwcml2YXRlIGJ1aWxkUG9zaXRpb25TdHJhdGVneShcblx0XHRlbGU6IEhUTUxFbGVtZW50LFxuXHRcdGV2ZW50OiBNb3VzZUV2ZW50XG5cdCk6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSB7XG5cdFx0Y29uc3QgeyB4LCB5IH0gPSBldmVudDtcblxuXHRcdHJldHVybiB0aGlzLm92ZXJsYXlcblx0XHRcdC5wb3NpdGlvbigpXG5cdFx0XHQuZmxleGlibGVDb25uZWN0ZWRUbyhlbGUpXG5cdFx0XHQud2l0aERlZmF1bHRPZmZzZXRYKHgpXG5cdFx0XHQud2l0aERlZmF1bHRPZmZzZXRZKHkpXG5cdFx0XHQud2l0aFBvc2l0aW9ucyh0aGlzLmJ1aWxkUG9zaXRpb25zKCkpXG5cdFx0XHQud2l0aEZsZXhpYmxlRGltZW5zaW9ucyhmYWxzZSlcblx0XHRcdC53aXRoUHVzaCh0cnVlKTtcblx0fVxuXG5cdHByaXZhdGUgYnVpbGRQb3NpdGlvblN0cmF0ZWd5Rm9yU3ViTWVudShcblx0XHRlbG06IEVsZW1lbnRSZWZcblx0KTogRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5IHtcblx0XHRyZXR1cm4gdGhpcy5vdmVybGF5XG5cdFx0XHQucG9zaXRpb24oKVxuXHRcdFx0LmZsZXhpYmxlQ29ubmVjdGVkVG8oZWxtKVxuXHRcdFx0LndpdGhQb3NpdGlvbnModGhpcy5idWlsZFN1Yk1lbnVQb3NpdGlvbnMoKSlcblx0XHRcdC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuXHRcdFx0LndpdGhQdXNoKHRydWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBjbG9zZUN1cnJlbnRPdmVybGF5cygpIHtcblx0XHRpZiAodGhpcy5hbmNob3JFbGVtZW50KSB7XG5cdFx0XHR0aGlzLmFuY2hvckVsZW1lbnQucmVtb3ZlKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5hY3RpdmVPdmVybGF5cy5mb3JFYWNoKG8gPT4ge1xuXHRcdFx0by5kZXRhY2goKTtcblx0XHRcdG8uZGlzcG9zZSgpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5hY3RpdmVPdmVybGF5cyA9IFtdO1xuXG5cdFx0Ly8gVE9ETzogY3JlYXRlIGNsb3NlIHN1YmplY3QgYW5kIGVtaXQuXG5cdFx0Ly8gc3Vic2NyaWJlIGluIGNvbXBvbmVudFxuXHRcdGlmICh0aGlzLmFjdGl2ZU1lbnUpIHtcblx0XHRcdHRoaXMuYWN0aXZlTWVudS5jbG9zZSgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXR0YWNoQ29udGV4dFRvSXRlbXMobWVudTogU2hDb250ZXh0TWVudUNvbXBvbmVudCwgZGF0YTogYW55KSB7XG5cdFx0bWVudS5tZW51SXRlbXMuZm9yRWFjaChpID0+IChpLmNvbnRleHQuJGltcGxpY2l0ID0gZGF0YSkpO1xuXHR9XG5cblx0cHJpdmF0ZSBhdHRhY2hUaGlzQ29udGV4dChcblx0XHRtZW51OiBTaENvbnRleHRNZW51Q29tcG9uZW50LFxuXHRcdHBhcmVudE1lbnU6IFNoQ29udGV4dE1lbnVDb21wb25lbnRcblx0KSB7XG5cdFx0bWVudS50aGlzQ29udGV4dCA9IHBhcmVudE1lbnUudGhpc0NvbnRleHQ7XG5cdH1cblxuXHRwcml2YXRlIGF0dGFjaE92ZXJsYXlSZWYoXG5cdFx0bWVudTogU2hDb250ZXh0TWVudUNvbXBvbmVudCxcblx0XHRvdmVybGF5UmVmOiBPdmVybGF5UmVmXG5cdCkge1xuXHRcdG1lbnUub3ZlcmxheVJlZiA9IG92ZXJsYXlSZWY7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZUFuY2hvckVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuXHRcdGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXHRcdGRpdi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdFx0ZGl2LnN0eWxlLnRvcCA9ICcwJztcblx0XHRkaXYuc3R5bGUuYm90dG9tID0gJzAnO1xuXHRcdGRpdi5zdHlsZS5sZWZ0ID0gJzAnO1xuXHRcdGRpdi5zdHlsZS5yaWdodCA9ICcwJztcblxuXHRcdGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcblxuXHRcdHJldHVybiBkaXY7XG5cdH1cblxuXHRwcml2YXRlIGJ1aWxkU3ViTWVudVBvc2l0aW9ucygpOiBDb25uZWN0aW9uUG9zaXRpb25QYWlyW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdG9yaWdpblg6ICdlbmQnLFxuXHRcdFx0XHRvcmlnaW5ZOiAndG9wJyxcblx0XHRcdFx0b3ZlcmxheVg6ICdzdGFydCcsXG5cdFx0XHRcdG92ZXJsYXlZOiAndG9wJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0b3JpZ2luWDogJ3N0YXJ0Jyxcblx0XHRcdFx0b3JpZ2luWTogJ3RvcCcsXG5cdFx0XHRcdG92ZXJsYXlYOiAnZW5kJyxcblx0XHRcdFx0b3ZlcmxheVk6ICd0b3AnXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRvcmlnaW5YOiAnZW5kJyxcblx0XHRcdFx0b3JpZ2luWTogJ2JvdHRvbScsXG5cdFx0XHRcdG92ZXJsYXlYOiAnc3RhcnQnLFxuXHRcdFx0XHRvdmVybGF5WTogJ2JvdHRvbSdcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG9yaWdpblg6ICdzdGFydCcsXG5cdFx0XHRcdG9yaWdpblk6ICdib3R0b20nLFxuXHRcdFx0XHRvdmVybGF5WDogJ2VuZCcsXG5cdFx0XHRcdG92ZXJsYXlZOiAnYm90dG9tJ1xuXHRcdFx0fVxuXHRcdF07XG5cdH1cblxuXHRwcml2YXRlIGJ1aWxkUG9zaXRpb25zKCk6IENvbm5lY3Rpb25Qb3NpdGlvblBhaXJbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0b3JpZ2luWDogJ3N0YXJ0Jyxcblx0XHRcdFx0b3JpZ2luWTogJ3RvcCcsXG5cdFx0XHRcdG92ZXJsYXlYOiAnc3RhcnQnLFxuXHRcdFx0XHRvdmVybGF5WTogJ3RvcCdcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG9yaWdpblg6ICdzdGFydCcsXG5cdFx0XHRcdG9yaWdpblk6ICd0b3AnLFxuXHRcdFx0XHRvdmVybGF5WDogJ2VuZCcsXG5cdFx0XHRcdG92ZXJsYXlZOiAndG9wJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0b3JpZ2luWDogJ3N0YXJ0Jyxcblx0XHRcdFx0b3JpZ2luWTogJ3RvcCcsXG5cdFx0XHRcdG92ZXJsYXlYOiAnc3RhcnQnLFxuXHRcdFx0XHRvdmVybGF5WTogJ2JvdHRvbSdcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdG9yaWdpblg6ICdzdGFydCcsXG5cdFx0XHRcdG9yaWdpblk6ICd0b3AnLFxuXHRcdFx0XHRvdmVybGF5WDogJ2VuZCcsXG5cdFx0XHRcdG92ZXJsYXlZOiAnYm90dG9tJ1xuXHRcdFx0fVxuXHRcdF07XG5cdH1cbn1cbiJdfQ==