UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

203 lines 23.6 kB
/** * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE */ import { Directionality } from '@angular/cdk/bidi'; import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Optional, Output, Renderer2, ViewChild, ViewEncapsulation } from '@angular/core'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; export class NzPaginationDefaultComponent { constructor(cdr, renderer, elementRef, directionality) { this.cdr = cdr; this.renderer = renderer; this.elementRef = elementRef; this.directionality = directionality; this.nzSize = 'default'; this.itemRender = null; this.showTotal = null; this.disabled = false; this.showSizeChanger = false; this.showQuickJumper = false; this.total = 0; this.pageIndex = 1; this.pageSize = 10; this.pageSizeOptions = [10, 20, 30, 40]; this.pageIndexChange = new EventEmitter(); this.pageSizeChange = new EventEmitter(); this.ranges = [0, 0]; this.listOfPageItem = []; this.dir = 'ltr'; this.destroy$ = new Subject(); renderer.removeChild(renderer.parentNode(elementRef.nativeElement), elementRef.nativeElement); } ngOnInit() { var _a; (_a = this.directionality.change) === null || _a === void 0 ? void 0 : _a.pipe(takeUntil(this.destroy$)).subscribe((direction) => { this.dir = direction; this.updateRtlStyle(); this.cdr.detectChanges(); }); this.dir = this.directionality.value; this.updateRtlStyle(); } updateRtlStyle() { if (this.dir === 'rtl') { this.renderer.addClass(this.elementRef.nativeElement, 'ant-pagination-rtl'); } else { this.renderer.removeClass(this.elementRef.nativeElement, 'ant-pagination-rtl'); } } ngOnDestroy() { this.destroy$.next(); this.destroy$.complete(); } jumpPage(index) { this.onPageIndexChange(index); } jumpDiff(diff) { this.jumpPage(this.pageIndex + diff); } trackByPageItem(_, value) { return `${value.type}-${value.index}`; } onPageIndexChange(index) { this.pageIndexChange.next(index); } onPageSizeChange(size) { this.pageSizeChange.next(size); } getLastIndex(total, pageSize) { return Math.ceil(total / pageSize); } buildIndexes() { const lastIndex = this.getLastIndex(this.total, this.pageSize); this.listOfPageItem = this.getListOfPageItem(this.pageIndex, lastIndex); } getListOfPageItem(pageIndex, lastIndex) { const concatWithPrevNext = (listOfPage) => { const prevItem = { type: 'prev', disabled: pageIndex === 1 }; const nextItem = { type: 'next', disabled: pageIndex === lastIndex }; return [prevItem, ...listOfPage, nextItem]; }; const generatePage = (start, end) => { const list = []; for (let i = start; i <= end; i++) { list.push({ index: i, type: 'page' }); } return list; }; if (lastIndex <= 9) { return concatWithPrevNext(generatePage(1, lastIndex)); } else { const generateRangeItem = (selected, last) => { let listOfRange = []; const prevFiveItem = { type: 'prev_5' }; const nextFiveItem = { type: 'next_5' }; const firstPageItem = generatePage(1, 1); const lastPageItem = generatePage(lastIndex, lastIndex); if (selected < 4) { listOfRange = [...generatePage(2, 5), nextFiveItem]; } else if (selected < last - 3) { listOfRange = [prevFiveItem, ...generatePage(selected - 2, selected + 2), nextFiveItem]; } else { listOfRange = [prevFiveItem, ...generatePage(last - 4, last - 1)]; } return [...firstPageItem, ...listOfRange, ...lastPageItem]; }; return concatWithPrevNext(generateRangeItem(pageIndex, lastIndex)); } } ngOnChanges(changes) { const { pageIndex, pageSize, total } = changes; if (pageIndex || pageSize || total) { this.ranges = [(this.pageIndex - 1) * this.pageSize + 1, Math.min(this.pageIndex * this.pageSize, this.total)]; this.buildIndexes(); } } } NzPaginationDefaultComponent.decorators = [ { type: Component, args: [{ selector: 'nz-pagination-default', preserveWhitespaces: false, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: ` <ng-template #containerTemplate> <li class="ant-pagination-total-text" *ngIf="showTotal"> <ng-template [ngTemplateOutlet]="showTotal" [ngTemplateOutletContext]="{ $implicit: total, range: ranges }" ></ng-template> </li> <li *ngFor="let page of listOfPageItem; trackBy: trackByPageItem" nz-pagination-item [locale]="locale" [type]="page.type" [index]="page.index" [disabled]="!!page.disabled" [itemRender]="itemRender" [active]="pageIndex === page.index" (gotoIndex)="jumpPage($event)" (diffIndex)="jumpDiff($event)" [direction]="dir" ></li> <div nz-pagination-options *ngIf="showQuickJumper || showSizeChanger" [total]="total" [locale]="locale" [disabled]="disabled" [nzSize]="nzSize" [showSizeChanger]="showSizeChanger" [showQuickJumper]="showQuickJumper" [pageIndex]="pageIndex" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" (pageIndexChange)="onPageIndexChange($event)" (pageSizeChange)="onPageSizeChange($event)" ></div> </ng-template> ` },] } ]; NzPaginationDefaultComponent.ctorParameters = () => [ { type: ChangeDetectorRef }, { type: Renderer2 }, { type: ElementRef }, { type: Directionality, decorators: [{ type: Optional }] } ]; NzPaginationDefaultComponent.propDecorators = { template: [{ type: ViewChild, args: ['containerTemplate', { static: true },] }], nzSize: [{ type: Input }], itemRender: [{ type: Input }], showTotal: [{ type: Input }], disabled: [{ type: Input }], locale: [{ type: Input }], showSizeChanger: [{ type: Input }], showQuickJumper: [{ type: Input }], total: [{ type: Input }], pageIndex: [{ type: Input }], pageSize: [{ type: Input }], pageSizeOptions: [{ type: Input }], pageIndexChange: [{ type: Output }], pageSizeChange: [{ type: Output }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi1kZWZhdWx0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbXBvbmVudHMvcGFnaW5hdGlvbi9wYWdpbmF0aW9uLWRlZmF1bHQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBYSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBR1QsU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQW9EM0MsTUFBTSxPQUFPLDRCQUE0QjtJQXFCdkMsWUFDVSxHQUFzQixFQUN0QixRQUFtQixFQUNuQixVQUFzQixFQUNWLGNBQThCO1FBSDFDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNWLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXZCM0MsV0FBTSxHQUF3QixTQUFTLENBQUM7UUFDeEMsZUFBVSxHQUFvRCxJQUFJLENBQUM7UUFDbkUsY0FBUyxHQUF1RSxJQUFJLENBQUM7UUFDckYsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFDZCxvQkFBZSxHQUFhLENBQUMs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Q0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDL0csSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQzs7O1lBbkxGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsdUJBQXVCO2dCQUNqQyxtQkFBbUIsRUFBRSxLQUFLO2dCQUMxQixhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtnQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07Z0JBQy9DLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFDVDthQUNGOzs7WUFwRUMsaUJBQWlCO1lBVWpCLFNBQVM7WUFSVCxVQUFVO1lBTFEsY0FBYyx1QkFpRzdCLFFBQVE7Ozt1QkF4QlYsU0FBUyxTQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtxQkFDL0MsS0FBSzt5QkFDTCxLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSztxQkFDTCxLQUFLOzhCQUNMLEtBQUs7OEJBQ0wsS0FBSztvQkFDTCxLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSzs4QkFDTCxLQUFLOzhCQUNMLE1BQU07NkJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IERpcmVjdGlvbiwgRGlyZWN0aW9uYWxpdHkgfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IE56UGFnaW5hdGlvbkkxOG5JbnRlcmZhY2UgfSBmcm9tICduZy16b3Jyby1hbnRkL2kxOG4nO1xuXG5pbXBvcnQgeyBOelBhZ2luYXRpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdpbmF0aW9uLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2luYXRpb25JdGVtUmVuZGVyQ29udGV4dCB9IGZyb20gJy4vcGFnaW5hdGlvbi50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ256LXBhZ2luYXRpb24tZGVmYXVsdCcsXG4gIHByZXNlcnZlV2hpdGVzcGFjZXM6IGZhbHNlLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgI2NvbnRhaW5lclRlbXBsYXRlPlxuICAgICAgPGxpIGNsYXNzPVwiYW50LXBhZ2luYXRpb24tdG90YWwtdGV4dFwiICpuZ0lmPVwic2hvd1RvdGFsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNob3dUb3RhbFwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiB0b3RhbCwgcmFuZ2U6IHJhbmdlcyB9XCJcbiAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2xpPlxuICAgICAgPGxpXG4gICAgICAgICpuZ0Zvcj1cImxldCBwYWdlIG9mIGxpc3RPZlBhZ2VJdGVtOyB0cmFja0J5OiB0cmFja0J5UGFnZUl0ZW1cIlxuICAgICAgICBuei1wYWdpbmF0aW9uLWl0ZW1cbiAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICBbdHlwZV09XCJwYWdlLnR5cGVcIlxuICAgICAgICBbaW5kZXhdPVwicGFnZS5pbmRleFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhIXBhZ2UuZGlzYWJsZWRcIlxuICAgICAgICBbaXRlbVJlbmRlcl09XCJpdGVtUmVuZGVyXCJcbiAgICAgICAgW2FjdGl2ZV09XCJwYWdlSW5kZXggPT09IHBhZ2UuaW5kZXhcIlxuICAgICAgICAoZ290b0luZGV4KT1cImp1bXBQYWdlKCRldmVudClcIlxuICAgICAgICAoZGlmZkluZGV4KT1cImp1bXBEaWZmKCRldmVudClcIlxuICAgICAgICBbZGlyZWN0aW9uXT1cImRpclwiXG4gICAgICA+PC9saT5cbiAgICAgIDxkaXZcbiAgICAgICAgbnotcGFnaW5hdGlvbi1vcHRpb25zXG4gICAgICAgICpuZ0lmPVwic2hvd1F1aWNrSnVtcGVyIHx8IHNob3dTaXplQ2hhbmdlclwiXG4gICAgICAgIFt0b3RhbF09XCJ0b3RhbFwiXG4gICAgICAgIFtsb2NhbGVdPVwibG9jYWxlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW256U2l6ZV09XCJuelNpemVcIlxuICAgICAgICBbc2hvd1NpemVDaGFuZ2VyXT1cInNob3dTaXplQ2hhbmdlclwiXG4gICAgICAgIFtzaG93UXVpY2tKdW1wZXJdPVwic2hvd1F1aWNrSnVtcGVyXCJcbiAgICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxuICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2VTaXplT3B0aW9uc1wiXG4gICAgICAgIChwYWdlSW5kZXhDaGFuZ2UpPVwib25QYWdlSW5kZXhDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxuICAgICAgPjwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGBcbn0pXG5leHBvcnQgY2xhc3MgTnpQYWdpbmF0aW9uRGVmYXVsdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQge1xuICBAVmlld0NoaWxkKCdjb250YWluZXJUZW1wbGF0ZScsIHsgc3RhdGljOiB0cnVlIH0pIHRlbXBsYXRlITogVGVtcGxhdGVSZWY8TnpTYWZlQW55PjtcbiAgQElucHV0KCkgbnpTaXplOiAnZGVmYXVsdCcgfCAnc21hbGwnID0gJ2RlZmF1bHQnO1xuICBASW5wdXQoKSBpdGVtUmVuZGVyOiBUZW1wbGF0ZVJlZjxQYWdpbmF0aW9uSXRlbVJlbmRlckNvbnRleHQ+IHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHNob3dUb3RhbDogVGVtcGxhdGVSZWY8eyAkaW1wbGljaXQ6IG51bWJlcjsgcmFuZ2U6IFtudW1iZXIsIG51bWJlcl0gfT4gfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgbG9jYWxlITogTnpQYWdpbmF0aW9uSTE4bkludGVyZmFjZTtcbiAgQElucHV0KCkgc2hvd1NpemVDaGFuZ2VyID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dRdWlja0p1bXBlciA9IGZhbHNlO1xuICBASW5wdXQoKSB0b3RhbCA9IDA7XG4gIEBJbnB1dCgpIHBhZ2VJbmRleCA9IDE7XG4gIEBJbnB1dCgpIHBhZ2VTaXplID0gMTA7XG4gIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbMTAsIDIwLCAzMCwgNDBdO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgcGFnZUluZGV4Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBwYWdlU2l6ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICByYW5nZXMgPSBbMCwgMF07XG4gIGxpc3RPZlBhZ2VJdGVtOiBBcnJheTxQYXJ0aWFsPE56UGFnaW5hdGlvbkl0ZW1Db21wb25lbnQ+PiA9IFtdO1xuXG4gIGRpcjogRGlyZWN0aW9uID0gJ2x0cic7XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZGlyZWN0aW9uYWxpdHk6IERpcmVjdGlvbmFsaXR5XG4gICkge1xuICAgIHJlbmRlcmVyLnJlbW92ZUNoaWxkKHJlbmRlcmVyLnBhcmVudE5vZGUoZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KSwgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRpcmVjdGlvbmFsaXR5LmNoYW5nZT8ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZGlyZWN0aW9uOiBEaXJlY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuZGlyID0gZGlyZWN0aW9uO1xuICAgICAgdGhpcy51cGRhdGVSdGxTdHlsZSgpO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICAgIHRoaXMuZGlyID0gdGhpcy5kaXJlY3Rpb25hbGl0eS52YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVJ0bFN0eWxlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVJ0bFN0eWxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpciA9PT0gJ3J0bCcpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdhbnQtcGFnaW5hdGlvbi1ydGwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2FudC1wYWdpbmF0aW9uLXJ0bCcpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGp1bXBQYWdlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm9uUGFnZUluZGV4Q2hhbmdlKGluZGV4KTtcbiAgfVxuXG4gIGp1bXBEaWZmKGRpZmY6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuanVtcFBhZ2UodGhpcy5wYWdlSW5kZXggKyBkaWZmKTtcbiAgfVxuXG4gIHRyYWNrQnlQYWdlSXRlbShfOiBudW1iZXIsIHZhbHVlOiBQYXJ0aWFsPE56UGFnaW5hdGlvbkl0ZW1Db21wb25lbnQ+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dmFsdWUudHlwZX0tJHt2YWx1ZS5pbmRleH1gO1xuICB9XG5cbiAgb25QYWdlSW5kZXhDaGFuZ2UoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZUluZGV4Q2hhbmdlLm5leHQoaW5kZXgpO1xuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZShzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VTaXplQ2hhbmdlLm5leHQoc2l6ZSk7XG4gIH1cblxuICBnZXRMYXN0SW5kZXgodG90YWw6IG51bWJlciwgcGFnZVNpemU6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCh0b3RhbCAvIHBhZ2VTaXplKTtcbiAgfVxuXG4gIGJ1aWxkSW5kZXhlcygpOiB2b2lkIHtcbiAgICBjb25zdCBsYXN0SW5kZXggPSB0aGlzLmdldExhc3RJbmRleCh0aGlzLnRvdGFsLCB0aGlzLnBhZ2VTaXplKTtcbiAgICB0aGlzLmxpc3RPZlBhZ2VJdGVtID0gdGhpcy5nZXRMaXN0T2ZQYWdlSXRlbSh0aGlzLnBhZ2VJbmRleCwgbGFzdEluZGV4KTtcbiAgfVxuXG4gIGdldExpc3RPZlBhZ2VJdGVtKHBhZ2VJbmRleDogbnVtYmVyLCBsYXN0SW5kZXg6IG51bWJlcik6IEFycmF5PFBhcnRpYWw8TnpQYWdpbmF0aW9uSXRlbUNvbXBvbmVudD4+IHtcbiAgICBjb25zdCBjb25jYXRXaXRoUHJldk5leHQgPSAobGlzdE9mUGFnZTogQXJyYXk8UGFydGlhbDxOelBhZ2luYXRpb25JdGVtQ29tcG9uZW50Pj4pID0+IHtcbiAgICAgIGNvbnN0IHByZXZJdGVtID0ge1xuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBwYWdlSW5kZXggPT09IDFcbiAgICAgIH07XG4gICAgICBjb25zdCBuZXh0SXRlbSA9IHtcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogcGFnZUluZGV4ID09PSBsYXN0SW5kZXhcbiAgICAgIH07XG4gICAgICByZXR1cm4gW3ByZXZJdGVtLCAuLi5saXN0T2ZQYWdlLCBuZXh0SXRlbV07XG4gICAgfTtcbiAgICBjb25zdCBnZW5lcmF0ZVBhZ2UgPSAoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBBcnJheTxQYXJ0aWFsPE56UGFnaW5hdGlvbkl0ZW1Db21wb25lbnQ+PiA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gW107XG4gICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0eXBlOiAncGFnZSdcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9O1xuICAgIGlmIChsYXN0SW5kZXggPD0gOSkge1xuICAgICAgcmV0dXJuIGNvbmNhdFdpdGhQcmV2TmV4dChnZW5lcmF0ZVBhZ2UoMSwgbGFzdEluZGV4KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGdlbmVyYXRlUmFuZ2VJdGVtID0gKHNlbGVjdGVkOiBudW1iZXIsIGxhc3Q6IG51bWJlcikgPT4ge1xuICAgICAgICBsZXQgbGlzdE9mUmFuZ2UgPSBbXTtcbiAgICAgICAgY29uc3QgcHJldkZpdmVJdGVtID0ge1xuICAgICAgICAgIHR5cGU6ICdwcmV2XzUnXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG5leHRGaXZlSXRlbSA9IHtcbiAgICAgICAgICB0eXBlOiAnbmV4dF81J1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaXJzdFBhZ2VJdGVtID0gZ2VuZXJhdGVQYWdlKDEsIDEpO1xuICAgICAgICBjb25zdCBsYXN0UGFnZUl0ZW0gPSBnZW5lcmF0ZVBhZ2UobGFzdEluZGV4LCBsYXN0SW5kZXgpO1xuICAgICAgICBpZiAoc2VsZWN0ZWQgPCA0KSB7XG4gICAgICAgICAgbGlzdE9mUmFuZ2UgPSBbLi4uZ2VuZXJhdGVQYWdlKDIsIDUpLCBuZXh0Rml2ZUl0ZW1dO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkIDwgbGFzdCAtIDMpIHtcbiAgICAgICAgICBsaXN0T2ZSYW5nZSA9IFtwcmV2Rml2ZUl0ZW0sIC4uLmdlbmVyYXRlUGFnZShzZWxlY3RlZCAtIDIsIHNlbGVjdGVkICsgMiksIG5leHRGaXZlSXRlbV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGlzdE9mUmFuZ2UgPSBbcHJldkZpdmVJdGVtLCAuLi5nZW5lcmF0ZVBhZ2UobGFzdCAtIDQsIGxhc3QgLSAxKV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsuLi5maXJzdFBhZ2VJdGVtLCAuLi5saXN0T2ZSYW5nZSwgLi4ubGFzdFBhZ2VJdGVtXTtcbiAgICAgIH07XG4gICAgICByZXR1cm4gY29uY2F0V2l0aFByZXZOZXh0KGdlbmVyYXRlUmFuZ2VJdGVtKHBhZ2VJbmRleCwgbGFzdEluZGV4KSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgcGFnZUluZGV4LCBwYWdlU2l6ZSwgdG90YWwgfSA9IGNoYW5nZXM7XG4gICAgaWYgKHBhZ2VJbmRleCB8fCBwYWdlU2l6ZSB8fCB0b3RhbCkge1xuICAgICAgdGhpcy5yYW5nZXMgPSBbKHRoaXMucGFnZUluZGV4IC0gMSkgKiB0aGlzLnBhZ2VTaXplICsgMSwgTWF0aC5taW4odGhpcy5wYWdlSW5kZXggKiB0aGlzLnBhZ2VTaXplLCB0aGlzLnRvdGFsKV07XG4gICAgICB0aGlzLmJ1aWxkSW5kZXhlcygpO1xuICAgIH1cbiAgfVxufVxuIl19