UNPKG

@duoduo-oba/ng-devui

Version:

DevUI components based on Angular

222 lines 22 kB
/** * @fileoverview added by tsickle * Generated from: data-table-row.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, NgZone, Output, HostBinding } from '@angular/core'; import { DataTableComponent } from './data-table.component'; import { ForceUpdateReason } from './force-update-reason.model'; export class DataTableRowComponent { // 延时id /** * @param {?} dt * @param {?} changeDetectorRef * @param {?} rowRef * @param {?} ngZone */ constructor(dt, changeDetectorRef, rowRef, ngZone) { this.dt = dt; this.changeDetectorRef = changeDetectorRef; this.rowRef = rowRef; this.ngZone = ngZone; this.fontWeight = '400'; this.verticalAlign = 'middle'; this.detailChange = new EventEmitter(); this.forceUpdateEvent = new EventEmitter(); this.clickCount = 0; // 记录点击次数 } /** * @return {?} */ ngOnInit() { this.ngZone.runOutsideAngular((/** * @return {?} */ () => { this.rowRef.nativeElement.addEventListener('click', this.onRowClick.bind(this)); this.rowRef.nativeElement.addEventListener('dblclick', this.onRowDBClick.bind(this)); this.rowRef.nativeElement.addEventListener('mouseenter', this.onRowMouseEnter.bind(this)); this.rowRef.nativeElement.addEventListener('mouseleave', this.onRowMouseLeave.bind(this)); })); } /** * @return {?} */ forceUpdate() { this.changeDetectorRef.markForCheck(); this.forceUpdateEvent.emit(ForceUpdateReason.RowUpdate); } /** * @param {?} $event * @return {?} */ onRowClick($event) { // $event.stopPropagation(); this.clickCount++; if (this.clickCount === 1) { this.timeoutId = setTimeout((/** * @return {?} */ () => { if (this.clickCount === 1) { this.dt.onRowClick({ rowIndex: this.rowIndex, nestedIndex: this.nestedIndex, rowItem: this.rowItem, rowComponent: this }); } this.clickCount = 0; clearTimeout(this.timeoutId); }), this.timeout); } } /** * @param {?} $event * @return {?} */ onRowDBClick($event) { // $event.stopPropagation(); this.dt.onRowDBClick({ rowIndex: this.rowIndex, nestedIndex: this.nestedIndex, rowItem: this.rowItem, rowComponent: this }); } /** * @param {?} $event * @return {?} */ onRowMouseEnter($event) { this.ngZone.run((/** * @return {?} */ () => { this.rowItem.$hovered = true; })); } /** * @param {?} $event * @return {?} */ onRowMouseLeave($event) { this.ngZone.run((/** * @return {?} */ () => { this.rowItem.$hovered = false; })); } /** * @param {?} $event * @param {?} rowIndex * @param {?} nestedIndex * @param {?} rowItem * @return {?} */ onRowCheckChange($event, rowIndex, nestedIndex, rowItem) { rowItem.$checked = $event; rowItem.$halfChecked = false; this.dt.onRowCheckChange({ rowItem, rowIndex, nestedIndex, checked: $event }); } /** * @return {?} */ toggle() { this.rowItem['$isDetailOpen'] = !this.rowItem['$isDetailOpen']; if (this.rowItem.$expandConfig) { this.rowItem.$expandConfig.expand = !this.rowItem.$expandConfig.expand; } this.detailChange.emit({ state: this.rowItem['$isDetailOpen'], index: this.rowIndex }); this.dt.onDetailToggle({ state: this.rowItem['$isDetailOpen'], index: this.rowIndex }); } /** * @param {?} index * @param {?} item * @return {?} */ trackByFn(index, item) { return index; } } DataTableRowComponent.decorators = [ { type: Component, args: [{ selector: 'd-data-table-row, [dDataTableRow]', template: "<td *ngIf=\"showExpandToggle\" class=\"devui-detail-cell\" [ngClass]=\"{ 'devui-sticky-left-cell': columns[0]?.fixedLeft }\" [style.left]=\"0\">\r\n <div *ngIf=\"rowItem.detail || rowItem.$expandConfig\" (click)=\"toggle()\">\r\n <span [style.vertical-align]=\"'middle'\" *ngIf=\"rowItem['$isDetailOpen'] || rowItem.$expandConfig?.expand\">\r\n <svg\r\n class=\"svg-icon-arrow\"\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g id=\"chevron-down\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <polygon points=\"4.5 5 8 8.76923077 11.5 5 13 6.61538462 8 12 3 6.61538462\"></polygon>\r\n </g>\r\n </svg>\r\n </span>\r\n <span [style.vertical-align]=\"'middle'\" *ngIf=\"!rowItem['$isDetailOpen'] && !rowItem.$expandConfig?.expand\">\r\n <svg\r\n class=\"svg-icon-arrow\"\r\n width=\"16px\"\r\n height=\"16px\"\r\n viewBox=\"0 0 16 16\"\r\n version=\"1.1\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n >\r\n <g id=\"chevron-up\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <polygon points=\"11.5 12 8 8.23076923 4.5 12 3 10.3846154 8 5 13 10.3846154\"></polygon>\r\n </g>\r\n </svg>\r\n </span>\r\n </div>\r\n</td>\r\n<td\r\n *ngIf=\"checkable\"\r\n class=\"devui-checkable-cell\"\r\n [ngClass]=\"{ 'devui-sticky-left-cell': columns[0]?.fixedLeft }\"\r\n [style.left]=\"showExpandToggle && columns[0]?.fixedLeft ? '36px' : '0'\"\r\n>\r\n <d-checkbox\r\n [ngModelOptions]=\"{ standalone: true }\"\r\n (ngModelChange)=\"onRowCheckChange($event, rowIndex, nestedIndex, rowItem)\"\r\n [ngModel]=\"rowItem.$checked\"\r\n [halfchecked]=\"rowItem.$halfChecked\"\r\n [disabled]=\"rowItem.$disabled\"\r\n dTooltip\r\n [content]=\"rowItem.$checkBoxTips\"\r\n [position]=\"'top'\"\r\n [showAnimation]=\"false\"\r\n >\r\n </d-checkbox>\r\n</td>\r\n<ng-container *ngFor=\"let column of columns; let colIndex = index; trackBy: trackByFn\">\r\n <td\r\n dDataTableCell\r\n [rowIndex]=\"rowIndex\"\r\n [colIndex]=\"colIndex\"\r\n [column]=\"column\"\r\n [rowItem]=\"rowItem\"\r\n [style.width]=\"column.width || ''\"\r\n [ngStyle]=\"column.style\"\r\n [editModel]=\"rowItem.$$editModel || editModel\"\r\n [isEditRow]=\"rowItem.$$edit\"\r\n [timeout]=\"timeout\"\r\n [tableLevel]=\"tableLevel\"\r\n class=\"{{ column.cellClass ? column.cellClass : '' }}\"\r\n [ngClass]=\"{\r\n 'devui-sticky-left-cell': column.fixedLeft,\r\n 'devui-sticky-right-cell': column.fixedRight\r\n }\"\r\n [style.left]=\"column.fixedLeft ? column.fixedLeft : null\"\r\n [style.right]=\"column.fixedRight ? column.fixedRight : null\"\r\n ></td>\r\n</ng-container>\r\n", styles: ["svg.svg-icon-arrow>g>polygon{fill:#252b3a}:host ::ng-deep d-button button.d-btn.d-btn-icon{padding:0!important}:host ::ng-deep .cell-modify{position:absolute;right:0;cursor:pointer}:host ::ng-deep .cell-modify>svg{vertical-align:middle}:host ::ng-deep .cell-modify>svg>g>g{fill:#9498a0}:host ::ng-deep .cell-modify:hover>svg>g>g{fill:#252b3a}:host ::ng-deep .cell-placeholder{display:inline-block;height:16px}:host ::ng-deep .cell-container{position:relative;height:24px}:host ::ng-deep .cell-container-inner{position:absolute;max-width:100%}:host ::ng-deep .cell-container-inner.modify-holder{padding-right:20px}:host ::ng-deep .cell-container-inner.modify-holder .cell-modify{display:none;position:absolute;right:0;cursor:pointer}:host ::ng-deep .cell-container-inner.modify-holder .cell-modify>svg{vertical-align:middle}:host ::ng-deep .cell-container-inner.modify-holder .cell-modify>svg>g{fill:#252b3a}:host ::ng-deep .cell-container-inner.modify-holder .cell-modify:hover>svg>g{fill:#344899}:host ::ng-deep .cell-container-inner.modify-holder:hover .cell-modify{display:inline}:host ::ng-deep .not-break{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;word-spacing:normal;word-wrap:normal}:host ::ng-deep .cell-editable{cursor:pointer;margin-left:-5px;padding-left:5px}:host ::ng-deep .cell-editable:hover{background:#f2f5fc}"] }] } ]; /** @nocollapse */ DataTableRowComponent.ctorParameters = () => [ { type: DataTableComponent }, { type: ChangeDetectorRef }, { type: ElementRef }, { type: NgZone } ]; DataTableRowComponent.propDecorators = { rowItem: [{ type: Input }], fontWeight: [{ type: HostBinding, args: ['style.font-weight',] }], verticalAlign: [{ type: HostBinding, args: ['style.vertical-align',] }], selectable: [{ type: Input }], checkable: [{ type: Input }], showExpandToggle: [{ type: Input }], rowIndex: [{ type: Input }], allChecked: [{ type: Input }], columns: [{ type: Input }], editModel: [{ type: Input }], editRowItem: [{ type: Input }], resizeable: [{ type: Input }], timeout: [{ type: Input }], tableLevel: [{ type: Input }], nestedIndex: [{ type: Input }], detailChange: [{ type: Output }] }; if (false) { /** @type {?} */ DataTableRowComponent.prototype.rowItem; /** @type {?} */ DataTableRowComponent.prototype.fontWeight; /** @type {?} */ DataTableRowComponent.prototype.verticalAlign; /** @type {?} */ DataTableRowComponent.prototype.selectable; /** @type {?} */ DataTableRowComponent.prototype.checkable; /** @type {?} */ DataTableRowComponent.prototype.showExpandToggle; /** @type {?} */ DataTableRowComponent.prototype.rowIndex; /** @type {?} */ DataTableRowComponent.prototype.allChecked; /** @type {?} */ DataTableRowComponent.prototype.columns; /** @type {?} */ DataTableRowComponent.prototype.editModel; /** @type {?} */ DataTableRowComponent.prototype.editRowItem; /** @type {?} */ DataTableRowComponent.prototype.resizeable; /** @type {?} */ DataTableRowComponent.prototype.timeout; /** @type {?} */ DataTableRowComponent.prototype.tableLevel; /** @type {?} */ DataTableRowComponent.prototype.nestedIndex; /** @type {?} */ DataTableRowComponent.prototype.detailChange; /** @type {?} */ DataTableRowComponent.prototype.forceUpdateEvent; /** @type {?} */ DataTableRowComponent.prototype.clickCount; /** @type {?} */ DataTableRowComponent.prototype.timeoutId; /** @type {?} */ DataTableRowComponent.prototype.dt; /** * @type {?} * @private */ DataTableRowComponent.prototype.changeDetectorRef; /** * @type {?} * @private */ DataTableRowComponent.prototype.rowRef; /** * @type {?} * @private */ DataTableRowComponent.prototype.ngZone; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZGV2dWkvZGF0YS10YWJsZS8iLCJzb3VyY2VzIjpbImRhdGEtdGFibGUtcm93LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkksT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFRaEUsTUFBTSxPQUFPLHFCQUFxQjs7Ozs7Ozs7SUF1QmhDLFlBQW1CLEVBQXNCLEVBQVUsaUJBQW9DLEVBQzdFLE1BQWtCLEVBQVUsTUFBYztRQURqQyxPQUFFLEdBQUYsRUFBRSxDQUFvQjtRQUFVLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDN0UsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUFVLFdBQU0sR0FBTixNQUFNLENBQVE7UUF0QmxCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDaEIsa0JBQWEsR0FBRyxRQUFRLENBQUM7UUFhcEQsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRTVDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRXpELGVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTO0lBS3pCLENBQUM7Ozs7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUI7OztRQUFDLEdBQUcsRUFBRTtZQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FDdEMsT0FBTyxFQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUM3QixD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aURBQW1DOztJQUNuQyx5Q0FBMEI7O0lBQzFCLDJDQUE2Qjs7SUFDN0Isd0NBQWlEOztJQUNqRCwwQ0FBMkI7O0lBQzNCLDRDQUEwQjs7SUFDMUIsMkNBQTZCOztJQUM3Qix3Q0FBeUI7O0lBQ3pCLDJDQUE0Qjs7SUFDNUIsNENBQTZCOztJQUM3Qiw2Q0FBNEM7O0lBRTVDLGlEQUF5RDs7SUFFekQsMkNBQWU7O0lBQ2YsMENBQVU7O0lBRUUsbUNBQTZCOzs7OztJQUFFLGtEQUE0Qzs7Ozs7SUFDckYsdUNBQTBCOzs7OztJQUFFLHVDQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25Jbml0LCBPdXRwdXQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERhdGFUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vZGF0YS10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGb3JjZVVwZGF0ZVJlYXNvbiB9IGZyb20gJy4vZm9yY2UtdXBkYXRlLXJlYXNvbi5tb2RlbCc7XHJcbmltcG9ydCB7IERhdGFUYWJsZUNvbHVtblRtcGxDb21wb25lbnQgfSBmcm9tICcuL3RtcGwvZGF0YS10YWJsZS1jb2x1bW4tdG1wbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdkLWRhdGEtdGFibGUtcm93LCBbZERhdGFUYWJsZVJvd10nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXRhYmxlLXJvdy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZGF0YS10YWJsZS1yb3cuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlUm93Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSByb3dJdGVtOiBhbnk7XHJcbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5mb250LXdlaWdodCcpIGZvbnRXZWlnaHQgPSAnNDAwJztcclxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLnZlcnRpY2FsLWFsaWduJykgdmVydGljYWxBbGlnbiA9ICdtaWRkbGUnO1xyXG4gIEBJbnB1dCgpIHNlbGVjdGFibGU6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgY2hlY2thYmxlOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNob3dFeHBhbmRUb2dnbGU6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgcm93SW5kZXg6IG51bWJlcjtcclxuICBASW5wdXQoKSBhbGxDaGVja2VkOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IERhdGFUYWJsZUNvbHVtblRtcGxDb21wb25lbnRbXTtcclxuICBASW5wdXQoKSBlZGl0TW9kZWw6IHN0cmluZztcclxuICBASW5wdXQoKSBlZGl0Um93SXRlbTogYW55O1xyXG4gIEBJbnB1dCgpIHJlc2l6ZWFibGU6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgdGltZW91dDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHRhYmxlTGV2ZWw6IG51bWJlcjtcclxuICBASW5wdXQoKSBuZXN0ZWRJbmRleDogc3RyaW5nO1xyXG4gIEBPdXRwdXQoKSBkZXRhaWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gIGZvcmNlVXBkYXRlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcmNlVXBkYXRlUmVhc29uPigpO1xyXG5cclxuICBjbGlja0NvdW50ID0gMDsgLy8g6K6w5b2V54K55Ye75qyh5pWwXHJcbiAgdGltZW91dElkOyAvLyDlu7bml7ZpZFxyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZHQ6IERhdGFUYWJsZUNvbXBvbmVudCwgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIHJvd1JlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgIHRoaXMucm93UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgICdjbGljaycsXHJcbiAgICAgICAgICB0aGlzLm9uUm93Q2xpY2suYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJvd1JlZi5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgJ2RibGNsaWNrJyxcclxuICAgICAgICB0aGlzLm9uUm93REJDbGljay5iaW5kKHRoaXMpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucm93UmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAnbW91c2VlbnRlcicsXHJcbiAgICAgICAgdGhpcy5vblJvd01vdXNlRW50ZXIuYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJvd1JlZi5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgJ21vdXNlbGVhdmUnLFxyXG4gICAgICAgIHRoaXMub25Sb3dNb3VzZUxlYXZlLmJpbmQodGhpcylcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9yY2VVcGRhdGUoKSB7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5mb3JjZVVwZGF0ZUV2ZW50LmVtaXQoRm9yY2VVcGRhdGVSZWFzb24uUm93VXBkYXRlKTtcclxuICB9XHJcblxyXG4gIG9uUm93Q2xpY2soJGV2ZW50KSB7XHJcbiAgICAvLyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmNsaWNrQ291bnQrKztcclxuICAgIGlmICh0aGlzLmNsaWNrQ291bnQgPT09IDEpIHtcclxuICAgICAgdGhpcy50aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jbGlja0NvdW50ID09PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLmR0Lm9uUm93Q2xpY2soeyByb3dJbmRleDogdGhpcy5yb3dJbmRleCwgbmVzdGVkSW5kZXg6IHRoaXMubmVzdGVkSW5kZXgsIHJvd0l0ZW06IHRoaXMucm93SXRlbSwgcm93Q29tcG9uZW50OiB0aGlzIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNsaWNrQ291bnQgPSAwO1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRJZCk7XHJcbiAgICAgIH0sIHRoaXMudGltZW91dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJvd0RCQ2xpY2soJGV2ZW50KSB7XHJcbiAgICAvLyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmR0Lm9uUm93REJDbGljayh7IHJvd0luZGV4OiB0aGlzLnJvd0luZGV4LCBuZXN0ZWRJbmRleDogdGhpcy5uZXN0ZWRJbmRleCwgcm93SXRlbTogdGhpcy5yb3dJdGVtLCByb3dDb21wb25lbnQ6IHRoaXMgfSk7XHJcbiAgfVxyXG5cclxuICBvblJvd01vdXNlRW50ZXIoJGV2ZW50KSB7XHJcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLnJvd0l0ZW0uJGhvdmVyZWQgPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvblJvd01vdXNlTGVhdmUoJGV2ZW50KSB7XHJcbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLnJvd0l0ZW0uJGhvdmVyZWQgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Sb3dDaGVja0NoYW5nZSgkZXZlbnQsIHJvd0luZGV4LCBuZXN0ZWRJbmRleCwgcm93SXRlbSkge1xyXG4gICAgcm93SXRlbS4kY2hlY2tlZCA9ICRldmVudDtcclxuICAgIHJvd0l0ZW0uJGhhbGZDaGVja2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLmR0Lm9uUm93Q2hlY2tDaGFuZ2UoeyByb3dJdGVtLCByb3dJbmRleCwgbmVzdGVkSW5kZXgsIGNoZWNrZWQ6ICRldmVudCB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZSgpIHtcclxuICAgIHRoaXMucm93SXRlbVsnJGlzRGV0YWlsT3BlbiddID0gIXRoaXMucm93SXRlbVsnJGlzRGV0YWlsT3BlbiddO1xyXG4gICAgaWYgKHRoaXMucm93SXRlbS4kZXhwYW5kQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMucm93SXRlbS4kZXhwYW5kQ29uZmlnLmV4cGFuZCA9ICF0aGlzLnJvd0l0ZW0uJGV4cGFuZENvbmZpZy5leHBhbmQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRldGFpbENoYW5nZS5lbWl0KHsgc3RhdGU6IHRoaXMucm93SXRlbVsnJGlzRGV0YWlsT3BlbiddLCBpbmRleDogdGhpcy5yb3dJbmRleCB9KTtcclxuICAgIHRoaXMuZHQub25EZXRhaWxUb2dnbGUoeyBzdGF0ZTogdGhpcy5yb3dJdGVtWyckaXNEZXRhaWxPcGVuJ10sIGluZGV4OiB0aGlzLnJvd0luZGV4IH0pO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeUZuKGluZGV4LCBpdGVtKSB7XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG59XHJcbiJdfQ==