UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

270 lines 22.5 kB
/** * @fileoverview added by tsickle * Generated from: directives/batch-draggable.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, Input, Self, Output, EventEmitter } from '@angular/core'; import { DragDropService } from '../services/drag-drop.service'; import { DraggableDirective } from './draggable.directive'; export class BatchDraggableDirective { /** * @param {?} draggable * @param {?} dragDropService */ constructor(draggable, dragDropService) { this.draggable = draggable; this.dragDropService = dragDropService; this.batchDragGroup = 'default'; this.batchDragActive = false; this.batchDragLastOneAutoActiveEventKeys = ['ctrlKey']; this.batchDragActiveEvent = new EventEmitter(); this.needToRestore = false; this.batchDragStyle = ['badge', 'stack']; this.draggable.batchDraggable = this; } /** * @return {?} */ ngOnInit() { this.initDragDataByIdentity(); } /** * @return {?} */ ngOnDestroy() { this.draggable.batchDraggable = undefined; if (this.dragData) { if (this.dragData.draggable === this.draggable) { this.dragData.draggable = undefined; if (!this.dragData.identity) { this.removeFromBatchGroup(); } } } } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { if (changes['batchDragActive']) { if (!this.initDragDataByIdentity()) { if (this.batchDragActive) { if (!this.dragData && this.allowAddToBatchGroup()) { this.addToBatchGroup(); } } else { this.removeFromBatchGroup(); } } } } /** * @return {?} */ ngAfterViewInit() { if (this.needToRestore) { this.restoreDragDataViewAfterViewInit(); this.needToRestore = false; } } /** * @return {?} */ initDragDataByIdentity() { /** @type {?} */ const dragData = this.findInBatchDragDataByIdentities(); if (dragData) { if (this.batchDragActive) { if (!this.dragData) { this.addToBatchGroup(dragData); this.registerRestoreDragDataViewAfterViewInitWhiteDragging(); } } else { this.removeFromBatchGroup(dragData); } } return dragData; } /** * @return {?} */ registerRestoreDragDataViewAfterViewInitWhiteDragging() { if (this.dragDropService.draggedEl && this.dragDropService.draggedElIdentity && this.dragDropService.draggedEl !== this.draggable.el.nativeElement) { this.needToRestore = true; } } /** * @return {?} */ restoreDragDataViewAfterViewInit() { /** @type {?} */ const draggable = this.draggable; if (draggable.originPlaceholder && draggable.originPlaceholder.show !== false) { draggable.insertOriginPlaceholder(true, false); } draggable.el.nativeElement.style.display = 'none'; } /** * @return {?} */ allowAddToBatchGroup() { if (!this.dragDropService.batchDragGroup) { return true; } else { return this.batchDragGroup === this.dragDropService.batchDragGroup; } } /** * @param {?=} dragData * @return {?} */ addToBatchGroup(dragData) { this.dragDropService.batchDragGroup = this.dragDropService.batchDragGroup || this.batchDragGroup; if (dragData) { dragData.draggable = this.draggable; dragData.dragData = this.draggable.dragData; this.dragData = dragData; } else { this.dragData = this.dragData || { identity: this.draggable.dragIdentity || undefined, draggable: this.draggable, dragData: this.draggable.dragData }; this.dragDropService.batchDragData = this.addToArrayIfNotExist(this.dragDropService.batchDragData, this.dragData); } } /** * @param {?=} dragData * @return {?} */ removeFromBatchGroup(dragData) { this.deleteFromArrayIfExist(this.dragDropService.batchDragData, dragData || this.dragData); this.dragData = undefined; if (!(this.dragDropService.batchDragData && this.dragDropService.batchDragData.length)) { this.dragDropService.batchDragGroup = undefined; } } /** * @private * @param {?} array * @param {?} target * @return {?} */ addToArrayIfNotExist(array, target) { array = array || []; if (array.indexOf(target) === -1) { array.push(target); } return array; } /** * @private * @param {?} array * @param {?} target * @return {?} */ deleteFromArrayIfExist(array, target) { if (!array) { return; } if (array.length > 0) { /** @type {?} */ const index = array.indexOf(target); if (index > -1) { array.splice(index, 1); } } return array; } /** * @private * @return {?} */ findInBatchDragDataByIdentities() { if (!this.draggable.dragIdentity) { return null; } else if (!this.dragDropService.batchDragData) { return undefined; } else { return this.dragDropService.batchDragData.filter((/** * @param {?} dragData * @return {?} */ dragData => dragData.identity === this.draggable.dragIdentity)).pop(); } } /** * @return {?} */ active() { this.batchDragActiveEvent.emit({ el: this.draggable.el.nativeElement, data: this.draggable.dragData }); } /** * @return {?} */ updateDragData() { // 选中状态才更新 if (!this.dragData) { return; } // 需要维持内存地址不变 Object.assign(this.dragData, { identity: this.draggable.dragIdentity || undefined, draggable: this.draggable, dragData: this.draggable.dragData }); } } BatchDraggableDirective.decorators = [ { type: Directive, args: [{ selector: '[dDraggable][batchDrag]', exportAs: 'dBatchDraggable' },] } ]; /** @nocollapse */ BatchDraggableDirective.ctorParameters = () => [ { type: DraggableDirective, decorators: [{ type: Self }] }, { type: DragDropService } ]; BatchDraggableDirective.propDecorators = { batchDragGroup: [{ type: Input }], batchDragActive: [{ type: Input }], batchDragLastOneAutoActiveEventKeys: [{ type: Input }], batchDragActiveEvent: [{ type: Output }], batchDragStyle: [{ type: Input }] }; if (false) { /** @type {?} */ BatchDraggableDirective.prototype.batchDragGroup; /** @type {?} */ BatchDraggableDirective.prototype.batchDragActive; /** @type {?} */ BatchDraggableDirective.prototype.batchDragLastOneAutoActiveEventKeys; /** @type {?} */ BatchDraggableDirective.prototype.batchDragActiveEvent; /** @type {?} */ BatchDraggableDirective.prototype.dragData; /** @type {?} */ BatchDraggableDirective.prototype.needToRestore; /** @type {?} */ BatchDraggableDirective.prototype.batchDragStyle; /** * @type {?} * @private */ BatchDraggableDirective.prototype.draggable; /** * @type {?} * @private */ BatchDraggableDirective.prototype.dragDropService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2gtZHJhZ2dhYmxlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWRldnVpL2RyYWdkcm9wLyIsInNvdXJjZXMiOlsiZGlyZWN0aXZlcy9iYXRjaC1kcmFnZ2FibGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLElBQUksRUFBb0MsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFPM0QsTUFBTSxPQUFPLHVCQUF1Qjs7Ozs7SUFTbEMsWUFBNEIsU0FBNkIsRUFBVyxlQUFnQztRQUF4RSxjQUFTLEdBQVQsU0FBUyxDQUFvQjtRQUFXLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQVIzRixtQkFBYyxHQUFHLFNBQVMsQ0FBQztRQUMzQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4Qix3Q0FBbUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFcEQsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFDYixtQkFBYyxHQUEwQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUdsRSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFDdkMsQ0FBQzs7OztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNoQyxDQUFDOzs7O0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsS0FBSyxJ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WUFDM0IsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxJQUFJLFNBQVM7WUFDbEQsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVE7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7O1lBN0pGLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUseUJBQXlCO2dCQUNuQyxRQUFRLEVBQUUsaUJBQWlCO2FBQzlCOzs7O1lBTFEsa0JBQWtCLHVCQWdCWixJQUFJO1lBakJWLGVBQWU7Ozs2QkFTckIsS0FBSzs4QkFDTCxLQUFLO2tEQUNMLEtBQUs7bUNBQ0wsTUFBTTs2QkFHTixLQUFLOzs7O0lBTk4saURBQW9DOztJQUNwQyxrREFBaUM7O0lBQ2pDLHNFQUEyRDs7SUFDM0QsdURBQW9EOztJQUNwRCwyQ0FBUzs7SUFDVCxnREFBc0I7O0lBQ3RCLGlEQUFvRTs7Ozs7SUFFeEQsNENBQTZDOzs7OztJQUFHLGtEQUF3QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgU2VsZiwgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERyYWdEcm9wU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RyYWctZHJvcC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHJhZ2dhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kcmFnZ2FibGUuZGlyZWN0aXZlJztcclxuZXhwb3J0IHR5cGUgQmF0Y2hEcmFnU3R5bGUgPSAnYmFkZ2UnIHwgJ3N0YWNrJyB8IHN0cmluZztcclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1tkRHJhZ2dhYmxlXVtiYXRjaERyYWddJyxcclxuICAgIGV4cG9ydEFzOiAnZEJhdGNoRHJhZ2dhYmxlJ1xyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEJhdGNoRHJhZ2dhYmxlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQElucHV0KCkgYmF0Y2hEcmFnR3JvdXAgPSAnZGVmYXVsdCc7XHJcbiAgQElucHV0KCkgYmF0Y2hEcmFnQWN0aXZlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYmF0Y2hEcmFnTGFzdE9uZUF1dG9BY3RpdmVFdmVudEtleXMgPSBbJ2N0cmxLZXknXTtcclxuICBAT3V0cHV0KCkgYmF0Y2hEcmFnQWN0aXZlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgZHJhZ0RhdGE7XHJcbiAgbmVlZFRvUmVzdG9yZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGJhdGNoRHJhZ1N0eWxlOiBBcnJheTxCYXRjaERyYWdTdHlsZT4gPSBbJ2JhZGdlJywgJ3N0YWNrJ107XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBTZWxmKCkgcHJpdmF0ZSBkcmFnZ2FibGU6IERyYWdnYWJsZURpcmVjdGl2ZSwgIHByaXZhdGUgZHJhZ0Ryb3BTZXJ2aWNlOiBEcmFnRHJvcFNlcnZpY2UpIHtcclxuICAgIHRoaXMuZHJhZ2dhYmxlLmJhdGNoRHJhZ2dhYmxlID0gdGhpcztcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pbml0RHJhZ0RhdGFCeUlkZW50aXR5KCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZHJhZ2dhYmxlLmJhdGNoRHJhZ2dhYmxlID0gdW5kZWZpbmVkO1xyXG4gICAgaWYgKHRoaXMuZHJhZ0RhdGEpIHtcclxuICAgICAgaWYgKHRoaXMuZHJhZ0RhdGEuZHJhZ2dhYmxlID09PSB0aGlzLmRyYWdnYWJsZSkge1xyXG4gICAgICAgIHRoaXMuZHJhZ0RhdGEuZHJhZ2dhYmxlID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGlmICghdGhpcy5kcmFnRGF0YS5pZGVudGl0eSkge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVGcm9tQmF0Y2hHcm91cCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydiYXRjaERyYWdBY3RpdmUnXSkgIHtcclxuICAgICAgaWYgKCF0aGlzLmluaXREcmFnRGF0YUJ5SWRlbnRpdHkoKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmJhdGNoRHJhZ0FjdGl2ZSkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmRyYWdEYXRhICYmIHRoaXMuYWxsb3dBZGRUb0JhdGNoR3JvdXAoKSkge1xyXG4gICAgICAgICAgIHRoaXMuYWRkVG9CYXRjaEdyb3VwKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgdGhpcy5yZW1vdmVGcm9tQmF0Y2hHcm91cCgpO1xyXG4gICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMubmVlZFRvUmVzdG9yZSkge1xyXG4gICAgICB0aGlzLnJlc3RvcmVEcmFnRGF0YVZpZXdBZnRlclZpZXdJbml0KCk7XHJcbiAgICAgIHRoaXMubmVlZFRvUmVzdG9yZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBpbml0RHJhZ0RhdGFCeUlkZW50aXR5KCkge1xyXG4gICAgY29uc3QgZHJhZ0RhdGEgPSB0aGlzLmZpbmRJbkJhdGNoRHJhZ0RhdGFCeUlkZW50aXRpZXMoKTtcclxuICAgIGlmIChkcmFnRGF0YSkge1xyXG4gICAgICBpZiAodGhpcy5iYXRjaERyYWdBY3RpdmUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZHJhZ0RhdGEpIHtcclxuICAgICAgICAgIHRoaXMuYWRkVG9CYXRjaEdyb3VwKGRyYWdEYXRhKTtcclxuICAgICAgICAgIHRoaXMucmVnaXN0ZXJSZXN0b3JlRHJhZ0RhdGFWaWV3QWZ0ZXJWaWV3SW5pdFdoaXRlRHJhZ2dpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVGcm9tQmF0Y2hHcm91cChkcmFnRGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBkcmFnRGF0YTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyUmVzdG9yZURyYWdEYXRhVmlld0FmdGVyVmlld0luaXRXaGl0ZURyYWdnaW5nKCkge1xyXG4gICAgaWYgKHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmRyYWdnZWRFbCAmJiB0aGlzLmRyYWdEcm9wU2VydmljZS5kcmFnZ2VkRWxJZGVudGl0eSAmJlxyXG4gICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5kcmFnZ2VkRWwgIT09IHRoaXMuZHJhZ2dhYmxlLmVsLm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5uZWVkVG9SZXN0b3JlID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmVzdG9yZURyYWdEYXRhVmlld0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBjb25zdCBkcmFnZ2FibGUgPSB0aGlzLmRyYWdnYWJsZTtcclxuICAgIGlmIChkcmFnZ2FibGUub3JpZ2luUGxhY2Vob2xkZXIgJiYgZHJhZ2dhYmxlLm9yaWdpblBsYWNlaG9sZGVyLnNob3cgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgZHJhZ2dhYmxlLmluc2VydE9yaWdpblBsYWNlaG9sZGVyKHRydWUsIGZhbHNlKTtcclxuICAgIH1cclxuICAgIGRyYWdnYWJsZS5lbC5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgfVxyXG5cclxuXHJcbiAgYWxsb3dBZGRUb0JhdGNoR3JvdXAoKSB7XHJcbiAgICBpZiAoIXRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0dyb3VwKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuYmF0Y2hEcmFnR3JvdXAgPT09IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0dyb3VwO1xyXG4gICAgfVxyXG4gIH1cclxuICBhZGRUb0JhdGNoR3JvdXAoZHJhZ0RhdGE/KSB7XHJcbiAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5iYXRjaERyYWdHcm91cCA9IHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0dyb3VwIHx8IHRoaXMuYmF0Y2hEcmFnR3JvdXA7XHJcbiAgICBpZiAoZHJhZ0RhdGEpIHtcclxuICAgICAgZHJhZ0RhdGEuZHJhZ2dhYmxlID0gdGhpcy5kcmFnZ2FibGU7XHJcbiAgICAgIGRyYWdEYXRhLmRyYWdEYXRhID0gdGhpcy5kcmFnZ2FibGUuZHJhZ0RhdGE7XHJcbiAgICAgIHRoaXMuZHJhZ0RhdGEgPSBkcmFnRGF0YTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZHJhZ0RhdGEgPSB0aGlzLmRyYWdEYXRhIHx844CAe1xyXG4gICAgICAgIGlkZW50aXR5OiB0aGlzLmRyYWdnYWJsZS5kcmFnSWRlbnRpdHkgfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgIGRyYWdnYWJsZTogdGhpcy5kcmFnZ2FibGUsXHJcbiAgICAgICAgZHJhZ0RhdGE6IHRoaXMuZHJhZ2dhYmxlLmRyYWdEYXRhXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0RhdGEgPSB0aGlzLmFkZFRvQXJyYXlJZk5vdEV4aXN0KHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0RhdGEsIHRoaXMuZHJhZ0RhdGEpO1xyXG4gICAgfVxyXG4gIH1cclxuICByZW1vdmVGcm9tQmF0Y2hHcm91cChkcmFnRGF0YT8pIHtcclxuICAgIHRoaXMuZGVsZXRlRnJvbUFycmF5SWZFeGlzdCh0aGlzLmRyYWdEcm9wU2VydmljZS5iYXRjaERyYWdEYXRhLCBkcmFnRGF0YSB8fCB0aGlzLmRyYWdEYXRhKTtcclxuICAgIHRoaXMuZHJhZ0RhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICBpZiAoISh0aGlzLmRyYWdEcm9wU2VydmljZS5iYXRjaERyYWdEYXRhICYmIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0RhdGEubGVuZ3RoKSkge1xyXG4gICAgICB0aGlzLmRyYWdEcm9wU2VydmljZS5iYXRjaERyYWdHcm91cCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkVG9BcnJheUlmTm90RXhpc3QoYXJyYXk6IGFueVtdLCB0YXJnZXQ6IGFueSkge1xyXG4gICAgYXJyYXkgPSBhcnJheSB8fCBbXTtcclxuICAgIGlmIChhcnJheS5pbmRleE9mKHRhcmdldCkgPT09IC0xKSB7XHJcbiAgICAgIGFycmF5LnB1c2godGFyZ2V0KTtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnJheTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGRlbGV0ZUZyb21BcnJheUlmRXhpc3QoYXJyYXk6IGFueVtdLCB0YXJnZXQ6IGFueSkge1xyXG4gICAgaWYgKCFhcnJheSkgeyByZXR1cm47IH1cclxuICAgIGlmIChhcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gYXJyYXkuaW5kZXhPZih0YXJnZXQpO1xyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIGFycmF5LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcnJheTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZEluQmF0Y2hEcmFnRGF0YUJ5SWRlbnRpdGllcygpIHtcclxuICAgIGlmICghdGhpcy5kcmFnZ2FibGUuZHJhZ0lkZW50aXR5KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5kcmFnRHJvcFNlcnZpY2UuYmF0Y2hEcmFnRGF0YSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZHJhZ0Ryb3BTZXJ2aWNlLmJhdGNoRHJhZ0RhdGEuZmlsdGVyKGRyYWdEYXRhID0+IGRyYWdEYXRhLmlkZW50aXR5ID09PSB0aGlzLmRyYWdnYWJsZS5kcmFnSWRlbnRpdHkpLnBvcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aXZlKCkge1xyXG4gICAgdGhpcy5iYXRjaERyYWdBY3RpdmVFdmVudC5lbWl0KHtlbDogdGhpcy5kcmFnZ2FibGUuZWwubmF0aXZlRWxlbWVudCwgZGF0YTogdGhpcy5kcmFnZ2FibGUuZHJhZ0RhdGF9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVEcmFnRGF0YSgpIHtcclxuICAgIC8vIOmAieS4reeKtuaAgeaJjeabtOaWsFxyXG4gICAgaWYgKCF0aGlzLmRyYWdEYXRhKSB7cmV0dXJuOyB9XHJcbiAgICAvLyDpnIDopoHnu7TmjIHlhoXlrZjlnLDlnYDkuI3lj5hcclxuICAgIE9iamVjdC5hc3NpZ24odGhpcy5kcmFnRGF0YSwge1xyXG4gICAgICBpZGVudGl0eTogdGhpcy5kcmFnZ2FibGUuZHJhZ0lkZW50aXR5IHx8IHVuZGVmaW5lZCxcclxuICAgICAgZHJhZ2dhYmxlOiB0aGlzLmRyYWdnYWJsZSxcclxuICAgICAgZHJhZ0RhdGE6IHRoaXMuZHJhZ2dhYmxlLmRyYWdEYXRhXHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19